Google Safe Browsing APIについて

http://takahitokikuchi.poitan.net/2011/08/19/google-safe-browsing-api%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/

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("http://bibouroku.viratube.com/");
print_r($GSB->checkUrls($checkUrls));
?>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です