Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v11.0.0+

Upload Media to Twitter

Demonstrates uploading image or video files to Twitter. After uploading, the media_id can be used to attach the uploaded media to a tweet.

This example is deprecated and no longer valid.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkFileAccess.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"
IncludeFile "CkHttpResponse.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

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

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

    ;  Provide the OAuth 1.0a credentials:
    CkHttp::setCkOAuth1(http, 1)
    CkHttp::setCkOAuthConsumerKey(http, "TWITTER_CONSUMER_KEY")
    CkHttp::setCkOAuthConsumerSecret(http, "TWITTER_CONSUMER_SECRET")
    CkHttp::setCkOAuthToken(http, CkJsonObject::ckStringOf(jsonToken,"oauth_token"))
    CkHttp::setCkOAuthTokenSecret(http, CkJsonObject::ckStringOf(jsonToken,"oauth_token_secret"))

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

    CkHttpRequest::setCkHttpVerb(req, "POST")
    CkHttpRequest::setCkContentType(req, "multipart/form-data")
    CkHttpRequest::setCkPath(req, "/1.1/media/upload.json")

    CkHttpRequest::ckAddHeader(req,"Expect","100-continue")

    ;  Add a JPEG image file to the upload.
    fac.i = CkFileAccess::ckCreate()
    If fac.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

ERROR - PureBasic is an array language
    jpgBytes = CkFileAccess::ckReadEntireFile(fac,"qa_data/jpg/starfish.jpg")
    CkHttpRequest::ckAddBytesForUpload(req,"media","starfish.jpg",jpgBytes)

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

    success = CkHttp::ckHttpSReq(http,"upload.twitter.com",443,1,req,resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkJsonObject::ckDispose(jsonToken)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkFileAccess::ckDispose(fac)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

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

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

    If CkHttpResponse::ckStatusCode(resp) <> 200
        Debug CkJsonObject::ckEmit(jsonResponse)
        CkJsonObject::ckDispose(jsonToken)
        CkHttp::ckDispose(http)
        CkHttpRequest::ckDispose(req)
        CkFileAccess::ckDispose(fac)
        CkHttpResponse::ckDispose(resp)
        CkJsonObject::ckDispose(jsonResponse)
        ProcedureReturn
    EndIf

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

    ;  A successful JSON response looks like this:

    ;  	{
    ;  	  "media_id": 793137045996646400,
    ;  	  "media_id_string": "793137045996646400",
    ;  	  "size": 6229,
    ;  	  "expires_after_secs": 86400,
    ;  	  "image": {
    ;  	    "image_type": "image\/jpeg",
    ;  	    "w": 120,
    ;  	    "h": 120
    ;  	  }
    ;  	}
    ;  

    ;  Get the information from the JSON:
    Debug "media_id_string = " + CkJsonObject::ckStringOf(jsonResponse,"media_id_string")
    Debug "size = " + Str(CkJsonObject::ckIntOf(jsonResponse,"size"))
    Debug "image_type = " + CkJsonObject::ckStringOf(jsonResponse,"image.image_type")
    Debug "height/width = " + Str(CkJsonObject::ckIntOf(jsonResponse,"image.w")) + "," + Str(CkJsonObject::ckIntOf(jsonResponse,"image.h"))


    CkJsonObject::ckDispose(jsonToken)
    CkHttp::ckDispose(http)
    CkHttpRequest::ckDispose(req)
    CkFileAccess::ckDispose(fac)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(jsonResponse)


    ProcedureReturn
EndProcedure