[PHP-users 34462] Re: XMLデータ取得について
山本 正浩
yamamoto @ thinkmeta.jp
2009年 3月 23日 (月) 16:21:52 JST
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 メーリングリストの案内