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