2011-03-19
Wikipedia のデータ取得方法について
ちょっと Wikipedia から情報を取得してコンテンツを作りたいと思ったので調べてみた。
ちょっとしたデータなら SimpleAPI という API で取得可能ですが、
取得出来るデータはかなり少なく、コンテンツを作る上では不向き。
で、何とか Wikipedia のデータをフルで取得出来ないかと考えている。
参考になったのは YARETOKO さんの記事。
まとめるとポイントは 2 つあるようです。
- Wikipedia API でデータを取得
- 取得したデータを Text_Wiki_Mediawiki でパースする
まず、Wikipedia で用意されている(?) API を使って Wikipedia のデータを取得する。
ただし取得したデータは XML 表記かつ Wiki 表記となっているので、次に Text_Wiki_Mediawiki という PEAR のライブラリを使ってパースする。
簡単に説明するとそんな感じ。
1. Wikipedia API でデータを取得
Wikipedia API については 気軽に開発メモさんの記事 が詳しかった。
なんでも
http://ja.wikipedia.org/wiki/特別:データ書き出し/[キーワード] (※もちろん日本語は URL エンコードして使います)
大好きなナインティナインさんの記事を取得してみることにする。
http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E3%83%87%E3%83%BC%E3%82%BF%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97/%E3%83%8A%E3%82%A4%E3%83%B3%E3%83%86%E3%82%A3%E3%83%8A%E3%82%A4%E3%83%B3 (※ http://ja.wikipedia.org/wiki/特別:データ書き出し/ナインティナイン)
こんな感じでしょうか。
サンプルプログラム
config.php
<?php // Wikipedia API の URL define('WIKIPEDIA_API_URL', 'http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E3%83%87%E3%83%BC%E3%82%BF%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97'); ?>
index.php
<?php /** * * Wikipedia からデータを取得するプログラム * */ /** * include files */ require_once dirname(__FILE__). '/config.php'; /** * main program */ // 取得するタイトル $search_title = 'ナインティナイン'; // ストリームコンテキストの生成 $stream_context = stream_context_create(array( 'http' => array( 'method' => 'GET', 'header' => 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', ), )); // データの取得 $wiki_data = file_get_contents(WIKIPEDIA_API_URL. '/'. urlencode($search_title) , false, $stream_context); // 結果出力 $wiki_data_encode = mb_detect_encoding($wiki_data); header('Content-Type: text/html; charset='. $wiki_data_encode); echo $wiki_data; ?>
データを取得するプログラムを作る上でのポイントが UserAgent を送信すること!
YARETOKO さんの記事 にもある通り、Wikipedia は UserAgent がリクエストに付与されていないと受け付けないらしい。ボット対策なのかな!?
で、ぎじゅつやさんの記事 を参考に作ってみたのが上。
早速実行してみる。
※出力結果をエディタで開いた
ちゃんと取得出来た!
2. 取得したデータを Text_Wiki_Mediawiki でパースする
続きはまた今度
トラックバック - http://d.hatena.ne.jp/harapeko_san/20110319/1300554990
リンク元
- 2 http://d.hatena.ne.jp/
- 2 http://d.hatena.ne.jp/noriboz/20101108/1289198049
- 2 http://www.google.co.jp/search?hl=&q=wiki データ取得&sourceid=navclient-ff&rlz=1B3GGLL_jaJP398JP398&ie=UTF-8
- 2 http://www.google.co.jp/search?q=wikipedia パース Text_Wiki_Mediawiki&btnG=検索&hl=ja&sa=2
- 2 http://www.google.co.jp/search?q=wikipedia+api&num=100&hl=ja&tbo=1&output=search&source=lnt&tbs=qdr:y&sa=X&ei=vQOMTYGDJNOWcYTZlPsJ&ved=0CAwQpwUoBQ
- 1 http://d.hatena.ne.jp/diarylist?mode=newbie
- 1 http://d.hatena.ne.jp/diarylist?of=50&mode=rss&type=public
- 1 http://d.hatena.ne.jp/harapeko_san
- 1 http://d.hatena.ne.jp/noriboz/20101108
- 1 http://d.hatena.ne.jp/noriboz/20101206/1291618751
