![見出し画像](https://assets.st-note.com/production/uploads/images/15252108/rectangle_large_type_2_c57a0b3e19fcf7eb578ea6b05927b7d4.png?width=800)
PHPでGoogleフォトの画像を取得! ~プログラミング編~
こんにちは!さっしです!
前回の記事の続きになります!
まだご覧になられてない方は、以下のリンクからアクセスしてください!
このnoteは以下の全体構成でお届けします
1.Google Cloud Platformの設定 ← 前回
2.PHPでプログラミング← 今回!!!!
3.ブラウザでの表示解説 ← 次回(近日公開予定)
2.PHPでプログラミング
index.phpにアクセス→結果をcallback.phpで表示
という流れになります。
2.1.index.phpページを編集
最初にアクセスするページです。
ページイメージは前記事の「目標」の項を参照してください。
2.1.1.全体ソース
まずはソース全体をご覧ください。次のセクションより詳細説明をします。
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
// アプリケーション設定
define('CLIENT_ID', 'xxxx.apps.googleusercontent.com');
// エンドポイント
define('AUTH_URL', 'https://accounts.google.com/o/oauth2/v2/auth'); // 認可エンドポイント
define('CALLBACK_URL', 'https://example.com/callback.php'); // リダイレクトエンドポイント
// スコープ
define('SCOPE', 'https://www.googleapis.com/auth/photoslibrary.readonly'); // 読み込み権限
$params = array(
'client_id' => CLIENT_ID,
'redirect_uri' => CALLBACK_URL,
'scope' => SCOPE,
'response_type' => 'code',
);
// 認証ページにリダイレクト
header("Location: " . AUTH_URL . '?' . http_build_query($params));
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>OAuth2 x Google Photo API</title>
</head>
<body>
<h1>OAuth2 x Google Photo API</h1>
<form action="" method="POST">
<input type="submit" value="認証する!">
</form>
</body>
</html>
2.1.2.アプリケーション設定
前記事「1.4.5.」項のGoogle Cloud Platformで取得したクライアントIDを設定する
// アプリケーション設定
define('CLIENT_ID', 'xxxx.apps.googleusercontent.com');
2.1.3.エンドポイント設定
AUTH_URL:Googleアカウントでの認証に使用する遷移するURL。下記に記載されているソースそのものを入れる。
※OAuthでは認可エンドポイントと呼ばれている。
CALLBACK_URL:前記事「1.4.4」項で設定した承認済みのリダイレクトURIを設定する。
※OAuthではリダイレクトエンドポイントと呼ばれている。
define('AUTH_URL', 'https://accounts.google.com/o/oauth2/v2/auth'); // 認可エンドポイント
define('CALLBACK_URL', 'https://example.com/callback.php'); // リダイレクトエンドポイント
2.1.4.スコープ設定
SCOPE:Googleフォトにどの権限でアクセスさせたいか設定する。今回は「読み込みのみ権限」にてアクセスをさせる。
※他にも「書き込みのみ権限」等がある。
define('SCOPE', 'https://www.googleapis.com/auth/photoslibrary.readonly'); // 読み込み権限
2.1.5.認可エンドポイントにリダイレクト
今までの設定情報を、URLパラメータとして認可エンドポイントに渡す。
response_type:「code」を設定することでリダイレクト先で認可コードをURLパラメータとして受け取る事が出来る。
$params = array(
'client_id' => CLIENT_ID,
'redirect_uri' => CALLBACK_URL,
'scope' => SCOPE,
'response_type' => 'code',
);
// 認証ページにリダイレクト
header("Location: " . AUTH_URL . '?' . http_build_query($params));
2.2.callback.phpページを編集
結果が表示されるページです。
ページイメージは前記事の「目標」の項を参照してください。
2.2.1.全体ソース
まずはソース全体をご覧ください。次のセクションより詳細説明をします。
<?php
// アプリケーション設定
define('CLIENT_ID', 'xxxx.apps.googleusercontent.com');
define('CLIENT_SECRET', 'xxxxxxxxxx');
// エンドポイント
define('TOKEN_URL', 'https://oauth2.googleapis.com/token'); // トークンエンドポイント
define('CALLBACK_URL', 'https://example.com/callback.php'); // リダイレクトエンドポイント
// リソース
define('ALBUMS_URL', 'https://photoslibrary.googleapis.com/v1/albums');
$code = $_GET['code']; // 認可コード
$params = array(
'code' => $code,
'client_id' => CLIENT_ID,
'client_secret' => CLIENT_SECRET,
'redirect_uri' => CALLBACK_URL,
'grant_type' => 'authorization_code'
);
// POST送信
$options = array('http' => array(
"method" => "POST",
"content" => http_build_query($params)
));
// アクセストークン情報一覧の取得
$res = file_get_contents(TOKEN_URL, false, stream_context_create($options));
// アクセストークンの取得
$token = json_decode($res, true);
if(isset($token['error'])){
echo 'エラー発生';
exit;
}
$access_token = $token['access_token'];
$params = array('access_token' => $access_token);
// アルバム情報取得
$res = file_get_contents(ALBUMS_URL . '?' . http_build_query($params));
//表示
echo $res;
?>
2.2.2.アプリケーション設定
前記事「1.4.5.」項のGoogle Cloud Platformで取得したクライアントIDとクライアントシークレットを設定する
// アプリケーション設定
define('CLIENT_ID', 'xxxx.apps.googleusercontent.com');
define('CLIENT_SECRET', 'xxxxxxxxxx');
2.2.3.エンドポイント設定
TOKEN_URL:アクセストークンを取得するための。下記に記載されているソースそのものを入れる。
※OAuthではトークンエンドポイントと呼ばれている。
CALLBACK_URL:前記事「1.4.4」項で設定した承認済みのリダイレクトURIを設定する。
// エンドポイント
define('TOKEN_URL', 'https://oauth2.googleapis.com/token'); // トークンエンドポイント
define('CALLBACK_URL', 'https://example.com/callback.php'); // リダイレクトエンドポイント
2.2.4.リソース設定
SCOPE:Googleフォトのどの場所にアクセスさせたいか設定する。今回は「アルバム情報」にアクセスをさせる。
※他にも「メディア」等がある。
// リソース
define('ALBUMS_URL', 'https://photoslibrary.googleapis.com/v1/albums');
2.2.5.認可コードを受け取り変数に代入
URLパラメータの「code」の添え字で受け取れる。
$code = $_GET['code']; // 認可コード
2.2.6.アクセストークン情報一覧の取得
今までの設定情報をURLパラメータとしてトークンエンドポイントにPOST送信する。その戻りとしてアクセストークンを含む情報が一覧となったJSON形式のテキスト情報を取得する。
$params = array(
'code' => $code,
'client_id' => CLIENT_ID,
'client_secret' => CLIENT_SECRET,
'redirect_uri' => CALLBACK_URL,
'grant_type' => 'authorization_code'
);
// POST送信
$options = array('http' => array(
"method" => "POST",
"content" => http_build_query($params)
));
// アクセストークンの取得
$res = file_get_contents(TOKEN_URL, false, stream_context_create($options));
2.2.7.アクセストークンの取得
「2.2.6」で取得したJSONデータからアクセストークンのみを取り出す。
// アクセストークンの取得
$token = json_decode($res, true);
if(isset($token['error'])){
echo 'エラー発生';
exit;
}
$access_token = $token['access_token'];
2.2.8.アルバム情報の取得
「2.2.7」で取得したアクセストークンをURLパラメータとして渡し、Googleフォトのアルバム情報を取得する。
$params = array('access_token' => $access_token);
// アルバム情報取得
$res = file_get_contents(ALBUMS_URL . '?' . http_build_query($params));
2.2.9.アルバム情報を出力する
「2.2.8」で取得したアルバム情報をechoします。
//表示
echo $res;
そうしたら以下の様な感じで出力されると思います!
いかがでしたか?
今回はPHPプログラムのソースコードを紹介させて頂きました!
次回は今回プログラムしたコードが実際の画面ではどのように遷移するのかをご紹介します!
この記事が気に入ったらサポートをしてみませんか?