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が表示されません。
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
コードには間違いはないようです。
おそらくファイル自体のエンコードがUTF-8以外になっているのだと思います。
TeraPadを使っているなら"ファイル"から"文字/改行コード指定保存"でUTF-8を選んで保存すればよいです。
wikipedia.simpleapi.net/ はデータが古いので、ご質問にあるような新しく登録した語彙には対応していません。
「Wikipedia API(検索&パース)を作りました」が参考になります。
http://www.zubapita.jp/2009/03/30/wikipedia_search_api/
とりあえず、DB定義しないと使えないみたいです。
少しやってみて、質問を立て直します。
その際もよろしくお願いします。
大変参考になりました。
いただいたヒントで少し勉強してから再度質問を立て直します。
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
これすごいです。
ありがとうございます。
大変参考になりました。
いただいたヒントで少し勉強してから再度質問を立て直します。
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を使ったサンプルを書きたかったけどエラーで動かなかった。
早速お返事ありがとうございます。
API:Properties/ja
を勉強してみます。
大変参考になりました。
いただいたヒントで少し勉強してから再度質問を立て直します。
これすごいです。
2012/02/18 16:46:39ありがとうございます。
大変参考になりました。
2012/02/20 20:23:41いただいたヒントで少し勉強してから再度質問を立て直します。