Wikipedia API(検索&パース)を作りました

 最近、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 フィルタ機能を付けました。

Wikipedia API(検索&パース)

http://ws.zubapita-t.com/

screenshot_01.jpg

screenshot_02.jpg

ソースコード・ダウンロード

wpsearch1.4.zip

●●プログラムの設置について●●

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に投入するも参照してください。

以上

関連記事

投稿者:

ともゆき@zubapita

ともゆき@zubapita

作ったモノ 雑誌:月刊アスキー(デスク)、アスキー.PC(副編集長)、インターネットアスキー(編集長)、アスキーPCエクスプローラー(編集長) Webサイト:東京グルメ/ライブドアグルメ、映画を語ろう、本が好き 著書:「Twitter 使いこなし術」「facebook 使いこなし術」 最近は、株式会社ブックウォーカーにて、「BWインディーズ」をやってます。

“Wikipedia API(検索&パース)を作りました” への7件のフィードバック

  1. ダウンロードして解凍しようとしたのですが、
    __MACOSXフォルダができますが、中の文字は化けてますし、
    できないようです。
    当方Win環境ですが、なにかわかりますれば・・・。

  2. おさるのおやこさん

    ダウンロードありがとうございます。
    すみません、Macで圧縮しちゃ駄目みたいですね。

    新バージョン1.4をWindoows XPで圧縮しました。
    ダウンロードしてみてください。

  3. 大変興味深く拝見させていただきました。

    xml2sqlですがwindows用のバイナリ版を使用してダンプデータを処理しましたが、「パイプは終了しました」のメッセージが表示され、処理が途中で終わってしまいます。
    ファイルは出力されますが、20kbほどのサイズです。

    windowsではxml2sqlを正常に動作させる事はできないのものでしょうか?

  4. 田川さん、おはようございます。

    どこかでWindowsを使ったブログ記事を見た気がしますが…。
    ちょっといま、検証する時間がないです。ごめんなさい。

    失礼ですが、コマンドプロンプト操作の知識はお持ちなんですよね?

  5. 畏れ入ります。
    wpsearch1.4.zip
    がダウンロードできないようになってしまっているようですが、
    公開を停止してしまったのでしょうか・・・?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>