UTF8対応版TsubuyakiSoupのTweetUTF8
UTF8対応版TsubuyakiSoupのTweetUTF8
/*====================================================================== ツイートサンプル ------------------------------------------------------------------------ ツイートするサンプルです。 (このサンプルを実行するには、「Sample01_OAuth.hsp」か 「Sample02_xAuth.hsp」を実行して「Setting.txt」を作成してくださ い。) ※このモジュールやサンプルを実行する場合には、Twitter側から ConsumerKeyとConsumerSecretを取得する必要があります。詳しくは、モ ジュールと同封されている「TsubuyakiSoupドキュメント」を参照して ください。 ------------------------------------------------------------------------ Author : takata LastUpdate : 10/10/16 CreateDate : 10/09/23 ======================================================================*/ // モジュールをインクルード #include "../TsubuyakiSoup.as" #module #uselib "msvcrt" #cfunc strstr "strstr" int, sptr #uselib "kernel32" #func MultiByteToWideChar "MultiByteToWideChar" int, int, sptr, int, sptr, int #func WideCharToMultiByte "WideCharToMultiByte" int, int, sptr, int, sptr, int, int, int #deffunc UTF8ToUnicode var in, var out MultiByteToWideChar 65001/*CP_UTF8*/, 0, varptr(in), -1, 0, 0 len = stat sdim out, len * 2 + 2 MultiByteToWideChar 65001/*CP_UTF8*/, 0, varptr(in), -1, varptr(out), len return len #deffunc UnicodeToUTF8 var in, var out // Unicode → UTF-8 WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(in), -1, 0, 0, 0, 0 len = stat sdim out, len + 1 WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(in), -1, varptr(out), len, 0, 0 return len #deffunc ShiftJISToUTF8 str _in_sjis, var out_utf8 in_sjis = _in_sjis // SHIFT_JIS → Unicode len = strlen(_in_sjis) * 2 sdim uni, len + 2 cnvstow uni, _in_sjis // Unicode → UTF-8 WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(uni), -1, 0, 0, 0, 0 len = stat sdim out_utf8, len + 1 WideCharToMultiByte 65001/*CP_UTF8*/, 0, varptr(uni), -1, varptr(out_utf8), len, 0, 0 return len #deffunc BOMDelete var in_utf8 // EF BB BF(BOM) 手抜き~ if (0xBFBBEF == (lpeek(in_utf8, 0) & 0xFFFFFF)){ len = strlen(in_utf8) sdim copybuf, len*2 + 1 copybuf = in_utf8 sdim in_utf8, len*2 + 1 memcpy in_utf8, copybuf, len, 0, 3 return 1 } return 0 // instr(手抜きUTF8対応版) #defcfunc instr_utf8 var in_buf, int p, str _key key = _key inbuf_ptr = varptr(in_buf) + p s_pos = strstr(inbuf_ptr, key) if s_pos == 0 : return -1 return (s_pos - inbuf_ptr) #global #module #deffunc _TweetUTF8 str p1, double p2 tmpStr = p1 //140字に丸める if (mb_strlen(tmpStr) > 140) { tmpStr = mb_strmid(p1, 0,140) } //POST sdim Argument Argument(0) = "status="+ form_encode(tmpStr, 1) if p2 > 0 : Argument(1) = "in_reply_to_status_id="+ strf("%.0f",p2) RESTAPI ResponseBody, ResponseHeader, METHOD_POST, "statuses/update."+ TS_FormatType@TsubuyakiSoup, Argument return stat #define global TweetUTF8(%1, %2=0) _TweetUTF8 %1, %2 #global #module #defcfunc hex2bin str _s1 s1 = _s1 memexpand s1, strlen(s1)*2 sdim buf, strlen(s1)*2+1 i = 0 repeat strlen(s1) key = strmid(s1, cnt, 1) if (key == " " || key == "\t"){ // 読み飛ばす continue } key = strmid(s1, cnt, 2) if (key == "\n"){ // 読み飛ばす continue }else : if (key == "0x"){ poke buf, i, int("$"+strmid(s1, cnt+2, 2)) i++ } loop return buf #global // ここから ;サンプル用設定ファイル #include "SampleSetting.hsp" if CONSUMER_KEY = "" : dialog "「SampleSetting.hsp」でConsumerKeyとConsumerSecretを設定してください。" : end // 初期化 TS_Init "TsubuyakiSoup Sample", CONSUMER_KEY, CONSUMER_SECRET, 20 //設定ファイルの有無確認 xToken = "" xSecret = "" exist "Setting.txt" if strsize != -1 { notesel SFA noteload "Setting.txt" if (Decryption(SFA, "SampleKey")=0) : dialog "ファイルの復号に失敗したため、読み込むことができませんでした。終了します。" : end noteget xToken,0 noteget xSecret,1 noteunsel SetAccessToken xToken, xSecret } if ( (xToken ="") or (xSecret = "") ) : dialog "「Sample01_OAuth.hsp」か「Sample02_xAuth.hsp」を実行して「Setting.txt」を作成してください。" : end ;TweetText = "" ;pos 10, 10 ;input TweetText, 450,20 ;InputID = stat ;pos 470, 8 button gosub "投 稿", *submit stop *submit //--------------------------------- // ツイート // Tweet 命令で投稿します。 // 第一引数に投稿する文字列を指定します。 //Tweet TweetText, 0 // Unicodeにしかない文字はこちらで 下は ☝( ՞ਊ ՞)☝ (UTF-8)を文字列化(HEXダンプ)したもの ShootingStarString = hex2bin("0xE2 0x98 0x9D 0x28 0x20 0xD5 0x9E 0xE0 0xA8 0x8A 0x20 0xD5 0x9E 0x29 0xE2 0x98 0x9D") // 日本語とか変換可能なのはこっち ShiftJISToUTF8 "送信テスト", UTF8String // 2つを連結する TweetString = UTF8String+ShootingStarString // UTF8対応版 TweetUTF8 TweetString, 0 //Tweet "ツイートテスト", 0 ; エラー判断 if (stat = 200) { ;objprm InputID, "" dialog "送信完了" } else { dialog "投稿に失敗しました。\nステータスコード : "+stat,1,"投稿失敗" } //--------------------------------- return stop