Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
profanity-plugins/stable/wikipedia-prof.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
238 lines (193 sloc)
6.66 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Requires wikipedia API | |
pip install wikipedia | |
Example theme options (~/.local/share/profanity/plugin_themes): | |
[wikipedia] | |
error=red | |
search=bold_green | |
search.noresult=red | |
search.results=green | |
summary.nopage=red | |
summary.title=bold_green | |
summary.url=magenta | |
summary.text=cyan | |
page.nopage=red | |
page.title=bold_green | |
page.text=cyan | |
images.nopage=red | |
images=bold_green | |
images.url=magenta | |
links.nopage=red | |
links=bold_green | |
links.link=green | |
refs.nopage=red | |
refs=bold_green | |
refs.url=magenta | |
""" | |
import prof | |
import wikipedia | |
import os | |
import webbrowser | |
import requests | |
win = "Wikipedia" | |
page_ac = [] | |
link_ac = [] | |
def _open_browser(url): | |
savout = os.dup(1) | |
saverr = os.dup(2) | |
os.close(1) | |
os.close(2) | |
os.open(os.devnull, os.O_RDWR) | |
try: | |
webbrowser.open(url, new=2) | |
finally: | |
os.dup2(savout, 1) | |
os.dup2(saverr, 2) | |
def _handle_win_input(): | |
pass | |
def create_win(): | |
if prof.win_exists(win) == False: | |
prof.win_create(win, _handle_win_input) | |
def _update_autocomplete(): | |
prof.completer_add("/wikipedia page", page_ac) | |
prof.completer_add("/wikipedia summary", page_ac) | |
prof.completer_add("/wikipedia images", page_ac) | |
prof.completer_add("/wikipedia links", page_ac) | |
prof.completer_add("/wikipedia refs", page_ac) | |
def _search(search_terms): | |
global page_ac | |
results = wikipedia.search(search_terms) | |
create_win() | |
if len(results) > 0: | |
prof.win_show_themed(win, "wikipedia", "search", None, "Search results for \"" + search_terms + "\":") | |
for index, result in enumerate(results): | |
page_ac.append(result) | |
prof.win_show_themed(win, "wikipedia", "search.results", None, result) | |
_update_autocomplete() | |
else: | |
prof.win_show_themed(win, "wikipedia", "search.noresults", None, "No search results found for \"" + search_terms + "\"") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def _summary(page_str): | |
global link_ac | |
page = wikipedia.page(page_str) | |
create_win() | |
if not page: | |
prof.win_show_themed(win, "wikipedia", "summary.nopage", None, "No such page: \"" + page_str + "\"") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
return | |
link_ac.append(page.url) | |
prof.completer_add("/wikipedia open", link_ac) | |
prof.win_show_themed(win, "wikipedia", "summary.title", None, page.title) | |
prof.win_show_themed(win, "wikipedia", "summary.url", None, page.url) | |
summary = wikipedia.summary(page_str) | |
prof.win_show_themed(win, "wikipedia", "summary.text", None, summary) | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def _page(page_str): | |
page = wikipedia.page(page_str) | |
create_win() | |
if not page: | |
prof.win_show_themed(win, "wikipedia", "page.nopage", None, "No such page: \"" + page_str + "\"") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
return | |
prof.win_show_themed(win, "wikipedia", "page.title", None, page.title) | |
prof.win_show_themed(win, "wikipedia", "page.text", None, page.content) | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def _images(page_str): | |
global link_ac | |
page = wikipedia.page(page_str) | |
create_win() | |
if not page: | |
prof.win_show_themed(win, "wikipedia", "images.nopage", None, "No such page: \"" + page_str + "\"") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
return | |
prof.win_show_themed(win, "wikipedia", "images", None, "Images for " + page_str) | |
for image in page.images: | |
prof.win_show_themed(win, "wikipedia", "images.url", None, image) | |
link_ac.append(image) | |
prof.completer_add("/wikipedia open", link_ac) | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def _links(page_str): | |
global page_ac | |
page = wikipedia.page(page_str) | |
create_win() | |
if not page: | |
prof.win_show_themed(win, "wikipedia", "links.nopage", None, "No such page: \"" + page_str + "\"") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
return | |
prof.win_show_themed(win, "wikipedia", "links", None, "Links for " + page_str) | |
for link in page.links: | |
prof.win_show_themed(win, "wikipedia", "links.link", None, link) | |
page_ac.append(link) | |
_update_autocomplete() | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def _refs(page_str): | |
global link_ac | |
page = wikipedia.page(page_str) | |
create_win() | |
if not page: | |
prof.win_show_themed(win, "wikipedia", "refs.nopage", None, "No such page: \"" + page_str + "\"") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
return | |
prof.win_show_themed(win, "wikipedia", "refs", None, "References for " + page_str) | |
for ref in page.references: | |
prof.win_show_themed(win, "wikipedia", "refs.url", None, ref) | |
link_ac.append(ref) | |
prof.completer_add("/wikipedia open", link_ac) | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def cmd_wp(subcmd, arg): | |
try: | |
if subcmd == "search": _search(arg) | |
elif subcmd == "summary": _summary(arg) | |
elif subcmd == "page": _page(arg) | |
elif subcmd == "images": _images(arg) | |
elif subcmd == "links": _links(arg) | |
elif subcmd == "refs": _refs(arg) | |
elif subcmd == "open": _open_browser(arg) | |
except wikipedia.exceptions.WikipediaException as e: | |
create_win() | |
prof.win_show_themed(win, "wikipedia", "error", None, str(e)) | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
except requests.exceptions.ConnectionError: | |
create_win() | |
prof.win_show_themed(win, "wikipedia", "error", None, "Connection Error") | |
prof.win_show(win, "") | |
prof.win_focus(win) | |
def prof_init(version, status, account_name, fulljid): | |
synopsis = [ | |
"/wikipedia search <text>", | |
"/wikipedia summary <title>", | |
"/wikipedia page <title>", | |
"/wikipedia images <title>", | |
"/wikipedia links <title>", | |
"/wikipedia refs <title>", | |
"/wikipedia open <url>" | |
] | |
description = "Interact with wikipedia." | |
args = [ | |
[ "search <text>", "Search for pages" ], | |
[ "summary <title>", "Show summary for page" ], | |
[ "page <title>", "Show the whole page" ], | |
[ "images <title>", "Show images URLs for page" ], | |
[ "links <title>", "Show links to other pages from page" ], | |
[ "refs <title>", "Show external references for page" ], | |
[ "open <url>", "Open the a URL in the browser" ] | |
] | |
examples = [ | |
"/wikipedia search Iron Maiden" | |
] | |
prof.register_command("/wikipedia", 2, 2, synopsis, description, args, examples, cmd_wp) | |
prof.completer_add("/wikipedia", | |
[ "search", "summary", "page", "images", "links", "refs", "open" ] | |
) |