rwikibot 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/CHANGELOG +10 -0
  2. data/lib/rwikibot.rb +71 -33
  3. metadata +5 -5
  4. data/config.yaml +0 -5
data/CHANGELOG ADDED
@@ -0,0 +1,10 @@
1
+ RWikiBot ChangeLog
2
+
3
+ 1.0.1
4
+ - Added very basic error handing around the MAKE_REQUEST method since MediaWiki returns invalid YAML
5
+ - Fixed login method to accept domain value
6
+ - Check for domain being present and set in config.yaml
7
+ - Added redirect? method to return true/false if title is a redirect page
8
+ - Changed from "framework" to "library"
9
+
10
+ 1.0.0 - Initial Version
data/lib/rwikibot.rb CHANGED
@@ -65,6 +65,9 @@ class RWikiBot
65
65
 
66
66
  @wikibotlogger.debug("LOGIN - Preparing login information...")
67
67
  post_me = {'lgname'=>@config.fetch('username'),'lgpassword'=>@config.fetch('password')}
68
+ if @config.has_key?('domain') && (@config.fetch('domain') != nil)
69
+ post_me['lgdomain'] = @config.fetch('domain')
70
+ end
68
71
 
69
72
  @wikibotlogger.debug("LOGIN - Asking make_request to perform login...")
70
73
  login_result = make_request('login', post_me)
@@ -221,6 +224,31 @@ class RWikiBot
221
224
  end
222
225
 
223
226
 
227
+ # Query
228
+ #
229
+ # This is a lot like REDIRECTS method, except its just a true/false to validate whether or not an article is a redirect. We could write the logic into the final bot app, but we're awesome and we include a quicky method.
230
+ #
231
+ # INPUT:: Title (please, just one!)
232
+ # OUTPUT:: True/False
233
+ def redirect? (title)
234
+
235
+ # Prepare the request
236
+ @wikibotlogger.debug "REDIRECT? - Preparing request information..."
237
+ post_me = {'titles' => title, 'redirects'=>'', 'prop' => 'info'}
238
+
239
+
240
+ #Make the request
241
+ @wikibotlogger.debug "REDIRECT? - Asking make_request find redirects..."
242
+ redirects_result = make_request('query', post_me)
243
+ @wikibotlogger.debug "REDIRECT? - We should have a result now..."
244
+
245
+ @wikibotlogger.debug "REDIRECT? - Processing result..."
246
+
247
+
248
+ return redirects_result.has_key?('redirects')
249
+
250
+ end
251
+
224
252
 
225
253
  # Query
226
254
  #
@@ -412,41 +440,51 @@ class RWikiBot
412
440
 
413
441
  # Make Request is a method that actually handles making the request to the API. Since the API is somewhat standardized, this method is able to accept the action and a hash of variables, and it handles all the fun things MediaWiki likes to be weird over, like cookies and limits and actions. Its very solid, but I didn't want it public because it also does some post processing, and that's not very OO.
414
442
  def make_request (action, post_this)
415
-
416
- #Housekeeping. We need to add format and action to the request hash
417
- post_this['format'] = 'yaml'
418
- post_this['action'] = action
419
-
420
- #change - preparing a POST string instead of hash.
421
- post_string = ''
422
- post_this.each_pair do |key, value|
423
- post_string << "#{key}=#{value}&"
424
- end
425
- @wikibotlogger.info("MAKE REQUEST - Post String is: #{post_string}")
426
- @wikibotlogger.debug "MAKE REQUEST - Sending request to: #{@config.fetch('uri')}"
427
-
428
- #Send the actual request
429
- @wikibotlogger.debug "MAKE REQUEST - Sending request..."
430
- resp = @http.post( @config.fetch('uri').path , post_string , {'User-agent' => 'RWikiBot/0.1','Cookie' => bake(@config.fetch('cookie'))})
431
- @wikibotlogger.info "MAKE REQUEST - Response: "
432
- @wikibotlogger.info resp.body
433
- @wikibotlogger.debug "MAKE REQUEST - End Response "
434
- result = YAML.load(resp.body)
435
-
436
- #Process response
437
- @wikibotlogger.debug "MAKE REQUEST - Response received. Processing..."
438
- return_result = result.fetch(action)
439
-
440
- # A small check to make sure we don't need to save cookie data. Because usually, we don't
441
- if @config.fetch('logged_in') == FALSE
442
- @config['cookie'] = resp.header['set-cookie']
443
- @wikibotlogger.debug "MAKE REQUEST - Received login cookie. Cookie is: #{resp.header['set-cookie']}"
444
- end
445
443
 
446
- #Return the response
447
- @wikibotlogger.debug "MAKE REQUEST - Response cleaned. Returning result."
448
- return return_result
444
+ # Now, we do error handling. We're big like that.
445
+ begin
446
+
447
+ #Housekeeping. We need to add format and action to the request hash
448
+ post_this['format'] = 'yaml'
449
+ post_this['action'] = action
450
+
451
+ #change - preparing a POST string instead of hash.
452
+ post_string = ''
453
+ post_this.each_pair do |key, value|
454
+ post_string << "#{key}=#{value}&"
455
+ end
456
+ @wikibotlogger.info("MAKE REQUEST - Post String is: #{post_string}")
457
+ @wikibotlogger.debug "MAKE REQUEST - Sending request to: #{@config.fetch('uri')}"
458
+
459
+ #Send the actual request
460
+ @wikibotlogger.debug "MAKE REQUEST - Sending request..."
461
+ resp = @http.post( @config.fetch('uri').path , post_string , {'User-agent' => 'RWikiBot/0.1','Cookie' => bake(@config.fetch('cookie'))})
462
+ @wikibotlogger.info "MAKE REQUEST - Response: "
463
+ @wikibotlogger.info resp.body
464
+ @wikibotlogger.debug "MAKE REQUEST - End Response "
465
+ result = YAML.load(resp.body)
466
+
467
+ #Process response
468
+ @wikibotlogger.debug "MAKE REQUEST - Response received. Processing..."
469
+ return_result = result.fetch(action)
470
+
471
+ # A small check to make sure we don't need to save cookie data. Because usually, we don't
472
+ if @config.fetch('logged_in') == FALSE
473
+ @config['cookie'] = resp.header['set-cookie']
474
+ @wikibotlogger.debug "MAKE REQUEST - Received login cookie. Cookie is: #{resp.header['set-cookie']}"
475
+ end
476
+
477
+ #Return the response
478
+ @wikibotlogger.debug "MAKE REQUEST - Response cleaned. Returning result."
479
+ return return_result
449
480
 
481
+ # The short form is that the API's error message causes an ArgumentError, so we gotta handle that. I notified MediaWiki
482
+ rescue ArgumentError
483
+ @wikibotlogger.error "MAKE REQUEST - The request has failed."
484
+ @wikibotlogger.error "MAKE REQUEST - Error is: #{$!}"
485
+
486
+ raise ArgumentError, "Problem processing returned YAML result"
487
+ end
450
488
  end
451
489
 
452
490
  # For some odd reason, MediaWiki sends back three cookies the first time you establis a session. For some even more odd, Net::HTTP doesn't treat the set-cookie headers individually the way that normal borowsers do. So, I have this processing method to handle cookie logic - when to send, when to set, etc. And it bakes cookies. Get it? Bake.
metadata CHANGED
@@ -3,9 +3,9 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: rwikibot
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.0
7
- date: 2007-02-25 00:00:00 -06:00
8
- summary: A framework for creating MediaWiki bots.
6
+ version: 1.0.1
7
+ date: 2007-02-26 00:00:00 -06:00
8
+ summary: A library for creating MediaWiki bots.
9
9
  require_paths:
10
10
  - lib
11
11
  email: eddieroger @nospam@ gmail.com
@@ -30,14 +30,14 @@ authors:
30
30
  files:
31
31
  - lib/rwikibot.rb
32
32
  - README
33
- - config.yaml
33
+ - CHANGELOG
34
34
  test_files: []
35
35
 
36
36
  rdoc_options:
37
37
  - --inline-source
38
38
  extra_rdoc_files:
39
39
  - README
40
- - config.yaml
40
+ - CHANGELOG
41
41
  executables: []
42
42
 
43
43
  extensions: []
data/config.yaml DELETED
@@ -1,5 +0,0 @@
1
- :source:use: 'default'
2
- :source:default:
3
- username: "RWikiBot"
4
- password: "rwikibot"
5
- api_path: "http://localhost:8888/wiki/api.php"