2015-05-27 11 views
8

bağlanmıyor google tablo bir süredir Zend GData kullanarak ve bugün im php aracılığıylazend gveri ve

Notice: Undefined offset: ClientLogin.php on line 150 

bir hata alıyorum ive bu değiştirmeden bugün bir süredir çalışıyor ve olmuştur çalışmayı bıraktığı bir şey varsa, google adına bazı kullanımlardan kaldırılmış hizmetlerimi zend gdata ile belki de Zend_Gdata_ClientLogin::getHttpClient() yöntemi veya bir şey hakkında tahmin edersiniz, herhangi biri onaylayabilir veya bana bu konuda yardımcı olabilir.

require_once('Zend/Loader.php'); 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 
Zend_Loader::loadClass('Zend_Gdata_Docs'); 
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets'); 
require_once 'Zend/Gdata.php'; 
require_once 'Zend/Gdata/AuthSub.php'; 
require_once 'Zend/Gdata/Spreadsheets.php'; 
require_once 'Zend/Gdata/Spreadsheets/DocumentQuery.php'; 
require_once 'Zend/Gdata/Spreadsheets/ListQuery.php'; 
require_once 'Zend/Loader.php'; 


$sourceUser = "myemail"; 
$sourcePass = "mysuperawesomepassword"; 
$service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME; 
$sourceClient = Zend_Gdata_ClientLogin::getHttpClient($sourceUser, $sourcePass, $service); 
$connection = new Zend_Gdata_Spreadsheets($sourceClient); 

özellikle bu hat

$sourceClient = Zend_Gdata_ClientLogin::getHttpClient($sourceUser, $sourcePass, $service); 

I bahsedilen olarak da hakkında-tablolar

hata noktaları ile zend GData'yı kullanıyorum, aşağıdaki gibidir: bağlanmak için kullanarak kod im Bunu bir süredir kullanıyordum ve hiçbir şey benim sonumda değişmedi

cevap

0

Sonunda böyle bir şeyle bitiriyorum (şu ana kadar çok işlenmemiş kod, ancak çözüm arayanlar için uğraştım. https://github.com/asimlqt/php-google-spreadsheet-client'un php google e-tablo istemcisine ihtiyacınız var). e-tablonun satırına (kodum için özür dilerim, ancak sho izne iyi yolu gösteren brambring Bram için kanat sadece çalışma örneği) Teşekkür - answer by bram brambring

<?php 
/* 
* Google Spreadsheet class to work with google spreadsheets obviously ;D [using OAuth 2.0, as Zend Gdata is not anymore working] 
*/ 

require_once('/Google/Spreadsheet/ServiceRequestInterface.php'); 
require_once('/Google/Spreadsheet/DefaultServiceRequest.php'); 
require_once('/Google/Spreadsheet/ServiceRequestFactory.php'); 
require_once('/Google/Spreadsheet/Spreadsheet.php'); 
require_once('/Google/Spreadsheet/SpreadsheetFeed.php'); 
require_once('/Google/Spreadsheet/SpreadsheetService.php'); 
require_once('/Google/Spreadsheet/Exception.php'); 
require_once('/Google/Spreadsheet/UnauthorizedException.php'); 
require_once('/Google/Spreadsheet/Spreadsheet.php'); 
require_once('/Google/Spreadsheet/Util.php'); 
require_once('/Google/Spreadsheet/Worksheet.php'); 
require_once('/Google/Spreadsheet/WorksheetFeed.php'); 
require_once('/Google/Spreadsheet/ListFeed.php'); 
require_once('/Google/Spreadsheet/ListEntry.php'); 
require_once('/Google/Spreadsheet/CellFeed.php'); 
require_once('/Google/Spreadsheet/CellEntry.php'); 
require_once('/Google/Config.php'); 
require_once('/Google/Client.php'); 
require_once('/Google/Auth/Abstract.php'); 
require_once('/Google/Auth/OAuth2.php'); 
require_once('/Google/Http/Request.php'); 
require_once('/Google/Utils.php'); 
require_once('/Google/IO/Abstract.php'); 
require_once('/Google/IO/Curl.php'); 
require_once('/Google/Http/CacheParser.php'); 
require_once('/Google/Logger/Abstract.php'); 
require_once('/Google/Logger/Null.php'); 
require_once('/Google/Exception.php'); 
require_once('/Google/Auth/Exception.php'); 
require_once('/Google/Auth/AssertionCredentials.php'); 
require_once('/Google/Cache/Abstract.php'); 
require_once('/Google/Cache/File.php'); 
require_once('/Google/Signer/Abstract.php'); 
require_once('/Google/Signer/P12.php'); 

use Google\Spreadsheet\DefaultServiceRequest; 
use Google\Spreadsheet\ServiceRequestFactory; 

class Google_Spreadsheet 
{ 
    private $default = array(
     'worksheetCols' => 12, 
     'worksheetRows' => 25 
    ); 

    private $spreadsheetKey; 
    private $spreadsheetName; 
    private $worksheetName; 
    private $spreadsheetFeed; 

    public $initialized = true; 

    public function __construct($spreadsheetKey, $worksheetName, $spreadsheetName = '') 
    { 
     $this->spreadsheetKey = $spreadsheetKey; 
     $this->worksheetName = $worksheetName; 
     $this->spreadsheetName = $spreadsheetName; 

     $this->initialized = $this->initialize(); 
     return true; 
    } 

    private function getToken() { 
     $client_email = '[email protected]om'; 
     $private_key = file_get_contents('API Project-f10e456456b60.p12'); 
     $scopes = array('https://spreadsheets.google.com/feeds'); 
     $credentials = new Google_Auth_AssertionCredentials(
      $client_email, 
      $scopes, 
      $private_key, 
      'notasecret',         // Default P12 password 
      'http://oauth.net/grant_type/jwt/1.0/bearer' // Default grant type 
     ); 

     $client = new Google_Client(); 
     $client->setAssertionCredentials($credentials); 
     if ($client->getAuth()->isAccessTokenExpired()) { 
      $client->getAuth()->refreshTokenWithAssertion(); 
     } 

     $tokenData = json_decode($client->getAccessToken()); 
     return $tokenData->access_token; 
    } 

    public function initialize(/*$reInitialized = false*/) 
    { 
     // load OAuth2 token data - exit if false 
     $tokenData = $this->getToken(); 
     $serviceRequest = new DefaultServiceRequest($tokenData); 
     ServiceRequestFactory::setInstance($serviceRequest); 
     $spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); 
     try { 
      $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); 
     } catch (\Google\Spreadsheet\UnauthorizedException $e) {  
      Google_Spreadsheet::warnAdmin($e->getMessage()); 
      return false; 
     } 

     $this->spreadsheetFeed = $spreadsheetFeed; 
     return true; 
    } 

    public function insertRow($rowData, $default_fields = array()) { 
     $spreadsheetFeed = $this->spreadsheetFeed; 
     $spreadsheet = $this->spreadsheetKey ? $spreadsheetFeed->getByKey($this->spreadsheetKey) : $spreadsheetFeed->getByTitle($this->spreadsheetName); 
     if(!$spreadsheet && !empty($this->spreadsheetName)) { 
      $spreadsheet = $spreadsheetFeed->getByTitle($this->spreadsheetName); 
     } 

     if(!$spreadsheet) { 
      Google_Spreadsheet::warnAdmin('No spreadsheet', serialize($rowData)); 
      return false; 
     } 

     $worksheetFeed = $spreadsheet->getWorksheets(); 
     $worksheet = $worksheetFeed->getByTitle($this->worksheetName); 

     if(!$worksheet) { 
      //create worksheet if not exist 
      $worksheet = $spreadsheet->addWorksheet($this->worksheetName, $this->default['worksheetRows'], $this->default['worksheetCols']); 

      $cellFeed = $worksheet->getCellFeed(); 
      for($i= 1 ; $i <= $this->default['worksheetCols']; $i++) { 
       if(isset($default_fields[$i])) { 
        $cellFeed->editCell(1, $i, $default_fields[$i]); 
       } 
       else { 
        $cellFeed->editCell(1, $i, "head"); 
       } 

       $cellFeed->editCell(2,$i,"content"); 
      } 
     } 

     if(!$worksheet) { 
      Google_Spreadsheet::warnAdmin('No worksheet', serialize($rowData)); 
      return false; 
     } 

     $listFeed = $worksheet->getListFeed(); 

     $data = array(); 
     foreach ($listFeed->getEntries() as $entry) { 
      $values = $entry->getValues(); 
      $data[] = $values; 
      break; //only first row needed, as we need keys 
     } 

     $keys = array(); 
     if(!count($data)) { 
      Google_Spreadsheet::warnAdmin('No data', serialize($rowData)); 
      return false; 
     } 

     foreach ($data[0] as $key => $value) { 
      $keys[] = $key; 
     } 

     $newRow = array(); 
     $count = 0; 
     foreach($keys as $key) { 
      if(isset($rowData[$count])) { 
       $newRow["$key"] = $rowData[$count]; 
      } 
      else { 
       $newRow["$key"] = ''; 
      } 

      $count++; 
     } 

     $listFeed->insert($newRow); 
     return true; 
    } 


    static function warnAdmin($reason = '', $content = '') { 
     //temporal function to warn myself about all the stuff happening wrong :) 

    } 
} 

Ve ana modelde kullanıyorum:

$spreadsheet = new Google_Spreadsheet("spreadsheet name or ID", $worksheetname, "My spreadsheet name"); 

     if(!$spreadsheet->initialized) { 
      Google_Spreadsheet::warnAdmin('cannot initialize spreadsheet', serialize($rowValues)); 
     } 


     if(!$spreadsheet->initialized || !$spreadsheet->insertRow($rowValues, $this->default_fields)) { 
      Google_Spreadsheet::warnAdmin('failed to insert row '); 
     } 

@Edit, Bram sayesinde onun simgesi için brambring Çözüm, benimkinden daha kolay görünüyor. Şimdi bir çekicilik gibi çalışarak, umarım normal şekilde jetonunu yenileyecek. TEŞEKKÜRLER AHBAP!

+0

Maxim Fedan, lütfen diğer sorumu ziyaret ederseniz [link] http : //stackoverflow.com/questions/30532607/copyfile-function-google-api-php eğer bana yardım edebilirseniz lütfen – nonaxanon

+0

google drive api ile çalışmayın ve asla kopyalanmamış/yaratılmamış/kaldırılmamış :(sorry –

-2

Ayrıca Google E-Tablolar için Zend kullanarak php komut dosyalarına sahip oldum. Yıllardır harika çalışıyorlardı, ama bugün öğlen saatlerinde işe yaramadı. Google tarafında neler değişti ve nasıl düzeltilebiliyor? bağlantı sonrası, artık itibar kuzen kaldırıldı:

0

lutfen bu konuda sıkışmış Been , nihayet

Important: Do not use ClientLogin for new applications. Instead, use the more secure OAuth authentication protocol. ClientLogin is a deprecated authentication protocol and is being turned down on April 20, 2015. At that time, ClientLogin requests will no longer be answered. If you have existing applications that use ClientLogin, we encourage you to migrate to OAuth. The ClientLogin support in this library will be removed in the next major release.

, bu çözüm olabilir şimdi OAuth ile benim elektronik tablolar yeniden deneyeceğim çıkarıldı google'ın ClientLogin'den gibi görünüyor

no'lu yönergeye; magnetikonline ile bazı sorunları yaşıyorsanız, bu yüzden bu çözümü deneyeceğim: daha fazla itibar kaldırıldı, yorumlara bağlantı gönderecek

edit2;/'\ bu çözüm çok daha iyi, şimdi gitmeliyim, fakat bu kütüphanede biraz başarı elde ettim, gördüğüm kadarıyla çok daha iyi çalışır ve daha fazla işlevsellik sağlar, denemeliyim.

Jeton ile ilgili sorununuz için, https://github.com/asimlqt/php-google-oauth'u deneyin. Bu şekilde benim için de çalıştı ve çok daha kolay oldu, ben belirteci bilgisi ile dizimi yeniden keşfettim (eğer bu kütüphaneyi ikinci kütüphaneyle deneyecek olursanız, ur simgesi dizgiye dönüşürken, sadece $ accessToken ['access_token'] bölümüne ihtiyaç duyarsınız. $ yeni DefaultServiceRequest ($ accessToken) = serviceRequest yapmak; buldum

Başka bir büyük öğretici: http://konstantinshkut.com/blog/2014/11/01/how_to_get_data_from_google_spreadsheet_in_yii_php_application (ikinci çözüm için şu, asimlqt/php-google-tablo-istemci), 6. adımı çok yardımcı olur anlamak için nasıl benim dosya gerekir

+0

Kullanımı: exchangecodefortokens.php -c YETKİLENDİRME KODU orada sıkışmış, bazı işaretçiler paylaşabilirsiniz düşünüyorum? – nonaxanon

+0

Kodunuz benim durumumda 4/z7xfjN3RI3dNTy38cfMzu4zF9pJNrJxCk2m-55LA içinde yüzden noktadan öncesi sadece bir kısmını kullanmaya çalıştı kadar, bu bana hata veriyordu 4/z7xfjN3RI3dNTy38cfMzu4zF9pJNrJxCk2m-55LA.cqdvdLrNQ335uyeEpmwI # gibi bakıyor olmalıdır (php exchangecodefortorkens.php -c 4/z7xfjN3RI3dNTy38cfMzu4zF9pJNrJxCk2m -55LA) –

+0

tamam ama bu php değişimi nasıl çalışırım ... o hiçbir ipucu ne yok – nonaxanon

4

Sunucuya sunucu uygulaması için ClientLogin kullanıyorum. Bugün acele eden oAuth2'ye geçmek için

. Ben geliştirici e değil uygulama e-posta kullanmak için gereken bir 'Hizmet hesabı'

function get_token() { 
$client_email = '0-1.apps.googleusercontent.com'; 
$client_email = '[email protected]'; 
$private_key = file_get_contents('abc.p12'); 
$scopes = array('https://spreadsheets.google.com/feeds'); 
$credentials = new Google_Auth_AssertionCredentials(
    $client_email, 
    $scopes, 
    $private_key, 
    'notasecret',         // Default P12 password 
    'http://oauth.net/grant_type/jwt/1.0/bearer' // Default grant type 
); 

$client = new Google_Client(); 
$client->setAssertionCredentials($credentials); 
if ($client->getAuth()->isAccessTokenExpired()) { 
$client->getAuth()->refreshTokenWithAssertion(); 
} 
$tokenData = json_decode($client->getAccessToken()); 
     return $tokenData->access_token; 
} 

kullanarak yetkilendirme jetonu almak üzere, aynı e-posta elektronik tabloya bir kullanıcı olarak eklenmesi gerekir bulduğumuz bazı örnekler birleşti

oluşturulan bir jeton daha sonra ClientLogin'i kaldırılmış

$accessToken = get_token(); 

$serviceRequest = new DefaultServiceRequest($accessToken); 
ServiceRequestFactory::setInstance($serviceRequest); 

$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); 
$spreadsheetFeed = $spreadsheetService->getSpreadsheets(); 

$spreadsheet = $spreadsheetFeed->getByTitle('Hello World'); 
+0

"abc.p12" dosyasını nasıl oluşturdunuz? Hizmet hesabını oluşturduğumda, bir .json dosyası indirdi, ayrıca get_token() işleviniz için bağımlılık dosyaları gereklidir? Teşekkür! – Concept211

+1

.p12 dosyası senin api konsolu, google type api konsoluna git, genellikle ilk link, servise karşılık gelen hesapla oturum aç ve müşteri kimliği oluştur, servis hesabı, otomatik olarak .p12 uzantılı bir dosyayı indirip dosya adını değiştir ,,, dosya adı süper uzun – nonaxanon

-3

, yine çalışır php-google-tablo-istemci ile kullanılabilir! Google I/O konferansının arifesinde böyle bir sürpriz oldu mu? Kendime özel bir çözüm yazmalıydım. Üçüncü taraf kütüphaneleri temelde kullanılamaz durumda idi, 10 yöntem yazdım, bence çok karmaşık ve hantal olan alternatiflerden daha iyi. Benden satın alabilirsiniz)) Henüz hazır değil github)