[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 メーリングリストの案内