Sample code for 30+ languages & platforms
PureBasic

Paging User Photos with Cursor

See more Facebook Examples

Demonstrates how to iterate over the pages of user photos using a cursor.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkOAuth2.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    ; This example assumes a previously obtained an access token
    oauth2.i = CkOAuth2::ckCreate()
    If oauth2.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkOAuth2::setCkAccessToken(oauth2, "FACEBOOK-ACCESS-TOKEN")

    rest.i = CkRest::ckCreate()
    If rest.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Connect to Facebook.
    success = CkRest::ckConnect(rest,"graph.facebook.com",443,1,1)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkOAuth2::ckDispose(oauth2)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    ; Provide the authentication credentials (i.e. the access key)
    CkRest::ckSetAuthOAuth2(rest,oauth2)

    ; Indicate that we only want the photos the user has personally uploaded.
    CkRest::ckAddQueryParam(rest,"type","uploaded")

    ; We could limit the number of photos per page using the "limit" field.
    CkRest::ckAddQueryParam(rest,"limit","20")

    ; Get the 1st page of photos. (Not the actual image data, but the information about each photo.)
    ; See https://developers.facebook.com/docs/graph-api/reference/user/photos/ for more information.
    responseJson.s = CkRest::ckFullRequestNoBody(rest,"GET","/v2.7/me/photos")
    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkOAuth2::ckDispose(oauth2)
        CkRest::ckDispose(rest)
        ProcedureReturn
    EndIf

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::setCkEmitCompact(json, 0)
    CkJsonObject::ckLoad(json,responseJson)
    Debug CkJsonObject::ckEmit(json)

    ; 
    ; See Parsing the Facebook User Photos for code showing how to parse the JSON photos content.
    ; 

    ; Get the "after" cursor.
    afterCursor.s = CkJsonObject::ckStringOf(json,"paging.cursors.after")
    While CkJsonObject::ckLastMethodSuccess(json) = 1

        Debug "after cursor: " + afterCursor

        ; Prepare for getting the next page of photos.
        ; We can continue using the same REST object.
        ; If already connected, we'll continue using the existing connection.
        ; Otherwise, a new connection will automatically be made if needed.
        CkRest::ckClearAllQueryParams(rest)
        CkRest::ckAddQueryParam(rest,"type","uploaded")
        CkRest::ckAddQueryParam(rest,"limit","20")
        CkRest::ckAddQueryParam(rest,"after",afterCursor)

        responseJson = CkRest::ckFullRequestNoBody(rest,"GET","/v2.7/me/photos")
        If CkRest::ckLastMethodSuccess(rest) <> 1
            Debug CkRest::ckLastErrorText(rest)
            CkOAuth2::ckDispose(oauth2)
            CkRest::ckDispose(rest)
            CkJsonObject::ckDispose(json)
            ProcedureReturn
        EndIf

        CkJsonObject::ckLoad(json,responseJson)
        ; See Parsing the Facebook User Photos for code showing how to parse the JSON photos content.

        Debug CkJsonObject::ckEmit(json)

        ; Get the cursor for the next page.
        afterCursor = CkJsonObject::ckStringOf(json,"paging.cursors.after")
    Wend

    Debug "No more pages of photos."


    CkOAuth2::ckDispose(oauth2)
    CkRest::ckDispose(rest)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure