0

Google 웹 캘린더 API를 탐색하여 내 Google 웹 이벤트와 내 Google 웹 이벤트를 동기화합니다. 먼저 Gmail에 로그인하여 사용자 계정 오프라인 권한을 얻습니다. 접속하다. 내 코드는 내 코드웹 사이트 사용자가 자신의 Gmail 계정에 영구적으로 연결되어있는 경우 사용자가 데이터에 액세스하도록 허용 한 경우

이며, 사용자가 구글 I은 이벤트 데이터를 얻을이 액세스 토큰을 사용

[ 
    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)); 
 
}

이벤트 데이터를 가져 오지만 세션이 만료되면 사용자 데이터를 가져 오는 방법은 무엇입니까?

사용자 캘린더 데이터에 오프라인으로 액세스 할 수 있도록 해당 사용자를 저장해야하는 항목 오프라인 액세스 권한이있는 경우 웹 사이트가 계정에 직접 연결되어 있습니까?

저장된 사용자 데이터를 사용하여 세션이 만료 될 때마다 사용자 캘린더에서 데이터를 가져 오는 방법은 무엇입니까?

답변

1

Google은

access_type=offline 

플래그 다음에 유의하시기 바랍니다 귀하의 OAuth 요청 플래그를 다음 전달해야 오프라인 액세스를 얻으려면 (google.com에서 현재의 정책을 확인하시기 바랍니다) 60 일 오프라인 액세스를 허용 할 때 유용합니다 당신은 강제

approval_prompt=force 

그래서 때마다 당신이 이전 액세스 토큰 데이터 새로 고침 토큰을 요청해야 액세스 구글 데이터를 얻을 필요가 오프라인 액세스 사용자를 물어보고 싶은. 액세스 토큰 데이터를 데이터베이스에 저장해야합니다.

+0

나는 이것을 내 코드에 넣었지만 데이터베이스에 어떤 데이터 저장소가 있는지 모르기 때문에 Google에 전달할 수 있으며 사용자 계정에서 이벤트를 가져올 수 있습니다. – user3256212

+0

** 데모 ** 코드에 대해 알고 계시다면이 링크를 나와 공유하십시오. – user3256212

+0

죄송합니다. 코드는 다른 프로젝트와 관련되어 있으므로 공유 할 수 없습니다. 새로 고침 토큰을 얻으려고하면 범위에 따라 해당 데이터에 액세스 할 수 있습니다. 사용자가 허용하지 않은 다른 데이터를 가져 오지 마십시오. –