yahooやgoogleの検索順位を取得したくても、普通にPHPからcurlで取ろうとしても失敗します。
少し工夫が必要です。下記のようにすれば私の環境ではyahooやgoogleの検索ページから情報が取得できました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | functioncurl_result($url,$post_data=false){ //サイトから情報を取得します。 $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch,CURLOPT_COOKIEJAR, 'cookie'); curl_setopt($ch,CURLOPT_COOKIEFILE, 'tmp'); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); if($post){ curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($post_data)); } $result=curl_exec($ch); curl_close($ch); if(isset($result)&& $result!="" ){ $result = str_replace(array("\r", "\n"), '', $result);// スクレイピングする際に改行が入ると邪魔だったので、改行を削除しました。改行を保持したい場合にはこの一行を消してください。 return$result; }else{ returnfalse; } //取得できればソースコードが返り、できなければfalseが返ります。 } |
あとは取得してきたresultを元に加工すれば検索順位の取得が完了です。
※ついでに$post_data=array( ‘q’ => ‘POSTで送信したいデータ’ );とすればPOSTでもデータを送信できるようにしてみました。ちょっと便利かな。
コメント