0

GoogleのカレンダーのAPIを使ってGoogleのイベントと自分のウェブサイトのイベントを同期させます。アクセス。私のコードは私のコードはウェブサイトのユーザーが自分のGmailアカウントに永続的に接続している場合ユーザーが自分のデータにアクセスすることが許可されている場合

で、ユーザーは、Googleが、私は、イベントデータを取得し、このアクセストークンを使用して

[ 
    access_token => xxx, 
    token_type => bearer, 
    created => xxx, 
    expires_in => 3600, 
    refresh_token => xxx 
] 

のような配列を返すAPIからデータにアクセスすることを許可されたときに

<?php 
 
require_once __DIR__.'/vendor/autoload.php'; 
 

 
session_start(); 
 

 
$client = new Google_Client(); 
 
$client->setAuthConfigFile(__DIR__.'/client_secrets.json'); 
 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/google4/oauth2callback.php'); 
 
$client->addScope(Google_Service_Calendar::CALENDAR_READONLY); 
 
$client->setAccessType('offline'); 
 
$client->setApprovalPrompt('force'); 
 
$client->setIncludeGrantedScopes(true); 
 
//echo $_GET['access_token'].' '.$_GET['code']; 
 
if (!isset($_GET['code']) && !isset($_SESSION['access_token'])) { //echo "werwe";exit; 
 
    $auth_url = $client->createAuthUrl(); 
 
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 
 
} else { 
 
    $db = mysql_connect('localhost','root',''); 
 
    mysql_select_db('google',$db); 
 
    //echo $_SESSION['refresh_token']; 
 
    $client->refreshToken($_SESSION['refresh_token']); 
 
    $client->authenticate($_GET['code']); 
 
    // $client()->getRefreshToken(); 
 
    $_SESSION['access_token'] = $client->getAccessToken(); 
 
    //print_r($_SESSION['access_token']);exit; 
 
    // 
 
    $sql = "update google set access_token='".$_SESSION['access_token']['refresh_token']."' WHERE userId = '".$_SESSION['userId']."'"; 
 
    mysql_query($sql); 
 
    $_SESSION['refresh_token']=$_SESSION['access_token']['refresh_token']; 
 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/google4'; 
 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
 
} 
 
?>

です

<?php 
 
require_once __DIR__.'/vendor/autoload.php'; 
 
//error_reporting(E_PARSE); 
 
session_start(); 
 

 
$client = new Google_Client(); 
 
$client->setAuthConfig(__DIR__.'/client_secrets.json'); 
 
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY); 
 
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/google4/oauth2callback.php'); 
 
$client->setAccessType('offline'); 
 
echo "<a href='logout.php'> logout </a>"; 
 

 
if (isset($_SESSION['access_token']) &&   $_SESSION['refresh_token']) { 
 
    $client->refreshToken($_SESSION['refresh_token']); 
 
    $client->setAccessToken($_SESSION['access_token']); 
 
    $service = new Google_Service_Calendar($client); 
 

 
    $calendarId = 'primary'; 
 
    $optParams = array(
 
     'maxResults' => 10, 
 
     'orderBy' => 'startTime', 
 
     'singleEvents' => TRUE, 
 
     'timeMin' => date('c'), 
 
    ); 
 
$results = $service->events->listEvents($calendarId, $optParams); 
 

 
    if (count($results->getItems()) == 0) { 
 
    print "No upcoming events found.\n"; 
 
    } else { 
 
    print "Upcoming events:\n"; 
 
    foreach ($results->getItems() as $event) { 
 
    $start = $event->start->dateTime; 
 
    if (empty($start)) { 
 
     $start = $event->start->date; 
 
    } 
 
    printf("%s (%s)\n", $event->getSummary(), $start); 
 
    } 
 
} 
 

 
} else { 
 
    $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/google4/oauth2callback.php'; 
 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
 
}

イベントデータは取得されますが、セッションが終了するとユーザーデータを取得する方法はありますか?

オフラインアクセスのアクセス許可を持っている場合、ウェブサイトが自分のアカウントに直接接続するようにオフラインでユーザーのカレンダーデータにアクセスできるように、そのユーザー用に保存する必要があるものはありますか?

保存されたユーザーデータを使用してセッションの有効期限が切れるたびに、ユーザーのカレンダーからデータを取得する方法はありますか? Googleは、以下のフラグを注意してください、あなたのOAuthリクエスト

access_type=offline 

で次のフラグを渡す必要がオフラインアクセスを得るために (google.comから現在のポリシーを確認してください)60日間のオフラインアクセスを許可

答えて

1

は、ときに便利ですあなたは強制的に

approval_prompt=force 

だから、すべての時間はあなたが前のアクセストークンのデータとリフレッシュトークンを要求するために必要なアクセスGoogleのデータを得るために必要なオフラインアクセスのユーザーをお願いしたいと思います。アクセストークンデータをデータベースに保存する必要があります。

+0

私はこれを私のコードに入れていますが、データベースにどのデータストアが格納されているのかわからないので、Googleに渡すことができ、ユーザーアカウントからイベントを取得できます。 – user3256212

+0

これについての**デモ**コードについて知っていれば、私とリンクを共有してください。 – user3256212

+0

申し訳ありませんが、コードは別のプロジェクトと関連しているため、共有できません。リフレッシュトークンを取得しようとすると、そのデータはスコープのみに基づいてアクセスされます。ユーザーが許可していない他のデータを取得しようとしないでください。 –

関連する問題