2012-06-24 7 views
5

Ich verwende die ClientLogin-Methode und cURL, um mich bei den Google-APIs anzumelden. Das funktioniert einwandfrei und ich erhalte ein Token zur weiteren Verwendung. Ich kann jetzt docs.google.com Abfrage vonMelden Sie sich bei Google Spreadshet API mit ClientLogin und PHP/cURL an

 $curl = curl_init(); 

     $headers = array(
      "Authorization: GoogleLogin auth=" . $auth, 
      "GData-Version: 3.0", 
     ); 

     curl_setopt($curl, CURLOPT_URL, "https://docs.google.com/feeds/default/private/full"); 
     curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
     curl_setopt($curl, CURLOPT_POST, false); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

     $response = curl_exec($curl); 
     curl_close($curl); 

mit Das funktioniert gut und ich bekomme eine Liste aller Dokumente in meinem Google Text & Tabellen-Konto. Aber wenn ich die gleiche Abfrage versuchen, mit der URL aus den api documentation erhalten spreadsheets.google.com:

https://spreadsheets.google.com/feeds/spreadsheets/private/full 

Ich erhalte eine 401 Fehlermeldung, dass das verwendete Token ist ungültig. Ich verwende in beiden Fällen das gleiche Token und die gleiche Abfrage. Brauche ich ein anderes Token für die Google Tabellen api?

Edit: Dies ist, wie ich ersuche das Token:

 $clientlogin_url = "https://www.google.com/accounts/ClientLogin"; 
     $clientlogin_post = array(
      "accountType" => "HOSTED_OR_GOOGLE", 
      "Email" => "my email", 
      "Passwd" => "my password", 
      "service" => "writely", 
      "source" => "my application name" 
     ); 

     $curl = curl_init($clientlogin_url); 

     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); 

     $response = curl_exec($curl); 

     preg_match("/Auth=([a-z0-9_-]+)/i", $response, $matches); 
     $auth = $matches[1]; 
     curl_close($curl); 
+0

das gleiche Token in Ordnung sein würde, aber auf Kommentar $ curl = curl_init(); und verwenden Sie das gleiche $ curl-Objekt auch für die Datei spreadsheets.google.com. Lassen Sie mich wissen, wenn das geholfen hat –

+0

leider hat dies keine Wirkung – Marco

+0

Ah, ich denke, Sie müssen für alle Domänen auth. Ich denke, Google behandelt docs.google.com und Tabellen. google .com als zwei verschiedene Dienste, die eigene Auths erfordern. Sie können dies schnell testen, indem Sie -> 1. Liste von Google Docs, speichern Sie Auth 2. Verwenden Sie die gleiche Auth für Tabellenkalkulationen, erfassen Sie den Fehler, und 3. verwenden Sie die gleiche Auth für Google Docs wieder, wenn dies funktioniert, dann unsere Annahme ist richtig. –

Antwort

6

Kurze Antwort - Ja. Sie müssen verschiedene Token für verschiedene Dienste generieren. Die Service-Namen, die Sie übergeben, um ein AUH-Token abzurufen, unterscheiden sich in jedem Fall. Sehen Sie hier für weitere Details - https://developers.google.com/gdata/faq

Zum Beispiel aus der Dokumentation der req für Tabellen sollten

$clientlogin_post = array(
            "accountType" => "HOSTED_OR_GOOGLE", 
            "Email" => "my email", 
            "Passwd" => "my password", 
            "service" => "wise", 
            "source" => "my application name" 
       ); 
+0

Danke, dieser FAQ-Link ist ein versteckter Schatz :) – aorcsik

Verwandte Themen