联系人API死了吗?

时间:2014-08-06 13:31:09

标签: google-api google-apps google-api-php-client google-contacts

联系人API是否仍适用于任何人?前段时间我开始从API获得403错误。我每周运行一次备份脚本。每个用户都无法备份,我每小时重试一次,直到下周。在一周的时间里,我最终会得到几个联系人条目,但不是很多。这使我相信我的代码仍然有效,因为我得到了一些联系人。有人有任何见解吗?

注意:我也使用相同的代码/框架为我的组织备份Google云端硬盘和Google日历,并且没有任何问题。

function retrieveAllUserContacts($user)
{
    $nextLink = "https://www.google.com/m8/feeds/contacts/$user/full";
    $params = array('xoauth_requestor_id' => $user);
    while($nextLink != '')
    {
        $header = array('GData-Version: 3.0');
        $result = sendOAuthRequest('GET', $nextLink, $params, $header);
        $params = array('xoauth_requestor_id' => $user);
        $nextLink = '';
        libxml_use_internal_errors(true);
        $xmlObj = simplexml_load_string($result);
        if($xmlObj === false)
        {
            echo "adding $user to retry list. Result : " . print_r($result, true) . "\n";
            addUserToRetryList($user);
            exit(1);
        }
        foreach($xmlObj->link as $link)
        {
            if($link['rel'] == 'next')
            {
                $nextLink = $link['href'];
            }
            if($nextLink != '')
            {
                $urlSplit = explode('?', $nextLink);
                $nextLink = $urlSplit[0];
                $urlParams = explode('&', $urlSplit[1]);
                foreach($urlParams as $urlParam)
                {
                    $urlParamSplit = explode('=', $urlParam);
                    $params[$urlParamSplit[0]] = $urlParamSplit[1];
                }
                break;
            }
        }
        foreach($xmlObj->entry as $entry)
        {//get contacts
 ...
}

function sendOAuthRequest($httpMethod, $url, $parameters, $header=array())
{
    global $CONSUMER_KEY;
    global $CONSUMER_SECRET;
    $consumer = new OAuthConsumer($CONSUMER_KEY, $CONSUMER_SECRET, NULL);
    $request = OAuthRequest::from_consumer_and_token($consumer, NULL, $httpMethod, $url, $parameters);
    // Sign the constructed OAuth request using HMAC-SHA1  
    $request->sign_request(new OAuthSignatureMethod_HMAC_SHA1(), $consumer, NULL);  
    // Make signed OAuth request to the Contacts API server
    if(count($parameters))
    {
        if(strpos($url, '?') === false)
        {
            $url .= '?' . implode_assoc('=', '&', $parameters);
        }
        else
        {
            $url .= '&' . implode_assoc('=', '&', $parameters);
        }
    }
    $header[] = $request->to_header();
    return send_request($request->get_normalized_http_method(), $url, $header);
}

以下是OAuth类代码:http://pastebin.com/hH4SM9nn我可以说它适用于Google云端硬盘和Google日历API,而且此代码可以使用一年多而且没有问题。

1 个答案:

答案 0 :(得分:0)

许多问题可能导致这种情况。由于您的问题不具体,并且没有提供代码示例,因此以下是一些潜在的问题:

  • 您没有转移到HTTPS而不是HTTP
  • 您的GET请求指定了“默认”用户,其中不总是授予权限
  • 您正试图获取too many contacts

最近还存在授权和权限方面的问题,this StackOverflow answer中记录了一个“修复”问题。它不仅要通过this link将Google帐户与该帐户相关联的Gmail地址添加到分析服务中。