海外の株価チャートを運営するサイトに表示させるには、どうしたら良いでしょうか?直リンクだと表示できます。http://bit.ly/mRW4rz しかし、こちらhttp://www.w-stock.biz/ のサイトに表示させようとすると出来ません。以前はこのPHPプログラムを使い読み込ませていました。http://bit.ly/oLYZy5 しかし表示されなくなってしまったので、どうしたら良いか頭を悩ませています。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/09/29 18:16:36
  • 終了:2011/10/05 18:37:04

回答(1件)

id:a-kuma3 No.1

a-kuma3回答回数4469ベストアンサー獲得回数18442011/10/04 23:43:19

ポイント300pt

PHP のプログラムでは、グラフのイメージが正しく取れてたのに、<img> で同じリクエストを出すようにしたら、イメージが取得できなくなった、ということですよね?


<img> を使うと、Referer: が、それを抱えているページのものになるのですが、それがはじかれて 403 になっているようです。


以下、telnet で試した結果です。

<img> を使ったときのヘッダを模したもの。

GET /esignalprod//esigchartspon?cont=NKD+Z1&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=HIGH&showextendednames=true HTTP/1.1

Host: quotes.esignal.com

Referer: http://www.w-stock.biz/

その応答。

HTTP/1.1 403 Invalid Referrer

Server: Resin/3.0.23

Content-Type: text/html

Transfer-Encoding: chunked

Date: Tue, 04 Oct 2011 14:36:45 GMT

ステータス 403 が返される。Referer: が問題らしいことが、ステータスの後の文字列で分かる。


Referer: を quotes.esignal.com にしたもの (PHP のプログラムでやってたこと)。

GET /esignalprod//esigchartspon?cont=NKD+Z1&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=HIGH&showextendednames=true HTTP/1.1

Host: quotes.esignal.com

Referer: http://quotes.esignal.com/

その応答。

HTTP/1.1 200 OK

Server: Resin/3.0.23

Content-Type: image/png

Transfer-Encoding: chunked

Date: Tue, 04 Oct 2011 14:29:41 GMT

正しくイメージを取得できる。


直リンク相当のヘッダ (Referer: が無い) の場合。

GET /esignalprod//esigchartspon?cont=NKD+Z1&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=HIGH&showextendednames=true HTTP/1.1

Host: quotes.esignal.com

その応答。

HTTP/1.1 200 OK

Server: Resin/3.0.23

Content-Type: image/png

Transfer-Encoding: chunked

Date: Tue, 04 Oct 2011 14:39:28 GMT

これでも、正しくイメージを取得できる。


<img> を使う限りは、ヘッダを自由にできないので、PHP のプログラムを介してイメージを取得するしかないと思います。

id:idetuyo

a-kuma3さま

ありがとうございます。

質問者のidetuyoと申します。

詳細のご回答誠にありがとうございます。

以前、以下のようなPHPプログラムを解して

イメージを取得していたのですが・・・

仕様が変ったのか、イメージ取得できなくなってしまいました。

プログラムは以下の通りです。

こちらのPHPプログラムでなく

別のプログラムでイメージ取得は出来ないでしょうか?

恐れ入りますが、アドバイス頂けたら幸いです。

$type = ‘Content-type: image/png’; //画像データのMIME-type

$host = ‘charts.marketcenter.com’; //目的のホスト

$path = ‘/cis/cbotcis?cont=NKD%20Z1&period=V&bartype=CANDLE&bardensity=MEDIUM&showextendednames=true&headerbackground=255,255,255&headerforeground=0,0,0&headerdatacolor=0,0,0&size=650X314&varminutes=5

‘; //目的のパス

$fp = fsockopen($host, 80, $errno, $errstr, 30);

if (! $fp) {

echo “$errstr ($errno)
\n”;

} else {

$out = “GET $path HTTP/1.1\r\n”;

$out .= “Host: $host\r\n”;

$out .= “User-Agent: Mozilla/5.0\r\n”;

$out .= “Connection: Close\r\n\r\n”;

fwrite($fp, $out);

//HTTPヘッダを読み飛ばす

while (! feof($fp)) {

$headers = fgets($fp, 8192);

if (trim($headers) == ”) {

break;

}

}

//画像を読み込む(chunked形式)

$img = ”;

while (! feof($fp)) {

$ss = fgets($fp);

$cnt = intval($ss, 16);

while ($cnt > 0) {

$bb = fread($fp, $cnt);

$cnt -= strlen($bb);

$img .= $bb;

}

fread($fp, 2); //\r\nをスキップ

}

fclose($fp);

header($type) ;

echo $img;

}

?>

2011/10/05 17:17:32
  • id:idetuyo
    ただ今、利用してたPHPプログラムを再導入してみた所、上手く表示することができました。どうやら改行が入っていたためにプログラムが壊れていたようです。本当にありがとうございました。チェックがなかったら、再度トライしようとは思わなかったと思います。
  • id:a-kuma3
    解決のきっかけになって、良かったです :-)

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

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

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

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