米国企業の株価チャート画像をサーバーに保存したいと思っています。

下記のようなPHPでいけると思ったのですがサーバーから大元のGIFにアクセスできません。
なにか方法はあるのでしょうか?
※Hatenaのtopページロゴなどは問題なくアクセスでき、保存できました。

$image_url = 'http://hoge.com/hoge.gif' ;
$file_path = './chart_image/' ;
$img = file_get_contents($image_url) ;
file_put_contents($file_path."hoge.gif", $img) ;


このページ内のチャートです。
http://jp.quote.com/us/stocks/chart.action?s=AAPL&chartUi.period=V&chartUi.bardensity=LOW&chartUi.bartype=CANDLE&chartUi.size=620x300&chartUi.minutes=60

チャート自体のURLです。
http://charts.quote.com/cis/qc?cont=AAPL&period=V&varminutes=60&size=620x300&bartype=CANDLE&bardensity=LOW&showvaluemarkers=false&showextendednames=true&showdatainheader=false

回答の条件
  • 1人2回まで
  • 登録:2009/04/24 22:51:29
  • 終了:2009/04/25 11:40:53

ベストアンサー

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752009/04/24 23:52:22

ポイント35pt

該当サイトにHTTPリクエストをいろいろ送って確認してみました。

このサイト自体は、サーブレットで構築されているようですが、どうやら、User-Agentを送らないとExceptionで落ちるバグが残っているようです。

そのため、User-Agentを何らかの形で送ってあげれば、取得できます。

file_get_contentsの場合は、どうやらUser-Agentを送らないようなので、サーバ側のエラーでうまく画像が取得できないようです。


どうするかですが、手っ取り早いのは、PEARのHTTP_Requestを使うことでしょうか。

HTTP_Requestだと、適当なUser-Agentをつけてアクセスしてくれるので、画像が取得できます。

こんな感じで取得で動くことは確認しています。

require_once('HTTP/Request.php');

$url = '画像へのURL';
$req =& new HTTP_Request($url);
$result = $req->sendRequest();
if (!PEAR::isError($result)) {
  $img = $req->getResponseBody();
  file_put_contents('./chart.gif', $img);
}

参考になれば。

id:recon

早速のご回答感謝いたします。問題なく表示・保存できました。

2009/04/25 11:38:34

その他の回答(1件)

id:tdoi No.1

tdoi回答回数174ベストアンサー獲得回数752009/04/24 23:52:22ここでベストアンサー

ポイント35pt

該当サイトにHTTPリクエストをいろいろ送って確認してみました。

このサイト自体は、サーブレットで構築されているようですが、どうやら、User-Agentを送らないとExceptionで落ちるバグが残っているようです。

そのため、User-Agentを何らかの形で送ってあげれば、取得できます。

file_get_contentsの場合は、どうやらUser-Agentを送らないようなので、サーバ側のエラーでうまく画像が取得できないようです。


どうするかですが、手っ取り早いのは、PEARのHTTP_Requestを使うことでしょうか。

HTTP_Requestだと、適当なUser-Agentをつけてアクセスしてくれるので、画像が取得できます。

こんな感じで取得で動くことは確認しています。

require_once('HTTP/Request.php');

$url = '画像へのURL';
$req =& new HTTP_Request($url);
$result = $req->sendRequest();
if (!PEAR::isError($result)) {
  $img = $req->getResponseBody();
  file_put_contents('./chart.gif', $img);
}

参考になれば。

id:recon

早速のご回答感謝いたします。問題なく表示・保存できました。

2009/04/25 11:38:34
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/04/25 08:59:47

ポイント35pt

ご質問のサイトからPHPで画像ファイルを取得する手段については、過去質問「PHPを使ってHTMLで画像表示させるようにしたいのですが・・・」で回答しました。参考にしてください。


当該サイトはUser-Agentを要求するので、過去質問で回答した方式で処理してみてください。

また、過去質問では png 画像がChunked形式でしたが、gif 画像も同様の可能があります。ご注意ください。

id:recon

早速のご回答感謝いたします。過去質問があったのですね。参考にさせていただきます。

2009/04/25 11:39:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません