使用Oauth令牌时在Zend_GData中指定参数?

时间:2010-02-12 10:31:33

标签: php zend-framework oauth gdata-api gdata

所以,我想出了如何使用1.10中的Zend_Oauth库从Google获取访问令牌。现在让我说我想得到我的联系人......

  $config = array(
      'consumerKey' => 'zzz',
      'signatureMethod' => 'HMAC-SHA1',
'consumerSecret' => 'xxx'
  );

  $token = unserialize($_SESSION['GOOGLE_ACCESS_TOKEN']);


$client = $token->getHttpClient($config);
$client->setMethod(Zend_Http_Client::GET);
// $client->setParameterGet('max-results', '10000');

$gdata = new Zend_Gdata($client);
$gdata->setMajorProtocolVersion(3);

$query = new Zend_Gdata_Query('http://www.google.com/m8/feeds/contacts/default/full');

// $query->MaxResults=100;

$feed = $gdata->getFeed($query);

$feed是一个有25个联系人的可爱对象。但是如果我想在一次拉动中获得更多,那么似乎没有一种方法可以指定有效的最大结果。

如果我取消注释client->setParameterGet,则会被忽略。如果我指定$client->setUri并使用$rawdata = client->request()来获取响应,则可以正常工作,但随后处理返回的Feed数据会出现其他问题......例如将其放入GData以便于处理。

我已经尝试了$feed = $gdata->importString($rawdata->getBody())但是当$rawdata->getBody()返回看似有效的XML时,$feed->totalResults会引发错误,而如果我使用$gdata->getFeed($query)则不会。

如果我取消注释$query->MaxResults=100;,请使用$gdata->getFeed($query) Google使用“未知授权标题”返回401。

因此,在将Zend_GData与Oauth令牌一起使用时,是否可以指定参数?或者我将不得不构建自己的请求,然后使用Zend_Feed(或其他一些XML / Feed解析器)进行解析?

2 个答案:

答案 0 :(得分:0)

混合使用AututhSub和OAuth的过程有点棘手。我做了一些挖掘。到目前为止,我可以下载所有我的联系人...

$client = $token->getHttpClient($config);
$client->setMethod(Zend_Http_Client::GET);
$client->setUri('http://www.google.com/m8/feeds/contacts/default/full/');
$client->setParameterGet('max-results', '10000');
$client->setParameterGet('v','3');
$bfeed = $client->request();

看起来我们之间的主要区别是我在$client->setUri('http://www.google.com/m8/feeds/contacts/default/full/');中指定Feed网址并以不同方式设置我的版本。但我可以获得body()的{​​{1}}属性,它可以为我提供245k的XML解析。

我的问题是,当我通过这种方法提取单个联系人的提要时,我收到了一个错误。

我和你一样,想要解决这个问题,所以请回复任何适合你的事情。

答案 1 :(得分:0)

我完全无法获得整个联系人列表只有25 ...参数似乎不能使用Gdata和查询这样:

$http  = $token->getHttpClient($oauthOptions);
$gdata = new Zend_Gdata($http, 'MY APP');
$gdata->setMajorProtocolVersion(3);
$gdata->getHttpClient()->setRequestScheme(Zend_Oauth::REQUEST_SCHEME_QUERYSTRING);


$query = new Zend_Gdata_Query('http://www.google.com/m8/feeds/contacts/default/full?max-results=10');
$query->setMaxResults(10);
$query->maxResults = 10;
$feed = $gdata->getFeed($query);

所以我真的想在这里找到答案。如果你们中的任何一个得到任何工作请发布:-) 感谢