mediawiki-butt 0.9.0 → 0.10.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 +250 -0
- data/lib/mediawiki/auth.rb +4 -4
- data/lib/mediawiki/constants.rb +3 -0
- data/lib/mediawiki/edit.rb +2 -2
- data/lib/mediawiki/query/lists/all.rb +188 -0
- data/lib/mediawiki/query/lists/backlinks.rb +145 -0
- data/lib/mediawiki/query/lists/categories.rb +65 -0
- data/lib/mediawiki/query/lists/lists.rb +25 -0
- data/lib/mediawiki/query/lists/log/block.rb +83 -0
- data/lib/mediawiki/query/lists/log/delete.rb +59 -0
- data/lib/mediawiki/query/lists/log/import.rb +57 -0
- data/lib/mediawiki/query/lists/log/log.rb +372 -0
- data/lib/mediawiki/query/lists/log/merge.rb +33 -0
- data/lib/mediawiki/query/lists/log/move.rb +57 -0
- data/lib/mediawiki/query/lists/log/newusers.rb +82 -0
- data/lib/mediawiki/query/lists/log/patrol.rb +34 -0
- data/lib/mediawiki/query/lists/log/rights.rb +59 -0
- data/lib/mediawiki/query/lists/log/upload.rb +58 -0
- data/lib/mediawiki/query/lists/miscellaneous.rb +55 -0
- data/lib/mediawiki/query/lists/querypage.rb +203 -0
- data/lib/mediawiki/query/lists/recent_changes.rb +124 -0
- data/lib/mediawiki/query/lists/search.rb +86 -0
- data/lib/mediawiki/query/lists/users.rb +210 -0
- data/lib/mediawiki/query/query.rb +1 -1
- metadata +22 -3
- data/lib/mediawiki/query/lists.rb +0 -561
@@ -0,0 +1,124 @@
|
|
1
|
+
require_relative 'users'
|
2
|
+
|
3
|
+
module MediaWiki
|
4
|
+
module Query
|
5
|
+
module Lists
|
6
|
+
module RecentChanges
|
7
|
+
include MediaWiki::Query::Lists::Users
|
8
|
+
|
9
|
+
# Gets the RecentChanges log.
|
10
|
+
# @param user [String] See {MediaWiki::Query::Lists::Log#get_log}
|
11
|
+
# @param title [String] See {MediaWiki::Query::Lists::Log#get_log}
|
12
|
+
# @param start [DateTime] See {MediaWiki::Query::Lists::Log#get_log}
|
13
|
+
# @param stop [DateTime] See {MediaWiki::Query::Lists::Log#get_log}
|
14
|
+
# @param limit [Int] See {MediaWiki::Query::Lists::Log#get_log}
|
15
|
+
# @see https://www.mediawiki.org/wiki/API:RecentChanges MediaWiki
|
16
|
+
# RecentChanges API Docs
|
17
|
+
# @since 0.10.0
|
18
|
+
# @return [Array<Hash>] All of the changes, with the following keys:
|
19
|
+
# type, title, revid, old_revid, rcid, user, old_length, new_length,
|
20
|
+
# diff_length, timestamp, comment, parsed_comment, sha, new, minor,
|
21
|
+
# bot.
|
22
|
+
def get_recent_changes(user = nil, start = nil, stop = nil, limit = 500)
|
23
|
+
time_format = MediaWiki::Constants::TIME_FORMAT
|
24
|
+
prop = 'user|comment|parsedcomment|timestamp|title|ids|sha1|sizes' \
|
25
|
+
'|redirect|flags|loginfo'
|
26
|
+
rights = get_userrights
|
27
|
+
patrol = false
|
28
|
+
if rights != false && rights.include?('patrol')
|
29
|
+
prop << '|patrolled'
|
30
|
+
patrol = true
|
31
|
+
end
|
32
|
+
params = {
|
33
|
+
action: 'query',
|
34
|
+
list: 'recentchanges',
|
35
|
+
rcprop: prop,
|
36
|
+
rclimit: get_limited(limit)
|
37
|
+
}
|
38
|
+
params[:rcuser] = user unless user.nil?
|
39
|
+
params[:rcstart] = start.strftime(time_format) unless start.nil?
|
40
|
+
params[:rcend] = stop.strftime(time_format) unless stop.nil?
|
41
|
+
|
42
|
+
response = post(params)
|
43
|
+
ret = []
|
44
|
+
p response
|
45
|
+
response['query']['recentchanges'].each do |change|
|
46
|
+
old_length = change['oldlen']
|
47
|
+
new_length = change['newlen']
|
48
|
+
diff_length = new_length - old_length
|
49
|
+
|
50
|
+
hash = {
|
51
|
+
type: change['type'],
|
52
|
+
title: change['title'],
|
53
|
+
revid: change['revid'],
|
54
|
+
old_revid: change['old_revid'],
|
55
|
+
rcid: change['rcid'],
|
56
|
+
user: change['user'],
|
57
|
+
old_length: old_length,
|
58
|
+
new_length: new_length,
|
59
|
+
diff_length: diff_length,
|
60
|
+
timestamp: DateTime.strptime(change['timestamp'], time_format),
|
61
|
+
comment: change['comment'],
|
62
|
+
parsed_comment: change['parsedcomment'],
|
63
|
+
sha: change['sha1']
|
64
|
+
}
|
65
|
+
hash[:new] = change.key?('new')
|
66
|
+
hash[:minor] = change.key?('minor')
|
67
|
+
hash[:bot] = change.key?('bot')
|
68
|
+
|
69
|
+
hash[:patrolled] = change.key?('patrolled') if patrol
|
70
|
+
|
71
|
+
if change['type'] == 'log'
|
72
|
+
hash[:log_type] = change['logtype']
|
73
|
+
hash[:log_action] = change['logaction']
|
74
|
+
hash[:logid] = change['logid']
|
75
|
+
end
|
76
|
+
|
77
|
+
ret << hash
|
78
|
+
end
|
79
|
+
|
80
|
+
ret
|
81
|
+
end
|
82
|
+
|
83
|
+
# Gets the recent deleted revisions.
|
84
|
+
# @param user [String] See {#get_recent_changes}
|
85
|
+
# @param start [DateTime] See {#get_recent_changes}
|
86
|
+
# @param stop [DateTime] See {#get_recent_changes}
|
87
|
+
# @param limit [Int] See {#get_recent_changes}
|
88
|
+
# @see https://www.mediawiki.org/wiki/API:Deletedrevs MediaWiki
|
89
|
+
# Deletedrevs API Docs
|
90
|
+
# @since 0.10.0
|
91
|
+
# @return [Array<Hash>] All of the changes, with the following keys:
|
92
|
+
# timestamp, user, comment, title.
|
93
|
+
def get_recent_deleted_revisions(user = nil, start = nil, stop = nil,
|
94
|
+
limit = 500)
|
95
|
+
time_format = MediaWiki::Constants::TIME_FORMAT
|
96
|
+
prop = 'revid|parentid|user|comment|parsedcomment|minor|len|sh1|tags'
|
97
|
+
params = {
|
98
|
+
action: 'query',
|
99
|
+
list: 'deletedrevs',
|
100
|
+
drprop: prop,
|
101
|
+
limit: get_limited(limit)
|
102
|
+
}
|
103
|
+
params[:drstart] = start.strftime(time_format) unless start.nil?
|
104
|
+
params[:drend] = stop.strftime(time_format) unless stop.nil?
|
105
|
+
|
106
|
+
response = post(params)
|
107
|
+
ret = []
|
108
|
+
response['query']['deletedrevs'].each do |rev|
|
109
|
+
r = rev['revisions'][0]
|
110
|
+
hash = {
|
111
|
+
timestamp: DateTime.strptime(r['timestamp'], time_format),
|
112
|
+
user: r['user'],
|
113
|
+
comment: r['comment'],
|
114
|
+
title: rev['title']
|
115
|
+
}
|
116
|
+
ret << hash
|
117
|
+
end
|
118
|
+
|
119
|
+
ret
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module MediaWiki
|
2
|
+
module Query
|
3
|
+
module Lists
|
4
|
+
module Search
|
5
|
+
# Gets the amount of results for the search value.
|
6
|
+
# @param search_value [String] The thing to search for.
|
7
|
+
# @param namespace [Int] The namespace to search in.
|
8
|
+
# Defaults to 0 (the main namespace).
|
9
|
+
# @see https://www.mediawiki.org/wiki/API:Search MediaWiki Search API
|
10
|
+
# Docs
|
11
|
+
# @since 0.4.0
|
12
|
+
# @return [Int] The number of pages that matched the search.
|
13
|
+
def get_search_result_amount(search_value, namespace = 0)
|
14
|
+
params = {
|
15
|
+
action: 'query',
|
16
|
+
list: 'search',
|
17
|
+
srsearch: search_value
|
18
|
+
}
|
19
|
+
|
20
|
+
if MediaWiki::Constants::NAMEPSACES.value?(namespace)
|
21
|
+
params[:srnamespace] = namespace
|
22
|
+
else
|
23
|
+
params[:srnamespace] = 0
|
24
|
+
end
|
25
|
+
|
26
|
+
response = post(params)
|
27
|
+
response['query']['searchinfo']['totalhits']
|
28
|
+
end
|
29
|
+
|
30
|
+
# Gets an array containing page titles that matched the search.
|
31
|
+
# @param search_value [String] The thing to search for.
|
32
|
+
# @param namespace [Int] The namespace to search in.
|
33
|
+
# Defaults to 0 (the main namespace).
|
34
|
+
# @see https://www.mediawiki.org/wiki/API:Search MediaWiki Search API
|
35
|
+
# Docs
|
36
|
+
# @since 0.4.0
|
37
|
+
# @return [Array] The page titles that matched the search.
|
38
|
+
def get_search_results(search_value, namespace = 0)
|
39
|
+
params = {
|
40
|
+
action: 'query',
|
41
|
+
list: 'search',
|
42
|
+
srsearch: search_value
|
43
|
+
}
|
44
|
+
|
45
|
+
if MediaWiki::Constants::NAMESPACES.value?(namespace)
|
46
|
+
params[:srnamespace] = namespace
|
47
|
+
else
|
48
|
+
params[:srnamespace] = 0
|
49
|
+
end
|
50
|
+
|
51
|
+
response = post(params)
|
52
|
+
|
53
|
+
ret = []
|
54
|
+
response['query']['search'].each { |search| ret << search['title'] }
|
55
|
+
|
56
|
+
ret
|
57
|
+
end
|
58
|
+
|
59
|
+
# Searches the wiki by a prefix.
|
60
|
+
# @param prefix [String] The prefix.
|
61
|
+
# @param limit [Int] The maximum number of results to get, maximum of
|
62
|
+
# 100 for users and 200 for bots.
|
63
|
+
# @see https://www.mediawiki.org/wiki/API:Prefixsearch MediaWiki
|
64
|
+
# Prefixsearch API Docs
|
65
|
+
# @since 0.10.0
|
66
|
+
# @return [Array<String>] All of the page titles that match the search.
|
67
|
+
def get_prefix_search(prefix, limit = 100)
|
68
|
+
params = {
|
69
|
+
action: 'query',
|
70
|
+
list: 'prefixsearch',
|
71
|
+
pssearch: prefix,
|
72
|
+
limit: get_limited(limit, 100, 200)
|
73
|
+
}
|
74
|
+
|
75
|
+
response = post(params)
|
76
|
+
ret = []
|
77
|
+
response['query']['prefixsearch'].each do |result|
|
78
|
+
ret << result['title']
|
79
|
+
end
|
80
|
+
|
81
|
+
ret
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,210 @@
|
|
1
|
+
module MediaWiki
|
2
|
+
module Query
|
3
|
+
module Lists
|
4
|
+
module Users
|
5
|
+
# Gets user information. This method should rarely be used by
|
6
|
+
# normal users, unless they want a huge amount of user data at once.
|
7
|
+
# @param prop [String] The usprop parameter.
|
8
|
+
# @param username [String] The username to get info for. Optional.
|
9
|
+
# Defaults to the currently logged in user if ommitted.
|
10
|
+
# @see https://www.mediawiki.org/wiki/API:Users MediaWiki User Lists API
|
11
|
+
# Docs
|
12
|
+
# @since 0.3.0
|
13
|
+
# @return [String] Parsed full response if successful.
|
14
|
+
# @return [Nil] If the username is nil and the Butt is not logged in.
|
15
|
+
def get_userlists(prop, username = nil)
|
16
|
+
if username.nil?
|
17
|
+
if @logged_in
|
18
|
+
response = get_current_user_meta(prop)
|
19
|
+
else
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
else
|
23
|
+
params = {
|
24
|
+
action: 'query',
|
25
|
+
list: 'users',
|
26
|
+
usprop: prop,
|
27
|
+
ususers: username
|
28
|
+
}
|
29
|
+
|
30
|
+
response = post(params)
|
31
|
+
end
|
32
|
+
|
33
|
+
response
|
34
|
+
end
|
35
|
+
|
36
|
+
# Gets an array of all the user's groups.
|
37
|
+
# @param username [String] The username to get groups of. Optional.
|
38
|
+
# Defaults to the currently logged in user.
|
39
|
+
# @see get_userlists
|
40
|
+
# @since 0.3.0
|
41
|
+
# @return [Array] All of the user's groups.
|
42
|
+
# @return [Boolean] False if username is nil and not logged in.
|
43
|
+
def get_usergroups(username = nil)
|
44
|
+
ret = []
|
45
|
+
if username.nil?
|
46
|
+
if @logged_in
|
47
|
+
info = get_userlists('groups')
|
48
|
+
info['query']['userinfo']['groups'].each { |i| ret << i }
|
49
|
+
else
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
else
|
53
|
+
info = get_userlists('groups', username)
|
54
|
+
info['query']['users'].each do |i|
|
55
|
+
i['groups'].each { |g| ret.push(g) }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
ret
|
60
|
+
end
|
61
|
+
|
62
|
+
# Gets the user rights for the user.
|
63
|
+
# @param username [String] The user to get the rights for. Optional.
|
64
|
+
# Defaults to the currently logged in user.
|
65
|
+
# @see get_userlists
|
66
|
+
# @since 0.3.0
|
67
|
+
# @return [Array] All of the user's groups.
|
68
|
+
# @return [Boolean] False if username is nil and not logged in.
|
69
|
+
def get_userrights(username = nil)
|
70
|
+
ret = []
|
71
|
+
if username.nil?
|
72
|
+
if @logged_in
|
73
|
+
info = get_userlists('rights')
|
74
|
+
info['query']['userinfo']['rights'].each { |i| ret << i }
|
75
|
+
else
|
76
|
+
return false
|
77
|
+
end
|
78
|
+
else
|
79
|
+
info = get_userlists('rights', username)
|
80
|
+
info['query']['users'].each do |i|
|
81
|
+
i['rights'].each do |g|
|
82
|
+
ret.push(g)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
ret
|
88
|
+
end
|
89
|
+
|
90
|
+
# Gets contribution count for the user.
|
91
|
+
# @param username [String] The username to get the contribution count of.
|
92
|
+
# Optional. Defaults to the currently logged in user.
|
93
|
+
# @see get_userlists
|
94
|
+
# @since 0.3.0
|
95
|
+
# @return [Boolean] False if username is nil and not logged in.
|
96
|
+
# @return [Int] The number of contributions the user has made.
|
97
|
+
def get_contrib_count(username = nil)
|
98
|
+
count = nil
|
99
|
+
if username.nil?
|
100
|
+
if @logged_in
|
101
|
+
info = get_userlists('editcount')
|
102
|
+
count = info['query']['userinfo']['editcount']
|
103
|
+
else
|
104
|
+
return false
|
105
|
+
end
|
106
|
+
else
|
107
|
+
info = get_userlists('editcount', username)
|
108
|
+
info['query']['users'].each { |i| count = i['editcount'] }
|
109
|
+
end
|
110
|
+
|
111
|
+
count
|
112
|
+
end
|
113
|
+
|
114
|
+
# Gets when the user registered.
|
115
|
+
# @param username [String] The username to get the registration date and
|
116
|
+
# time of. Optional. Defaults to the currently logged in user.
|
117
|
+
# @see get_userlists
|
118
|
+
# @since 0.4.0
|
119
|
+
# @return [DateTime] The registration date and time as a DateTime object.
|
120
|
+
def get_registration_time(username = nil)
|
121
|
+
time = nil
|
122
|
+
# Do note that in Userinfo, registration is called registrationdate.
|
123
|
+
if username.nil?
|
124
|
+
if @logged_in
|
125
|
+
info = get_userlists('registrationdate')
|
126
|
+
time = info['query']['userinfo']['registrationdate']
|
127
|
+
else
|
128
|
+
return false
|
129
|
+
end
|
130
|
+
else
|
131
|
+
info = get_userlists('registration', username)
|
132
|
+
info['query']['users'].each { |i| time = i['registration'] }
|
133
|
+
end
|
134
|
+
|
135
|
+
DateTime.strptime(time, '%Y-%m-%dT%T')
|
136
|
+
end
|
137
|
+
|
138
|
+
# Gets the gender for the provded user.
|
139
|
+
# @param username [String] The user.
|
140
|
+
# @see get_userlists
|
141
|
+
# @since 0.4.0
|
142
|
+
# @return [String] The gender. 'male', 'female', or 'unknown'.
|
143
|
+
def get_user_gender(username)
|
144
|
+
gender = nil
|
145
|
+
info = get_userlists('gender', username)
|
146
|
+
info['query']['users'].each { |i| gender = i['gender'] }
|
147
|
+
|
148
|
+
gender
|
149
|
+
end
|
150
|
+
|
151
|
+
# Gets the latest contributions by the user until the limit.
|
152
|
+
# @param user [String] The username.
|
153
|
+
# @param limit [Int] See #get_all_images.
|
154
|
+
# @see https://www.mediawiki.org/wiki/API:Usercontribs MediaWiki
|
155
|
+
# User Contributions API Docs
|
156
|
+
# @since 0.8.0
|
157
|
+
# @return [Hash] Each contribution by its revid, containing the title,
|
158
|
+
# summary, total contribution size, and the size change relative to the
|
159
|
+
# previous edit.
|
160
|
+
def get_user_contributions(user, limit = 500)
|
161
|
+
params = {
|
162
|
+
action: 'query',
|
163
|
+
list: 'usercontribs',
|
164
|
+
ucuser: user,
|
165
|
+
uclimit: get_limited(limit),
|
166
|
+
ucprop: 'ids|title|comment|size|sizediff|flags|patrolled'
|
167
|
+
}
|
168
|
+
|
169
|
+
response = post(params)
|
170
|
+
|
171
|
+
ret = {}
|
172
|
+
response['query']['usercontribs'].each do |item|
|
173
|
+
ret[item['revid']] = {
|
174
|
+
title: item['title'],
|
175
|
+
summary: item['comment'],
|
176
|
+
total_size: item['size'],
|
177
|
+
diff_size: item['sizediff']
|
178
|
+
}
|
179
|
+
end
|
180
|
+
|
181
|
+
ret
|
182
|
+
end
|
183
|
+
|
184
|
+
# Gets the user's full watchlist. If no user is provided, it will use the
|
185
|
+
# currently logged in user, according to the MediaWiki API.
|
186
|
+
# @param user [String] The username.
|
187
|
+
# @param limit [Int] See #get_all_images.
|
188
|
+
# @see https://www.mediawiki.org/wiki/API:Watchlist MediaWiki Watchlist
|
189
|
+
# API Docs
|
190
|
+
# @since 0.8.0
|
191
|
+
# @return [Array] All the watchlist page titles.
|
192
|
+
def get_full_watchlist(user = nil, limit = 500)
|
193
|
+
params = {
|
194
|
+
action: 'query',
|
195
|
+
list: 'watchlist',
|
196
|
+
wlprop: 'title'
|
197
|
+
}
|
198
|
+
params[:wluser] = user unless user.nil?
|
199
|
+
|
200
|
+
response = post(params)
|
201
|
+
|
202
|
+
ret = []
|
203
|
+
response['query']['watchlist'].each { |t| ret << t['title'] }
|
204
|
+
|
205
|
+
ret
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
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.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eli Foster
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-12-
|
12
|
+
date: 2015-12-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httpclient
|
@@ -33,6 +33,7 @@ executables: []
|
|
33
33
|
extensions: []
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
|
+
- CHANGELOG.md
|
36
37
|
- lib/mediawiki-butt.rb
|
37
38
|
- lib/mediawiki/administration.rb
|
38
39
|
- lib/mediawiki/auth.rb
|
@@ -40,7 +41,25 @@ files:
|
|
40
41
|
- lib/mediawiki/constants.rb
|
41
42
|
- lib/mediawiki/edit.rb
|
42
43
|
- lib/mediawiki/exceptions.rb
|
43
|
-
- lib/mediawiki/query/lists.rb
|
44
|
+
- lib/mediawiki/query/lists/all.rb
|
45
|
+
- lib/mediawiki/query/lists/backlinks.rb
|
46
|
+
- lib/mediawiki/query/lists/categories.rb
|
47
|
+
- lib/mediawiki/query/lists/lists.rb
|
48
|
+
- lib/mediawiki/query/lists/log/block.rb
|
49
|
+
- lib/mediawiki/query/lists/log/delete.rb
|
50
|
+
- lib/mediawiki/query/lists/log/import.rb
|
51
|
+
- lib/mediawiki/query/lists/log/log.rb
|
52
|
+
- lib/mediawiki/query/lists/log/merge.rb
|
53
|
+
- lib/mediawiki/query/lists/log/move.rb
|
54
|
+
- lib/mediawiki/query/lists/log/newusers.rb
|
55
|
+
- lib/mediawiki/query/lists/log/patrol.rb
|
56
|
+
- lib/mediawiki/query/lists/log/rights.rb
|
57
|
+
- lib/mediawiki/query/lists/log/upload.rb
|
58
|
+
- lib/mediawiki/query/lists/miscellaneous.rb
|
59
|
+
- lib/mediawiki/query/lists/querypage.rb
|
60
|
+
- lib/mediawiki/query/lists/recent_changes.rb
|
61
|
+
- lib/mediawiki/query/lists/search.rb
|
62
|
+
- lib/mediawiki/query/lists/users.rb
|
44
63
|
- lib/mediawiki/query/meta/filerepoinfo.rb
|
45
64
|
- lib/mediawiki/query/meta/meta.rb
|
46
65
|
- lib/mediawiki/query/meta/siteinfo.rb
|