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 |
function curl_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{ return false; } //取得できればソースコードが返り、できなければfalseが返ります。 } |
あとは取得してきたresultを元に加工すれば検索順位の取得が完了です。
※ついでに$post_data=array( ‘q’ => ‘POSTで送信したいデータ’ );とすればPOSTでもデータを送信できるようにしてみました。ちょっと便利かな。
コメント