mediawiki-butt 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -1
- data/lib/mediawiki/administration.rb +0 -2
- data/lib/mediawiki/butt.rb +8 -2
- data/lib/mediawiki/edit.rb +4 -4
- data/lib/mediawiki/query/lists.rb +388 -0
- data/lib/mediawiki/query/meta/filerepoinfo.rb +90 -0
- data/lib/mediawiki/query/meta/meta.rb +13 -0
- data/lib/mediawiki/query/meta/siteinfo.rb +196 -0
- data/lib/mediawiki/query/meta/userinfo.rb +111 -0
- data/lib/mediawiki/query/properties.rb +107 -0
- data/lib/mediawiki/query/query.rb +11 -0
- metadata +9 -3
- data/lib/mediawiki/query.rb +0 -789
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3bb16cf6fe52c692e7ca6aea0db8761fa4a3af0
|
4
|
+
data.tar.gz: 6e5132d8fcc1972b89ccc3ad6ca666a0fd11446d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f2b25dfd88316f079dd30055e4b16788a16bc2397a9fa743aac8b6194961dad881628c12c60733e179f53150ab0785c3492865748753fdb48cc232721a570a4
|
7
|
+
data.tar.gz: 0fd0998139a5687b931a74b125f9b60ed4aef78bac71544e87fd7c2e295ef155f1c900e349bf09c2011af2849257034f3933d4d74337c37f7af5ae41ce3d7a2e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
## Version 0
|
3
|
+
### Version 0.7.0
|
4
|
+
* upload's filename argument is no longer splat, because arrays.
|
5
|
+
* Fix incorrect regex $ when ^ should be used in upload.
|
6
|
+
* New get_all_categories method.
|
7
|
+
* New get_all_images method.
|
8
|
+
* Fix some user_bot? calls.
|
9
|
+
* user_bot? returns false when not logged in and username is not set.
|
10
|
+
* Refactor Query module to have its own folder, and subfolder for meta. This shouldn't change anything on the user's end.
|
11
|
+
* A couple methods no longer stupidly print stuff.
|
12
|
+
* New get_categories_in_page method.
|
13
|
+
|
3
14
|
### Version 0.6.0
|
4
15
|
* Slightly expanded Gem description.
|
5
16
|
* Finished all Meta modules and their methods, except for the allmessages meta query. [#6](https://github.com/ftb-gamepedia/mediawiki-butt-ruby/issues/6)
|
@@ -39,7 +50,6 @@
|
|
39
50
|
* New get_languages method, for getting a hash of all the languages, formatted as code => name.
|
40
51
|
* User-Agent header is now set for each post. It defaults to 'NotLoggedIn/MediaWiki::Butt', or "#{name}/MediaWiki::Butt" if logged in. This might cause some slight performance issues ([#5](https://github.com/FTB-Gamepedia/MediaWiki-Butt-Ruby/issues/5))
|
41
52
|
|
42
|
-
|
43
53
|
### Version 0.5.0
|
44
54
|
* New Administration module for administrative methods.
|
45
55
|
* New block and unblock methods, for (un)blocking users.
|
@@ -19,7 +19,6 @@ module MediaWiki
|
|
19
19
|
params[:token] = token
|
20
20
|
|
21
21
|
response = post(params)
|
22
|
-
puts response
|
23
22
|
|
24
23
|
if !response['error'].nil?
|
25
24
|
return response['error']['code']
|
@@ -42,7 +41,6 @@ module MediaWiki
|
|
42
41
|
params[:token] = token
|
43
42
|
|
44
43
|
response = post(params)
|
45
|
-
puts response
|
46
44
|
|
47
45
|
if !response['error'].nil?
|
48
46
|
return response['error']['code']
|
data/lib/mediawiki/butt.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require_relative 'auth'
|
2
|
-
require_relative 'query'
|
2
|
+
require_relative 'query/query'
|
3
3
|
require_relative 'constants'
|
4
4
|
require_relative 'edit'
|
5
5
|
require_relative 'administration'
|
@@ -79,7 +79,13 @@ module MediaWiki
|
|
79
79
|
# @return [Boolean] true if logged in as a bot, false if not logged in or
|
80
80
|
# logged in as a non-bot
|
81
81
|
def user_bot?(*username)
|
82
|
-
groups =
|
82
|
+
groups = false
|
83
|
+
|
84
|
+
if defined? username
|
85
|
+
groups = get_usergroups(username)
|
86
|
+
else
|
87
|
+
groups = get_usergroups if @logged_in
|
88
|
+
end
|
83
89
|
|
84
90
|
if groups != false
|
85
91
|
return groups.include?('bot')
|
data/lib/mediawiki/edit.rb
CHANGED
@@ -74,17 +74,17 @@ module MediaWiki
|
|
74
74
|
# the last slash in the URL.
|
75
75
|
# @return [Boolean/String] true if the upload was successful, else the
|
76
76
|
# warning's key. Returns false if the file extension is not valid.
|
77
|
-
def upload(url,
|
77
|
+
def upload(url, filename = nil)
|
78
78
|
params = {
|
79
79
|
action: 'upload',
|
80
80
|
url: url,
|
81
81
|
format: 'json'
|
82
82
|
}
|
83
83
|
|
84
|
-
if
|
85
|
-
filename = filename.sub(/$File:/, '')
|
86
|
-
else
|
84
|
+
if filename.nil?
|
87
85
|
filename = url.split('/')[-1]
|
86
|
+
else
|
87
|
+
filename = filename.sub(/^File:/, '')
|
88
88
|
end
|
89
89
|
|
90
90
|
ext = filename.split('.')[-1]
|
@@ -0,0 +1,388 @@
|
|
1
|
+
require_relative '../constants'
|
2
|
+
require 'string-utility'
|
3
|
+
|
4
|
+
module MediaWiki
|
5
|
+
module Query
|
6
|
+
module Lists
|
7
|
+
using StringUtility
|
8
|
+
|
9
|
+
# Gets an array of backlinks to a given title.
|
10
|
+
# @param title [String] The page to get the backlinks of.
|
11
|
+
# @param limit [Int] The maximum number of pages to get. Defaults to 500,
|
12
|
+
# and cannot be greater than that unless the user is a bot. If the user
|
13
|
+
# is a bot, the limit cannot be greater than 5000.
|
14
|
+
# @return [Array] All backlinks until the limit
|
15
|
+
def what_links_here(title, limit = 500)
|
16
|
+
params = {
|
17
|
+
action: 'query',
|
18
|
+
bltitle: title
|
19
|
+
}
|
20
|
+
|
21
|
+
if limit > 500
|
22
|
+
if user_bot? == true
|
23
|
+
if limit > 5000
|
24
|
+
params[:bllimit] = 5000
|
25
|
+
else
|
26
|
+
params[:bllimit] = limit
|
27
|
+
end
|
28
|
+
else
|
29
|
+
params[:bllimit] = 500
|
30
|
+
end
|
31
|
+
else
|
32
|
+
params[:bllimit] = limit
|
33
|
+
end
|
34
|
+
|
35
|
+
ret = []
|
36
|
+
response = post(params)
|
37
|
+
response['query']['backlinks'].each { |bl| ret.push(bl['title']) }
|
38
|
+
|
39
|
+
ret
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns an array of all page titles that belong to a given category.
|
43
|
+
# @param category [String] The category title. It can include "Category:",
|
44
|
+
# or not, it doesn't really matter because we will add it if it is
|
45
|
+
# missing.
|
46
|
+
# @param limit [Int] The maximum number of members to get. Defaults to
|
47
|
+
# 500, and cannot be greater than that unless the user is a bot.
|
48
|
+
# If the user is a bot, the limit cannot be greater than 5000.
|
49
|
+
# @return [Array] All category members until the limit
|
50
|
+
def get_category_members(category, limit = 500)
|
51
|
+
params = {
|
52
|
+
action: 'query',
|
53
|
+
list: 'categorymembers',
|
54
|
+
cmprop: 'title'
|
55
|
+
}
|
56
|
+
|
57
|
+
if category =~ /[Cc]ategory\:/
|
58
|
+
params[:cmtitle] = category
|
59
|
+
else
|
60
|
+
params[:cmtitle] = "Category:#{category}"
|
61
|
+
end
|
62
|
+
|
63
|
+
if limit > 500
|
64
|
+
if user_bot?
|
65
|
+
if limit > 5000
|
66
|
+
params[:cmlimit] = 5000
|
67
|
+
else
|
68
|
+
params[:cmlimit] = limit
|
69
|
+
end
|
70
|
+
else
|
71
|
+
params[:cmlimit] = 500
|
72
|
+
end
|
73
|
+
else
|
74
|
+
params[:cmlimit] = limit
|
75
|
+
end
|
76
|
+
|
77
|
+
ret = []
|
78
|
+
response = post(params)
|
79
|
+
response['query']['categorymembers'].each { |cm| ret.push(cm['title']) }
|
80
|
+
|
81
|
+
ret
|
82
|
+
end
|
83
|
+
|
84
|
+
# Returns an array of random pages titles.
|
85
|
+
# @param number_of_pages [Int] The number of articles to get.
|
86
|
+
# Defaults to 1. Cannot be greater than 10 for normal users,
|
87
|
+
# or 20 for bots.
|
88
|
+
# @param namespace [Int] The namespace ID. Defaults to
|
89
|
+
# 0 (the main namespace).
|
90
|
+
# @return [Array] All members
|
91
|
+
def get_random_pages(number_of_pages = 1, namespace = 0)
|
92
|
+
params = {
|
93
|
+
action: 'query',
|
94
|
+
list: 'random'
|
95
|
+
}
|
96
|
+
|
97
|
+
if $namespaces.value?(namespace)
|
98
|
+
params[:rnnamespace] = namespace
|
99
|
+
else
|
100
|
+
params[:rnnamespace] = 0
|
101
|
+
end
|
102
|
+
|
103
|
+
if number_of_pages > 10
|
104
|
+
if user_bot?
|
105
|
+
if limit > 20
|
106
|
+
params[:rnlimit] = 20
|
107
|
+
else
|
108
|
+
params[:rnlimit] = limit
|
109
|
+
end
|
110
|
+
else
|
111
|
+
params[:rnlimit] = 10
|
112
|
+
end
|
113
|
+
else
|
114
|
+
params[:rnlimit] = number_of_pages
|
115
|
+
end
|
116
|
+
|
117
|
+
ret = []
|
118
|
+
responce = post(params)
|
119
|
+
responce['query']['random'].each { |a| ret.push(a['title']) }
|
120
|
+
|
121
|
+
ret
|
122
|
+
end
|
123
|
+
|
124
|
+
# Gets user information. This method should rarely be used by
|
125
|
+
# normal users.
|
126
|
+
# @param prop [String] The usprop parameter.
|
127
|
+
# @param username [String] The username to get info for. Optional.
|
128
|
+
# Defaults to the currently logged in user if ommitted.
|
129
|
+
# @return [String/Nil] Parsed full response if successful, nil if
|
130
|
+
# the username is nil and the Butt is not logged in.
|
131
|
+
def get_userlists(prop, username = nil)
|
132
|
+
if username.nil?
|
133
|
+
if @logged_in
|
134
|
+
response = get_current_user_meta(prop)
|
135
|
+
else
|
136
|
+
return false
|
137
|
+
end
|
138
|
+
else
|
139
|
+
params = {
|
140
|
+
action: 'query',
|
141
|
+
list: 'users',
|
142
|
+
usprop: prop,
|
143
|
+
ususers: username
|
144
|
+
}
|
145
|
+
|
146
|
+
response = post(params)
|
147
|
+
end
|
148
|
+
|
149
|
+
response
|
150
|
+
end
|
151
|
+
|
152
|
+
# Gets an array of all the user's groups.
|
153
|
+
# @param username [String] The username to get groups of. Optional.
|
154
|
+
# Defaults to the currently logged in user.
|
155
|
+
# @return [Array/Boolean] All of the user's groups, or false if username
|
156
|
+
# is nil and Butt is not logged in.
|
157
|
+
def get_usergroups(username = nil)
|
158
|
+
ret = []
|
159
|
+
if username.nil?
|
160
|
+
if @logged_in
|
161
|
+
info = get_userlists('groups')
|
162
|
+
info['query']['userinfo']['groups'].each { |i| ret.push(i) }
|
163
|
+
else
|
164
|
+
return false
|
165
|
+
end
|
166
|
+
else
|
167
|
+
info = get_userlists('groups', username)
|
168
|
+
info['query']['users'].each do |i|
|
169
|
+
i['groups'].each { |g| ret.push(g) }
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
ret
|
174
|
+
end
|
175
|
+
|
176
|
+
# Gets the user rights for the user.
|
177
|
+
# @param username [String] The user to get the rights for. Optional.
|
178
|
+
# Defaults to the currently logged in user.
|
179
|
+
# @return [Array/Boolean] All of the user's groups, or false if username
|
180
|
+
# is nil and Butt is not logged in.
|
181
|
+
def get_userrights(username = nil)
|
182
|
+
ret = []
|
183
|
+
if username.nil?
|
184
|
+
if @logged_in
|
185
|
+
info = get_userlists('rights')
|
186
|
+
info['query']['userinfo']['rights'].each { |i| ret.push(i) }
|
187
|
+
else
|
188
|
+
return false
|
189
|
+
end
|
190
|
+
else
|
191
|
+
info = get_userlists('rights', username)
|
192
|
+
info['query']['users'].each do |i|
|
193
|
+
i['rights'].each do |g|
|
194
|
+
ret.push(g)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
ret
|
200
|
+
end
|
201
|
+
|
202
|
+
# Gets contribution count for the user.
|
203
|
+
# @param username [String] The username to get the contribution count of.
|
204
|
+
# Optional. Defaults to the currently logged in user.
|
205
|
+
# @param autoparse [Boolean] Whether to automatically format the string
|
206
|
+
# with commas using string-utility. Defaults to true.
|
207
|
+
# @return [Boolean/Int/String] False if username is nil and Butt is not
|
208
|
+
# logged in. An integer value of the contribution count if autoparse is
|
209
|
+
# false. A formatted string version of the contribution count if
|
210
|
+
# autoparse is true.
|
211
|
+
def get_contrib_count(username = nil, autoparse = true)
|
212
|
+
count = nil
|
213
|
+
if username.nil?
|
214
|
+
if @logged_in
|
215
|
+
info = get_userlists('editcount')
|
216
|
+
count = info['query']['userinfo']['editcount']
|
217
|
+
else
|
218
|
+
return false
|
219
|
+
end
|
220
|
+
else
|
221
|
+
info = get_userlists('editcount', username)
|
222
|
+
info['query']['users'].each { |i| count = i['editcount'] }
|
223
|
+
end
|
224
|
+
|
225
|
+
if autoparse
|
226
|
+
countstring = count.to_s.separate
|
227
|
+
return countstring
|
228
|
+
end
|
229
|
+
|
230
|
+
count
|
231
|
+
end
|
232
|
+
|
233
|
+
# Gets when the user registered.
|
234
|
+
# @param username [String] The username to get the registration date and
|
235
|
+
# time of. Optional. Defaults to the currently logged in user.
|
236
|
+
# @return [DateTime] The registration date and time as a DateTime object.
|
237
|
+
def get_registration_time(username = nil)
|
238
|
+
time = nil
|
239
|
+
# Do note that in Userinfo, registration is called registrationdate.
|
240
|
+
if username.nil?
|
241
|
+
if @logged_in
|
242
|
+
info = get_userlists('registrationdate')
|
243
|
+
time = info['query']['userinfo']['registrationdate']
|
244
|
+
else
|
245
|
+
return false
|
246
|
+
end
|
247
|
+
else
|
248
|
+
info = get_userlists('registration', username)
|
249
|
+
info['query']['users'].each { |i| time = i['registration'] }
|
250
|
+
end
|
251
|
+
|
252
|
+
# %Y: Year including century
|
253
|
+
# %m: Month num
|
254
|
+
# %d: day of month
|
255
|
+
# %T: Time as HH:MM:SS
|
256
|
+
timeformat = '%Y-%m-%dT%T'
|
257
|
+
time = DateTime.strptime(time, timeformat)
|
258
|
+
|
259
|
+
time
|
260
|
+
end
|
261
|
+
|
262
|
+
# Gets the gender for the provded user.
|
263
|
+
# @param username [String] The user.
|
264
|
+
# @return [String] The gender. 'male', 'female', or 'unknown'.
|
265
|
+
def get_user_gender(username)
|
266
|
+
gender = nil
|
267
|
+
info = get_userlists('gender', username)
|
268
|
+
info['query']['users'].each { |i| gender = i['gender'] }
|
269
|
+
|
270
|
+
|
271
|
+
gender
|
272
|
+
end
|
273
|
+
|
274
|
+
# Gets the amount of results for the search value.
|
275
|
+
# @param search_value [String] The thing to search for.
|
276
|
+
# @param namespace [Int] The namespace to search in.
|
277
|
+
# Defaults to 0 (the main namespace).
|
278
|
+
# @return [Int] The number of pages that matched the search.
|
279
|
+
def get_search_result_amount(search_value, namespace = 0)
|
280
|
+
params = {
|
281
|
+
action: 'query',
|
282
|
+
list: 'search',
|
283
|
+
srsearch: search_value
|
284
|
+
}
|
285
|
+
|
286
|
+
if $namespaces.value?(namespace)
|
287
|
+
params[:srnamespace] = namespace
|
288
|
+
else
|
289
|
+
params[:srnamespace] = 0
|
290
|
+
end
|
291
|
+
|
292
|
+
response = post(params)
|
293
|
+
|
294
|
+
response['query']['searchinfo']['totalhits']
|
295
|
+
end
|
296
|
+
|
297
|
+
# Gets an array containing page titles that matched the search.
|
298
|
+
# @param search_value [String] The thing to search for.
|
299
|
+
# @param namespace [Int] The namespace to search in.
|
300
|
+
# Defaults to 0 (the main namespace).
|
301
|
+
# @return [Array] The page titles that matched the search.
|
302
|
+
def get_search_results(search_value, namespace = 0)
|
303
|
+
params = {
|
304
|
+
action: 'query',
|
305
|
+
list: 'search',
|
306
|
+
srsearch: search_value
|
307
|
+
}
|
308
|
+
|
309
|
+
if $namespaces.value?(namespace)
|
310
|
+
params[:srnamespace] = namespace
|
311
|
+
else
|
312
|
+
params[:srnamespace] = 0
|
313
|
+
end
|
314
|
+
|
315
|
+
response = post(params)
|
316
|
+
|
317
|
+
ret = []
|
318
|
+
response['query']['search'].each { |search| ret.push(search['title']) }
|
319
|
+
|
320
|
+
ret
|
321
|
+
end
|
322
|
+
|
323
|
+
# Gets all categories on the entire wiki.
|
324
|
+
# @param limit [Int] The maximum number of categories to get. Defaults to
|
325
|
+
# 500. Cannot be greater than 500 for normal users, or 5000 for bots.
|
326
|
+
# @return [Array] An array of all categories.
|
327
|
+
def get_all_categories(limit = 500)
|
328
|
+
params = {
|
329
|
+
action: 'query',
|
330
|
+
list: 'allcategories'
|
331
|
+
}
|
332
|
+
|
333
|
+
if limit > 500
|
334
|
+
if user_bot?
|
335
|
+
if limit > 5000
|
336
|
+
params[:aclimit] = 5000
|
337
|
+
else
|
338
|
+
params[:aclimit] = limit
|
339
|
+
end
|
340
|
+
else
|
341
|
+
params[:aclimit] = 500
|
342
|
+
end
|
343
|
+
else
|
344
|
+
params[:aclimit] = limit
|
345
|
+
end
|
346
|
+
|
347
|
+
response = post(params)
|
348
|
+
|
349
|
+
ret = []
|
350
|
+
response['query']['allcategories'].each { |c| ret.push(c['*']) }
|
351
|
+
|
352
|
+
ret
|
353
|
+
end
|
354
|
+
|
355
|
+
# Gets all the images on the wiki.
|
356
|
+
# @param limit [Int] The maximum number of images to get. Defaults to 500.
|
357
|
+
# Cannot be greater than 500 for normal users, or 5000 for bots.
|
358
|
+
# @return [Array] An array of all images.
|
359
|
+
def get_all_images(limit = 500)
|
360
|
+
params = {
|
361
|
+
action: 'query',
|
362
|
+
list: 'allimages'
|
363
|
+
}
|
364
|
+
|
365
|
+
if limit > 500
|
366
|
+
if user_bot?
|
367
|
+
if limit > 5000
|
368
|
+
params[:ailimit] = 5000
|
369
|
+
else
|
370
|
+
params[:ailimit] = limit
|
371
|
+
end
|
372
|
+
else
|
373
|
+
params[:ailimit] = 500
|
374
|
+
end
|
375
|
+
else
|
376
|
+
params[:ailimit] = limit
|
377
|
+
end
|
378
|
+
|
379
|
+
response = post(params)
|
380
|
+
|
381
|
+
ret = []
|
382
|
+
response['query']['allimages'].each { |i| ret.push(i['name']) }
|
383
|
+
|
384
|
+
ret
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
end
|