UTF8対応版TsubuyakiSoupのTweetUTF8

UTF8対応版TsubuyakiSoupのTweetUTF8

UTF8対応版TsubuyakiSoupのTweetUTF8

  • タグ:
  • タグはありません
/*======================================================================
------------------------------------------------------------------------
(Sample01_OAuth.hsp
Sample02_xAuth.hspSetting.txt
)
Twitter
ConsumerKeyConsumerSecret
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
//
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.hspConsumerKeyConsumerSecret" : 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.hspSample02_xAuth.hspSetting.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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX