Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 0
set 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.
set gAuth [new_CkAuthGoogle]
CkAuthGoogle_put_AccessToken $gAuth "GOOGLE-DRIVE-ACCESS-TOKEN"
set rest [new_CkRest]
# Connect using TLS.
set bAutoReconnect 1
set success [CkRest_Connect $rest "www.googleapis.com" 443 1 $bAutoReconnect]
# Provide the authentication credentials (i.e. the access token)
CkRest_SetAuthGoogle $rest $gAuth
# Get 5 results per page for testing. (The default page size is 100, with a max of 1000.
CkRest_AddQueryParam $rest "pageSize" "5"
# Our search filter is to list all files containing ".jpg" (i.e. all JPG image files)
CkRest_AddQueryParam $rest "q" "name contains '.jpg'"
set json [new_CkJsonObject]
# Send the request for the 1st page.
set jsonResponse [CkRest_fullRequestNoBody $rest "GET" "/drive/v3/files"]
set pageNumber 1
set bContinueLoop [expr [CkRest_get_LastMethodSuccess $rest] && [[CkRest_get_ResponseStatusCode $rest] == 200]]
while {$bContinueLoop == 1} {
puts "---- Page $pageNumber ----"
# Iterate over each file in the response and show the name, id, and mimeType.
CkJsonObject_Load $json $jsonResponse
set numFiles [CkJsonObject_SizeOfArray $json "files"]
set i 0
while {$i < $numFiles} {
CkJsonObject_put_I $json $i
puts "name: [CkJsonObject_stringOf $json {files[i].name}]"
puts "id: [CkJsonObject_stringOf $json {files[i].id}]"
puts "mimeType: [CkJsonObject_stringOf $json {files[i].mimeType}]"
puts "-"
set i [expr $i + 1]
}
# 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.
set pageToken [CkJsonObject_stringOf $json "nextPageToken"]
set bContinueLoop 0
set bHasMorePages [CkJsonObject_get_LastMethodSuccess $json]
if {$bHasMorePages == 1} then {
CkRest_ClearAllQueryParams $rest
CkRest_AddQueryParam $rest "pageSize" "5"
CkRest_AddQueryParam $rest "pageToken" $pageToken
CkRest_AddQueryParam $rest "q" "name contains '.jpg'"
set jsonResponse [CkRest_fullRequestNoBody $rest "GET" "/drive/v3/files"]
set bContinueLoop [expr [CkRest_get_LastMethodSuccess $rest] && [[CkRest_get_ResponseStatusCode $rest] == 200]]
set pageNumber [expr $pageNumber + 1]
}
}
if {[CkRest_get_LastMethodSuccess $rest] != 1} then {
puts [CkRest_lastErrorText $rest]
delete_CkAuthGoogle $gAuth
delete_CkRest $rest
delete_CkJsonObject $json
exit
}
# A successful response will have a status code equal to 200.
if {[CkRest_get_ResponseStatusCode $rest] != 200} then {
puts "response status code = [CkRest_get_ResponseStatusCode $rest]"
puts "response status text = [CkRest_responseStatusText $rest]"
puts "response header: [CkRest_responseHeader $rest]"
puts "response JSON: $jsonResponse"
delete_CkAuthGoogle $gAuth
delete_CkRest $rest
delete_CkJsonObject $json
exit
}
delete_CkAuthGoogle $gAuth
delete_CkRest $rest
delete_CkJsonObject $json