見出し画像

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;

そうしたら以下の様な感じで出力されると思います!

画像1


いかがでしたか?
今回はPHPプログラムのソースコードを紹介させて頂きました!
次回は今回プログラムしたコードが実際の画面ではどのように遷移するのかをご紹介します!

この記事が気に入ったらサポートをしてみませんか?