カテゴリー
Raspberry Pi

Wikipediaで検索するPythonコード

Wikipediaで検索するPythonプログラムを作ってみました。

今日は、Wikipediaで検索するPythonプログラムを作ってみました。

Wikipediaでは、JSON形式で応答するAPIが公開されていることを知りました。

参考文献:https://ja.wikipedia.org/w/api.php

そこで、以下のようなプログラムで検索してみました。

#!/usr/bin/env python3
# coding: utf-8
# Example 08 IoT連携の基本 HTTP GET Wikipedia情報の取得

# 参考文献:https://ja.wikipedia.org/w/api.php

from sys import argv
import urllib.request
import urllib.parse
import json

keyword = 'ウィキペディア'

print('Usage:', argv[0], '検索キーワード') 

if len(argv) >= 2:
    keyword = argv[1]

url_s = 'http://ja.wikipedia.org/w/api.php?'
url_s += 'format=json' + '&'
url_s += 'action=query' + '&'
url_s += 'prop=extracts' + '&'
url_s += 'exintro' + '&'
url_s += 'explaintext' + '&'
url_s += 'titles='
url_s += urllib.parse.quote(keyword)
print(url_s)

try:
    res = urllib.request.urlopen(url_s)
    res_s = res.read().decode()
    res.close()
    res_dict = json.loads(res_s)
except Exception as e:
    print(e)
    exit()

# pages_dict = res_dict['query']['pages']
query_dict = res_dict.get('query')
pages_dict = query_dict.get('pages')
for pageid in pages_dict:
    # extract = pages_dict[pageid]['extract']
    pageid_dict = pages_dict.get(pageid)
    extract = pageid_dict.get('extract')
    if extract == None or extract == '':
        print('見つかりませんでした。',pageid)
    else:
        print(extract.split('\n')[0])

https://github.com/bokunimowakaru/iot/blob/master/learning/example08_htget_wiki.py

以下は、実行結果です。

pi@metal:~/iot/learning $ ./example08_htget_wiki.py 百科事典
Usage: ./example08_htget_wiki.py 検索キーワード
http://ja.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&titles=%E7%99%BE%E7%A7%91%E4%BA%8B%E5%85%B8
百科事典(ひゃっかじてん、拉: encyclopaedia)とは、あらゆる科目にわたる知識を集め、これを部門別やアルフ ァベット順・五十音順などに配列し、解説を記した書物のこと。「百科」と略記されることもある。
pi@metal:~/iot/learning $

応用として、音声認識で入力した内容をWikipediaで検索し、その結果を音声合成で再生するといった使い方が考えられます。

by ボクにもわかるRaspberry Pi
https://bokunimo.net/raspi/

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es