0

我有這段代碼運行並從我的驅動器中獲取圖像。但是,每次運行此代碼時,我都會遇到問題。你能告訴我這個谷歌驅動器API調用函數在PHP中有什麼問題

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; 
} 

我得到這個錯誤:

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

它並沒有真正似乎變得不合法我。也許你可能會發現錯誤。謝謝

+0

'「location」:「pageToken」' - 聽起來像'pageToken'是帶有無效值的參數。你有沒有檢查相應的變量包含...? – CBroe

+0

在你的代碼中,你正在定義'$ nextPageToken = NULL;'。因此,你的條件'if($ nextPageToken)'從來沒有工作。您收到的錯誤也是如此,即提供的pageToken值無效。 –

+0

@Chinmayjain它故意爲null,所以它不會進入if語句,因爲不會有任何nextPageToken,直到「$ nextPageToken = $ files-> getNextPageToken();」持久性有機污染物。 – chandlerbing

回答

1

我會用Javascript回答你的nextPageToken問題,只要注意邏輯。 我有兩個相同的listFile()函數。一個在初始加載時執行,加載頁面後,它顯示我的100個文件中的前10個。每次點擊一個按鈕時,另一個執行。

第一個功能顯示inital 10文件。

//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 
      // . . . 
     }); 
     } 

二級功能: 這個功能是通過一個名爲「下一頁」按鈕,從11顯示後續文件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 
      //. . .   
      }); 
    } 
+0

嘿,我在第二次搜索時出錯。令牌問題。得到它,但API說明它是錯誤的。 – aleXela

+0

設法解決此問題:https://stackoverflow.com/questions/47402545/google-drive-js-api-nextpagetoken-invalid/47402918#47402918 谷歌sux( – aleXela

1

看來,nextPageToken這個會被裁定爲無效,除非在初始請求中包含的後續請求中包含完全相同的查詢字段(q)。

var files = [] 
var nextToken; 
gapi.client.drive.files.list({ 
    'q': "mimeType='image/jpeg' or mimeType='image/png'", 
    'pageSize': 10, 
    'fields': 'nextPageToken, files(id, name)' 
}).then(function(response) { 
    nextToken = response.result.nextPageToken; 
    files.push(...response.result.files) 
    while (nextToken) { 
     gapi.client.drive.files.list({ 
      'nextPage': nextToken, 
      'q': "mimeType='image/jpeg' or mimeType='image/png'", 
      'pageSize': 10, 
      'fields': 'nextPageToken, files(id, name)' 
     }).then(function(response) { 
      nextToken = response.result.nextPageToken; 
      files.push(...response.result.files) 
     }) 
    } 
}); 
相關問題