0

내 드라이브에서 이미지를 실행하고 가져 오는 코드가 있습니다. 하지만이 코드를 실행할 때마다 문제가 발생합니다.PHP에서이 Google 드라이브 API 호출 함수의 문제점을 알 수 있습니까?

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이므로 "$ nextPageToken = $ files-> getNextPageToken();"까지 nextPageToken이 없으므로 if 문으로 넘어 가지 않습니다. 아저씨. – chandlerbing

답변

1

자바 스크립트를 사용하여 nextPageToken 문제에 답변 드리겠습니다. 로직을 기록해 두십시오. 두 개의 listFile() 함수가 동일합니다. 하나는 초기로드에서 실행, 페이지를로드 한 후, 그것은 내 100 파일의 처음 10을 보여줍니다. 다른 하나는 버튼을 클릭 할 때마다 실행됩니다.

첫 번째 기능은 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 
      // . . . 
     }); 
     } 

는 두 번째 기능 : 이 기능은 N. 11에서 이어지는 파일을 표시 "다음 페이지"라는 버튼을 클릭하여 트리거는

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