(しょぼいカレンダー)番組名から、番組名とTIDを取得するサンプル。出力のみUnicode(UTF-16)対応。入力はShift_JISですが、ちょっと改造すればUnicode(UTF-16)対応にできるかと。
(しょぼいカレンダー)番組名から、番組名とTIDを取得するサンプル。出力のみUnicode(UTF-16)対応。入力はShift_JISですが、ちょっと改造すればUnicode(UTF-16)対応にできるかと。
#include "encode.as" #uselib "urlmon.dll" #func URLDownload "URLDownloadToFileA"int,str,str,int,int #uselib "wininet.dll" #func DeleteUrlCacheEntry "DeleteUrlCacheEntryA" str #include "user32.as" #include "gdi32.as" #include "kernel32.as" #define DT_WORDBREAK 0x00000010 #define DT_EDITCONTROL 0x00002000 #module // TsubuyakiSoup.as から抜き出し #defcfunc form_encode str p1, int p2 /* 09 az AZ - . _ ~ はそのまま出力 */ fe_str = p1 fe_p1Long = strlen(p1) sdim fe_val, fe_p1Long*3 repeat fe_p1Long fe_flag = 0 fe_tmp = peek(fe_str, cnt) if (('0' <= fe_tmp)&('9' >= fe_tmp)) | (('A' <= fe_tmp)&('Z' >= fe_tmp)) | (('a' <= fe_tmp)&('z' >= fe_tmp)) | (fe_tmp = '-') | (fe_tmp = '.') | (fe_tmp = '_') | (fe_tmp = '~') :{ poke fe_val, strlen(fe_val), fe_tmp } else { if fe_tmp = ' ' { if p2 = 0 : fe_val += "&" if p2 = 1 : fe_val += "%20" //空白処理 } else { fe_val += "%" + strf("%02X",fe_tmp) } } loop return fe_val #deffunc mesWptr int ptr // ウニコードで描画する rect = ginfo_cx, ginfo_cy, ginfo_winx, ginfo_winy DrawTextW hdc, ptr, -1, varptr(rect), 0 // redraw の現在フラグ取得 mref BMSCR, 96 + ginfo(3) redraw (BMSCR(19)!=1) // 書いた分だけカレントポジションを移動する lstrlenW ptr GetTextExtentPoint32W hdc, ptr, stat, varptr(rect) pos ginfo(22), ginfo(23) + rect(1) return #global // 検索用名前 input_name = "くじびき" ;input_name = "ニャル子" // UTF-8に返還する必要あり sdim utf8, 1024 sjis2utf8n utf8, input_name url = "http://cal.syoboi.jp/json?Req=TitleSearch&Search="+form_encode(utf8, 1)+"&Limit=15" URLDownload 0, url, "tmp.json", 0, 0 notesel buf noteload "tmp.json" newcom mssc, "MSScriptControl.ScriptControl" mssc("Language") = "JScript" /* js = {"function getTID(p1){ var json = eval("("+p1+")"); var res = ""; for(var key in json.Titles){ res += key.replace(/[\\n\\r]/g,"")+"\\r\\n"; res += json.Titles[key].Title+"\\r\\n"; } return res; }"} */ js = {"function getTID(p1){ var json = eval("("+p1+")"); var res = ""; var list = new Array(); var i = 0; for(var key in json.Titles){ list[i] = { tid: parseInt(key, 10) , title: json.Titles[key].Title }; i++; } return list; }"} mssc->"addCode" js comres res mssc->"Run" "getTID", buf repeat res("length") pArray = res(""+cnt+"") // unicodeのまま取得する必要があるので、.を使う。 // ないとSJISに変換されて、ハートなどが文字化ける pTitle = pArray(".title") mes "TID: "+pArray("tid") // ユニコード 対応の為 mesWptr pTitle("bstrptr") // unicode で格納された文字列のポインタ loop