Scripts/wikipedia

56 lines
1.6 KiB
Plaintext
Raw Normal View History

2022-03-30 17:20:58 -04:00
#!/usr/bin/python3
import requests
import sys
import textwrap
def connection_error():
print("Could not contact wikipedia servers.")
sys.exit(1)
def page_search(string):
params = {
'q' : string,
'limit' : 1
}
try:
return requests.get('https://en.wikipedia.org/w/rest.php/v1/search/page', params).json()['pages']
except ConnectionError:
connection_error()
def get_page_with_summary(title):
try:
return requests.get('https://en.wikipedia.org/api/rest_v1/page/summary/' + title).json()
except ConnectionError:
connection_error()
def get_page_links(title):
params = {
'action' : 'query',
'titles' : title,
'prop' : 'links',
'format' : 'json'
}
try:
return list(requests.get('https://en.wikipedia.org/w/api.php', params).json()['query']['pages'].values())[0]['links']
except ConnectionError:
connection_error()
def main():
if not sys.argv[1:]:
print("Usage: wikipedia <list of search terms>")
sys.exit(1)
else:
result = page_search(' '.join(sys.argv[1:]))
if result:
page = get_page_with_summary(result[0]['title'])
if page['type'] == 'disambiguation':
print('Ambiguous result, please clarify:\n ' + '\n '.join([link['title'] for link in get_page_links(page['title'])]))
else:
print(page['title'] + ':\n\n' + textwrap.fill(page['extract'], width=80))
else:
print('No result found.')
sys.exit(1)
if __name__ == '__main__':
main()