私はphp5.3.3とcodeigniter2.1.0を使用しています。私がやりたいのは、サービスアカウントを設定することです。これにより、ユーザーは自分のWebサイトのテキスト入力フィールドに予定を追加し、その予定を共有の共有Googleカレンダーに追加できます。
私はGoogleアカウントを持っており、次を使用しています:https : //code.google.com/apis/consoleサービスで「pqp」という新しいプロジェクトを作成しました:APIアクセスでカレンダーAPIを有効にしました:oath2.0クライアントIDを作成しました…製品名=pqp、アプリケーションタイプ=サービスアカウント。
キー46をダウンロードしました…-privatekey.p12。設定のスクリーンショットがあります:
google-api-php-clientのsvnチェックアウトを取得しました(28/6/2012)google-api-php-client / src/config.phpで次の行を変更しました。
25: 'application_name' => 'pqp',
28: 'oauth2_client_id' => '373xxx730.apps.googleusercontent.com',
57: 'ioFileCache_directory' => 'tmp/apiClient', // my apache user does not have access to the system /tmp folder. + tmp/apiClient has permissions of 777 on the server.
このリンクを使用して:
http://code.google.com/p/google-api-php-client/source/browse/trunk/examples/prediction/serviceAccount.php?spec=svn445&r=395
私はそれを次のように変更しました:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test extends CI_Controller{
function __construct()
{
parent::__construct();
}
function index()
{
set_include_path(get_include_path() . PATH_SEPARATOR .dirname(__FILE__).'/../libraries/google-api-php-client/src');
ini_set('error_reporting',E_ALL);
ini_set('display_errors','1');
// Set your client id, service account name, and the path to your private key.
// For more information about obtaining these keys, visit:
// https://developers.google.com/console/help/#service_accounts
define('CLIENT_ID','3731xxx44730.apps.googleusercontent.com');
define('SERVICE_ACCOUNT_NAME','373xxx244730@developer.gserviceaccount.com');
// Make sure you keep your key.p12 file in a secure location, and isn't
// readable by others.
define('KEY_FILE',dirname(__FILE__).'/../../461290xxx796c0b7db9582c-privatekey.p12');
require_once "apiClient.php";
require_once "contrib/apiCalendarService.php";
$client = new apiClient();
$client->setApplicationName("pqp");
// Set your cached access token. Remember to replace $_SESSION with a
// real database or memcached.
session_start();
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
echo 'client access token is set.<br/>';
}
// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$key = file_get_contents(KEY_FILE);
$creds = new apiAssertionCredentials(SERVICE_ACCOUNT_NAME,array('https://www.googleapis.com/auth/calendar'),$key);
$client->setAssertionCredentials($creds);
$client->setClientId(CLIENT_ID);
$service = new apiCalendarService($client);
echo 'client:<br/>';
var_dump($client);
echo 'service:<br/>';
var_dump($service);
// We're not done yet. Remember to update the cached access token.
// Remember to replace $_SESSION with a real database or memcached.
if ($client->getAccessToken()) {
$_SESSION['token'] = $client->getAccessToken();
echo 'token is good!, so creating an event....';
echo $this->insert_event($service,'testing summary','my location','2012-06-29T10:00:00.000+10:00','2012-06-29T10:00:00.000+10:00');
}
}
function insert_event($service,$summary,$location,$from,$to){
$event = new Event();
$event->setSummary($summary);
$event->setLocation($location);
$start = new EventDateTime();
$start->setDateTime($from);
$event->setStart($start);
$end = new EventDateTime();
$end->setDateTime($to);
$event->setEnd($end);
$attendee1 = new EventAttendee();
$attendee1->setEmail('test@example.com');
$attendees = array($attendee1);
$event->attendees = $attendees;
$createdEvent = $service->events->insert('primary', $event);
return $createdEvent->getId();
}
}
出力のパスティはここにあります:
$ clientオブジェクトは認証されておらず、getAccessTokenは設定されておらず、イベントは挿入されていません。
命名法が異なるため、$configファイルのどの設定を変更するかを決めるのが難しいことがわかりました。これは、コードがどのように進行したかによるアーティファクトだと思います。src / config.phpの設定は正しいですか?これ以上設定を変更する必要がありますか?
サービスアカウントを作成し、キーファイルをダウンロードし、このファイルの内容を開発者IDでダウンロードすると、トークンが返され、リダイレクトuriを設定する必要がないことを理解しています。これは正しいことです。 ?これが私が欲しい機能です。ウェブサイトは1つのGoogleアカウントとしかやり取りしないため、ユーザーがアクセスを承認する必要はありません。
したがって、問題は、このカレンダーAPIをGoogleサービスアカウントを使用して認証するにはどうすればよいですか?