Search code examples
phpgoogle-apigoogle-drive-apigoogle-api-php-clientgoogle-drive-android-api

can you tell me what's wrong with this google drive API call function in PHP


I've got this code to run and fetch images from my drive. But i'm running into a problem every time I run this code.

  function listF() {

    $result = array();
    $tok = array();
    $nextPageToken = NULL;
  do {
    try {
      $parameters = array();
      if ($nextPageToken) {
        $parameters['pageToken'] = $nextPageToken;
        $parameters['q'] = "mimeType='image/jpeg' or mimeType='image/png'";
      }
      $files = $this->service->files->listFiles($parameters);
      $tok[] = $nextPageToken;
      $result = array_merge($tok, $result, $files->getFiles());
      $nextPageToken = $files->getNextPageToken();
    } catch (Exception $e) {
      print "An error occurred: " . $e->getMessage();
      $nextPageToken = NULL;
    }
  } while ($nextPageToken);
  return $result;
}

I'm getting this error:

An error occurred: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Invalid Value",
    "locationType": "parameter",
    "location": "pageToken"
   }
  ],
  "code": 400,
  "message": "Invalid Value"
 }
}

It doesn't really seem illegitimate to me. Perhaps you might able to find the bug. Thanks


Solution

  • I'll answer your nextPageToken problem using Javascript, just take note of the logic. I have two listFile() functions which are identical. One executes at initial load, after loading the page, it shows the first 10 of my 100 files. The other executes each time a button is clicked.

    First function to display the inital 10 files.

    //take note of this variable
      var nextToken ;
      function listFiles() {
        gapi.client.drive.files.list({
          'pageSize': 10,
          'fields': "*"
        }).then(function(response) {
    
              //assign the nextPageToken to a variable to be used later
              nextToken = response.result.nextPageToken;
              // do whatever you like here, like display first 10 files in web page
              // . . .
            });
          }
    

    Second function: This function is triggered by click of a button named "Next Page" which displays the succeeding files from 11 to N.

     function gotoNextPage(event) {
              gapi.client.drive.files.list({
                'pageSize': 10,
                'fields': "*",
                'pageToken': nextToken
              }).then(function(response) {
                //assign new nextPageToken to make sure new files are displayed
                nextToken = response.result.nextPageToken;
                //display batch of file results in the web page
                //. . .          
              });
      }