いくつかのキーワード (PHP) に関する Twitter ユーザーのすべてのコメントを収集する webapp を作成しています。この URL を使用しています: http://search.twitter.com/search.json。
問題: for ループを使用してすべてのコメントを取得すると、21 ページになると次のエラーがスローされます。
Warning: file_get_contents(http://search.twitter.com/search.json?page=21&max_id=254777971188039680&q=love&rpp=100&result_type=mixed): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in C:\xampp\htdocs\cs2\action.php on line 30
ただし、ブラウザのアドレスバーにその URL を入力して上記のリンク (http://search.twitter.com/search.json?page=21&max_id=254777971188039680&q=love&rpp=100&result_type=mixed) にアクセスすると、それでも結果が返されます!
file_get_contents
では、なぜこのリンクはブラウザから直接アクセスできるのに、関数では読み取れないのでしょうか?
// 追加されたコード:
<?php
$keyword1 = $_POST["key"];
$keyword = str_replace(' ', '%20',$keyword1);
$url = "http://search.twitter.com/search.json?q=$keyword&rpp=100&result_type=mixed";
$json_string = file_get_contents($url);
$data = json_decode($json_string);
$olddata = $data;
$size = count($data->{"results"});
$_SESSION["dem"] = 0;
for($i = 0; $i < $size;$i++){
echo($data->{"results"}[$i]->{"text"}."<br/>");
$_SESSION["dem"]++;
}
while(true){
try{
sleep(0.01);
$url = "http://search.twitter.com/search.json".$olddata->{"next_page"};
if(strcmp($url,"http://search.twitter.com/search.json") == 0) break;
$json_string = file_get_contents($url);
$data = json_decode($json_string);
$olddata = $data;
$size = count($data->{"results"});
for($i = 0; $i < $size;$i++){
echo($data->{"results"}[$i]->{"text"}."<br/>");
$_SESSION["dem"]++;
}
}
catch(Exception $e){
break;
}
}
?>