views:

175

answers:

2

Getting super frustrated trying to get this working. Basically this is for a site (x10hosting.com) where I can't include the zend gdata framework, so I'm trying to use the Google Data API with php cURL to access it. The most I've been able to do is return a list of the supplied usernames worksheets, using this script:

<?php

// Construct an HTTP POST request
$clientlogin_url = "https://www.google.com/accounts/ClientLogin";
$clientlogin_post = array(
    "accountType" => "HOSTED_OR_GOOGLE",
    "Email" => "", //username
    "Passwd" => '',  //password
    "service" => "writely",
    "source" => "your application name"
);

// Initialize the curl object
$curl = curl_init($clientlogin_url);

// Set some options (some for SHTTP)
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clientlogin_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// Execute
$response = curl_exec($curl);

// Get the Auth string and save it
preg_match("/Auth=([a-z0-9_\-]+)/i", $response, $matches);
$auth = $matches[1];

echo "The auth string is: ".$auth;
// Include the Auth string in the headers
// Together with the API version being used
$headers = array(
    "Authorization: GoogleLogin auth=".$auth,
    "GData-Version: 3.0",
);

// Make the request
$key = ;
curl_setopt($curl, CURLOPT_URL, "https://spreadsheets1.google.com/ccc?key=$key");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, false);

$response = curl_exec($curl);
curl_close($curl);
var_dump($response);
// Parse the response
$response = simplexml_load_string($response);

// Output data
foreach($response->entry as $file)
{
    echo "File: " . $file->title . "<br />";
    echo "Type: " . $file->content["type"] . "<br />";
    echo "Author: " . $file->author->name . "<br /><br />";
}
?>

But I can't figure out a way to use this to access one specific worksheet. Please help, this is driving me nuts.

EDIT: Following DASPRiD's advice gives me this error->

Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /home/c3webdev/public_html/library/Zend/Loader.php on line 266

Warning: require_once(Zend/Loader/Autoloader.php) [function.require-once]: failed to open stream: No such file or directory in /home/c3webdev/public_html/library/Zend/Loader.php on line 267

Fatal error: require_once() [function.require]: Failed opening required 'Zend/Loader/Autoloader.php' (include_path='/home/c3webdev/public_html/library:.:/usr/lib/php:/usr/local/lib/php') in /home/c3webdev/public_html/library/Zend/Loader.php on line 267

+2  A: 

A query to the following URL should list you all worksheets of a specific spreadsheet:

http://spreadsheets.google.com/feeds/worksheets/**spreadsheetKey**/private/full

To install and use Zend_Gdata, do the following:

Download the last package (http://framework.zend.com/releases/ZendGdata-1.10.7/ZendGdata-1.10.7.tar.gz) from the Zend Framework website. Now let's assume the following directors structure:

  • /index.php (your main file)
  • /library/Zend (extract the library/Zend folder in here)

Now in your index.php, do the following:

set_include_path(
    dirname(__FILE__) . '/library'
    . PATH_SEPARATOR . get_include_path()
);

require_once 'Zend/Loader.php';

Zend_Loader::registerAutoload();

Now you can simply follow the manual (http://framework.zend.com/manual/en/zend.gdata.spreadsheets.html). Interesting for you may be the topics "Get a List of Spreadsheets" for creating the service instance and "Get a List of Worksheets" to fetch all worksheets of a specific spreadsheet.

Update:

It looks like the Zend_Gdata package is not properly packaged. I will note that to get the package fixed. In the meantime, I suggest you to download the complete Zend Framework package. To use the autoloader in 1.8 correctly, do the following instead:

require_once 'Zend/Loader/Autoloader.php';

Zend_Loader_Autoloader::getInstance();
DASPRiD
Tried that, it gives me "invalid token" error
Cortopasta
Hm, that doesn't seem like a problem with the URL. I actually extracted the URL generated by Zend_Gdata. By the way, may I ask you why you cannot download the Zend_Gdata package and upload it to your server? It's probably easier to solve that problem and give you a fully working PHP implementation.
DASPRiD
shared server. Unable to add the library and modify the php.ini file. If you know a way to include it through require_once() like I would any other php page, I'm open to that suggestion. But the Zend Gdata would have to go in the public html folder
Cortopasta
Ah, that's no problem. Simply put the "Zend" folder in a folter and set include path on that folder (see set_include_path()). Then do require_once 'Zend/Loader.php'; and Zend_Loader::registerAutoload(). Then you are ready to go. and simply use all Zend_Gdata classes without any more requiring.
DASPRiD
Can't get it to work, but it's probably me doing something wrong. Can you edit your answer to show a code example?
Cortopasta
Sure, gimme a moment.
DASPRiD
Tried it and got an error(edited my question to show the error). Any idea what the error is about? Did exactly what you said
Cortopasta
See updated answer.
DASPRiD
so were you able to install Zend gdata?
JiminyCricket
A: 

Once you get the list of supplied worksheets for that user you can parse through to get the data (thats what you want right? the worksheet data?)

As mentioned above this is how you get the spreadsheets available

http://spreadsheets.google.com/feeds/worksheets/&lt;spreadsheet-key&gt;/private/full

Then from there you can get the url to a specific spreadsheet and then from there you can get the data from that

List returns the data with appropriate headings

https://spreadsheets.google.com/feeds/list/&lt;spreadsheet-key&gt;/&lt;worksheet-id&gt;/private/basic

Cells returns it with defined cells (A1, C23 etc.)

https://spreadsheets.google.com/feeds/cells/0&lt;spreadsheet-key&gt;/&lt;worksheet-id&gt;/private/basic

Here is more info on the google spreadsheets api reference

JiminyCricket