Commit 67341e00d00077ff5b081657095eb81a68fb6279
- Diff rendering mode:
- inline
- side by side
ChangeLog
(6 / 0)
|   | |||
| 1 | 2009-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 | |||
| 1 | 7 | 2009-07-02 Krister Svanlund <krister.svanlund@gmail.com> | |
| 2 | 8 | ||
| 3 | 9 | * kofoo_mediawiki.py (do_wiki_get_list): Added command for retrieving lists to IRC. |
kofoo_mediawiki.py
(74 / 12)
|   | |||
| 86 | 86 | if args: | |
| 87 | 87 | if args[0] == 'get' and args[1:]: | |
| 88 | 88 | ### 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:]: | ||
| 91 | 91 | m = get_pat.match(' '.join(args[2:])) | |
| 92 | 92 | if m: | |
| 93 | 93 | tablename = m.group(2) | |
| 94 | 94 | pagename = m.group(5) | |
| 95 | 95 | return do_wiki_get_table(bot, server, sender, target, pagename, tablename) | |
| 96 | elif args[1] == 'list': | ||
| 96 | elif args[1] == 'list' and args[2:]: | ||
| 97 | 97 | m = get_pat.match(' '.join(args[2:])) | |
| 98 | 98 | if m: | |
| 99 | 99 | listname = m.group(2) | |
| 100 | 100 | pagename = m.group(5) | |
| 101 | 101 | return do_wiki_get_list(bot, server, sender, target, pagename, listname) | |
| 102 | elif args[1] == 'section': | ||
| 102 | elif args[1] == 'section' and args[2:]: | ||
| 103 | 103 | m = get_pat.match(' '.join(args[2:])) | |
| 104 | 104 | if m: | |
| 105 | 105 | sectionname = m.group(2) | |
| 106 | 106 | pagename = m.group(5) | |
| 107 | 107 | 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) | ||
| 108 | 113 | else: | |
| 109 | 114 | bot.respond(server, sender, target, "\x02%s\x02 is not a valid argument." % args[1]) | |
| 110 | 115 | return False | |
| … | … | ||
| 133 | 133 | else: | |
| 134 | 134 | bot.respond(server, sender, target, "\x02%s\x02 is not a valid argument or not enough arguments." % args[1]) | |
| 135 | 135 | 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 | ||
| 136 | 167 | else: | |
| 137 | 168 | bot.respond(server, sender, target, "\x02%s\x02 is not a valid argument or not enough arguments." % args[0]) | |
| 138 | 169 | return False | |
| … | … | ||
| 175 | 175 | # | |
| 176 | 176 | #### | |
| 177 | 177 | ||
| 178 | def 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 | |||
| 178 | 190 | def 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|)') | ||
| 180 | 192 | args = ' '.join(args) | |
| 181 | 193 | print args | |
| 182 | 194 | m = add_table_pat.match(args) | |
| … | … | ||
| 218 | 218 | return False | |
| 219 | 219 | ||
| 220 | 220 | def 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|)') | ||
| 222 | 222 | m = add_to_table_pat.match(' '.join(args)) | |
| 223 | 223 | if m: | |
| 224 | 224 | tablename = m.group(2) | |
| … | … | ||
| 244 | 244 | return False | |
| 245 | 245 | ||
| 246 | 246 | def 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|)') | ||
| 248 | 248 | m = add_to_list_pat.match(' '.join(args)) | |
| 249 | 249 | if m: | |
| 250 | 250 | listname = m.group(2) | |
| … | … | ||
| 258 | 258 | return False | |
| 259 | 259 | ||
| 260 | 260 | def 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'([\"\']?)(.+) | ||
| 262 | 262 | m = add_to_page_pat.match(' '.join(args)) | |
| 263 | 263 | if m: | |
| 264 | 264 | pagename = m.group(2) | |
| … | … | ||
| 270 | 270 | return False | |
| 271 | 271 | ||
| 272 | 272 | def 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|)') | ||
| 274 | 274 | m = add_to_section_pat.match(' '.join(args)) | |
| 275 | 275 | if m: | |
| 276 | 276 | sectionname = m.group(2) | |
| … | … | ||
| 283 | 283 | return False | |
| 284 | 284 | ||
| 285 | 285 | def 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|)') | ||
| 289 | 289 | m = add_section_parent_pat.match(' '.join(args)) | |
| 290 | 290 | if m: | |
| 291 | 291 | sectionname = m.group(2) | |
| … | … | ||
| 398 | 398 | ||
| 399 | 399 | exp_end_of_section = r'(\n\s*?=+\s*%s\s*=+\s*\n.*)(\n+\s*=+)' | |
| 400 | 400 | exp_start_of_section = r'(\n\s*?=+\s*%s\s*=+\s*)(\n.*?\n)' | |
| 401 | |||
| 402 | def 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 | ||
| 401 | 415 | ||
| 402 | 416 | def mw_add_to_page(pagename, parentsection, text_to_add, summary, at_end): | |
| 403 | 417 | print "Add text to '%s'." % text_to_add |

