1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#!/usr/bin/env ruby
require 'rest_client'
require 'json'
#require 'open-uri'
class MWApi
def initialize(api)
@api = api
@cookies = {}
end
def cookies
@cookies
end
def get(params = {})
params = params.merge({ :format => :json})
response = RestClient.get(@api, { :params => params, :cookies => @cookies })
@cookies.merge!(response.cookies)
JSON.parse(response)
end
def post(params = {}, payload = '')
params = params.merge({ :format => :json})
response = RestClient.post(@api, payload, { :params => params, :cookies => @cookies })
@cookies.merge!(response.cookies)
JSON.parse(response)
end
def login(user, pass, domain = nil)
params = { :action => :login, :lgname => user, :lgpassword => pass }
params.merge!({ :domain => domain }) unless domain.nil?
data = post(params)
if data['login']['result'] == 'NeedToken'
params.merge!({ :lgtoken => data['login']['token'] })
data = post(params)
end
return data
end
def logout
post({ :action => :logout })
end
def query(params = {})
post(params.merge({ :action => :query }))
end
def expandetemplates
end
def parse
end
def opensearch
end
def feedcontributions
end
def feedwatchlist
end
def help
end
def paraminfo
end
def rsd
end
def compare
end
def tokens
end
def purge
end
def setnotificationtimestamp
end
def rollback
end
def delete_by_title(titles = [], params = {})
data = query({:prop => :info, :inprop => '', :intoken => :delete, :titles => titles.join('|') })
_delete(data, params)
end
def delete_by_id(ids = [], params = {})
data = query({:prop => :info, :inprop => '', :intoken => :delete, :pageids => ids.join('|') })
_delete(data, params)
end
def _delete(data, params)
data['query']['pages'].each do |id,page|
print "Deleting page: #{page['title']}\n"
post(params.merge({ :action => :delete, :pageid => id, :token => page['deletetoken'] }))
end
end
def undelete
end
def protect
end
def block(users = [], params = {})
data = query({:prop => :info, :intoken => :block, :titles => users.map{|u| "User:#{u}"}.join('|') })
data['query']['pages'].each do |id,userpage|
print "Blocking #{userpage['title']}\n"
post(params.merge({
:action => :block,
:user => userpage['title'].sub(/^User:/,''),
:token => userpage['blocktoken'],
}))
end
end
def unblock
end
def move
end
def edit
end
def upload
end
def filerevert
end
def emailuser
end
def watch
end
def patrol(params = {})
post(params.merge({:action => :patrol}))
end
def import
end
def userrights
end
def options
end
end
|