Commit 67341e00d00077ff5b081657095eb81a68fb6279

  • avatar
  • Krister Svanlund <adsum @BIG…SH.(none)>
  • Fri Jul 03 03:15:40 CEST 2009
  • Tree SHA1: d53fbb9
  • Parent SHA1: 51bc426 (MediaWiki: Added 'add' command to wiki for adding to list, tables and sections. Also for adding tables and lists.)
  • raw diff | raw patch
MediaWiki: Added 'search' and 'get url' command.
ChangeLog
(6 / 0)
  
12009-07-03 Krister Svanlund <krister.svanlund@gmail.com>
2
3 * kofoo_mediawiki.py (mw_get_url): Added function for getting the URL to a
4 specific wiki-article.
5 (do_wiki): Added search functionality for getting links to articles.
6
172009-07-02 Krister Svanlund <krister.svanlund@gmail.com>
28
39 * kofoo_mediawiki.py (do_wiki_get_list): Added command for retrieving lists to IRC.
  
8686 if args:
8787 if args[0] == 'get' and args[1:]:
8888 ### wiki get table|list|section "itemname" on "pagename" ###
89 get_pat = re.compile(r'([\"\']?)(.*?)\1 (on|from) ([\"\']?)(\S+)\4')
90 if args[1] == 'table':
89 get_pat = re.compile(r'([\"\']?)(.*?) (on|from) ([\"\']?)(.+)\4')
90 if args[1] == 'table' and args[2:]:
9191 m = get_pat.match(' '.join(args[2:]))
9292 if m:
9393 tablename = m.group(2)
9494 pagename = m.group(5)
9595 return do_wiki_get_table(bot, server, sender, target, pagename, tablename)
96 elif args[1] == 'list':
96 elif args[1] == 'list' and args[2:]:
9797 m = get_pat.match(' '.join(args[2:]))
9898 if m:
9999 listname = m.group(2)
100100 pagename = m.group(5)
101101 return do_wiki_get_list(bot, server, sender, target, pagename, listname)
102 elif args[1] == 'section':
102 elif args[1] == 'section' and args[2:]:
103103 m = get_pat.match(' '.join(args[2:]))
104104 if m:
105105 sectionname = m.group(2)
106106 pagename = m.group(5)
107107 return do_wiki_get_section(bot, server, sender, target, pagename, sectionname)
108 elif args[1] == 'url' and args[2:]:
109 m = re.match(r'([\"\']?)(.*?)\1', ' '.join(args[2:]))
110 if m:
111 pagename = m.group(2)
112 return do_wiki_get_url(bot, server, sender, target, pagename)
108113 else:
109114 bot.respond(server, sender, target, "\x02%s\x02 is not a valid argument." % args[1])
110115 return False
133133 else:
134134 bot.respond(server, sender, target, "\x02%s\x02 is not a valid argument or not enough arguments." % args[1])
135135 return False
136 elif args[0] == 'search' and args[1:]:
137 m = re.match(r'([\"\']?)(.*?)\1', ' '.join(args[1:]))
138 if m and m.group(2).strip():
139 search_terms = m.group(2)
140 if type(search_terms) is not unicode:
141 if '\xc3' in search_terms:
142 search_terms = search_terms.decode("utf-8")
143 else:
144 search_terms = search_terms.decode("latin-1")
145 try:
146 bot.respond(server, sender, target, "\x02Search results:\x02")
147 results = [r['title'] for r in wiki_site.search(search_terms)]
148 width = max([len(r.encode("latin-1")) for r in results])
149 for result in results:
150 url = mw_get_url(result)
151 if url:
152 res_string = " {0:{1}} : {2}".format(result.encode("latin-1"), width, url)
153 ### Recode the string from latin-1 to utf-8 ###
154 res_string = res_string.decode("latin-1").encode("utf-8")
155 bot.respond(server, sender, target, res_string)
156 else:
157 bot.respond(server, sender, target, " {0}".format(result))
158 bot.respond(server, sender, target, "End of results.")
159 except Exception, e:
160 print " - Search failed: %s" % str(e)
161 bot.respond(server, sender, target, "Search failed.")
162 return True
163 else:
164 print " - Could not parse arguments."
165 bot.respond(server, sender, target, "Incorrect search.")
166 return False
136167 else:
137168 bot.respond(server, sender, target, "\x02%s\x02 is not a valid argument or not enough arguments." % args[0])
138169 return False
175175#
176176####
177177
178def do_wiki_get_url(bot, server, sender, target, pagename):
179 print " + Get URL for '%s'." % pagename
180 url = mw_get_url(pagename)
181 if url:
182 print " + Got url: %s" % url
183 bot.respond(server, sender, target, url)
184 return True
185 else:
186 print " - Failed to get url."
187 bot.respond(server, sender, target, "Could not get the url for '%s'." % pagename)
188 return False
189
178190def do_wiki_add_table(bot, server, sender, target, args):
179 add_table_pat = re.compile(r'([\"\']?)(.*?)\1 in ([\"\']?)(.*?)\3 on ([\"\']?)(\S+)\5[:;] ([\"\']?)(.+)\7(\sat top|)')
191 add_table_pat = re.compile(r'([\"\']?)(.*?)\1 in ([\"\']?)(.*?)\3 on ([\"\']?)(.+)\5[:;] ([\"\']?)(.+)\7(\sat top|)')
180192 args = ' '.join(args)
181193 print args
182194 m = add_table_pat.match(args)
218218 return False
219219
220220def do_wiki_add_to_table(bot, server, sender, target, args):
221 add_to_table_pat = re.compile(r'([\"\']?)(.*?)\1 on ([\"\']?)(\S+)\3[:;] (.+)(\sat top|)')
221 add_to_table_pat = re.compile(r'([\"\']?)(.*?)\1 on ([\"\']?)(.+)\3[:;] (.+)(\sat top|)')
222222 m = add_to_table_pat.match(' '.join(args))
223223 if m:
224224 tablename = m.group(2)
244244 return False
245245
246246def do_wiki_add_to_list(bot, server, sender, target, args):
247 add_to_list_pat = re.compile(r'([\"\']?)(.*?)\1 on ([\"\']?)(\S+)\3[:;] ([\"\']?)(.*?)\5(\sat top|)')
247 add_to_list_pat = re.compile(r'([\"\']?)(.*?)\1 on ([\"\']?)(.+)\3[:;] ([\"\']?)(.*?)\5(\sat top|)')
248248 m = add_to_list_pat.match(' '.join(args))
249249 if m:
250250 listname = m.group(2)
258258 return False
259259
260260def do_wiki_add_to_page(bot, server, sender, target, args):
261 add_to_page_pat = re.compile(r'([\"\']?)(\S+)
261 add_to_page_pat = re.compile(r'([\"\']?)(.+)
262262 m = add_to_page_pat.match(' '.join(args))
263263 if m:
264264 pagename = m.group(2)
270270 return False
271271
272272def do_wiki_add_to_section(bot, server, sender, target, args):
273 add_to_section_pat = re.compile(r'([\"\']?)(.*?)\1 on ([\"\']?)(\S+)\3[:;] ([\"\']?)(.*?)\5(\sat top|)')
273 add_to_section_pat = re.compile(r'([\"\']?)(.*?)\1 on ([\"\']?)(.+)\3[:;] ([\"\']?)(.*?)\5(\sat top|)')
274274 m = add_to_section_pat.match(' '.join(args))
275275 if m:
276276 sectionname = m.group(2)
283283 return False
284284
285285def do_wiki_add_section(bot, server, sender, target, args):
286 add_section_pat = re.compile(r'([\"\']?)(.*?)\1 (to|on) ([\"\']?)(\S+)\4(\sat top|)')
287 add_section_level_pat = re.compile(r'([\"\']?)(.*?)\1 level ([0-9]+) (to|on) ([\"\']?)(\S+)\5(\sat top|)')
288 add_section_parent_pat = re.compile(r'([\"\']?)(.*?) below ([\"\']?)(.*?)\3 (to|on) ([\"\']?)(\S+)\6
286 add_section_pat = re.compile(r'([\"\']?)(.*?) (to|on) ([\"\']?)(.+)\4
287 add_section_level_pat = re.compile(r'([\"\']?)(.*?)\1 level ([0-9]+) (to|on) ([\"\']?)(.+)\5(\sat top|)')
288 add_section_parent_pat = re.compile(r'([\"\']?)(.*?)\1 below ([\"\']?)(.*?)\3 (to|on) ([\"\']?)(.+)\6(\sat top|)')
289289 m = add_section_parent_pat.match(' '.join(args))
290290 if m:
291291 sectionname = m.group(2)
398398
399399exp_end_of_section = r'(\n\s*?=+\s*%s\s*=+\s*\n.*)(\n+\s*=+)'
400400exp_start_of_section = r'(\n\s*?=+\s*%s\s*=+\s*)(\n.*?\n)'
401
402def mw_get_url(pagename):
403 if type(pagename) is not unicode:
404 if '\xc3' in pagename:
405 pagename = pagename.decode("utf-8")
406 else:
407 pagename = pagename.decode("latin-1")
408 import urllib
409 pagename = urllib.quote(pagename.encode("latin-1"))
410 norm_title = mwclient.page.Page.normalize_title(pagename)
411 firstpage = wiki_site.site['base']
412 page_base = firstpage[:firstpage.rfind('/')+1]
413 url = page_base+norm_title
414 return url
401415
402416def mw_add_to_page(pagename, parentsection, text_to_add, summary, at_end):
403417 print "Add text to '%s'." % text_to_add