SimpleAPIだと検索でヒットしないことがあったので、参考サイトを読んで試してみた。
最初、リクエストURL(http://ja.wikipedia.org/w/api.php?action=query&titles=xxxxx&prop=revisions&rvprop=content&redirects=1&format=xml)を作って、simpelxml_load_fileで取得しようとしたけど失敗するので、Zend Framework(Zend_Rest_Client)を使った。
得られたコンテンツはWikitextフォーマットで、HTMLへの変換にはPEAR::Text_Wikiが便利とあったので、PEAR::Text_WikiとPEAR::Text_Wiki_Mediawikiを使うと見やすくなった。
確認ページ:hello_mediawiki_api.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>MediaWiki API test</title>
</head>
<body>
<h1>MediaWiki API test</h1>
<form method="GET" action="">
<input type="text" name="keyword" size="40" value="" />
<input type="submit" value="検索" />
</form>
<br>
<?php
if (isset($_GET['keyword'])) {
require_once('Zend/Loader.php');
Zend_Loader::loadClass('Zend_Rest_Client');
require_once('Text/Wiki.php');
$wiki = &Text_Wiki::factory('Mediawiki');
$wiki->setRenderConf('xhtml', 'wikilink', 'view_url', 'http://ja.wikipedia.org/wiki/');
$wiki->setRenderConf('xhtml', 'wikilink', 'pages', false);
// 文字化け対策
$wiki->setFormatConf('Xhtml', 'translate', HTML_SPECIALCHARS);
try {
$wikipedia = new Zend_Rest_Client('http://ja.wikipedia.org/w/api.php');
$wikipedia->action('query');
$wikipedia->prop('revisions');
$wikipedia->rvprop('content');
$wikipedia->format('xml');
$wikipedia->redirects('1');
$wikipedia->titles($_GET['keyword']);
$result = $wikipedia->get();
$content = $result->query->pages->page->revisions->rev;
echo $wiki->transform($content, 'Xhtml');
}
catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
}
?>
</body>
</html>
参考サイト
- PHP と MediaWiki API を使ってウィキペディアの情報に接続する
- PEAR::Text_Wikiを使ったヘルパー – ぬかるむ日々
- API:Main page/ja – MediaWiki
関連エントリー