2014-03-25 26 views
9

我经历了数小时的深刻痛苦,终于使用this tutorial(基于Google Analytics),更接近Google API API客户端的配置和使用。Google API PHP客户端 - 联系人服务

所以,现在我终于以一种看起来合法和正式的方式验证自己。我的自然想法是存在一个contrib/Google_ContactsService.php,但令我惊讶的是,无法找到32个其他服务类别。

我感觉就像回到了零。有什么办法可以 - 合法和正式 - 获取特定用户的联系人? (那里有大量的教程,但都是过时的和黑客)。

编辑:我注意到有可用here库的新版本,但仍然没有任何“联系人”服务于.../Service/ folder

编辑被发现: 我迄今为止的进展。最后一行失败,回应谷歌:401. There was an error in your request. - 我想这是因为缺乏权限(我没有要求联系人权限)。但是,如何在没有“Google_ContactsService.php”的情况下执行此操作?我搞不清楚了。见代码:

<?php 
session_start(); 

/** 
* Require the libaries 
*/ 

    require_once 'assets/php/Google/Google_Client.php'; 
    require_once 'assets/php/Google/contrib/Google_AnalyticsService.php'; // from tutorial - I am supposed to get the Contacts Service, which is nowhere to find. 

/** 
* Set up the Google_Client 
*/ 

    $client = new Google_Client(); 
    $client->setAccessType('online'); // default: offline 
    $client->setApplicationName($apiConfig['application_name']); 
    $client->setClientId($apiConfig['oauth2_client_id']); 
    $client->setClientSecret($apiConfig['oauth2_client_secret']); 
    $client->setRedirectUri($apiConfig['oauth2_redirect_uri']); 
    $client->setDeveloperKey($apiConfig['developer_key']); // API key 

/** 
* $service implements the client interface, has to be set before auth call 
*/ 

    $service = new Google_AnalyticsService($client); 

/** 
* Log out 
*/ 

    if (isset($_GET['logout'])) { // logout: destroy token 
     unset($_SESSION['google_token']); 
     exit('Logged out.'); 
    } 

/** 
* Google auth code received 
* 
* Store access token 
*/ 

    if (isset($_GET['code'])) { // we received the positive auth callback, get the token and store it in session 
     $client->authenticate(); 
     $_SESSION['google_token'] = $client->getAccessToken(); 
    } 

/** 
* Set auth token 
*/ 

    if (isset($_SESSION['token'])) { // extract token from session and configure client 
     $token = $_SESSION['token']; 
     $client->setAccessToken($token); 
    } 

/** 
* If no token, redirect and auth 
*/ 

    if (!$client->getAccessToken()) { // auth call to google 
     $authUrl = $client->createAuthUrl(); 
     header("Location: ".$authUrl); 
     exit; 
    } 

/** 
* Get contacts 
*/ 

    $access_token = json_decode($client->getAccessToken())->access_token; 

    $url = 'https://www.google.com/m8/feeds/contacts/default/full?alt=json&v=3.0&oauth_token='.$access_token; 

    $response = file_get_contents($url); 

    exit($response); 

    echo 'Hello, world.'; 

回答

5

here

不幸的是,联系人API是上了年纪的GData的人之一,而这 库是较新的API。您可以使用 库的OAuth部分来请求范围 (https://www.googleapis.com/auth/contacts.readonly),并使用令牌 发出请求,但您必须手动解析数据。 Zend 框架确实有Zend_Gdata类,可能会使读取 结果更容易一些!

我找到了an example using the old library

+0

好的,谢谢!它会永远被弃用吗?我现在使用最新版本,并成功设置了API。未来会有这样的官方API吗?要么? – FooBar

+0

https://developers.google.com/google-apps/contacts/v3/terms –

+1

有没有人已经在新库中实现了这个功能?我正在尝试提出“自定义”请求,但我还没有成功:https://github.com/google/google-api-php-client/issues/446 – user1226868

2

我能够通过新库得到这个工作......主要是。它显然不像完整的服务实现那样光滑,但它让事情发展。

Git上面的帖子中提到的库。 我开始与这里的例子:https://developers.google.com/api-client-library/php/auth/web-app

oauth2callback.php(请注意,对此的完整路径,必须对API的&验证您的开发者控制台或您的通话/凭据部分将无法上市):

<?php 

set_include_path(get_include_path() . PATH_SEPARATOR . '/data/www/unity/html/lib'); # The path where I git got google-api-php-client 
require_once 'google-api-php-client/src/Google/autoload.php'; 

$APPPATH = "/Applications/GFContacts"; 

session_start(); 

$client = new Google_Client(); 
$client->setAuthConfigFile('accountinfo.json'); # JSON config file downloaded from the credentials page of my project https://console.developers.google.com/project 
$client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . $APPPATH . '/oauth2callback.php'); 
$client->addScope("https://www.googleapis.com/auth/contacts.readonly"); 

if (! isset($_GET['code'])) { 
    $auth_url = $client->createAuthUrl(); 
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); 
} else { 
    $client->authenticate($_GET['code']); 
    $_SESSION['access_token'] = $client->getAccessToken(); 
    $redirect_uri = 'https://' . $_SERVER['HTTP_HOST'] . $APPPATH; 
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); 
} 

?> 

然后index.php文件:

<?php 

set_include_path(get_include_path() . PATH_SEPARATOR . '/data/www/unity/html/lib'); # The path where I git got google-api-php-client 

require_once 'google-api-php-client/src/Google/autoload.php'; 
$APPPATH = "/Applications/GFContacts"; # relative path from server root 

session_start(); 

$client = new Google_Client(); 
$client->setAuthConfigFile('accountinfo.json'); # JSON config file downloaded from the credentials page of my project https://console.developers.google.com/project 
$client->addScope("https://www.googleapis.com/auth/contacts.readonly"); 

# Allow a param 'logout' to remove the access token - sometimes doing this helps debug issues 
if (isset($_REQUEST['logout'])) { 
    unset($_SESSION['access_token']); 
    $client->revokeToken(); 

    print "You're logged out of Google"; 

    exit; 
} 

if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { 

    $access_token = json_decode($_SESSION['access_token'])->access_token; 

    $client->setAccessToken($_SESSION['access_token']); 

    $req = new Google_Http_Request("https://www.google.com/m8/feeds/contacts/default/full"); 
    $val = $client->getAuth()->authenticatedRequest($req); 

    // The contacts api only returns XML responses. 
    $response = json_encode(simplexml_load_string($val->getResponseBody())); 
    print "<pre>" . print_r(json_decode($response, true), true) . "</pre>"; 

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

?> 

祝你好运!自从这篇文章被更新以来,这已经有一段时间了,所以如果有人写了一篇我很想知道的服务。在此期间,这应该让你开始!

3

最近我不得不使用这个工具,在官方PHP Google Client中找不到联系人服务后,我为Google Contacts API创建了一个(MIT许可的)PHP库。

其中一个目标是真正简化一些涉及的过程。因此,在设置库后回答你的问题,以下代码是检索联系人所需的全部内容。

require_once '../../../vendor/autoload.php'; 
use rapidweb\googlecontacts\factories\ContactFactory; 
$contacts = ContactFactory::getAll(); 
if (count($contacts)) { 
    echo 'Test retrieved '.count($contacts).' contacts.'; 
} else { 
    echo 'No contacts retrieved!'; 
} 

该库需要一点工作,但对于基本联系人检索,创建和更新工作良好。如果需要,它也可以通过composer进行安装。只需将以下内容添加到您的composer.json并运行composer update

{ 
    "require": { 
     "rapidwebltd/php-google-contacts-v3-api": "dev-master" 
    } 
} 

GitHub上提供了更多安装说明和示例。

GitHub链接:https://github.com/rapidwebltd/php-google-contacts-v3-api

相关问题