2
votes

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

3
and the spreadsheet needs to be set to private so random people don't get to see it. Only people through this scriptJoeCortopassi
I'll be putting a bounty down as soon as it lets me. Seriously need thisJoeCortopassi

3 Answers

2
votes

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();
0
votes

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/<spreadsheet-key>/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/<spreadsheet-key>/<worksheet-id>/private/basic

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

https://spreadsheets.google.com/feeds/cells/0<spreadsheet-key>/<worksheet-id>/private/basic

Here is more info on the google spreadsheets api reference

0
votes

For a really easy alternative solution without Zend and without Google API this may also help.

You can publish your Google Spreadsheet as csv on the web (with a private URL) and simply access it by fopen/fgetcsv:

https://stackoverflow.com/a/18106727/1300348

Please be aware there is no authentication... so whoever has your url has your data, hence this might not be the right solution for files where there are passwords included. But maybe it helps someone with a similar problem.