HSPプログラムコンテストの作品をリスト&カウント

Enterキーで選択中の作品ページを開きます。
マイナスの文字が化けているかも。33行目のマイナス、78行目の "<!–段落始まり–>" はHTMLコメントです。
gistにもあります https://gist.github.com/skymonsters-Ks/695bf2fb35bd7074413651e96fcf49bd

Enterキーで選択中の作品ページを開きます。
マイナスの文字が化けているかも。33行目のマイナス、78行目の "<!–段落始まり–>" はHTMLコメントです。
gistにもあります https://gist.github.com/skymonsters-Ks/695bf2fb35bd7074413651e96fcf49bd

  • タグ:
  • タグはありません
#include "hspinet.as"

#define URL_BASE "http://dev.onionsoft.net/seed/info.ax?id="

	netinit
	if stat : dialog "connection error" : end

	; 年度
	year = "2017" ; 2012年より前は非対応
	
	; 部門
	category = "n", "s", "d"
	cate_name = "一般", "HSPTV", "Dish"

	sdim listBuf, 32000
	
	neturl "http://hsp.tv/contest" + year + "/"

	num_str = "("
	num_total = 0
	foreach category : cate_id = cnt
		num_cate(cate_id) = 0
		repeat , 1
			fn = "list_" + category(cate_id) + cnt + ".html"
			request fn
			if stat : break
			title "downloading " + fn
			gosub *downloadLoop
			gosub *getWork
		loop
		num_str += strf("%s:%d, ", cate_name(cate_id), num_cate(cate_id))
	loop
	poke num_str, strlen(num_str) – 2
	title strf("作品数:%d %s)", num_total, num_str)
	objsize 640, 480
	listbox listid, 0, listBuf
	notesel listBuf
	onkey gosub *inKey
	stop

*inKey
	if lparam >> 30 : return
	if wparam == 13 { ; Enter
		noteget ts, listid
		getstr id, ts, 1, ':'
		exec URL_BASE + int(id), 16
	}
	return

#deffunc request str _fn
	netfileinfo info, _fn
	if stat {
		dialog "info error"
		end
	}
	getstr ts, info
	if instr(ts, 0, "404") >= 0 {
		return 1
	}
	netrequest_get _fn
	return 0

*downloadLoop
	netexec res
	if res < 0 {
		neterror estr
		dialog "download error: " + estr
		end
	}
	if res > 0 {
		netgetv buf
		return
	}
	await 50
	goto *downloadLoop

*getWork
	pt = instr(buf, 0, "<!–段落始まり–>")
	repeat
		t = instr(buf, pt, "<a name=")
		if (t < 0) : break
		pt += t
		getstr id, buf, pt + 9, 34 ; "
		url = URL_BASE + id
		pt += instr(buf, pt, url)
		getstr name, buf, pt + strlen(url) + 2, 60 ; <
		listBuf += strf("#%05d: %s\n", id, name)
		num_total++
		num_cate(cate_id)++
	loop
return