2016.
06.
23
14:25:34
「GoogleのCustom Search APIを使ってみる(3):最低限の動作を確認できるPHPのサンプルプログラム」の続きです。
今回はエラー処理を追加してみますね。
Google APIからの戻りを判定します。
ということで、いきなりですが、サンプルですφ(--)
例えば、APIキーの値を適当な値にして実行すると
こんな結果になりますφ(--)
それでは、追加した処理の説明ですが、基本は
1.処理部分をtry ~ catchで囲む
2.file_get_contents()の戻りを判定
3.「2.」の結果がfalseだったらExceptionを投げる
です。
の部分が2、3に該当します。
まず、file_get_contents()の前に「@」がくっついていますよね。
これをくっつけておかないと、取得失敗時にWarningが発生します。
あとは、戻りを判定してExceptionを飛ばしているだけです。
file_get_contents()は、取得に失敗すると、falseが返ってきます。
また、HTTPレスポンスヘッダの内容が配列「$http_response_header」に入ります。
ここら辺の詳細は
PHP、file_get_contents()関数で引数にURLを指定した際の、HTTPステータスコードを取得する
で書きました。
間に合わせですが、$http_response_headerからHTTPステータスコードを抜き出す処理も書いてあります。
気が向いた方は読んであげてください。
最低限ではありますが、エラー処理はこんなもんで良いんじゃないですかね。
Custom Search APIからの戻りの判定さえ行っておけば、大怪我はしないと思います。
お疲れ様でした\(--)/
■目次
・GoogleのCustom Search APIを使ってみる(1):事前準備1、APIキーを取得する
・GoogleのCustom Search APIを使ってみる(2):事前準備2、検索エンジンの設定をする
・GoogleのCustom Search APIを使ってみる(3):最低限の動作を確認できるPHPのサンプルプログラム
・GoogleのCustom Search APIを使ってみる(4):エラー処理を追加してみる
・GoogleのCustom Search APIを使ってみる(5):検索結果を100件取得する
今回はエラー処理を追加してみますね。
Google APIからの戻りを判定します。
ということで、いきなりですが、サンプルですφ(--)
<?php
//------------------------------------
// 定数設定
//------------------------------------
//APIキー
$apiKey = "【取得したAPIキー】";
//検索エンジンID
$searchEngineId = "【取得した検索エンジンID】";
// 検索用URL
$baseUrl = "https://www.googleapis.com/customsearch/v1?";
//取得開始位置
$startNum = 1;
try {
//--------------------------
// 検索キーワード取得
//--------------------------
//$query = $_POST['q'];
//$query = $_GET['q'];
$query = "PHP site:piyopiyocs.blog115.fc2.com";
//------------------------------------
// リクエストパラメータ生成
//------------------------------------
$paramAry = array(
'q' => $query,
'key' => $apiKey,
'cx' => $searchEngineId,
'alt' => 'json',
'start' => $startNum
);
$param = http_build_query($paramAry);
//------------------------------------
// 実行&結果取得
//------------------------------------
$reqUrl = $baseUrl . $param;
$retJson = @file_get_contents($reqUrl, true);
if($retJson === false){
throw new Exception("取得失敗!:" . $http_response_header[0]);
}
$ret = json_decode($retJson, true);
//------------------------------------
// 結果表示
//------------------------------------
//画面表示
//var_dump($ret);
//JSON形式でファイル出力
file_put_contents(dirname(__FILE__) . "/data/ret_" . $startNum . "_" . date('Ymd_His') . ".txt", $retJson);
//項目を画面表示
$num = $startNum;
foreach($ret['items'] as $value){
echo "順位:" . $num . "<br>\n";
echo "タイトル:" . $value['title'] . "<br>\n";
echo "URL:" . $value['link'] . "<br>\n";
echo "-------------------------------------------------------------------------<br>\n";
$num++;
}
} catch (Exception $e) {
print "エラー:" . $e->getMessage();
}
//------------------------------------
// 定数設定
//------------------------------------
//APIキー
$apiKey = "【取得したAPIキー】";
//検索エンジンID
$searchEngineId = "【取得した検索エンジンID】";
// 検索用URL
$baseUrl = "https://www.googleapis.com/customsearch/v1?";
//取得開始位置
$startNum = 1;
try {
//--------------------------
// 検索キーワード取得
//--------------------------
//$query = $_POST['q'];
//$query = $_GET['q'];
$query = "PHP site:piyopiyocs.blog115.fc2.com";
//------------------------------------
// リクエストパラメータ生成
//------------------------------------
$paramAry = array(
'q' => $query,
'key' => $apiKey,
'cx' => $searchEngineId,
'alt' => 'json',
'start' => $startNum
);
$param = http_build_query($paramAry);
//------------------------------------
// 実行&結果取得
//------------------------------------
$reqUrl = $baseUrl . $param;
$retJson = @file_get_contents($reqUrl, true);
if($retJson === false){
throw new Exception("取得失敗!:" . $http_response_header[0]);
}
$ret = json_decode($retJson, true);
//------------------------------------
// 結果表示
//------------------------------------
//画面表示
//var_dump($ret);
//JSON形式でファイル出力
file_put_contents(dirname(__FILE__) . "/data/ret_" . $startNum . "_" . date('Ymd_His') . ".txt", $retJson);
//項目を画面表示
$num = $startNum;
foreach($ret['items'] as $value){
echo "順位:" . $num . "<br>\n";
echo "タイトル:" . $value['title'] . "<br>\n";
echo "URL:" . $value['link'] . "<br>\n";
echo "-------------------------------------------------------------------------<br>\n";
$num++;
}
} catch (Exception $e) {
print "エラー:" . $e->getMessage();
}
例えば、APIキーの値を適当な値にして実行すると
こんな結果になりますφ(--)
エラー:取得失敗!:HTTP/1.0 400 Bad Request
それでは、追加した処理の説明ですが、基本は
1.処理部分をtry ~ catchで囲む
2.file_get_contents()の戻りを判定
3.「2.」の結果がfalseだったらExceptionを投げる
です。
$retJson = @file_get_contents($reqUrl, true);
if($retJson === false){
throw new Exception("取得失敗!:" . $http_response_header[0]);
}
if($retJson === false){
throw new Exception("取得失敗!:" . $http_response_header[0]);
}
の部分が2、3に該当します。
まず、file_get_contents()の前に「@」がくっついていますよね。
これをくっつけておかないと、取得失敗時にWarningが発生します。
あとは、戻りを判定してExceptionを飛ばしているだけです。
file_get_contents()は、取得に失敗すると、falseが返ってきます。
また、HTTPレスポンスヘッダの内容が配列「$http_response_header」に入ります。
ここら辺の詳細は
PHP、file_get_contents()関数で引数にURLを指定した際の、HTTPステータスコードを取得する
で書きました。
間に合わせですが、$http_response_headerからHTTPステータスコードを抜き出す処理も書いてあります。
気が向いた方は読んであげてください。
最低限ではありますが、エラー処理はこんなもんで良いんじゃないですかね。
Custom Search APIからの戻りの判定さえ行っておけば、大怪我はしないと思います。
お疲れ様でした\(--)/
■目次
・GoogleのCustom Search APIを使ってみる(1):事前準備1、APIキーを取得する
・GoogleのCustom Search APIを使ってみる(2):事前準備2、検索エンジンの設定をする
・GoogleのCustom Search APIを使ってみる(3):最低限の動作を確認できるPHPのサンプルプログラム
・GoogleのCustom Search APIを使ってみる(4):エラー処理を追加してみる
・GoogleのCustom Search APIを使ってみる(5):検索結果を100件取得する