php – zend gdata和谷歌电子表格没有连接

前端之家收集整理的这篇文章主要介绍了php – zend gdata和谷歌电子表格没有连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在使用Zend Gdata一段时间了,今天我得到了一个错误
  1. Notice: Undefined offset: ClientLogin.PHP on line 150

通过PHP,这已经工作了一段时间,今天没有改变任何它停止工作,我猜测一些弃用的服务代表谷歌与zend gdata可能Zend_Gdata_ClientLogin :: getHttpClient()方法或其他什么,可以任何一个确认或帮我解决这个问题.我用来连接的代码如下:

  1. require_once('Zend/Loader.PHP');
  2. Zend_Loader::loadClass('Zend_Gdata');
  3. Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
  4. Zend_Loader::loadClass('Zend_Gdata_Docs');
  5. Zend_Loader::loadClass('Zend_Gdata_Spreadsheets');
  6. require_once 'Zend/Gdata.PHP';
  7. require_once 'Zend/Gdata/AuthSub.PHP';
  8. require_once 'Zend/Gdata/Spreadsheets.PHP';
  9. require_once 'Zend/Gdata/Spreadsheets/DocumentQuery.PHP';
  10. require_once 'Zend/Gdata/Spreadsheets/ListQuery.PHP';
  11. require_once 'Zend/Loader.PHP';
  12.  
  13.  
  14. $sourceUser = "myemail";
  15. $sourcePass = "mysuperawesomepassword";
  16. $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
  17. $sourceClient = Zend_Gdata_ClientLogin::getHttpClient($sourceUser,$sourcePass,$service);
  18. $connection = new Zend_Gdata_Spreadsheets($sourceClient);

我正在使用zend gdata和谷歌电子表格

错误也指向此行

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

就像我说的那样,我现在已经使用了一段时间了,我的结局没有任何改变

最后,我结束了这样的事情(到目前为止非常原始的代码,但是对于那些正在寻求解决方案的人来说也是如此.你需要 https://github.com/asimlqt/php-google-spreadsheet-clientPHP google电子表格客户端).这是在我的电子表格中插入一行的一个小例子(对我的代码感到抱歉,但只显示工作示例)
感谢bram brambring显示更好的授权方式 – answer by bram brambring
  1. <?PHP
  2. /*
  3. * Google Spreadsheet class to work with google spreadsheets obvIoUsly ;D [using OAuth 2.0,as Zend Gdata is not anymore working]
  4. */
  5.  
  6. require_once('/Google/Spreadsheet/ServiceRequestInterface.PHP');
  7. require_once('/Google/Spreadsheet/DefaultServiceRequest.PHP');
  8. require_once('/Google/Spreadsheet/ServiceRequestFactory.PHP');
  9. require_once('/Google/Spreadsheet/Spreadsheet.PHP');
  10. require_once('/Google/Spreadsheet/SpreadsheetFeed.PHP');
  11. require_once('/Google/Spreadsheet/SpreadsheetService.PHP');
  12. require_once('/Google/Spreadsheet/Exception.PHP');
  13. require_once('/Google/Spreadsheet/UnauthorizedException.PHP');
  14. require_once('/Google/Spreadsheet/Spreadsheet.PHP');
  15. require_once('/Google/Spreadsheet/Util.PHP');
  16. require_once('/Google/Spreadsheet/Worksheet.PHP');
  17. require_once('/Google/Spreadsheet/WorksheetFeed.PHP');
  18. require_once('/Google/Spreadsheet/ListFeed.PHP');
  19. require_once('/Google/Spreadsheet/ListEntry.PHP');
  20. require_once('/Google/Spreadsheet/CellFeed.PHP');
  21. require_once('/Google/Spreadsheet/CellEntry.PHP');
  22. require_once('/Google/Config.PHP');
  23. require_once('/Google/Client.PHP');
  24. require_once('/Google/Auth/Abstract.PHP');
  25. require_once('/Google/Auth/OAuth2.PHP');
  26. require_once('/Google/Http/Request.PHP');
  27. require_once('/Google/Utils.PHP');
  28. require_once('/Google/IO/Abstract.PHP');
  29. require_once('/Google/IO/Curl.PHP');
  30. require_once('/Google/Http/CacheParser.PHP');
  31. require_once('/Google/Logger/Abstract.PHP');
  32. require_once('/Google/Logger/Null.PHP');
  33. require_once('/Google/Exception.PHP');
  34. require_once('/Google/Auth/Exception.PHP');
  35. require_once('/Google/Auth/AssertionCredentials.PHP');
  36. require_once('/Google/Cache/Abstract.PHP');
  37. require_once('/Google/Cache/File.PHP');
  38. require_once('/Google/Signer/Abstract.PHP');
  39. require_once('/Google/Signer/P12.PHP');
  40.  
  41. use Google\Spreadsheet\DefaultServiceRequest;
  42. use Google\Spreadsheet\ServiceRequestFactory;
  43.  
  44. class Google_Spreadsheet
  45. {
  46. private $default = array(
  47. 'worksheetCols' => 12,'worksheetRows' => 25
  48. );
  49.  
  50. private $spreadsheetKey;
  51. private $spreadsheetName;
  52. private $worksheetName;
  53. private $spreadsheetFeed;
  54.  
  55. public $initialized = true;
  56.  
  57. public function __construct($spreadsheetKey,$worksheetName,$spreadsheetName = '')
  58. {
  59. $this->spreadsheetKey = $spreadsheetKey;
  60. $this->worksheetName = $worksheetName;
  61. $this->spreadsheetName = $spreadsheetName;
  62.  
  63. $this->initialized = $this->initialize();
  64. return true;
  65. }
  66.  
  67. private function getToken() {
  68. $client_email = '318977712937456456454656563tcfjblgoi@developer.gserviceaccount.com';
  69. $private_key = file_get_contents('API Project-f10e456456b60.p12');
  70. $scopes = array('https://spreadsheets.google.com/Feeds');
  71. $credentials = new Google_Auth_AssertionCredentials(
  72. $client_email,$scopes,$private_key,'notasecret',// Default P12 password
  73. 'http://oauth.net/grant_type/jwt/1.0/bearer' // Default grant type
  74. );
  75.  
  76. $client = new Google_Client();
  77. $client->setAssertionCredentials($credentials);
  78. if ($client->getAuth()->isAccessTokenExpired()) {
  79. $client->getAuth()->refreshTokenWithAssertion();
  80. }
  81.  
  82. $tokenData = json_decode($client->getAccessToken());
  83. return $tokenData->access_token;
  84. }
  85.  
  86. public function initialize(/*$reInitialized = false*/)
  87. {
  88. // load OAuth2 token data - exit if false
  89. $tokenData = $this->getToken();
  90. $serviceRequest = new DefaultServiceRequest($tokenData);
  91. ServiceRequestFactory::setInstance($serviceRequest);
  92. $spreadsheetService = new Google\Spreadsheet\SpreadsheetService();
  93. try {
  94. $spreadsheetFeed = $spreadsheetService->getSpreadsheets();
  95. } catch (\Google\Spreadsheet\UnauthorizedException $e) {
  96. Google_Spreadsheet::warnAdmin($e->getMessage());
  97. return false;
  98. }
  99.  
  100. $this->spreadsheetFeed = $spreadsheetFeed;
  101. return true;
  102. }
  103.  
  104. public function insertRow($rowData,$default_fields = array()) {
  105. $spreadsheetFeed = $this->spreadsheetFeed;
  106. $spreadsheet = $this->spreadsheetKey ? $spreadsheetFeed->getByKey($this->spreadsheetKey) : $spreadsheetFeed->getByTitle($this->spreadsheetName);
  107. if(!$spreadsheet && !empty($this->spreadsheetName)) {
  108. $spreadsheet = $spreadsheetFeed->getByTitle($this->spreadsheetName);
  109. }
  110.  
  111. if(!$spreadsheet) {
  112. Google_Spreadsheet::warnAdmin('No spreadsheet',serialize($rowData));
  113. return false;
  114. }
  115.  
  116. $worksheetFeed = $spreadsheet->getWorksheets();
  117. $worksheet = $worksheetFeed->getByTitle($this->worksheetName);
  118.  
  119. if(!$worksheet) {
  120. //create worksheet if not exist
  121. $worksheet = $spreadsheet->addWorksheet($this->worksheetName,$this->default['worksheetRows'],$this->default['worksheetCols']);
  122.  
  123. $cellFeed = $worksheet->getCellFeed();
  124. for( $i= 1 ; $i <= $this->default['worksheetCols']; $i++ ) {
  125. if(isset($default_fields[$i])) {
  126. $cellFeed->editCell(1,$i,$default_fields[$i]);
  127. }
  128. else {
  129. $cellFeed->editCell(1,"head");
  130. }
  131.  
  132. $cellFeed->editCell(2,"content");
  133. }
  134. }
  135.  
  136. if(!$worksheet) {
  137. Google_Spreadsheet::warnAdmin('No worksheet',serialize($rowData));
  138. return false;
  139. }
  140.  
  141. $listFeed = $worksheet->getListFeed();
  142.  
  143. $data = array();
  144. foreach ($listFeed->getEntries() as $entry) {
  145. $values = $entry->getValues();
  146. $data[] = $values;
  147. break; //only first row needed,as we need keys
  148. }
  149.  
  150. $keys = array();
  151. if(!count($data)) {
  152. Google_Spreadsheet::warnAdmin('No data',serialize($rowData));
  153. return false;
  154. }
  155.  
  156. foreach ($data[0] as $key => $value) {
  157. $keys[] = $key;
  158. }
  159.  
  160. $newRow = array();
  161. $count = 0;
  162. foreach($keys as $key) {
  163. if(isset($rowData[$count])) {
  164. $newRow["$key"] = $rowData[$count];
  165. }
  166. else {
  167. $newRow["$key"] = '';
  168. }
  169.  
  170. $count++;
  171. }
  172.  
  173. $listFeed->insert($newRow);
  174. return true;
  175. }
  176.  
  177.  
  178. static function warnAdmin($reason = '',$content = '') {
  179. //temporal function to warn myself about all the stuff happening wrong :)
  180.  
  181. }
  182. }

在我使用的主模型中:

  1. $spreadsheet = new Google_Spreadsheet("spreadsheet name or ID",$worksheetname,"My spreadsheet name");
  2.  
  3. if(!$spreadsheet->initialized) {
  4. Google_Spreadsheet::warnAdmin('cannot initialize spreadsheet',serialize($rowValues));
  5. }
  6.  
  7.  
  8. if(!$spreadsheet->initialized || !$spreadsheet->insertRow($rowValues,$this->default_fields)) {
  9. Google_Spreadsheet::warnAdmin('Failed to insert row ');
  10. }

@Edit,感谢bram brambring他的令牌解决方案,似乎比我更容易.现在像一个魅力一样工作,我希望他的方式通常会刷新令牌.谢谢老兄!

猜你在找的PHP相关文章