上記サイトで、5月21日2015年 (木)の部分の、中古住宅販売件数(季調済・年率)の右側の、
「チャート」リンクをクリック頂きますと、チャートが開かれるかと思います。
そのチャートをfile_get_contentsで取得したいのですが、どうも出来ません。
CHROMEにて生の送信ヘッダを取得し、それをPOSTするようにしても出来ませんでした。
コードは下記のようにしています。
http://climbi.com/b/4430/0
(長い部分は・・・で省略しています。)
CHROMEにて生の送信ヘッダを取得し、それをPOSTするようにしても出来ませんでした。
「出来ませんでした」というのは、エラーが出るとかではなく、取得したデータが期待したものじゃない、ということですよね?
ぼくもチャートを表示するときのリクエストを横取りして、試してみました(PHP じゃなくて Ruby ですけど)。
BODY のデータはこんな感じで、ヘッダは Cookie も含め、ほぼ空っぽの状態で送ると、
"loginwindowbanner1$txtUser" => "Login", "loginwindowbanner1$txtPhrase" => "Password", "fcc1$inpPos" => "384", "fcc1$frontsignalcomp2$txtSignalsName" => "", "fcc1$frontsignalcomp2$txtSignalsEmail" => "", "__VIEWSTATEGENERATOR" => "24E90658", "__VIEWSTATE" => "/wEPDwUKMTIxMDIxMzY2Nw9kFgICAQ9kFgQC・・・ "__EVENTVALIDATION" => "/wEdAIAD4yWVfvRkzI9If5m/sq6NQXVk・・・ "__EVENTTARGET" => "fcc1$dgrC$ctl05$ctl03", "__EVENTARGUMENT" => ""
こんな感じのデータが取得できました(全部で380行くらいあるところの 200行目くらい)。
<div id="usdjpy" style="display:block; position: absolute; margin-top: 46px; top: 5px; bottom: 0px; width: 100%;"> <!-- 121.149,121.16,121.162,121.149, 121.16,121.16,121.16,121.16, 121.16,121.166,121.173,121.16, ...
送信データを取るところを間違ってると思います。
質問に貼ったBODY のパラメータを使った場合には、一覧表のページが返ってきます。
ちなみに、__VIEWSTATE とか __EVENTVALIDATION の長いデータは、サイトから取った文字列を使わないと 500 Internal Server Error が返ってきました。
どのグラフを表示するかは __VIEWSTATE と __EVENTTARGET あたりの組み合わせで決まっているような感じがします。
ヘッダは、意識して入れてるのは User-Agent と、プロクシ用のパラメータです。
2015/06/23 11:54:15後、ライブラリが Content-Length を入れてるでしょう、きっと。
プロクシは関係ないでしょうし、User-Agent を送らなくても、取得できましたよ。
訂正。
2015/06/23 13:59:30コメントにあがったものを使ったら、Ruby でも 500 が返ってきました。
__VIEWSTATE と __EVENTVALIDATION 以下のものに変えてください。