rbmediawiki 0.2.2 → 0.2.4

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.
@@ -0,0 +1,149 @@
1
+ class Page_generator
2
+ def initialize(site)
3
+ @site = site
4
+ end
5
+
6
+ #gets pages alphabetically from a certain start point
7
+ # * from: starting point (Default starts from the beginning)
8
+ # * limit: pages to get per query (default: 500)
9
+ # * prefix: Only list titles that start with this value
10
+ # * namespace: The namespace to enumerate. By default, the main namespace will be enumerated
11
+ # * How to filter redirects
12
+ # * all: List all pages regardless of their redirect flag (default)
13
+ # * redirects: Only list redirects
14
+ # * nonredirects: Don't list redirects
15
+ # * minsize: Only list pages that are at least this many bytes in size
16
+ # * maxsize: Only list pages that are at most this many bytes in size
17
+ # * prtype: Only list pages that have been protected from this type of action
18
+ # * edit: Only list edit-protected pages
19
+ # * move: Only list move-protected pages
20
+ # * prleve: Only list pages that have been protected at this level. Cannot be used without prtype
21
+ # * autoconfirmed: Only autoconfirmed users can edit/move/whatever
22
+ # * sysop: Only sysops can edit/move/whatever
23
+ # * Empty: Everyone can edit/move/whatever
24
+ # * prfiltercascade: Filter protections based on cascadingness (ignored when apprtype isn't set)
25
+ # * One value: cascading, noncascading, all
26
+ # * Default: all
27
+ # *filterlanglinks: Filter based on whether a page has langlinks
28
+ # * One value: withlanglinks, withoutlanglinks, all
29
+ # * Default: all
30
+ def all_pages(from = "!", limit = "500", prefix = nil, namespace = nil, filterredir = nil, minsize = nil, maxsize = nil, prtype = nil, prlevel = nil, prfiltercascade = nil, filterlanglinks = nil)
31
+ pages = Hash.new
32
+ count = 0
33
+ finish = false
34
+ while !finish
35
+ result = @site.query_list_allpages(nil, from, prefix, namespace, filterredir, minsize, maxsize, prtype, prlevel, prfiltercascade, limit, nil, filterlanglinks)
36
+ result['query']['allpages']['p'].each {|page|
37
+ yield Page.new(page['title'], @site)
38
+ }
39
+ if result.key?('query-continue')
40
+ from = result['query-continue']['allpages']['apfrom']
41
+ else
42
+ finish = true
43
+ end
44
+ end
45
+ end
46
+
47
+ def linksearch(euquery, eulimit = 500, eunamespace = 0)
48
+ pages = Hash.new
49
+ count = 0
50
+ finish = false
51
+ euoffset = nil
52
+ while !finish
53
+ result = @site.query_list_exturlusage(nil, nil, euoffset, nil, euquery, eunamespace, eulimit)
54
+ result['query']['exturlusage']['eu'].each {|page|
55
+ yield Page.new(page['title'], @site)
56
+ }
57
+ if result.key?('query-continue')
58
+ euoffset = result['query-continue']['exturlusage']['euoffset']
59
+ else
60
+ finish = true
61
+ end
62
+ end
63
+ end
64
+
65
+ #Returns pages where eititle is transcluded in.
66
+ #eilimit is the max results for query (default: 500)
67
+ #einamespace is the namespace to work in
68
+ def templateusage(eititle, eilimit = 500, einamespace = nil)
69
+ pages = Hash.new
70
+ finish = false
71
+ eioffset = nil
72
+ while !finish
73
+ result = @site.query_list_embeddedin(nil, eititle, eioffset, einamespace, nil, eilimit)
74
+ result['query']['embeddedin']['ei'].each {|page|
75
+ yield Page.new(page['title'], @site)
76
+ }
77
+ if result.key?('query-continue')
78
+ eioffset = result['query-continue']['embeddedin']['eicontinue']
79
+ else
80
+ finish = true
81
+ end
82
+ end
83
+ end
84
+ def alllinks(alprefix, allimit = 500, alnamespace = nil)
85
+ pages = Hash.new
86
+ finish = false
87
+ aloffset = nil
88
+ while !finish
89
+ result = @site.query_list_alllinks(nil, aloffset, nil, alprefix, nil, nil, nil, alnamespace, allimit, nil, nil, true)
90
+ result['query']['alllinks']['l'].each {|page|
91
+ yield Page.new(page['title'], @site)
92
+ }
93
+ if result.key?('query-continue')
94
+ euoffset = result['query-continue']['alllinks']['alcontinue']
95
+ else
96
+ finish = true
97
+ end
98
+ end
99
+ end
100
+ def backlinks(bltitle, bllimit = 500, blnamespace = nil, blfilterredir = nil)
101
+ pages = Hash.new
102
+ finish = false
103
+ bloffset = nil
104
+ while !finish
105
+ result = @site.query_list_backlinks(nil, bltitle, bloffset, blnamespace, blfilterredir, bllimit, true )
106
+ result['query']['backlinks']['bl'].each {|page|
107
+ if page.key?('redirect')
108
+ page['redirlinks']['bl'].each {|page2|
109
+ yield Page.new(page2['title'], @site)
110
+ }
111
+ else
112
+ yield Page.new(page['title'], @site)
113
+ end
114
+ }
115
+ if result.key?('query-continue')
116
+ euoffset = result['query-continue']['backlinks']['blcontinue']
117
+ else
118
+ finish = true
119
+ end
120
+ end
121
+
122
+ end
123
+
124
+ #TODO
125
+ #opensearch
126
+ #prop links
127
+ #prop langlinks?
128
+ #prop images
129
+ #prop templates
130
+ #prop categories
131
+ #prop extlinks
132
+ #list allimages
133
+ #list allcategories
134
+ #list allusers
135
+ #list blocks
136
+ #list categorymembers
137
+ #list deletedrevs
138
+ #list imageusage
139
+ #list logevents
140
+ #list recentchanges
141
+ #list search
142
+ #list usercontribs
143
+ #list watchlist
144
+ #list exturlusage
145
+ #list users
146
+ #list random
147
+ #list protectedtitles
148
+ #list globalblocks
149
+ end
@@ -0,0 +1,111 @@
1
+ #coding: utf-8
2
+
3
+ class User
4
+ attr_reader :name
5
+ def initialize(name = nil, site = nil)
6
+ @username = name.gsub(" ","_")
7
+ @site = site
8
+ end
9
+
10
+ #blocks the user with the given reason
11
+ #the params are the usual block options
12
+ def block(expiry, reason, anononly = true, nocreate = true, autoblock = true, noemail = false, allowusertalk = true, reblock = false)
13
+ #require login
14
+ @site.login
15
+ result = @site.query_prop_info(@username, nil, 'block')
16
+ token = result['query']['pages']['page']['blocktoken']
17
+ result = @site.block(@username, token, nil, expiry, reason, anononly, nocreate, autoblock, noemail, nil, allowusertalk, reblock)
18
+ if result.key?('error')
19
+ raise RbykimediaError, "#{@username}: "+result['error']['code']
20
+ else
21
+ return true
22
+ end
23
+ end
24
+
25
+ #unblocks the user
26
+ def unblock(reason)
27
+ #require login
28
+ @site.login
29
+ result = @site.query_prop_info(@username, nil, 'unblock')
30
+ token = result['query']['pages']['page']['unblocktoken']
31
+ result = @site.unblock(nil, @username, token, nil, reason)
32
+ if result.key?('error')
33
+ raise RbykimediaError, "#{@username}: "+result['error']['code']
34
+ else
35
+ return true
36
+ end
37
+ end
38
+
39
+ #write a message in the user's talk page
40
+ def write_msg(msg, summary = nil)
41
+ page = Page.new("User talk:"+@username, @site)
42
+ return page.append(msg, summary, false)
43
+ end
44
+
45
+ #write an email to the user
46
+ def write_email(subject, text, ccme = nil)
47
+ #require login
48
+ @site.login
49
+ result = @site.query_prop_info(@username, nil, 'email')
50
+ puts result
51
+ token = result['query']['pages']['page']['emailtoken']
52
+ result = @site.emailuser(@username, subject, text, token, ccme)
53
+ if result.key?('error')
54
+ raise RbykimediaError, "#{@username}: "+result['error']['code']
55
+ else
56
+ return true
57
+ end
58
+ end
59
+
60
+ #info about the user
61
+ def info
62
+ result = @site.query_list_users(nil, "blockinfo|groups|editcount|registration|emailable", @username)
63
+ if result.key?('error')
64
+ raise RbykimediaError, "#{@username}: "+result['error']['code']
65
+ else
66
+ return result
67
+ end
68
+ end
69
+
70
+ #get user contributions
71
+ #returns false if there aren't any
72
+ def get_usercontribs(uclimit = 500, ucstart = nil, ucnamespace = nil)
73
+ uccontinue = nil
74
+ ucs = Hash.new
75
+ puts ucstart
76
+ loop {
77
+ result = @site.query_list_usercontribs(nil, uclimit, ucstart, nil, uccontinue, @username, nil, "newer", ucnamespace)
78
+ ucs.deep_merge!(result['query'])
79
+ if result.key?('query-continue')
80
+ ucstart = result['query-continue']['usercontribs']['ucstart']
81
+ else
82
+ break
83
+ end
84
+ }
85
+ if ucs['usercontribs'].key?('item')
86
+ return ucs['usercontribs']['item']
87
+ else
88
+ return false
89
+ end
90
+ end
91
+
92
+ #rollbacks (reverts) all edits by the user since a given time.
93
+ #"since" is a timestamp. Default will rollback everything.
94
+ #"namespace", if set, restricts the rollback to the given namespace
95
+ def rollback(since = nil, namespace = nil)
96
+ contribs = get_usercontribs(nil, since, nil)
97
+ array_c = Array.new
98
+ puts array_c
99
+ contribs.each{|c| array_c.push(c['title'])}
100
+ array_c.uniq!
101
+ puts array_c
102
+ array_c.each{|p|
103
+ page = Page.new(p, @site)
104
+ begin
105
+ page.rollback(@username, "desde aquí", false)
106
+ rescue RbykimediaError => error
107
+ puts error
108
+ end
109
+ }
110
+ end
111
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbmediawiki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chabacano
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-23 00:00:00 +02:00
12
+ date: 2009-05-24 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -25,8 +25,8 @@ dependencies:
25
25
  description: Framework for developing bots and mediawiki tools in ruby.
26
26
  email:
27
27
  - Chabacano@chabawiki.com
28
- executables:
29
- - rbmediawiki
28
+ executables: []
29
+
30
30
  extensions: []
31
31
 
32
32
  extra_rdoc_files:
@@ -38,8 +38,14 @@ files:
38
38
  - Manifest.txt
39
39
  - README.txt
40
40
  - Rakefile
41
- - bin/rbmediawiki
42
41
  - lib/rbmediawiki.rb
42
+ - lib/rbmediawiki/api.rb
43
+ - lib/rbmediawiki/category.rb
44
+ - lib/rbmediawiki/config.yml
45
+ - lib/rbmediawiki/misc_generator.rb
46
+ - lib/rbmediawiki/page.rb
47
+ - lib/rbmediawiki/page_generator.rb
48
+ - lib/rbmediawiki/user.rb
43
49
  - test/test_rbmediawiki.rb
44
50
  has_rdoc: true
45
51
  homepage: http://rbmediawiki.rubyforge.com
data/bin/rbmediawiki DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- abort "you need to write me"