summaryrefslogtreecommitdiff
path: root/mwapi.rb
blob: ff7e79881fc6a28174ca5e170030ae90bf2bc66d (plain)
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
#!/usr/bin/env ruby
require 'rest_client'
require 'json'
#require 'open-uri'
require 'pp'
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
	end
	def import
	end
	def userrights
	end
	def options
	end
end