PureBasic
PureBasic
Get File Metadata
See more Google Drive Examples
Gets a file's metadata or content by ID.See Google Drive Files get for additional details.
Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
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.
; A single REST object, once connected, can be used for many Google Drive REST API calls.
; The auto-reconnect indicates that if the already-established HTTPS connection is closed,
; then it will be automatically re-established as needed.
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)
; ------------------------------------------------------------------------------
; We need to send a GET request like this:
; GET https://www.googleapis.com/drive/v3/files/fileId
; The fileId is part of the path.
sbPath.i = CkStringBuilder::ckCreate()
If sbPath.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbPath,"/drive/v3/files/")
; Assume we previously obtained the fileId for the file of interest...
CkStringBuilder::ckAppend(sbPath,"0B53Q6OSTWYolbUF6WS1Gei1oalk")
; Indicate that we want ALL possible fields.
; If no fields are indicated, then only the basic fields are returned.
allFields.s = "appProperties,capabilities,contentHints,createdTime,description,explicitlyTrashed,fileExtension,folderColorRgb,fullFileExtension,headRevisionId,iconLink,id,imageMediaMetadata,isAppAuthorized,kind,lastModifyingUser,md5Checksum,mimeType,modifiedByMeTime,modifiedTime,name,originalFilename,ownedByMe,owners,parents,permissions,properties,quotaBytesUsed,shared,sharedWithMeTime,sharingUser,size,spaces,starred,thumbnailLink,trashed,version,videoMediaMetadata,viewedByMe,viewedByMeTime,viewersCanCopyContent,webContentLink,webViewLink,writersCanShare"
CkRest::ckAddQueryParam(rest,"fields",allFields)
jsonResponse.s = CkRest::ckFullRequestNoBody(rest,"GET",CkStringBuilder::ckGetAsString(sbPath))
If CkRest::ckLastMethodSuccess(rest) <> 1
Debug CkRest::ckLastErrorText(rest)
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbPath)
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)
CkStringBuilder::ckDispose(sbPath)
ProcedureReturn
EndIf
; ---------------------------------------------------
; Sample code for parsing this JSON is shown below...
; ---------------------------------------------------
; A successful response looks like this:
; {
; "kind": "drive#file",
; "id": "0B53Q6OSTWYolbUF6WS1Gei1oalk",
; "name": "penguins.jpg",
; "mimeType": "image/jpeg",
; "starred": false,
; "trashed": false,
; "explicitlyTrashed": false,
; "parents": [
; "0B53Q6OSTWYola296ODZUSm5GYU0"
; ],
; "spaces": [
; "drive"
; ],
; "version": "672",
; "webContentLink": "https://docs.google.com/a/chilkatcloud.com/uc?id=0B53Q6OSTWYolbUF6WS1Gei1oalk&export=download",
; "webViewLink": "https://drive.google.com/a/chilkatcloud.com/file/d/0B53Q6OSTWYolbUF6WS1Gei1oalk/view?usp=drivesdk",
; "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_image_list.png",
; "thumbnailLink": "https://lh5.googleusercontent.com/uIV1dJdc8vsAQzaaIInpc9AV55AcdHhpM7fQeI2RN2qbCSnhjK9IDdNQAOTtkvjS9ZObqw=s220",
; "viewedByMe": true,
; "viewedByMeTime": "2016-10-08T12:38:02.258Z",
; "createdTime": "2016-10-08T12:38:02.258Z",
; "modifiedTime": "2016-10-08T12:38:02.258Z",
; "modifiedByMeTime": "2016-10-08T12:38:02.258Z",
; "owners": [
; {
; "kind": "drive#user",
; "displayName": "Matthew Smith",
; "me": true,
; "permissionId": "08366696655122259092",
; "emailAddress": "support@chilkatcloud.com"
; }
; ],
; "lastModifyingUser": {
; "kind": "drive#user",
; "displayName": "Matthew Smith",
; "me": true,
; "permissionId": "08366696655122259092",
; "emailAddress": "support@chilkatcloud.com"
; },
; "shared": false,
; "ownedByMe": true,
; "capabilities": {
; "canEdit": true,
; "canComment": true,
; "canShare": true,
; "canCopy": true,
; "canReadRevisions": true
; },
; "viewersCanCopyContent": true,
; "writersCanShare": true,
; "permissions": [
; {
; "kind": "drive#permission",
; "id": "08366696655122259092",
; "type": "user",
; "emailAddress": "support@chilkatcloud.com",
; "role": "owner",
; "displayName": "Matthew Smith"
; }
; ],
; "originalFilename": "penguins.jpg",
; "fullFileExtension": "jpg",
; "fileExtension": "jpg",
; "md5Checksum": "9d377b10ce778c4938b3c7e2c63a229a",
; "size": "777835",
; "quotaBytesUsed": "777835",
; "headRevisionId": "0B53Q6OSTWYolUUlHVFhHdFlXQ0R1aHZuT0tORTVzc2h5NnZjPQ",
; "imageMediaMetadata": {
; "width": 1024,
; "height": 768,
; "rotation": 0,
; "time": "2009:03:12 13:48:35"
; },
; "isAppAuthorized": false
; }
; Iterate over each file in the response and show the name, id, and mimeType.
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoad(json,jsonResponse)
; Show the full JSON response.
CkJsonObject::setCkEmitCompact(json, 0)
Debug CkJsonObject::ckEmit(json)
Debug "-"
; Demonstrate how to get pieces of information:
Debug "Original Filename: " + CkJsonObject::ckStringOf(json,"originalFilename")
wasLastModifiedUserMe.i = CkJsonObject::ckBoolOf(json,"lastModifyingUser.me")
Debug "Was Last Modified by Me: " + Str(wasLastModifiedUserMe)
; Assuming this is an image file...
width.i = CkJsonObject::ckIntOf(json,"imageMediaMetadata.width")
Debug "Image Width: " + Str(width)
; Iterate over parents...
i.i
numParents.i = CkJsonObject::ckSizeOfArray(json,"parents")
i = 0
While i < numParents
CkJsonObject::setCkI(json, i)
Debug "Parent " + Str(i) + ": " + CkJsonObject::ckStringOf(json,"parents[i]")
i = i + 1
Wend
; Iterate over owners...
numOwners.i = CkJsonObject::ckSizeOfArray(json,"owners")
i = 0
While i < numOwners
CkJsonObject::setCkI(json, i)
Debug "Owner " + Str(i) + ": kind=" + CkJsonObject::ckStringOf(json,"owners[i].kind") + " displayName=" + CkJsonObject::ckStringOf(json,"owners[i].displayName")
i = i + 1
Wend
; Iterate over permissions...
numPermissions.i = CkJsonObject::ckSizeOfArray(json,"permissions")
i = 0
While i < numPermissions
CkJsonObject::setCkI(json, i)
Debug "Permission " + Str(i) + ": kind=" + CkJsonObject::ckStringOf(json,"permissions[i].kind") + " id=" + CkJsonObject::ckStringOf(json,"permissions[i].id")
i = i + 1
Wend
CkAuthGoogle::ckDispose(gAuth)
CkRest::ckDispose(rest)
CkStringBuilder::ckDispose(sbPath)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure