2017-07-17 144 views
0

我需要在我的网站上使用谷歌日历。 我测试了我的地方,它的工作原理:PHP谷歌日历没有命令行

require_once (load_runner::get_dir('LIBS') . "/google-api-php-client-2.2.0/vendor/autoload.php"); 
define('APPLICATION_NAME', 'Google Calendar API PHP Quickstart'); 
define('CREDENTIALS_PATH', '~/.credentials/calendar-php-quickstart.json'); 
define('CLIENT_SECRET_PATH', __DIR__ . '/client_secret.json'); 

// If modifying these scopes, delete your previously saved credentials 
// at ~/.credentials/calendar-php-quickstart.json 
define('SCOPES', implode(' ', array(
     Google_Service_Calendar::CALENDAR) 
)); 
/* 
if (php_sapi_name() != 'cli') { 
    throw new Exception('This application must be run on the command line.'); 
}*/ 

/** 
* Returns an authorized API client. 
* @return Google_Client the authorized client object 
*/ 
function getClient() { 
    $client = new Google_Client(); 
    $client->setApplicationName(APPLICATION_NAME); 
    $client->setScopes(SCOPES); 
    $client->setAuthConfig(CLIENT_SECRET_PATH); 
    $client->setAccessType('offline'); 

// Load previously authorized credentials from a file. 
$credentialsPath = expandHomeDirectory(CREDENTIALS_PATH); 
if (file_exists($credentialsPath)) { 
    $accessToken = json_decode(file_get_contents($credentialsPath), true); 
} else { 
    // Request authorization from the user. 
    $authUrl = $client->createAuthUrl(); 
    printf("Open the following link in your browser:\n%s\n", $authUrl); 
    print 'Enter verification code: '; 
    $authCode = trim(fgets(STDIN)); 



    // Exchange authorization code for an access token. 
     $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); 

     // Store the credentials to disk. 
     if(!file_exists(dirname($credentialsPath))) { 
      mkdir(dirname($credentialsPath), 0700, true); 
     } 
     file_put_contents($credentialsPath, json_encode($accessToken)); 
     printf("Credentials saved to %s\n", $credentialsPath); 
    } 
    $client->setAccessToken($accessToken); 

    // Refresh the token if it's expired. 
    if ($client->isAccessTokenExpired()) { 
     $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 
     file_put_contents($credentialsPath, json_encode($client->getAccessToken())); 
    } 
    return $client; 
} 

/** 
* Expands the home directory alias '~' to the full path. 
* @param string $path the path to expand. 
* @return string the expanded path. 
*/ 
function expandHomeDirectory($path) { 
    $homeDirectory = getenv('HOME'); 
    if (empty($homeDirectory)) { 
     $homeDirectory = getenv('HOMEDRIVE') . getenv('HOMEPATH'); 
    } 
    return str_replace('~', realpath($homeDirectory), $path); 
} 
// Get the API client and construct the service object. 
$client = getClient(); 
$guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false,),)); 
$client->setHttpClient($guzzleClient); 
$service = new Google_Service_Calendar($client); 

// Print the next 10 events on the user's calendar. 
$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); 
    } 
} 

教程说,我需要运行我的命令行(对于GET验证码)的应用程序。但如何运行我的脚本没有命令行?

回答

1

假设你跟随此guide 它指出

在本例中的授权流程设计用于命令行应用程序。有关如何在Web应用程序中执行授权的信息,请参阅使用OAuth 2.0进行Web服务器应用程序。

Using OAuth 2.0 for Web Server Applications

  1. 打开Credentials page的API控制台英寸
  2. 单击“创建凭据> OAuth客户端ID”。
  3. 填写表格。将应用程序类型设置为Web应用程序。 >使用PHP,Java,Python,Ruby和.NET等语言和框架的应用程序必须指定授权的重定向URI。重定向URI是OAuth 2.0服务器可以发送响应的端点。对于测试,您可以指定引用本地计算机的URI,例如http://localhost:8080