mediawiki-butt 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/mediawiki/butt.rb +13 -3
- data/lib/mediawiki/edit.rb +64 -4
- data/lib/mediawiki/query.rb +82 -26
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8d1d049adaacdee763a3b3a741ae4d8c7641813
|
4
|
+
data.tar.gz: 36994491428f1eb43fc994530267b16a3bcf58a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 167e862fd9eef9e7212e861c1bad91bca497eaf3c96a3fcd0f16684ea017dbe7bb6d858ac7b29e3760c3a3a2e69062c4dfa22342c54535e2e54197fba2545f20
|
7
|
+
data.tar.gz: dc16fd0e84563e8ca0e2db74ac7604e38ff1dda67f94f242a2dedb511ed884ab940a3aad216ade4a931a9b1b8b82b2f9a50116f9b83a8901e87d2c2ad33d76d7
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
## Version 0
|
3
|
+
### Version 0.3.0
|
4
|
+
* New upload method to upload by URL.
|
5
|
+
* New create_page method.
|
6
|
+
* New get_userlists method.
|
7
|
+
* New get_usergroups method.
|
8
|
+
* New get_contrib_count method.
|
9
|
+
* Refactor get_usergroups and is_current_user_bot? to use new get_userinfo method.
|
10
|
+
* Minor refactors to make optional arguments more Ruby-like with splat arguments.
|
11
|
+
* #edit no longer prints the edit token, because that's stupid.
|
12
|
+
* #edit no longer sets the summary if it is nil.
|
13
|
+
|
3
14
|
### Version 0.2.1
|
4
15
|
* Fix gemspec. You should actually have the new stuff now.
|
5
16
|
|
data/lib/mediawiki/butt.rb
CHANGED
@@ -40,7 +40,11 @@ module MediaWiki
|
|
40
40
|
# @param header [Hash] The header hash. Optional.
|
41
41
|
# @return [JSON/HTTPMessage] Parsed JSON if autoparse is true, or raw response if not.
|
42
42
|
def post(params, autoparse = true, header = nil)
|
43
|
-
|
43
|
+
# Note that defining the header argument as a splat argument (*header) causes errors in HTTPClient.
|
44
|
+
# We must use header.nil? rather than a splat argument and defined? header due to this error.
|
45
|
+
# For those interested, the error is: undefined method `downcase' for {"Set-Cookie"=>"cookie"}:Hash (NoMethodError)
|
46
|
+
# This is obvisouly an error in HTTPClient, but we must work around it until there is a fix in the gem.
|
47
|
+
if header.nil?
|
44
48
|
response = @client.post(@uri, params)
|
45
49
|
else
|
46
50
|
response = @client.post(@uri, params, header)
|
@@ -54,10 +58,16 @@ module MediaWiki
|
|
54
58
|
end
|
55
59
|
|
56
60
|
# Returns true if the currently logged in user is in the "bot" group. This can be helpful to some developers, but it is mostly for use internally in MediaWiki::Butt.
|
61
|
+
# @param username [String] The username to check. Optional. Defaults to the currently logged in user if nil.
|
57
62
|
# @return [Boolean] true if logged in as a bot, false if not logged in or logged in as a non-bot
|
58
|
-
def
|
59
|
-
if
|
63
|
+
def is_user_bot?(*username)
|
64
|
+
if defined? username
|
65
|
+
groups = get_usergroups(username)
|
66
|
+
else
|
60
67
|
groups = get_usergroups
|
68
|
+
end
|
69
|
+
|
70
|
+
if groups != false
|
61
71
|
if groups.include? "bot"
|
62
72
|
return true
|
63
73
|
else
|
data/lib/mediawiki/edit.rb
CHANGED
@@ -3,23 +3,22 @@ module MediaWiki
|
|
3
3
|
# Performs a standard edit. It cannot create pages. Please use create_page for that.
|
4
4
|
# @param title [String] The page title.
|
5
5
|
# @param text [String] The new content.
|
6
|
-
# @param summary [String] The edit summary. Optional.
|
7
6
|
# @param minor [Boolean] Will mark the edit as minor if true. Defaults to false.
|
8
7
|
# @param bot [Boolean] Will mark the edit as bot edit if true. Defualts to true, for your convenience, bot developers.
|
8
|
+
# @param summary [String] The edit summary. Optional.
|
9
9
|
# @return [String] The new revision ID, or if it failed, the error code.
|
10
|
-
def edit(title, text,
|
10
|
+
def edit(title, text, minor = false, bot = true, *summary)
|
11
11
|
params = {
|
12
12
|
action: 'edit',
|
13
13
|
title: title,
|
14
|
-
summary: summary,
|
15
14
|
text: text,
|
16
15
|
nocreate: 1,
|
17
16
|
format: 'json'
|
18
17
|
}
|
19
18
|
|
20
19
|
token = get_edit_token(title)
|
21
|
-
puts token
|
22
20
|
|
21
|
+
params[:summary] = summary if defined? summary
|
23
22
|
params[:minor] = '1' if minor == true
|
24
23
|
params[:bot] = '1' if bot == true
|
25
24
|
params[:token] = token
|
@@ -32,5 +31,66 @@ module MediaWiki
|
|
32
31
|
return response["error"]["code"]
|
33
32
|
end
|
34
33
|
end
|
34
|
+
|
35
|
+
# Creates a new page.
|
36
|
+
# @param title [String] The new page's title.
|
37
|
+
# @param text [String] The new page's content.
|
38
|
+
# @param summary [String] The edit summary. Defaults to "New page".
|
39
|
+
# @param bot [Boolean] Will mark the edit as a bot edit if true. Defaults to true, for your convenience, bot developers.
|
40
|
+
# @return [String] The new page ID, or if it failed, the error code.
|
41
|
+
def create_page(title, text, summary = "New page", bot = true)
|
42
|
+
params = {
|
43
|
+
action: 'edit',
|
44
|
+
title: title,
|
45
|
+
summary: summary,
|
46
|
+
text: text,
|
47
|
+
createonly: 1,
|
48
|
+
format: 'json'
|
49
|
+
}
|
50
|
+
|
51
|
+
token = get_edit_token(title)
|
52
|
+
|
53
|
+
params[:bot] = '1' if bot == true
|
54
|
+
params[:token] = token
|
55
|
+
|
56
|
+
response = post(params)
|
57
|
+
|
58
|
+
if response["error"]["code"].nil?
|
59
|
+
return response["edit"]["pageid"]
|
60
|
+
else
|
61
|
+
return response["error"]["code"]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Uploads a file from a URL.
|
66
|
+
# @param url [String] The URL to the file.
|
67
|
+
# @param filename [String] The preferred filename. This can include File: at the beginning, but it will be removed through regex. Optional. If ommitted, it will be everything after the last slash in the URL.
|
68
|
+
# @return [Boolean/String] true if the upload was successful, else the warning key.
|
69
|
+
def upload(url, *filename)
|
70
|
+
params = {
|
71
|
+
action: 'upload',
|
72
|
+
url: url,
|
73
|
+
format: 'json'
|
74
|
+
}
|
75
|
+
|
76
|
+
if defined? filename
|
77
|
+
filename = filename.sub(/$File:/, "")
|
78
|
+
else
|
79
|
+
filename = url.split('/')[-1]
|
80
|
+
end
|
81
|
+
|
82
|
+
token = get_edit_token(filename)
|
83
|
+
|
84
|
+
params[:filename] = filename
|
85
|
+
params[:token] = token
|
86
|
+
|
87
|
+
response = post(params)
|
88
|
+
if response["upload"]["result"] == "Success"
|
89
|
+
return true
|
90
|
+
elsif response["upload"]["result"] == "Warning"
|
91
|
+
warnings = response["upload"]["warnings"]
|
92
|
+
return warnings.keys[0]
|
93
|
+
end
|
94
|
+
end
|
35
95
|
end
|
36
96
|
end
|
data/lib/mediawiki/query.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'string-utility'
|
2
|
+
|
1
3
|
module MediaWiki
|
2
4
|
module Query
|
3
5
|
#TODO: Actually decide on a good way to deal with meta information queries.
|
@@ -21,28 +23,6 @@ module MediaWiki
|
|
21
23
|
end
|
22
24
|
return ret
|
23
25
|
end
|
24
|
-
|
25
|
-
# Gets an array of all the currently logged in user's groups.
|
26
|
-
# @return [Array/Boolean] All of the user's groups, or false if not logged in.
|
27
|
-
def get_usergroups
|
28
|
-
if @logged_in == true
|
29
|
-
params = {
|
30
|
-
action: 'query',
|
31
|
-
meta: 'userinfo',
|
32
|
-
uiprop: 'groups',
|
33
|
-
format: 'json'
|
34
|
-
}
|
35
|
-
|
36
|
-
result = post(params)
|
37
|
-
ret = Array.new
|
38
|
-
result["query"]["userinfo"]["groups"].each do |g|
|
39
|
-
ret.push(g)
|
40
|
-
end
|
41
|
-
return ret
|
42
|
-
else
|
43
|
-
return false
|
44
|
-
end
|
45
|
-
end
|
46
26
|
end
|
47
27
|
|
48
28
|
module Properties
|
@@ -133,7 +113,7 @@ module MediaWiki
|
|
133
113
|
}
|
134
114
|
|
135
115
|
if limit > 500
|
136
|
-
if
|
116
|
+
if is_user_bot? == true
|
137
117
|
if limit > 5000
|
138
118
|
params[:bllimit] = 5000
|
139
119
|
else
|
@@ -162,7 +142,7 @@ module MediaWiki
|
|
162
142
|
params = {
|
163
143
|
action: 'query',
|
164
144
|
list: 'categorymembers',
|
165
|
-
|
145
|
+
cmprop: 'title',
|
166
146
|
format: 'json'
|
167
147
|
}
|
168
148
|
|
@@ -173,7 +153,7 @@ module MediaWiki
|
|
173
153
|
end
|
174
154
|
|
175
155
|
if limit > 500
|
176
|
-
if
|
156
|
+
if is_user_bot? == true
|
177
157
|
if limit > 5000
|
178
158
|
params[:cmlimit] = 5000
|
179
159
|
else
|
@@ -208,7 +188,7 @@ module MediaWiki
|
|
208
188
|
params[:rnnamespace] = namespace if namespace != nil
|
209
189
|
|
210
190
|
if namespace > 10
|
211
|
-
if
|
191
|
+
if is_user_bot? == true
|
212
192
|
if limit > 20
|
213
193
|
params[:rnlimit] = 20
|
214
194
|
else
|
@@ -228,6 +208,82 @@ module MediaWiki
|
|
228
208
|
end
|
229
209
|
return ret
|
230
210
|
end
|
211
|
+
|
212
|
+
# Gets user information. This method should rarely be used by normal users.
|
213
|
+
# @param prop [String] The usprop parameter.
|
214
|
+
# @param username [String] The username to get info for. Optional. Defaults to the currently logged in user if ommitted.
|
215
|
+
# @return [String/Nil] Parsed full response if successful, nil if the username is nil and the Butt is not logged in.
|
216
|
+
def get_userlists(prop, username = nil)
|
217
|
+
params = {
|
218
|
+
action: 'query',
|
219
|
+
list: 'users',
|
220
|
+
usprop: prop,
|
221
|
+
format: 'json'
|
222
|
+
}
|
223
|
+
|
224
|
+
if username.nil?
|
225
|
+
if @logged_in == true
|
226
|
+
response = post(params)
|
227
|
+
else
|
228
|
+
return nil
|
229
|
+
end
|
230
|
+
else
|
231
|
+
params[:ususers] = username
|
232
|
+
response = post(params)
|
233
|
+
end
|
234
|
+
|
235
|
+
return response
|
236
|
+
end
|
237
|
+
|
238
|
+
# Gets an array of all the currently logged in user's groups.
|
239
|
+
# @param username [String] The username to get groups of. Optional. Defaults to the currently logged in user.
|
240
|
+
# @return [Array/Boolean] All of the user's groups, or false if username is nil and Butt is not logged in.
|
241
|
+
def get_usergroups(username = nil)
|
242
|
+
if username.nil?
|
243
|
+
if @logged_in == true
|
244
|
+
info = get_userlists('groups')
|
245
|
+
else
|
246
|
+
return false
|
247
|
+
end
|
248
|
+
else
|
249
|
+
info = get_userlists('groups', username)
|
250
|
+
end
|
251
|
+
|
252
|
+
ret = Array.new
|
253
|
+
info["query"]["users"].each do |i|
|
254
|
+
i["groups"].each do |g|
|
255
|
+
ret.push(g)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
return ret
|
259
|
+
end
|
260
|
+
|
261
|
+
# Gets contribution count for the user.
|
262
|
+
# @param username [String] The username to get the contribution count of. Optional. Defaults to the currently logged in user.
|
263
|
+
# @param autoparse [Boolean] Whether to automatically format the string with commas. Defaults to true.
|
264
|
+
# @return [Boolean/Int/String] False if username is nil and Butt is not logged in. An integer value of the contribution count if autoparse is false. A formatted string version of the contribution count if autoparse is true.
|
265
|
+
def get_contrib_count(username = nil, autoparse = true)
|
266
|
+
if username.nil?
|
267
|
+
if @logged_in == true
|
268
|
+
info = get_userlists('editcount')
|
269
|
+
else
|
270
|
+
return false
|
271
|
+
end
|
272
|
+
else
|
273
|
+
info = get_userlists('editcount', username)
|
274
|
+
end
|
275
|
+
|
276
|
+
count = nil
|
277
|
+
info["query"]["users"].each do |i|
|
278
|
+
count = i["editcount"]
|
279
|
+
end
|
280
|
+
|
281
|
+
if autoparse == true
|
282
|
+
countstring = StringUtility.separate_with(count.to_s)
|
283
|
+
return countstring
|
284
|
+
end
|
285
|
+
return count
|
286
|
+
end
|
231
287
|
end
|
232
288
|
end
|
233
289
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mediawiki-butt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eli Foster
|
@@ -9,10 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: string-utility
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.0.1
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 1.0.1
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: json
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
17
31
|
requirements:
|
18
32
|
- - ">="
|
@@ -26,7 +40,7 @@ dependencies:
|
|
26
40
|
- !ruby/object:Gem::Version
|
27
41
|
version: '0'
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
|
-
name:
|
43
|
+
name: httpclient
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
31
45
|
requirements:
|
32
46
|
- - ">="
|