人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

WikipediaのAPIについて
PHPでWeb APIの勉強を始めました。

http://ja.wikipedia.org/wiki/海軍兵学校卒業生一覧_(日本)
で一覧ページが表示されます。

このページをPHPのimplexml_load_file()を使って
xmlの文書でほしいのですが、こういう事は不可能なのでしょうか。

ちなみに
以下だとxmlが返ってきます。
1,2行目無視してください
<?php
require_once("apiconfig.php");
require_once("apifunc.php");
$keyword="アラブ種";
$keyword4url=urlencode($keyword);
$url="http://wikipedia.simpleapi.net/api?keyword=$keyword4url&output=xml";
$xml=simplexml_load_file($url);
print_r($xml);;
?>

*上記の「アラブ種」という文字をを、
「海軍兵学校卒業生一覧_(日本)」という文字に置き換えると、
Warning: が出てきて、xmlが表示されません。


●質問者: kohhi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● dyondyon
●0ポイント

コードには間違いはないようです。
おそらくファイル自体のエンコードがUTF-8以外になっているのだと思います。
TeraPadを使っているなら"ファイル"から"文字/改行コード指定保存"でUTF-8を選んで保存すればよいです。


2 ● oil999
●100ポイント

wikipedia.simpleapi.net/ はデータが古いので、ご質問にあるような新しく登録した語彙には対応していません。

「Wikipedia API(検索&パース)を作りました」が参考になります。
http://www.zubapita.jp/2009/03/30/wikipedia_search_api/


kohhiさんのコメント
早速お返事いただきありがとうございます。 「海軍兵学校卒業生一覧_(日本)」以外にも「政令指定都市市長一覧」 など、他にも欲しいデータがあり、結局パーサーを作らないと無理という事のように思います。 http://www.zubapita.jp/2009/03/30/wikipedia_search_api/ お教えいただきありがとうございます。 ダウンロードして動作確認しているところです。 (文字化け、が解消できません。)

oil999さんのコメント
文字化けなどどうしても解決できないところが残るようでしたら、問題箇所のPHPソースを開示して新しく質問を立て直すと、良い回答が得られると思います。 そもそもWikipediaに検索APIがないのが問題なので、Wikipediaページ(例:http://ja.wikipedia.org/wiki/%E6%B5%B7%E8%BB%8D%E5%85%B5%E5%AD%A6%E6%A0%A1%E5%8D%92%E6%A5%AD%E7%94%9F%E4%B8%80%E8%A6%A7_(%E6%97%A5%E6%9C%AC))そのものをスクレイピングするというのも一つの方法かと思います。

kohhiさんのコメント
とりあえず、DB定義しないと使えないみたいです。 少しやってみて、質問を立て直します。 その際もよろしくお願いします。

kohhiさんのコメント
大変参考になりました。 いただいたヒントで少し勉強してから再度質問を立て直します。

3 ● うぃんど
●100ポイント ベストアンサー

parser error : Document is emptyとなりますし、
http://wikipedia.simpleapi.net/ で入力してみても、
ブラウザのアドレス欄にエンコード後のアドレスを直接入れてみてもダメですね

http://wikipedia.simpleapi.net/api?keyword=%E6%B5%B7%E8%BB%8D%E5%85%B5%E5%AD%A6%E6%A0%A1%E5%8D%92%E6%A5%AD%E7%94%9F%E4%B8%80%E8%A6%A7%28%E6%97%A5%E6%9C%AC%29&output=xml

アラブ種については出ますので、プログラムコードの問題でも、
ましてや文字コードの問題などでもなく、
サーバーサイドのデータ更新が滞っていると考えるのが妥当でしょう

http://wikipedia.simpleapi.net/api?keyword=%E3%82%A2%E3%83%A9%E3%83%96%E7%A8%AE&output=xml

管理者ブログの更新も止まってます
http://www.simpleapi.net/blog/

WebAPIの練習ということなので、
データが無ければ「無し」と表示するようにプログラムを書き換えるといいでしょう

<?php
$keyword="海軍兵学校卒業生一覧(日本)";
$keyword4url=urlencode($keyword);
$url="http://wikipedia.simpleapi.net/api?keyword=$keyword4url&output=xml";
libxml_use_internal_errors(true);
if($xml=simplexml_load_file($url)) {
 echo '<pre>';
 print_r($xml);
 echo '</pre>';
} else {
 echo $url;
 echo '<br />取得失敗';
}
libxml_use_internal_errors(false);

以下マニュアル
http://php.net/manual/ja/function.simplexml-load-file.php
http://www.php.net/manual/ja/function.libxml-use-internal-errors.php


kohhiさんのコメント
プログラムまで書いて頂いてありがとうございます。

うぃんどさんのコメント
id:Cherenkov さんのAPIを叩くならuser_agentの偽装で対応 >|php| ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)'); $keyword="海軍兵学校卒業生一覧_(日本)"; $url = 'http://ja.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles=' . $keyword; echo $url; libxml_use_internal_errors(true); echo '<pre>'; if($xml=simplexml_load_file($url)) { print_r($xml); } else { print_r(libxml_get_errors()); } echo '</pre>'; libxml_use_internal_errors(false); ||< http://php.net/manual/ja/function.ini-set.php

kohhiさんのコメント
早速プログラムまで書いていただきありがとうございます。 http://sinkinkousoku.com/wiki01.php は、確かに出てきます。 $keywordを”海軍兵学校卒業生一覧_(日本)”から”政令指定都市市長一覧” に変えても、同じように結果が出てきます ”日本の大学別人名一覧”にすると、一覧がでてきません。 http://sinkinkousoku.com/wiki02.php これがわかれば、自分なりに整理して 新しく質問を立て直すします。 その際もよろしくお願いします。

Cherenkovさんのコメント
「Category:」を付ければ取れるようです。(カテゴリのリンクの取得はわからん) http://ja.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles=Category:%E6%97%A5%E6%9C%AC%E3%81%AE%E5%A4%A7%E5%AD%A6%E5%88%A5%E4%BA%BA%E5%90%8D%E4%B8%80%E8%A6%A7

うぃんどさんのコメント
APIのパラメータについて詳しいページを探してきました・・・ http://www.ibm.com/developerworks/jp/xml/library/x-phpwikipedia/index.html?ca=drs-

kohhiさんのコメント
これすごいです。 ありがとうございます。

kohhiさんのコメント
大変参考になりました。 いただいたヒントで少し勉強してから再度質問を立て直します。

4 ● Cherenkov
●100ポイント

wikipedia.simpleapi.netのサイト上から「海軍兵学校卒業生一覧_(日本)」を取得しようとして失敗するので単純にAPIの不備だと思います。(wikipedia.simpleapiってDB登録云々関係なくて、公式APIのラッパーじゃないの?)

以下のwikipedia apiを直接たたけばXMLを取得できます。(ブラウザで確認)

http://ja.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles=%E6%B5%B7%E8%BB%8D%E5%85%B5%E5%AD%A6%E6%A0%A1%E5%8D%92%E6%A5%AD%E7%94%9F%E4%B8%80%E8%A6%A7_%28%E6%97%A5%E6%9C%AC%29

simplexml_load_fileを使ったサンプルを書きたかったけどエラーで動かなかった。

参考

kohhiさんのコメント
早速お返事ありがとうございます。 API:Properties/ja を勉強してみます。

kohhiさんのコメント
大変参考になりました。 いただいたヒントで少し勉強してから再度質問を立て直します。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ