0

PHP'de bir uygulama geliştiriyorum, ilk kez 100 kişi yüklemem gerekiyor, temel bir uygulama geliştirdim, bir kişiyi yüklemek için, ancak isteği işlemek için 1,5 saniye'a yakın bir şekilde gerekiyor:Birden çok yükleme Google Kişiler Api XML?

 $before = microtime(true); 
     $req = new Google_Http_Request("https://google.com/m8/feeds/contacts/" . $user_email . "/full/"); 
     $req->setRequestMethod("POST"); 
     $req->setPostBody($contact_xml); 
     $req->setRequestHeaders(array('content-length' => strlen($contact_xml), 'GData-Version' => '3.0', 'content-type' => 'application/atom+xml; charset=UTF-8; type=feed')); 

     $submit = $this->_gclient->getAuth()->authenticatedRequest($req); 
     $sub_response = $submit->getResponseBody(); 
     $parsed = simplexml_load_string($sub_response); 
     $client_id = explode("base/", $parsed->id); 

     //Profiling 
     $after = microtime(true); 

benim iki kez giriş ya i gerekli kez contcatenate çalıştık ama çalışmıyor:

$contact_xml.=" 
<atom:entry xmlns:atom='http://www.w3.org/2005/Atom' 
    xmlns:gd='http://schemas.google.com/g/2005' 
    xmlns:gContact='http://schemas.google.com/contact/2008'> 
    <atom:category scheme='http://schemas.google.com/g/2005#kind' 
    term='http://schemas.google.com/contact/2008#contact'/> 
    ... 
    <gContact:groupMembershipInfo deleted='false' 
     href='http://www.google.com/m8/feeds/groups/".$user_email."/base/6'/> 
</atom:entry> 

ve google aldığım tek şey:

[1] => SimpleXMLElement Object 
    (
     [error] => SimpleXMLElement Object 
      (
       [domain] => GData 
       [code] => parseError 
       [internalReason] => Parse Error 
      ) 

    ) 
gibidir

...

  1. i yanlış mı yapıyorum, Google asenkron istek her türlü verir?
  2. Birden çok google iletişim girişi yüklemesi yapmak bile mümkün müdür?
  3. Tek tek yükleme işleviyle bir döngü oluşturursak, 100 kişi için çok uzun sürüyor, sorunun nedeni budur.

Sizden!

+0

Google, herhangi bir eşzamansız istekte bulunur mu? Google iletişim girişinin birden çok yüklemesi bile mümkün. Belgeler ne diyor? – DaImTo

+0

Hiçbir şey söylemiyor, daha önce belgelere danıştım ve bu yüzden sormadığım bir şey bulamadım. Ve sanırım burada daha önce sorulmamış, insanlara ilginç gelebilir. –

+0

Belgelerin içinde değilse, büyük olasılıkla desteklenmediği için. Kişiler, eski bir Gdata API'sidir ve yeni Discovery API'lerinin işlevselliğine sahip değildir. Gdata apis'teki belgeleri kontrol etmek ve toplu işlerin https://developers.google.com/gdata/docs/batch – DaImTo

cevap

1

Son olarak, DalmTo sayesinde, GData'un toplu işle işlevi, bu sorunla mükemmel uyum sağlar. Eğer döngü gereken operasyonla,

<feed xmlns='http://www.w3.org/2005/Atom' xmlns:gContact='http://schemas.google.com/contact/2008' xmlns:gd='http://schemas.google.com/g/2005' xmlns:batch='http://schemas.google.com/gdata/batch'> <entry> <batch:id>create</batch:id> <batch:operation type='insert'/> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2008#contact'/> <gd:name> <gd:fullName>Example example</gd:fullName> <gd:givenName>Example</gd:givenName> <gd:familyName>Example</gd:familyName> </gd:name> <gd:email rel='http://schemas.google.com/g/2005#home' address='[email protected]' primary='true'/> </entry></feed> 

o zaman sadece girişini çoğaltmak gerekir: Burada toplu işlevselliğini kullanmak için oluşturmak için gereken yem örneğidir. Umarım

$req = new Google_Http_Request("https://www.google.com/m8/feeds/contacts/" . $user_email . "/full/batch/");

: gibi Google'a istek olurdu

<gContact:groupMembershipInfo deleted = 'false' href = 'http://www.google.com/m8/feeds/groups/" . $user_email . "/base/6' /> 

: Kişiler gelen kutusunda oluşturulan kişiler almak için Sadece bir recomendation, eklemek gerekir Bu birilerine yardımcı olur.