人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。

先日に引き続き、マーケティングでWEBからデータを収集することをしているのですが

再度わからない点が出てきたため質問をさせていただきます。

今回行いたいことですが、

?http://page12.auctions.yahoo.co.jp/jp/auction/p170009654

のURLの末尾の p170009654 を c210666342 に変更し

?一度 http://page12.auctions.yahoo.co.jp/jp/auction/c210666342 の画面へ飛びます。

?すると http://page12.auctions.yahoo.co.jp/jp/auction/c210666342



http://page3.auctions.yahoo.co.jp/jp/auction/c210666342

に変わるので

その後

?URLを変数に保存して

前回に引き続きデータの収集をしたいと考えているのですが、?とその後の?が具体的にわかりません。

PHPで?、?のような事を実現する事はできるのでしょうか?

お手数をおかけしますが、わかるかたおりましたらご回答をお待ちしております。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:PHP URL Web いただきます にわか
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tobeoscontinue
●35ポイント

?はリダイレクトによるものなのでレスポンスヘッダーにあるステータスコードを調べることで判断することができます。

?はリダイレクトの場合、レスポンスヘッダーにLocationとしてリダイレクト先のurlが示されることになっているのでこれを変数に保存すればいいでしょう。

レスポンスヘッダーを入手するにはfsockopenを使うことは可能でしょうが、細か過ぎるように思います。

pecl_httpをインストールできればhttp_get()したものをhttp_parse_headers()することでステータスコードとリダイレクと先のurlを入手できますが環境によってはpecl_httpのインストールが難しいかもしれません。

<?php
$response = http_get("http://page12.auctions.yahoo.co.jp/jp/auction/c210666342", array(), $info);
if ($response === FALSE)
 print_r($info);
else {
 print_r($info);
 echo "----------------------\n";
 print_r(http_parse_headers($response));
}
?>

cURLは自動で多くのことをやってしまうのですがredirect_countを調べることでリダイレクトされたかどうかを判断できますし、CURLOPT_FOLLOWLOCATIONを設定することでurlがリダイリクト先のurlになるので、このurlを最初に指定したものと同じかどうかでも判断できます。

<?php
$ch = curl_init("http://page12.auctions.yahoo.co.jp/jp/auction/c210666342");
//curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
// 実行します
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
print_r($info);
echo "---------------------------------------\n";
echo $response;
?>
◎質問者からの返答

ご回答ありがとうございます。


2 ● makeworld
●100ポイント ベストアンサー

fopen()は、リダイレクトを処理してくれるので、page12を開いてもpage3のHTMLを取得できます。

リダイレクト先のURLは、stream_get_meta_data()の中から'location: 'を探せば良いと思います。

<?php
$URL = 'http://page12.auctions.yahoo.co.jp/jp/auction/c210666342';

$html = '';
$fp = fopen($URL, 'r') or die("fopen");

$meta_data = stream_get_meta_data($fp);
foreach($meta_data['wrapper_data'] as $response) {
 /* リダイレクトされた? */
 if (substr(strtolower($response), 0, 10) == 'location: ') {
 $URL = substr($response, 10);
 }
}
print "URL = ($URL)\n";

while (!feof($fp)) {
 $html .= fread($fp, 1024);
}
fclose($fp);

?>
◎質問者からの返答

ご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ