Ooops
January 15, 2021, 05:40:52 PM

Author Topic: [bb] Get random wiki article title. by sting [ 1+ years ago ]  (Read 443 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Get random wiki article title.
Author : sting
Posted : 1+ years ago

Description : In exploring an idea for Ludum Dare, I ended up creating a way to retrieve a random Wikipedia article title.

It uses an array to hold strings and flags, though it is only for example purposes and can be easily changed to types or what have you.

Code is mostly commented and an example is included (can you tell I like "Color"?) :P


Code :
Code: BlitzBasic
  1. Graphics 500,180,24,2
  2.  
  3.                                         ; / Globals
  4. Global NumTopics = 9,NumFlags = 3       ;| Flags: 1 = Disambiguation, 2 = Length Over 20, 3 = Total Length      Read as Int(Topic$(i,?))
  5. Dim Topic$(NumTopics,NumFlags)          ;|
  6. For i = 0 To NumTopics                  ;| Initialize array.
  7.         Topic$(i,0) = ""                ;|
  8.         Topic$(i,1) = 0                 ;|
  9.         Topic$(i,2) = 0                 ;|
  10.         Topic$(i,3) = 0                 ;|
  11. Next                                    ;|
  12.  
  13.  
  14.  
  15. ;######################### EXAMPLE #########################
  16. .start
  17. Cls : Locate 0,5
  18. Color 105,105,105 : Print " Acquiring 3 Random Redirects..." : Color 155,15,15
  19. RND_Topic(0) : Print " 1" : Locate 20,18
  20. RND_Topic(1) : Print "2"  : Locate 32,18
  21. RND_Topic(2) : Print "3"  
  22. Color 255,255,255 : Print " -------------------------------"
  23. For i = 0 To 2
  24.         Color 92,187,233
  25.         Print " "+Topic$(i,0)
  26.         Color 105,105,105
  27.         Print " Flags (( Dis="+Int(Topic$(i,1))+"  20+="+Int(Topic$(i,2))+"  Length="+Int(Topic$(i,3))+" ))"
  28. Next
  29. Color 255,255,255 : Print " -------------------------------"
  30. Color 155,155,155 : Print " Space = new   Esc = Exit" ; Or any other...
  31. FlushKeys
  32. WaitKey
  33. For i = 0 To NumTopics              
  34.         Topic$(i,0) = ""                    
  35.         Topic$(i,1) = 0                    
  36.         Topic$(i,2) = 0                    
  37.         Topic$(i,3) = 0                    
  38. Next
  39. If KeyHit(57) Then Goto start
  40. End
  41. ;###########################################################
  42.  
  43.  
  44.  
  45.  
  46. Function RND_Topic(L_var=0)
  47. tcp=OpenTCPStream( "www.wikipedia.org",80 )
  48.         If Not tcp Then Topic$(L_var,0) = "Null" : Return
  49.         WriteLine tcp,"GET /wiki/Special"+Chr$(58)+"Random HTTP/1.1"
  50.         WriteLine tcp,"Host: en.wikipedia.org"
  51.         WriteLine tcp,"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)"
  52.         WriteLine tcp,Chr$(10)
  53.         If Eof(tcp) Then Topic$(L_var,0) = "Null" : Return
  54.         While Not Eof(tcp)
  55.         L_man$ = ReadLine$(tcp) : L_length = Len(L_man$)                                             ; / Header processing
  56.         If Left$(L_man$,5) = "Locat" Then                                                            ;| Detect the line with the info we want.
  57.                 L_man$ = Mid$(L_man$,40,L_length)                                                    ;| Trim URL amd clean it up.
  58.                 For i = 1 To Len(L_man$)                                                             ;|
  59.                         If Mid$(L_man$,i,1) = "%" Then                                               ;| Detect and convert URL Escape Codes to normal ASCII.
  60.                                 L_rpvr$ = Mid$(L_man$,i,3) : L_rpv$ = Chr$(h2d(Mid$(L_man$,i+1,2)))  ;|
  61.                                 L_man$ = Replace$(L_man$,L_rpvr$,L_rpv$)                             ;|
  62.                         EndIf                                                                        ;|
  63.                 Next                                                                                 ;|
  64.                 L_man$ = Replace$(L_man$,"_"," ")                                                    ;| replace underscores.
  65.  
  66.                                                                               ; / Flag processing
  67.                                                                               ;|------------------
  68.                 If Right$(L_man$,16) = "(disambiguation)" Then                ;| Detects if "(disambiguation)" is in the title.
  69.                         Topic$(L_var,1) = 1                                   ;| Sets the flag that it was there and removes string part.
  70.                         L_man$ = Replace$(L_man$,"(disambiguation)","")       ;|
  71.                 EndIf                                                         ;|------------------
  72.                 If Len(L_man$) > 20 Then                                      ;| Detects if length is over 20 chars.
  73.                         Topic$(L_var,2) = 1                                   ;|
  74.                 EndIf                                                         ;|------------------
  75.                 Topic$(L_var,3) = Len(L_man$)                                 ;| Record length
  76.                
  77.                 L_Topic$ = L_man$                                             ;| Make sure it wont be overwritten.
  78.         EndIf
  79.         Wend
  80.        
  81.         If Eof(tcp)=1 Then Topic$(L_var,0) = L_Topic$                         ;| Change "Topic$(L_var,0)" to some global if you just want the string.
  82. CloseTCPStream tcp
  83. FlushKeys : Return
  84. End Function
  85.  
  86. Function h2d(L_in$)
  87.         Local L_c, L_dec, L_val$ = "0123456789ABCDEF"                              ; / Credit Yan
  88.         For L_c=1 To Len(L_in$)                                                    ;|
  89.                 L_dec = (L_dec Shl 4)Or(Instr(L_val$,Upper$(Mid$(L_in$,L_c,1)))-1) ;|
  90.         Next                                                                       ;|
  91.         Return L_dec                                                               ;|
  92. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal