1

私はグーグルドライブにあるすべてのファイルをリストする小さなページをやっています。初めて認証を行い、更新トークン+ユーザーIDと電子メールを保存してから、すべてのファイルを一覧表示します。情報を取得するには、次のようにします。

$result = array();
$pageToken = NULL;
do {
  try {             
    $parameters = array();
    if ($pageToken) {
      $parameters['pageToken'] = $pageToken;
    }

    $files = $service->files->listFiles($parameters);
    $list=$files->getItems();

    $result = array_merge($result,$list);
    $pageToken = $files->getNextPageToken();
  } catch (Exception $e) {
    echo "An error occurred: " . $e->getMessage();
    $pageToken = NULL;
  }
} while ($pageToken);

それは機能しますが、ユーザーがページを更新する場合は、アクセストークンを更新して(dbから更新トークンを取得)、上記と同じように続行します。この場合、このコードではエラーが発生します。これは、次の場合に連想配列を取得するためです。

$files = $service->files->listFiles($parameters);

それを機能させるには、コードを次のように変更する必要があります。

$result = array();
$pageToken = NULL;
do {
  try {
    $parameters = array();
    if ($pageToken) {
      $parameters['pageToken'] = $pageToken;
    }
    $files = $service->files->listFiles($parameters);
    $list=$files['items'];
    $result = array_merge($result,$list);
    $pageToken = $files['nextPageToken'];
  } catch (Exception $e) {
    echo "An error occurred: " . $e->getMessage();
    $pageToken = NULL;
  }
} while ($pageToken);

これは起こらないはずですが、何が悪いのかわかりません。

4

1 に答える 1

4

クラスの関連するphpソースから、私はあなたを困らせるものを見つけたと思います。見てくださいGoogle_DriveService.php

// ~Line 119
public function listFiles($optParams = array()) {
  $params = array();
  $params = array_merge($params, $optParams);
  $data = $this->__call('list', array($params));
  if ($this->useObjects()) {                       // THIS CALL HERE
    return new Google_FileList($data);
  } else {
    return $data;
  }
}

オブジェクトを操作するかどうかをチェックします$this->useObjects()。このメソッドはスーパークラスで定義されていGoogle_ServiceResource.phpます:

// ~Line 180
public  function useObjects() {
  global $apiConfig;
  return (isset($apiConfig['use_objects']) && $apiConfig['use_objects']);
}

これは、サービスを構成するときに、に設定する必要があることを示してい'use_object'ますtrue

于 2012-11-09T18:10:42.443 に答える