[PHP-users 34464] Re: XMLデータ取得について
飯塚康至
iizuka @ aa.mbn.or.jp
2009年 3月 23日 (月) 16:36:47 JST
こんにちは飯塚と申します。
PHP5ならば
SimpleXMLが使えて
<?php
$xmlarr =simplexml_load_file('http://ri2.rois.com/YSIiEha1148tDU*glRAVlJEjKTE5RX5PD0j-*62*Zupzs/CTIB/RI3APISNAP?RIC=XAU=X&ENCODING=SHIFT_JIS&FORMAT=XML');
print("<pre>");
print_r($xmlarr);
print("</pre>");
?>
で
SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => XAU=X
[data_quality] => Real-time
)
[fid] => Array
(
[0] => 955.95
[1] => 957.15
[2] => 950.90
[3] => 952.90
[4] => Reuters
[5] => 956.00
[6] => 949.85
[7] => 16:29 Asia/Tokyo
[8] => 23 MAR 2009
)
)
なりました。参考になれば。4ならばPearのPear-XMLTreeあたりで。では
2009/3/23 山本 正浩 <yamamoto @ thinkmeta.jp>:
> yamamotoといいます。
>
> 興味があったので試してみました。
> 確かに同様のエラーになりました。
> Snoopyでのheaderとbodyの分離がうまくいっていないようです。
>
> 取得したXMLを自前のApache(Windows)に載せて、そのXMLを取得するように
> 試したところ、こちらはうまくいきました。
>
> 以下、fetch()した直後のobjをvar_dumpにかけた結果です。
> [エラーになるパターン]
> ------------------------------------------------------------
> object(Snoopy)#1 (41) {
> ["host"]=>
> string(12) "ri2.rois.com"
> ["port"]=>
> int(80)
> ["proxy_host"]=>
> string(0) ""
> ["proxy_port"]=>
> string(0) ""
> ["proxy_user"]=>
> string(0) ""
> ["proxy_pass"]=>
> string(0) ""
> ["agent"]=>
> string(13) "Snoopy v1.2.4"
> ["referer"]=>
> string(0) ""
> ["cookies"]=>
> array(0) {
> }
> ["rawheaders"]=>
> array(0) {
> }
> ["maxredirs"]=>
> int(5)
> ["lastredirectaddr"]=>
> string(0) ""
> ["offsiteok"]=>
> bool(true)
> ["maxframes"]=>
> int(0)
> ["expandlinks"]=>
> bool(true)
> ["passcookies"]=>
> bool(true)
> ["user"]=>
> string(0) ""
> ["pass"]=>
> string(0) ""
> ["accept"]=>
> string(56) "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"
> ["results"]=>
> string(2) "
> "
> ["error"]=>
> string(0) ""
> ["response_code"]=>
> string(16) "HTTP/1.0 200 OK
> "
> ["maxlength"]=>
> int(500000)
> ["read_timeout"]=>
> int(0)
> ["timed_out"]=>
> bool(false)
> ["status"]=>
> string(3) "200"
> ["temp_dir"]=>
> string(4) "/tmp"
> ["curl_path"]=>
> string(19) "/usr/local/bin/curl"
> ["_maxlinelen"]=>
> int(4096)
> ["_httpmethod"]=>
> string(3) "GET"
> ["_httpversion"]=>
> string(8) "HTTP/1.0"
> ["_submit_method"]=>
> string(4) "POST"
> ["_submit_type"]=>
> string(33) "application/x-www-form-urlencoded"
> ["_mime_boundary"]=>
> string(0) ""
> ["_redirectaddr"]=>
> bool(false)
> ["_redirectdepth"]=>
> int(0)
> ["_frameurls"]=>
> array(0) {
> }
> ["_framedepth"]=>
> int(0)
> ["_isproxy"]=>
> bool(false)
> ["_fp_timeout"]=>
> int(30)
> ["headers"]=>
> array(16) {
> [0]=>
> string(16) "HTTP/1.0 200 OK
> "
> [1]=>
> string(24) "Content-Type: text/html
> "
> [2]=>
> string(1) "
> "
> [3]=>
> string(44) "<?xml version="1.0" encoding="SHIFT_JIS" ?>
> "
> [4]=>
> string(1) "
> "
> [5]=>
> string(44) "<ric name="XAU=X" data_quality="Real-time">
> "
> [6]=>
> string(27) "<fid id="BID">954.50</fid>
> "
> [7]=>
> string(27) "<fid id="ASK">956.10</fid>
> "
> [8]=>
> string(29) "<fid id="BID_1">950.90</fid>
> "
> [9]=>
> string(29) "<fid id="ASK_1">952.90</fid>
> "
> [10]=>
> string(44) "<fid id="DSPLY_NAME">Reuters </fid>
> "
> [11]=>
> string(34) "<fid id="BID_HIGH_1">955.55</fid>
> "
> [12]=>
> string(33) "<fid id="BID_LOW_1">949.85</fid>
> "
> [13]=>
> string(40) "<fid id="TIMACT">15:49 Asia/Tokyo</fid>
> "
> [14]=>
> string(39) "<fid id="ACTIV_DATE">23 MAR 2009</fid>
> "
> [15]=>
> string(7) "</ric>
> "
> }
> }
> ------------------------------------------------------------
>
> [正常処理できるパターン]
> ------------------------------------------------------------
> object(Snoopy)#1 (41) {
> ["host"]=>
> string(18) "local.thinkmeta.jp"
> ["port"]=>
> int(80)
> ["proxy_host"]=>
> string(0) ""
> ["proxy_port"]=>
> string(0) ""
> ["proxy_user"]=>
> string(0) ""
> ["proxy_pass"]=>
> string(0) ""
> ["agent"]=>
> string(13) "Snoopy v1.2.4"
> ["referer"]=>
> string(0) ""
> ["cookies"]=>
> array(0) {
> }
> ["rawheaders"]=>
> array(0) {
> }
> ["maxredirs"]=>
> int(5)
> ["lastredirectaddr"]=>
> string(0) ""
> ["offsiteok"]=>
> bool(true)
> ["maxframes"]=>
> int(0)
> ["expandlinks"]=>
> bool(true)
> ["passcookies"]=>
> bool(true)
> ["user"]=>
> string(0) ""
> ["pass"]=>
> string(0) ""
> ["accept"]=>
> string(56) "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"
> ["results"]=>
> string(401) "<?xml version="1.0" encoding="SHIFT_JIS" ?>
>
> <ric name="XAU=X" data_quality="Real-time">
> <fid id="BID">954.40</fid>
> <fid id="ASK">955.60</fid>
> <fid id="BID_1">950.90</fid>
> <fid id="ASK_1">952.90</fid>
> <fid id="DSPLY_NAME">Reuters </fid>
> <fid id="BID_HIGH_1">955.15</fid>
> <fid id="BID_LOW_1">949.85</fid>
>
> <fid id="TIMACT">15:09 Asia/Tokyo</fid>
> <fid id="ACTIV_DATE">23 MAR 2009</fid>
> </ric>
>
>
> "
> ["error"]=>
> string(0) ""
> ["response_code"]=>
> string(17) "HTTP/1.1 200 OK
> "
> ["maxlength"]=>
> int(500000)
> ["read_timeout"]=>
> int(0)
> ["timed_out"]=>
> bool(false)
> ["status"]=>
> string(3) "200"
> ["temp_dir"]=>
> string(4) "/tmp"
> ["curl_path"]=>
> string(19) "/usr/local/bin/curl"
> ["_maxlinelen"]=>
> int(4096)
> ["_httpmethod"]=>
> string(3) "GET"
> ["_httpversion"]=>
> string(8) "HTTP/1.0"
> ["_submit_method"]=>
> string(4) "POST"
> ["_submit_type"]=>
> string(33) "application/x-www-form-urlencoded"
> ["_mime_boundary"]=>
> string(0) ""
> ["_redirectaddr"]=>
> bool(false)
> ["_redirectdepth"]=>
> int(0)
> ["_frameurls"]=>
> array(0) {
> }
> ["_framedepth"]=>
> int(0)
> ["_isproxy"]=>
> bool(false)
> ["_fp_timeout"]=>
> int(30)
> ["headers"]=>
> array(9) {
> [0]=>
> string(17) "HTTP/1.1 200 OK
> "
> [1]=>
> string(37) "Date: Mon, 23 Mar 2009 07:22:14 GMT
> "
> [2]=>
> string(41) "Server: Apache/2.0.63 (Win32) PHP/5.2.6
> "
> [3]=>
> string(46) "Last-Modified: Mon, 23 Mar 2009 07:22:08 GMT
> "
> [4]=>
> string(28) "ETag: "32c22-191-1fcef943"
> "
> [5]=>
> string(22) "Accept-Ranges: bytes
> "
> [6]=>
> string(21) "Content-Length: 401
> "
> [7]=>
> string(19) "Connection: close
> "
> [8]=>
> string(31) "Content-Type: application/xml
> "
> }
> }
> string(401) "<?xml version="1.0" encoding="SHIFT_JIS" ?>
>
> <ric name="XAU=X" data_quality="Real-time">
> <fid id="BID">954.40</fid>
> <fid id="ASK">955.60</fid>
> <fid id="BID_1">950.90</fid>
> <fid id="ASK_1">952.90</fid>
> <fid id="DSPLY_NAME">Reuters </fid>
> <fid id="BID_HIGH_1">955.15</fid>
> <fid id="BID_LOW_1">949.85</fid>
>
> <fid id="TIMACT">15:09 Asia/Tokyo</fid>
> <fid id="ACTIV_DATE">23 MAR 2009</fid>
> </ric>
>
>
> "
> object(SimpleXMLElement)#2 (2) {
> ["@attributes"]=>
> array(2) {
> ["name"]=>
> string(5) "XAU=X"
> ["data_quality"]=>
> string(9) "Real-time"
> }
> ["fid"]=>
> array(9) {
> [0]=>
> string(6) "954.40"
> [1]=>
> string(6) "955.60"
> [2]=>
> string(6) "950.90"
> [3]=>
> string(6) "952.90"
> [4]=>
> string(16) "Reuters "
> [5]=>
> string(6) "955.15"
> [6]=>
> string(6) "949.85"
> [7]=>
> string(16) "15:09 Asia/Tokyo"
> [8]=>
> string(11) "23 MAR 2009"
> }
> }
> ------------------------------------------------------------
>
> すみません、今のところここまでしか分かりません。
> コンテントタイプなども変えてみましたが、変化はありませんね。
>
>
> 2009/03/23 15:03 Minoru.Harada <harada @ acekoeki.co.jp>:
>> お世話になります。
>> Minoと申します。
>>
>> XMLのデータ取得について質問いたします。
>> XMLで提供されるデータを受信してブラウザに表示する
>> プログラムを作成することになりました。XMLは扱った
>> ことがなくインターネットで調べていたらSnoopy.class.php
>> という便利なものがあることを知りました。
>>
>> リクエストを出すと次のようなデータが取得できます。
>> ----------------------------------------------------------
>> <?xml version="1.0" encoding="SHIFT_JIS" ?>
>> - <ric name="JPY=X" data_quality="Real-time">
>> <fid id="BID">96.20</fid>
>> <fid id="ASK">96.25</fid>
>> <fid id="BID_1">95.92</fid>
>> <fid id="ASK_1">95.98</fid>
>> <fid id="DSPLY_NAME">Reuters</fid>
>> <fid id="BID_HIGH_1">96.55</fid>
>> <fid id="BID_LOW_1">95.43</fid>
>> <fid id="TIMACT">14:29 Asia/Tokyo</fid>
>> <fid id="ACTIV_DATE">23 MAR 2009</fid>
>> </ric>
>> ----------------------------------------------------------
>>
>> サイトに載っていたサンプルを参考に作成してみました。
>>
>> <?php
>> $req =
>> "http://ri2.rois.com/YSIiEha1148tDU*glRAVlJEjKTE5RX5PD0j-*62*Zupzs/CTIB/RI3A
>> PISNAP?RIC=XAU=X&ENCODING=SHIFT_JIS&FORMAT=XML";
>> require_once ('Snoopy.class.php');
>> $obj = new Snoopy;
>> $obj->fetch($req);
>> $data = $obj->results;
>> $xml = simplexml_load_string($data);
>> ?>
>>
>> $xmlにデータを展開するところでエラーになってしまいます。
>>
>> 【エラー内容】
>> Warning: Entity: line 2: parser error : Start tag expected, '<' not found in
>> C:\Program Files\Apache Group\Apache2\htdocs\kikinzoku\request.php on line
>> 11
>>
>> Warning: in C:\Program Files\Apache
>> Group\Apache2\htdocs\kikinzoku\request.php on line 11
>>
>> Warning: ^ in C:\Program Files\Apache
>> Group\Apache2\htdocs\kikinzoku\request.php on line 11
>>
>> どこが悪いのでしょうか?
>> よろしくお願いいたします。
>
> --
> -<Thinkmeta>------------------------------------------
> <?xml version="1.0" encoding="ISO-2022-JP" ?>
> <signature>
> <name>山本 正浩[Masahiro Yamamoto]</name>
> <mail>yamamoto @ thinkmeta.jp</mail>
> <web>http://www.thinkmeta.jp/</web>
> </signature>
> _______________________________________________
> PHP-users mailing list PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>
>
--
以上、宜しくお願いします。
-------------------------------------------------------------------------------
【みんなの研究生活 P-Lab(1.0)】http://www.acl-inc.co.jp/p-lab
飯塚 康至(明星大学非常勤講師・情報システム学会)
ITコーディネーター(0059222006C)
株式会社エイシーエル
東京都渋谷区代々木4丁目35番12号アーバン代々木302号室
TEL:03-5308-1141
FAX:03-5308-1142
-------------------------------------------------------------------------------
PHP-users メーリングリストの案内