Sample code for 30+ languages & platforms
PureBasic

Twitter - Tweet with Multiple Images

Example to post a status update with multiple associated images/photos (or videos).

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkOAuth1.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 initial setup, which involves setting the OAuth1 properties and connecting
    ; to api.twitter.com, is only required once at the beginning.  Once connected, the same
    ; object instance may be re-used, and if necessary, it will automatically reconnect
    ; as needed.

    ; Assume we've previously obtained an access token and saved it to a JSON file..
    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(json,"qa_data/tokens/twitter.json")

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

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

    CkOAuth1::setCkConsumerKey(oauth1, "TWITTER_CONSUMER_KEY")
    CkOAuth1::setCkConsumerSecret(oauth1, "TWITTER_CONSUMER_SECRET")
    CkOAuth1::setCkToken(oauth1, CkJsonObject::ckStringOf(json,"oauth_token"))
    CkOAuth1::setCkTokenSecret(oauth1, CkJsonObject::ckStringOf(json,"oauth_token_secret"))
    CkOAuth1::setCkSignatureMethod(oauth1, "HMAC-SHA1")
    CkOAuth1::ckGenNonce(oauth1,16)

    CkRest::ckSetAuthOAuth1(rest,oauth1,0)

    bAutoReconnect.i = 1
    success = CkRest::ckConnect(rest,"api.twitter.com",443,1,bAutoReconnect)
    If success <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkJsonObject::ckDispose(json)
        CkRest::ckDispose(rest)
        CkOAuth1::ckDispose(oauth1)
        ProcedureReturn
    EndIf

    ; This ends the initial setup...
    ; ----------------------------------------------------------------------

    tweetContent.s = "This is a test tweet with multiple images."

    ; Send a tweet...
    CkRest::ckClearAllQueryParams(rest)
    CkRest::ckAddQueryParam(rest,"status",tweetContent)

    ; Add list of comma separated media_ids to associate with the Tweet. 
    ; You may include up to 4 photos or 1 animated GIF or 1 video in a Tweet.
    ; The image needs to have been previously uploaded.  The upload response gave us
    ; the media ID we'll use to associate this tweet with the image (or video)
    ; See Twitter Upload Media for sample code.
    CkRest::ckAddQueryParam(rest,"media_ids","793137045996646400,793192201392041984")

    resp.s = CkRest::ckFullRequestFormUrlEncoded(rest,"POST","/1.1/statuses/update.json")
    If CkRest::ckLastMethodSuccess(rest) <> 1
        Debug CkRest::ckLastErrorText(rest)
        CkJsonObject::ckDispose(json)
        CkRest::ckDispose(rest)
        CkOAuth1::ckDispose(oauth1)
        ProcedureReturn
    EndIf

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

    CkJsonObject::setCkEmitCompact(jsonResponse, 0)
    CkJsonObject::ckLoad(jsonResponse,resp)

    If CkRest::ckResponseStatusCode(rest) <> 200
        Debug CkJsonObject::ckEmit(jsonResponse)
        CkJsonObject::ckDispose(json)
        CkRest::ckDispose(rest)
        CkOAuth1::ckDispose(oauth1)
        CkJsonObject::ckDispose(jsonResponse)
        ProcedureReturn
    EndIf

    ; Show the successful response:
    Debug CkJsonObject::ckEmit(jsonResponse)
    Debug "Success."


    CkJsonObject::ckDispose(json)
    CkRest::ckDispose(rest)
    CkOAuth1::ckDispose(oauth1)
    CkJsonObject::ckDispose(jsonResponse)


    ProcedureReturn
EndProcedure