(しょぼいカレンダー)番組名から、番組名とTIDを取得するサンプル

(しょぼいカレンダー)番組名から、番組名とTIDを取得するサンプル。出力のみUnicode(UTF-16)対応。入力はShift_JISですが、ちょっと改造すればUnicode(UTF-16)対応にできるかと。

(しょぼいカレンダー)番組名から、番組名とTIDを取得するサンプル。出力のみUnicode(UTF-16)対応。入力はShift_JISですが、ちょっと改造すればUnicode(UTF-16)対応にできるかと。

  • hk1v
  • 2013/6/24 3:24
  • タグ:
  • タグはありません
#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