Autor Zpráva
Prochy
Profil
Dobrý večer,

chtěl jsem se zeptat, jestli má někdo zkušenosti s úpravou kontaktů u Googlu. Mám v aplikaci přibližně tisíc zákazníků, a rád bych pokud aktualizuju údaje, tak aby se aktualizovali i na straně Googlu, klidně jednou za týden, to by až tak nevadilo. Problém je v tom, že nevim, jak to pořádně vyřešit. Já si dokážu stáhnout XML seznam kontaktů, který mám u Googlu, ale nedokážu přijit na to, jak poslat údaje na Google, který se mají změnit. Je mi jasný, že je nutný kontakt rozlišit podle id, což by nebyl problém, ale dál nevim, co s tim jestli tam je nutno poslat soubor s XML daty a jejich změnami. Našel jsem si tento odkaz, ale bohužel nejsem z toho moc moudrý, tak kdyby někdo s tím měl zkušenosti, nebo věděl jak by se to mělo udělat, tak bych se nezlobil. Níže přikládám jen pro příklad, jak řešim stáhnutý seznamu z Googlu, kdyby to něčemu pomohlo.

Za případné rady děkuji.

include 'libs/src/apiClient.php';
        $client = new apiClient();
        $client->setApplicationName('Google Contacts PHP Sample');
        $client->setScopes("http://www.google.com/m8/feeds/");
        //$client->setItemsPerPage();                       
        if (isset($_GET['code'])) {
            $client->authenticate();
            $this->accesToken->token = $client->getAccessToken();
            $this->redirect('this');
        }
        if (isset($this->accesToken->token)) {
            $client->setAccessToken($this->accesToken->token);
        }
        if ($client->getAccessToken()) {
            $req = new apiHttpRequest("https://www.google.com/m8/feeds/contacts/default/full?max-results=10000&v=3.0");
            $val = $client->getIo()->authenticatedRequest($req);
            // The contacts api only returns XML responses.
            $contacts = simplexml_load_string($val->getResponseBody());
Prochy
Profil
Tak sem se dostal ke stavu, kdy mám vytvořený XML soubor, ale nevim, jak to odeslat na Google API.
XML mám následující (nakonec sem se prozatím rozhodl, aby se mi povedlo vytvoření nového klienta):
<?xml version="1.0"?>
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:gd="http://schemas.google.com/g/2005">
  <atom:category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact"/>
  <gd:name>
    <gd:givenName>New</gd:givenName>
    <gd:fullName>New Name</gd:fullName>
    <gd:familyName>Name</gd:familyName>
  </gd:name>
  <atom:content type="text">Notes</atom:content>
  <gd:email rel="http://schemas.google.com/g/2005#home" address="zkouska@seznam.cz"/>
  <gd:phoneNumber rel="http://schemas.google.com/g/2005#home" primary="true">666555333</gd:phoneNumber>
</atom:entry>
Měl by odpovídat pravidlům uvedeným v Dokumentaci. Po otestování v této aplikaci mi to úspěšně vytvoří daný kontakt. Takže už potřebuji to je správně odeslat, teď jde o to jak. Počítám, že se to musí poslat pomocí cURL, s kterým nemám moc zkušenosti.

Mám sesmolený něco takovýho:

$url = 'https://www.google.com/m8/feeds/contacts/default/full';
            $cURL = curl_init();
            curl_setopt($cURL, CURLOPT_URL, $url);                                 
            curl_setopt_array($cURL, self::$DEFAULT_CURL_PARAMS);
            curl_setopt($cURL, CURLOPT_POST, 1);
            curl_setopt($cURL, CURLOPT_POSTFIELDS, $xml);
            $cResponse = (curl_exec($cURL));
            $error = curl_error($cURL);
            
            private static $DEFAULT_CURL_PARAMS = array(
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => 0,
        CURLOPT_FAILONERROR => false,
        CURLOPT_SSL_VERIFYPEER => true,        
    );
            

Ale google vyhodí hlášku 401. That's an error. Myslim si, že bych tam měl ještě posílat nějaký ověření pomocí tokenu, ale nedočetl jsem se v té dokumentaci v jakém formátu.
Enko
Profil *
Jen tak letmo jsem mrknul do dokumentace k tématu:
chyba 401 UNAUTHORIZE - Authorization required. to znamená, že nejsi v pořádku ověřený k této operaci. Viz tato stránka.
Tak jsem si našel jak to vyřešit třeba tady. A tam už máš rozcestník, ze kterého si vybereš, co se ti bude hodit. :)
Prochy
Profil
Tak paráda už jsem to vyřešil, bylo to jednodušší než sem si myslel. Stačilo si důkladněji projíst třídy dodané php knihovny od googlu. Zde přikládám řešení.

            $xml=$form['text']->getValue();            
            $requestHeaders = array('Content-Type'=> 'application/atom+xml', 'Gdata-version' => '3.0', 'Charset' => 'UTF-8');
            $req = new Google_HttpRequest("https://www.google.com/m8/feeds/contacts/default/full", "POST", $requestHeaders, $xml);
            $val = $this->client->getIo()->authenticatedRequest($req);
            $response = ($val->getResponseHttpCode());
            if($response==201){
                //client created
                dump("Klient byl úspěšně vytvořen.");
            }                     

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: