本来は ZIP にすべきかもしれないですが、お手軽さを優先して、ココに貼り付けて起きます。
既存のモジュールはURLからダウンロード(コピペ)してください。
誰かココから進歩させてください。私にはこれが精一杯です^^;;
必読!
@問題点や今後の課題
・スレ主やレスした人の名前が表示されない
・書き込みができない (Read Only)
・日付が表示されない
・HSPではデフォルトで正規表現が使えないために、
<A HERF>...</A> のタグのみエスケープされていません。
; ―――――――――――――――――――――――――――――――――――――――――――――――――― ; ; !!! ここに以下のアドレスの "文字コード変換モジュール"と"文字列の置換モジュール" を貼り付けてください!!! ; ; http://hspdev-wiki.net/?Module%2F%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9%CA%D1%B4%B9%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB#o6553784 ; http://hspdev-wiki.net/?Module%2F%CA%B8%BB%FA%CE%F3%A4%CE%C3%D6%B4%B9 ; ; ―――――――――――――――――――――――――――――――――――――――――――――――――― // 代入 RES_NO = 19616 ; レス No. ver = "0.01b" V = "HSP-TV 掲示板 ブラウザー(仮称) "+ver // 開発者名(開発に加わった人のHN)をいれてね〜(遠慮無用) thismaker = "panda(hspuser)\n" thismaker+= "...\n" #define ctype HIWORD(%1) (%1 >> 16 & $FFFF) ; WM_COMMAND oncmd gosub *command, $111 #module module_connect #uselib "wininet" #func InternetOpen "InternetOpenA" int,int,int,int,int #func InternetOpenUrl "InternetOpenUrlA" int,int,int,int,int,int #func InternetQueryDataAvailable "InternetQueryDataAvailable" int,int,int,int #func InternetReadFile "InternetReadFile" int,int,int,int #func InternetCloseHandle "InternetCloseHandle" int #const null 0 #const INTERNET_OPEN_TYPE_PRECONFIG $00000000 #const INTERNET_FLAG_DONT_CACHE $04000000 #const INTERNET_FLAG_RELOAD $80000000 //―――――――――――――――――――― // ネットからテキストのURL指定 // // // // InternetTextURL p1 // // // // p1:URL // //―――――――――――――――――――― #deffunc InternetTextURL str p1 url@ymd = p1 return //―――――――――――――――――――― // ネットからテキストファイルをロード // // // // InternetTextGet p1,p2 // // // // p1:変数 p2:ファイル // //―――――――――――――――――――― #deffunc InternetTextGet var p1 , str p2 // セッションの初期化 InternetOpen null, INTERNET_OPEN_TYPE_PRECONFIG, null, null, 0 if stat { hSession = stat // URLをオープン // INTERNET_FLAG_DONT_CHACHE ... データをキャッシュしない // INTERNET_FLAG_RELOAD ... キャッシュを無視してデータを取得 uFile = url@ymd uFile += p2 InternetOpenUrl hSession, varptr(uFile), null, 0, INTERNET_FLAG_RELOAD, 0 if stat { hService = stat // 一度に読み込めるサイズを問い合わせる InternetQueryDataAvailable hService, varptr(availableSize), 0, 0 sdim buf, availableSize + 1 doc = "" repeat // ダウンロード InternetReadFile hService, varptr(buf), availableSize, varptr(done) if stat & (done = 0) : break doc += buf memset buf, 0, availableSize await 0 loop InternetCloseHandle hService } InternetCloseHandle hSession } p1 = doc return #global // HTML 取得用のメモリ確保 sdim buf,1024*500 sdim RES_TITLE,1024 sdim RES_BODY,1024*50,100 ; レス用 sdim writelist,1024 sdim tmp,1024*5000 // スクリーン初期化 screen 0,800,600,6 title ""+V syscolor 15:boxf:syscolor 8 pos 10,10 sysfont 17 mes "タイトル" pos 20,25 font "メイリオ",16,1 mes "読み込み中だわさ (^^ノ" pos 20,25 font "メイリオ",16,1 mes RES_TITLE font "メイリオ",12,1 objmode 2 // スレ主板 pos 40,60 RES_BODY(0) = "PleaseWait..." mesbox RES_BODY(0),720,80,0 id_bodybox = stat // レス板 tmp = "右側のリストから閲覧するレスをクリックしてください..." pos 40,220 mesbox tmp,570,340,0 id_rebox = stat // 返信インデックス pos 640,200 objsize 120,310 listbox sel_list,80,writelist id_list = stat hListbox = objinfo (id_list, 2) line 10,160,780,160 gsel 0,1 wait 50 // レスを取得 gosub *LB_GetResInternet // 簡単コンパイル(エンコード) gosub *LB_EasyCompile // ソース画面 screen 2,800,640,6 title "ソース" mesbox buf,1024,768,5 gsel 0,1 // レスのタイトル取得 gosub *LB_GetResTitle // レスの本文取得 gosub *LB_GetResBody // ---- ---- ---- 画面描画 ---- ---- ---- ---- ---- ---- // クリア syscolor 15:boxf:syscolor 8 // オブジェクトに代入 title ""+V+" - No,"+RES_NO objprm id_bodybox,RES_BODY(0) objprm id_list,writelist // 文字描画 sysfont 17 pos 10,10 mes "タイトル" pos 20,170 t = RES_MAX-1 mes "このスレに対する返信 ("+t+")" pos 630,180 mes "返信のインデックス" pos 20,25 font "メイリオ",16,1 mes RES_TITLE // ライン描画 line 10,160,780,160 stop ; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ; ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- *LB_GetResInternet InternetTextURL "http://hsp.tv/play/" InternetTextGET buf,"pforum.php?mode=all&num="+RES_NO return *LB_EasyCompile // 文字コード変換 buf = eucjp2sjis(buf) // Linuxの改行コードをHSPで扱えるように置き換え target = "" : poke target,0,0x0A ; 置き換えの対象 _replace = "\n" ; 置き換え後の文字 replace buf, target,_replace // タグの除去 target = "<br>" ; 置き換えの対象 _replace = "" ; 置き換え後の文字 replace buf, target,_replace target = "<span class=\"quotation\">>" ; 置き換えの対象 _replace = "> " ; 置き換え後の文字 replace buf, target,_replace target = "</span>" ; 置き換えの対象 _replace = "" ; 置き換え後の文字 replace buf, target,_replace return *LB_GetResTitle // ---- ---- ---- レスのタイトル取得 ---- ---- ---- ---- ---- ---- seek = instr(buf,0,"margin-top:1px;\"") // 始まり位置から切り取る t_start = -1 t_end = -1 repeat strlen(buf),seek if ((strmid(buf,cnt,1) == ">")and(t_start == -1)){ t_start = cnt t_start++ } if ((strmid(buf,cnt,1) == "<")and(t_start ! -1)){ t_end = cnt break } wait 0 loop // 最後に切り取る RES_TITLE = strmid(buf,t_start,(t_end-t_start)) // タイトルに改行が入っていたら失敗報告 (たまにサーバーがエラーを起こすので) if instr(RES_TITLE,0,"\n") ! -1{ RES_TITLE = "タイトル取得失敗..." } return *LB_GetResBody // ---- ---- ---- レスの本文取得 ---- ---- ---- ---- ---- ---- // リセット t_start = 0 t_end = 0 seek = 0 // 本文の前にあるタグ targetA = "<div class=\"main\">" targetB = "</div>" repeat 100 // 本文の始まりを探す searchA = instr(buf,seek,targetA) seek = seek+searchA+1 // 本文の終わりを探す searchB = instr(buf,seek,targetB) // 始まりと終わりを切り取る RES_BODY(cnt) = strmid(buf,seek+19,searchB-23) if (searchA == searchC)and(searchB == searchD){ RES_MAX = cnt-1 break } searchC = searchA searchD = searchB loop // 返信ボックス作成 writelist+= "すべて表示...\n" repeat RES_MAX-1,1 writelist+= "Re: "+strf("%03d",cnt)+"\n" loop return *LB_GetResNo if no = 0{ tmp="! このスレに対しての全員の返信です !\n\n" repeat RES_MAX-1,1 tmp+= "----------------------------------\n" tmp+= " No."+cnt+"\n" tmp+= "----------------------------------\n" tmp+= RES_BODY(cnt) tmp+= "\n\n" loop tmp+= "\n以上 "+(RES_MAX-1)+"件" objprm id_rebox,tmp } else { objprm id_rebox,RES_BODY(no) } return *command ; back to hwnd of listbox if lparam = hListbox { if HIWORD(wparam) = 1 { sendmsg hListbox, $188 no = stat gosub *LB_GetResNo } } return