MediaWiki APIでWikipediaの情報を取得する

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>

参考サイト

関連エントリー

  1. SimpleAPIのWikipedia API
  2. TINAMI API
  3. PhoneGapお試し(iOS)
  4. 楽天ウェブサービス(RWS)を使ってアフィリエイトリンクをつくる(PHP/REST)
  5. Flickr API
This entry was posted in 未分類 and tagged , , , , , , . Bookmark the permalink.