2012-06-24 10 views
5

Sto utilizzando il metodo ClientLogin e cURL per accedere alle API di Google. Funziona bene e ricevo un token per ulteriore utilizzo. Ora posso interrogare docs.google.com utilizzandoAccedi all'API di Google Spreadshet utilizzando ClientLogin e PHP/cURL

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

Questo funziona bene e ho un elenco di tutti i documenti disponibili nei miei documenti Google. Ma se provo la stessa query per spreadsheets.google.com con l'URL ottenuto dalla api documentation:

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

ottengo un errore di 401 dicendo che il token utilizzato non è valido. Sto usando lo stesso token e la query in entrambi i casi. Ho bisogno di un token diverso per l'API dei fogli di lavoro di Google?

Edit: Questo è come mi chiedo il 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

lo stesso motivo dovrebbe andare bene, ma come commento $ ricciolo = curl_init(); e usa lo stesso oggetto $ curl anche per spreadsheets.google.com. Fatemi sapere se questo ha aiutato –

+0

sfortunatamente questo non ha alcun effetto – Marco

+0

Ah, penso che sia necessario eseguire l'autenticazione per tutti i domini. Penso che Google tratti docs.google.com e fogli di lavoro. google .com come due diversi servizi che richiedono autorizzazioni proprie. Puoi testare rapidamente i risultati da -> 1. ottenere l'elenco di google docs, salvare auth 2. utilizzare la stessa autorizzazione per i fogli di lavoro, catturare l'errore e 3. utilizzare di nuovo la stessa auth per Google Documenti, se funziona, allora il nostro l'ipotesi è giusta. –

risposta

6

Risposta breve - Sì. È necessario generare diversi token per servizi diversi. I nomi dei servizi che si inoltrano per recuperare un token auh sono diversi in ciascun caso. Vedi qui per maggiori dettagli - https://developers.google.com/gdata/faq

Per esempio dalla documentazione del req per i fogli di calcolo sarebbe

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

Grazie, quel collegamento faq è un tesoro nascosto :) – aorcsik

Problemi correlati