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

Tcl

load ./chilkat.dll

set success 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..
set jsonToken [new_CkJsonObject]

set success [CkJsonObject_LoadFile $jsonToken "qa_data/tokens/twitter.json"]

set http [new_CkHttp]

#  Provide the OAuth 1.0a credentials:
CkHttp_put_OAuth1 $http 1
CkHttp_put_OAuthConsumerKey $http "TWITTER_CONSUMER_KEY"
CkHttp_put_OAuthConsumerSecret $http "TWITTER_CONSUMER_SECRET"
CkHttp_put_OAuthToken $http [CkJsonObject_stringOf $jsonToken "oauth_token"]
CkHttp_put_OAuthTokenSecret $http [CkJsonObject_stringOf $jsonToken "oauth_token_secret"]

set req [new_CkHttpRequest]

CkHttpRequest_put_HttpVerb $req "POST"
CkHttpRequest_put_ContentType $req "multipart/form-data"
CkHttpRequest_put_Path $req "/1.1/media/upload.json"

CkHttpRequest_AddHeader $req "Expect" "100-continue"

#  Add a JPEG image file to the upload.
set fac [new_CkFileAccess]

set jpgBytes [new_CkByteData]

set success [CkFileAccess_ReadEntireFile $fac "qa_data/jpg/starfish.jpg" $jpgBytes]
CkHttpRequest_AddBytesForUpload $req "media" "starfish.jpg" $jpgBytes

set resp [new_CkHttpResponse]

set success [CkHttp_HttpSReq $http "upload.twitter.com" 443 1 $req $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkJsonObject $jsonToken
    delete_CkHttp $http
    delete_CkHttpRequest $req
    delete_CkFileAccess $fac
    delete_CkByteData $jpgBytes
    delete_CkHttpResponse $resp
    exit
}

set jsonResponse [new_CkJsonObject]

CkJsonObject_put_EmitCompact $jsonResponse 0
CkJsonObject_Load $jsonResponse [CkHttpResponse_bodyStr $resp]

if {[CkHttpResponse_get_StatusCode $resp] != 200} then {
    puts [CkJsonObject_emit $jsonResponse]
    delete_CkJsonObject $jsonToken
    delete_CkHttp $http
    delete_CkHttpRequest $req
    delete_CkFileAccess $fac
    delete_CkByteData $jpgBytes
    delete_CkHttpResponse $resp
    delete_CkJsonObject $jsonResponse
    exit
}

#  Show the successful response:
puts [CkJsonObject_emit $jsonResponse]
puts "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:
puts "media_id_string = [CkJsonObject_stringOf $jsonResponse media_id_string]"
puts "size = [CkJsonObject_IntOf $jsonResponse size]"
puts "image_type = [CkJsonObject_stringOf $jsonResponse image.image_type]"
puts "height/width = [CkJsonObject_IntOf $jsonResponse image.w],[CkJsonObject_IntOf $jsonResponse image.h]"

delete_CkJsonObject $jsonToken
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkFileAccess $fac
delete_CkByteData $jpgBytes
delete_CkHttpResponse $resp
delete_CkJsonObject $jsonResponse