Sample code for 30+ languages & platforms
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

PureBasic
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