Wikipedia API(検索&パース)を作りました
3月 30th, 2009
最近、Wikipediaのデータを活用したサービスが増えている。
ただし、先日WikipediaのダンプデータをDBに投入する で紹介したように、Wikipediaはサーバから叩けるAPIを提供していない。不定期にダンプデータが提供されているので、それを自分のサーバのデータベースに投入して使うことは可能なのだが、収録されているデータは、Wikiのマークアップがついたままの生テキストなので、使い勝手がよくない。
以前から提供されているSimpleAPI「Wikipedia」は、たぶんこのダンプデータを使って、独自に検索APIを提供しているのだと思うが、
- 複数の検索結果を一度に返してくる。
- 簡易な要約文しか提供されない。
という制約があって、Wikipediaに収録されている豊富なデータを活用するには、ちょっと足りない感じがする。
そこで、Wikipediaのマークアップを解釈して、XMLに変換して出力するプログラムを作成した。Wikipedia独特の右上に表示されているサマリーデータや、文中の表、見出しによる階層構造を解釈してXMLとして出力する。ちなみにXMLの要素名(HTMLでいうところのタグ名)は、日本語になることが多い。これでいいのかな? と思って調べたら、XMLの要素名にはアルファベットのほか、ひらがな、カタカナ、漢字も使えるそうだ。
SimpleAPIの真似をして、WebブラウザからはHTMLで、APIとしてはXMLで返すようになっている。
APIとして使うときは
http://ホスト名/wpsearch/index.php/?keywords=検索ワード&type=xml
で、結果が1つの場合はページの内容が、複数ある場合は前方一致検索結果の一覧が、XMLで返る。
複数の結果が返った場合は、一覧からリンクを取得して
http://ホスト名/wpsearch/index.php/?id=ページID&title=ページタイトル&type=xml
とアクセスすると、指定したページの内容がXMLで取得できる。–
アップデート履歴
- 2009/03/30 1.0 ファーストバージョン
- 2009/04/01 1.01 XML出力に<infos>(infobox)と<lead>(リード文)のみを返すshortモード(デフォルト)と、残りの全チャプターを返すfullモード(&size=full)を追加。
- 2009/04/01 1.1 完全一致検索モード(&search=equal)を追加。API利用サンプルを追加。検索結果が1件のときのHTML内のリンクのバグを解消。
- 2009/04/01 1.2 同一IPアドレスからの連続アクセスを禁止する機能を加えました(現在は5秒おきに設定)。
- 2009/04/04 1.3 フィルタ機能を付けました。
–
http://ws.zubapita-t.com/


–
ソースコード・ダウンロード
–
●●プログラムの設置について●●
WpSearchは、Wikipedia日本語版のダンプデータを格納したデータベースを検索し、結果を表示するプログラムです。
- XML形式で結果を出力させれば、Wikipedia検索APIとして、外部のサーバから利用できます。
- MySQLとPostgreSQLに対応しています。
- PHP-5.1以上が必要です。
- 特別な外部ライブラリを必要としません。
–
- 検索はページタイトルを前方一致で検索します。
- 検索結果が複数ある場合は、候補リストを表示します。
- page_idを&id=xxxxの形式で指定すると、そのページIDのテキストを表示します。
–
- 検索キーワード、page_idは、GETで受け付けます。
- &type=xmlと指定すると、ページの内容をXML形式で出力します。表形式の記述をパースし<カラム名>データ</カラム名>の形で返します。
–
●●Wikipediaダンプデータの投入について●●
【概要】
- WikipediaのサイトからXML形式のダンプデータを取得。
- xml2sqlコマンドを使って、MySQLもしくはPostgreSQL読み込み用データを作成し、読み込ませる。
–
【ダンプデータ】
http://download.wikimedia.org/jawiki/
latestフォルダから、「jawiki-latest-pages-articles.xml.bz2」をダウンロードして解答。
2009年1月版で約3.4GBのサイズ。
–
【xml2sql】
http://meta.wikimedia.org/wiki/Xml2sql
Mac OS XやLinuxはソースをダウンロードして
$ ./configure
$ make
$ sudo make install
で使用できるようになる。
*
Windowsは、バイナリ版が用意されている。
–
【PostgreSQL】
ホスト名:localhost
ユーザー名:mwiki
データベース名:mwiki
パスワード:なし
—-の場合。
–
ユーザーとデータベースの作成(面倒なときは、PhpPgAdminで..)
$ createuser mwiki
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
$ createdb -U mwiki -E UTF-8 mwiki
–
テーブルの作成
$ psql -U mwiki mwiki < wpsearch/sql/pgsql/tables.sql
–
投入用データの作成(PostgreSQL 8.3系の場合)
$ xml2sql -postgresql=8.3 jawiki-latest-pages-articles.xml
–
データの投入
$ psql -U mwiki mwiki < page.sql
$ psql -U mwiki mwiki < revision.sql
$ psql -U mwiki mwiki < text.sql
–
【MySQL】
ホスト名:localhost
ユーザー名:mwiki
データベース名:mwiki
パスワード:なし
—-の場合。
–
ユーザーとデータベースの作成(面倒なときは、PhpMyAdminで..)
$ mysqladmin create mwiki -u root -p
$ mysql -u root -p
Enter password:
mysql> GRANT ALL PRIVILEGES ON mwiki.* TO mwiki@localhost IDENTIFIED BY ” WITH GRANT OPTION;
mysql> \q
–
$ createuser mwiki
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
$ createdb -U mwiki -E UTF-8 mwiki
–
テーブルの作成
$ mysql -u mwiki -D mwiki < wpsearch/sql/mysql/tables.sql
–
投入用データの作成
$ xml2sql jawiki-latest-pages-articles.xml
–
データの投入
$ mysqlimport –fields-terminated-by=’\t’ –default-character-set=utf8 -u mwiki -d -L mwiki page.txt
$ mysqlimport –fields-terminated-by=’\t’ –default-character-set=utf8 -u mwiki -d -L mwiki revision.txt
$ mysqlimport –fields-terminated-by=’\t’ –default-character-set=utf8 -u mwiki -d -L mwiki text.txt
–
【プログラムの設置】
- ApacheのDocumentRoot以下もしくはUserDir以下の好きな場所に、WpSearchのアーカイブを解答したフォルダ「wpsearch」を置いてください。
- wpsearch/index.phpの33行目から38行目を使用するデータベースに合わせて修正してください。
- Webブラウザからwpsearch/index.phpにアクセスして、動作を確認してください。
【補足】
Wikipediaダンプデータの投入についてはWikipediaのダンプデータをDBに投入するも参照してください。
以上









[...] Wikipedia検索&パースAPIを先日公開したけど、やはり具体的な利用例がないと使い方がわからないだろう。 [...]
ダウンロードして解凍しようとしたのですが、
__MACOSXフォルダができますが、中の文字は化けてますし、
できないようです。
当方Win環境ですが、なにかわかりますれば・・・。
おさるのおやこさん
ダウンロードありがとうございます。
すみません、Macで圧縮しちゃ駄目みたいですね。
新バージョン1.4をWindoows XPで圧縮しました。
ダウンロードしてみてください。
大変興味深く拝見させていただきました。
xml2sqlですがwindows用のバイナリ版を使用してダンプデータを処理しましたが、「パイプは終了しました」のメッセージが表示され、処理が途中で終わってしまいます。
ファイルは出力されますが、20kbほどのサイズです。
windowsではxml2sqlを正常に動作させる事はできないのものでしょうか?
田川さん、おはようございます。
どこかでWindowsを使ったブログ記事を見た気がしますが…。
ちょっといま、検証する時間がないです。ごめんなさい。
失礼ですが、コマンドプロンプト操作の知識はお持ちなんですよね?
[...] [2012/01/04 0:52:42]: http://www.zubapita.jp/2009/03/30/wikipedia_search_api/ [...]