3

私はこれが簡単になるだろうと思った。したがって、私は最初から立ち往生しています:-(

ユーザーが「共有」専用ログインを使用してイベントを追加できる Google カレンダーを作成しました。次に、特定の時間枠でイベントを読み取るために、サーバーに PHP スクリプトを記述する必要があります。

ここに記載されているAPI キーで十分だと思いました。しかし、そうではありません。

 curl https://www.googleapis.com/calendar/v3/users/me/calendarList?key=mykey

と言いLogin requiredます。

そこで、OAuth2.0と、ユーザーを認証する方法について読みました。問題は、スクリプトがインタラクティブではないことです (ただし、スクリプトにログインをハードコーディングすることは問題ではありません: 情報は命にかかわるものではありません)。だから私はサービスアカウントについて読みましたが、それは非ユーザー情報用のようです.

質問: 人を介さずに特定のログインを強制するようにスクリプトをコーディングするにはどうすればよいですか?

注:この SO の質問は有望に思えましたが、答えは廃止されたように見える API バージョン 2.0 に対するものです。

4

2 に答える 2

7

最初に行う必要があるのは、アクセス トークンの取得です。これには人間が必要です。Google APIs PHP Clientを使用していると仮定すると、このスクリプトで実行できます (コマンド ラインから実行)。

注: 以下のスニペットは、インストール済みアプリケーションのクライアント ID で機能します。Google API Access コンソールで、このタイプのクライアント ID を必ず作成してください。

require_once '../../src/apiClient.php';
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));

$client = new apiClient();
// Visit https://code.google.com/apis/console to create your client id and cient secret
$client->setClientId('INSERT_CLIENT_ID');
$client->setClientSecret('INSERT_CLIENT_SECRET');
$client->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$client->setScopes(array(
    'https://www.googleapis.com/auth/calendar',
    'https://www.googleapis.com/auth/calendar.readonly',
));

$authUrl = $client->createAuthUrl();

print "Please visit:\n$authUrl\n\n";
print "Please enter the auth code:\n";
$authCode = trim(fgets(STDIN));

$_GET['code'] = $authCode;
$token = $client->authenticate();
var_dump($token);

これにより、accessToken と refreshToken を含む json でエンコードされた文字列が得られます。accessToken は 1 時間後に期限切れになりますが、心配する必要はありません。refreshToken は (アプリケーションをアンインストールしない限り) 期限切れになることはなく、新しい refreshToken を取得するために使用できます。クライアント ライブラリがこの部分を処理します。

次に、完全な json 文字列トークンを保存します ( access_token プロパティだけでなく、安全な場所に保存し、他のユーザーが読み取れないようにします。アプリは$client->setAccessToken($token)、安全な場所から $token が検索された場所を呼び出すことができます (ここでも$token、そのaccess_tokenプロパティに限定されない、完全な json エンコードされた文字列)。

これで、 Calendar APIに対して認証済みのリクエストを行うことができます。

require_once '../../src/apiClient.php';
require_once '../../src/contrib/apiCalendarService.php';
session_start();

$client = new apiClient();
$client->setApplicationName("Google Calendar PHP Sample Application");
$cal = new apiCalendarService($client);

$client->setAccessToken($tokenFromSafePlace);

$calList = $cal->calendarList->listCalendarList();
print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
于 2012-05-14T17:32:52.207 に答える