https://developers.google.com/safe-browsing/lookup_guide
・GoogleアカウントからAPIキーを取得しなければならない
・APIキー、一つにつき一日に10,000リクエストまで出来る
・GETは一つのURLしかリクエスト出来ないが、POSTの場合は一度に500までリクエスト出来る。
・なので実質一日に10,000*500 のURLを解析する事が出来る。
・レスポンスコードが200の場合はURLの中に一つはマルウェアかフィッシングサイトURLが含まれている。204の場合は一つも含まれていないので、BODY部分は何も返されない。その他のエラーコードはGoogle側のシステムエラーかリクエストパラメーターエラー。
<?php class GoogleSafeBrowsing { private $apikey = "";//APIキーを設定 /** * URLをチェックしマルウェアサイトとフィッシングサイトのURLのみを返す。 * @param unknown_type $checkUrls 調べたい複数のURLを配列で渡す。 * @return NULL|multitype: nullの場合は何らかのエラーが発生。配列の中身が空の場合は不正なURLは一つも検出されなかったという事。 */ function checkUrls($checkUrls){ $postField = count($checkUrls) . "\n" . implode("\n", $checkUrls); $url = "https://sb-ssl.google.com/safebrowsing/api/lookup?client=api&apikey=" . $this->apikey . "&appver=1.5.2&pver=3.0"; $ch = curl_init (); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_HEADER, 1);//HEADERも取得する curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//TRUE を設定すると、 curl_exec() の返り値を 文字列で返します。通常はデータを直接出力します。 curl_setopt ($ch,CURLOPT_POST,1);//POSTをするためのフラグを立てる curl_setopt ($ch,CURLOPT_POSTFIELDS,$postField); $data = curl_exec ($ch); $info = curl_getinfo ($ch); curl_close ($ch); $httpCode = $info['http_code'];//HTTPステータスコードを取得 $body = substr ($data, $info["header_size"]);// BODY部分を取得 $results = explode("\n", $body); if($httpCode === 200){ foreach ($checkUrls as $i => $non){ if($results[$i] == "ok"){ unset($checkUrls[$i]); } } }else if($httpCode === 204){ $checkUrls = array(); }else{ return null; } return $checkUrls; } } $GSB = new GoogleSafeBrowsing(); $checkUrls = array("https://bibouroku.viratube.com/"); print_r($GSB->checkUrls($checkUrls)); ?>