PureBasic
PureBasic
Search for Files in Google Drive
See more Google Drive Examples
This example follows the same methodology for listing all files in Google Drive in pages, but applies a search filter. It shows how to apply a query parameter for filtering the file results. See the Google Drive Files list for more optional HTTP parameters.Chilkat PureBasic Downloads
IncludeFile "CkAuthGoogle.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
success = 1
; It requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; This example uses a previously obtained access token having permission for the
; Google Drive scope.
gAuth.i = CkAuthGoogle::ckCreate()
If gAuth.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkAuthGoogle::setCkAccessToken(gAuth, "GOOGLE-DRIVE-ACCESS-TOKEN")
rest.i = CkRest::ckCreate()
If rest.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Connect using TLS.
bAutoReconnect.i = 1
success = CkRest::ckConnect(rest,"www.googleapis.com",443,1,bAutoReconnect)
; Provide the authentication credentials (i.e. the access token)
CkRest::ckSetAuthGoogle(rest,gAuth)
; Get 5 results per page for testing. (The default page size is 100, with a max of 1000.
CkRest::ckAddQueryParam(rest,"pageSize","5")
; Our search filter is to list all files containing ".jpg" (i.e. all JPG image files)
CkRest::ckAddQueryParam(rest,"q","name contains '.jpg'")
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
i.i
numFiles.i
; Send the request for the 1st page.
jsonResponse.s = CkRest::ckFullRequestNoBody(rest,"GET","/drive/v3/files")
pageNumber.i = 1
pageToken.s
bContinueLoop.i = CkRest::ckLastMethodSuccess(rest) AND (CkRest::ckResponseStatusCode(rest) = 200)
While bContinueLoop = 1
Debug "---- Page " + Str(pageNumber) + " ----"
; Iterate over each file in the response and show the name, id, and mimeType.
CkJsonObject::ckLoad(json,jsonResponse)
numFiles = CkJsonObject::ckSizeOfArray(json,"files")
i = 0
While i < numFiles
CkJsonObject::setCkI(json, i)
Debug "name: " + CkJsonObject::ckStringOf(json,"files[i].name")
Debug "id: " + CkJsonObject::ckStringOf(json,"files[i].id")
Debug "mimeType: " + CkJsonObject::ckStringOf(json,"files[i].mimeType")
Debug "-"
i = i + 1
Wend
; Get the next page of files.
; If the "nextPageToken" is present in the JSON response, then use it in the "pageToken" parameter
; for the next request. If no "nextPageToken" was present, then this was the last page of files.
pageToken = CkJsonObject::ckStringOf(json,"nextPageToken")
bContinueLoop = 0
bHasMorePages.i = CkJsonObject::ckLastMethodSuccess(json)
If bHasMorePages = 1
CkRest::ckClearAllQueryParams(rest)
CkRest::ckAddQueryParam(rest,"pageSize","5")
CkRest::ckAddQueryParam(rest,"pageToken",pageToken)
CkRest::ckAddQueryParam(rest,"q","name contains '.jpg'")
jsonResponse = CkRest::ckFullRequestNoBody(rest,"GET","/drive/v3/files")
bContinueLoop = CkRest::ckLastMethodSuccess(rest) AND (CkRest::ckResponseStatusCode(rest) = 200)
pageNumber = pageNumber + 1
EndIf
Wend
If CkRest::ckLastMethodSuccess(rest) <> 1
Debug CkRest::ckLastErrorText(rest)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
; A successful response will have a status code equal to 200.
If CkRest::ckResponseStatusCode(rest) <> 200
Debug "response status code = " + Str(CkRest::ckResponseStatusCode(rest))
Debug "response status text = " + CkRest::ckResponseStatusText(rest)
Debug "response header: " + CkRest::ckResponseHeader(rest)
Debug "response JSON: " + jsonResponse
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure