ZF-4158: GData Ignores my parameters (max-results, start-index etc) when fetching feeds
Description
GData Ignores my parameters (max-results, start-index etc) when fetching feeds. No matter what parameter values I add, the GData cbntacts feed always returns the same data set (first 25 entries)
Here's my code:
<?php session_start(); //header("Content-type: text/xml");
require_once 'Zend/Oauth/Consumer.php'; require_once 'Zend/Crypt/Rsa/Key/Private.php'; require_once 'Zend/Gdata/ClientLogin.php'; require_once 'Zend/Gdata.php';
$users_index = $_SESSION['users_index'];
// my rsa key string. when in production, put this string in an external file and call it using get_file_contents $test_cert = <<<_CERT -----BEGIN RSA PRIVATE KEY----- sadfdsfsdfdsfsdfsdfsdsdfsdfsdfsdfsdfsd -----END RSA PRIVATE KEY----- _CERT;
$options = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_QUERYSTRING, 'version' => '1.0', 'signatureMethod' => 'RSA-SHA1', 'callbackUrl' => 'http://www.mydomain.com/act/test', // UPDATE FOR YOUR DETAILS 'requestTokenUrl' => 'https://www.google.com/accounts/ OAuthGetRequestToken', 'userAuthorisationUrl' => 'https://www.google.com/accounts/ OAuthAuthorizeToken', 'accessTokenUrl' => 'https://www.google.com/accounts/ OAuthGetAccessToken', 'consumerKey' => 'www.mydomain.com', // UPDATE FOR YOUR DETAILS 'consumerSecret' => new Zend_Crypt_Rsa_Key_Private($test_cert) );
/** * Example utilises the Google Contacts API */
$consumer = new Zend_Oauth_Consumer($options);
if (!isset($_SESSION['ACCESS_TOKEN_GOOGLE'])) { if (!empty($_GET)) { // Google does not like empty POST bodies - switch to GET $token = $consumer->getAccessToken($_GET, unserialize($_SESSION['REQUEST_TOKEN_GOOGLE']), Zend_Oauth::GET); $_SESSION['ACCESS_TOKEN_GOOGLE'] = serialize($token); } else { // Default POST works fine here since POST body contains scope parameter $token = $consumer->getRequestToken(array('scope'=>'http:// www.google.com/m8/feeds'), Zend_Oauth::GET); $_SESSION['REQUEST_TOKEN_GOOGLE'] = serialize($token); $consumer->redirect(); exit; } } else {
$token = unserialize($_SESSION['ACCESS_TOKEN_GOOGLE']);
$_SESSION['ACCESS_TOKEN_GOOGLE'] = null;
}
// OAuth Access Token Retreived; Proceed to query Data API $client = $token->getHttpClient($options); //$client->setUri('http://www.google.com/m8/feeds/groups/default/ full'); //$client->setMethod(Zend_Http_Client::GET);
$contact = new Zend_Gdata($client);
$contact_count =0;
$query = new Zend_Gdata_Query('http://www.google.com/m8/feeds/contacts/ default/full');
$feed = $contact->getFeed($query);
$name = ""; $email = "";
$db = new db_connect(); $db = $db->db;
foreach($feed as $entry){ $name = $entry->title;
$parts = $entry->getExtensionElements();
foreach($parts as $p){
$element = $p->getDOM();
switch($element->tagName){
case 'email':
$email = $element->getAttribute('address');
break;
default:
continue;
}
}
$data = array( 'name' => "$name", 'email' => "$email", 'users_index' => $users_index );
//insert into DB here
$contact_count++; }
Comments
Posted by Trevor Johns (tjohns) on 2008-09-02T16:36:28.000+0000
This is being caused by Zend_Oauth_client not preserving query parameters on a GET request.
Attached [^ZF-4158_v1.patch] as a patch to fix this behavior, to be sent to [~padraic] for review.
Posted by Jon Cockle (yongfook) on 2009-05-25T21:24:00.000+0000
I am still seeing this issue with the latest version in the incubator: http://framework.zend.com/svn/framework/…
and the above patch unfortunately doesn't seem to fix it.
I'm experiencing the same issue - GET params are stripped before sending requests, meaning that using Zend_Oauth for GData doesn't work beyond authentication.
Is there any update on this?
Posted by Jon Cockle (yongfook) on 2009-05-25T21:37:23.000+0000
sorry, my mistake.
the patch fixes the issue but you still need to manually set:
$client->setRequestScheme(Zend_Oauth::REQUEST_SCHEME_QUERYSTRING);
before sending your request.
looks good though.
Posted by Pádraic Brady (padraic) on 2010-02-06T07:51:08.000+0000
Fixed in r20938