(しょぼいカレンダー)番組名から、番組名と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 = p1fe_p1Long = strlen(p1)sdim fe_val, fe_p1Long*3repeat fe_p1Longfe_flag = 0fe_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)}}loopreturn fe_val#deffunc mesWptr int ptr// ウニコードで描画するrect = ginfo_cx, ginfo_cy, ginfo_winx, ginfo_winyDrawTextW hdc, ptr, -1, varptr(rect), 0// redraw の現在フラグ取得mref BMSCR, 96 + ginfo(3)redraw (BMSCR(19)!=1)// 書いた分だけカレントポジションを移動するlstrlenW ptrGetTextExtentPoint32W hdc, ptr, stat, varptr(rect)pos ginfo(22), ginfo(23) + rect(1)return#global// 検索用名前input_name = "くじびき";input_name = "ニャル子"// UTF-8に返還する必要ありsdim utf8, 1024sjis2utf8n utf8, input_nameurl = "http://cal.syoboi.jp/json?Req=TitleSearch&Search="+form_encode(utf8, 1)+"&Limit=15"URLDownload 0, url, "tmp.json", 0, 0notesel bufnoteload "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" jscomres resmssc->"Run" "getTID", bufrepeat res("length")pArray = res(""+cnt+"")// unicodeのまま取得する必要があるので、.を使う。// ないとSJISに変換されて、ハートなどが文字化けるpTitle = pArray(".title")mes "TID: "+pArray("tid")// ユニコード 対応の為mesWptr pTitle("bstrptr") // unicode で格納された文字列のポインタloop