Sample code for 30+ languages & platforms
PureBasic

Emoji Tweet

Demonstrates posting a status update that includes an emoji character.

This example is deprecated and no longer valid.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkRest.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkOAuth1.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This 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...
    ; ----------------------------------------------------------------------

    ; For this example, I've pre-created a text file containing two emoji
    ; characters (the "ghost" emoji, and a "face savouring delicious food" emoji).  
    ; This text file was saved using the utf-8 encoding.

    ; The utf-8 bytes for the ghost emoji are 0x9f 0x91 0xbb.  (Note: This is the utf-8
    ; representation that does not use surrogate pairs.)
    ; 
    ; The utf-8 bytes for the "face savouring delicious food" emoji are \xF0\x9F\x98\x8B.

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

    CkStringBuilder::ckLoadFile(sbText,"qa_data/txt/ghost_emoji.txt","utf-8")
    CkStringBuilder::ckPrepend(sbText,"Test tweet using two emoji chars: ")

    ; Send a tweet...
    CkRest::ckClearAllQueryParams(rest)
    CkRest::ckAddQueryParam(rest,"status",CkStringBuilder::ckGetAsString(sbText))
    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)
        CkStringBuilder::ckDispose(sbText)
        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)
        CkStringBuilder::ckDispose(sbText)
        CkJsonObject::ckDispose(jsonResponse)
        ProcedureReturn
    EndIf

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


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


    ProcedureReturn
EndProcedure