#概要
#5chのスレを弾幕形式で閲覧する、だけです。
/* 参考 各TV番組の実況板(今後、変更の可能性アリ)
番組ch(NHK)
https://nhk2.5ch.net/livenhk/
番組ch(NTV)
https://himawari.5ch.net/liventv/
番組ch(TBS)
https://himawari.5ch.net/livetbs/
番組ch(フジ)
https://himawari.5ch.net/livecx/
番組ch(朝日)
https://himawari.5ch.net/liveanb/
番組ch(TX)
https://himawari.5ch.net/livetx/
*/
#★簡単な使い方(例)
#1.上記の実況板のURLを、ひとつコピーする
#2.ソフトを起動。「更新」ボタンを押す
#3.文字入力画面になる。URLが初期値になっているので、そのまま「OK」
#4.板の「スレ一覧」が出てくるので、目的のスレを選んで「OK」
#●本来の使い方
#「更新」ボタンを押す。
#文字入力画面に5chの「板」のURLを入れる
#入力した板の「スレ一覧」がリスト選択で出てくるので、URLを選択
#●スレを変更したい場合
#「更新」を押すと「スレ一覧」が出てくるので選択。
#●他の板に変更したい場合
#ソフトを終了してください。
#●スレが終了したとき
#次スレが存在すれば、そのスレに、自動で移行します。
#次スレがなければ、スレ一覧の「先頭」を選択します。
#目的のスレ「ではなかった」場合、手動で変更してください。
#●注意●
#スレの更新間隔はできるだけ「長め」に取りましょう。(情報@「間隔」)
#UAを変更したい場合、(HTTPオプション)を変更しましょう。
#Windows7sp1でのみ、動作確認してます…。
HTTPオプションは「UA=」&「Mozilla/5.0 (Windows NT 6.1; rv:90.0) Gecko/20100101 Firefox/90.01」
情報とはハッシュ=「」をハッシュ変換#各種データ用
情報@「スレ一覧」=「」#板のURL
情報@「スレ」=「」#スレのURL
情報@「スレタイ」=「」#スレの名前
情報@「間隔」=15#スレの更新間隔。秒
CCCとはハッシュ=「」をハッシュ変換#コメント用
カウント一覧とは配列=「」#コメントのハッシュキー配列
基準時間とは整数=0#正確な時間を計るために使う(タイマーでは…)
弾幕とは弾幕用
そのX=母艦→X
そのY=母艦→Y
そのCW=母艦→CW
そのCH=母艦→CH
その文章色=紫色
その速度調整=8
XXとはボタン
そのテキスト=「●更新」
そのクリックした時は〜
時間計測→停止
もし、情報@「スレ一覧」=「」ならば、
ダイアログ初期値=クリップボード
「スレ一覧(板)のURLを入力」と尋ねる
もし、それ≠「」ならば、
情報@「スレ一覧」=それ
もし、情報@「スレ一覧」≠「」ならば、
(情報@「スレ一覧」)から個別スレ取得処理
もし、それ≠「」ならば、
母艦→タイトル=それ\0
情報@「スレ」=それ\1
情報@「スレタイ」=母艦→タイトル
RR→テキスト="{〜}URL={情報@「スレ」}{〜}更新={情報@「間隔」}秒"
(情報@「スレ」)からコメント取得処理
時間計測→開始
RRとはラベル
そのテキスト="{〜}URL={情報@「スレ」}{〜}更新={情報@「間隔」}秒"
時間計測とはタイマー
その値=10
その時満ちた時は〜
AAAとは配列=「」
もし、カウント一覧≠「」ならば、
それは、10*カウント一覧\0
もし、それ<システム時間-基準時間ならば、
AAAにCCC@(カウント一覧\0)を配列追加
カウント一覧の0を配列削除
弾幕→設定処理(AAA)
弾幕→移動処理
弾幕→複写処理
それは、1000*(情報@「間隔」)+100#←誤差調整用(適当)
もし、それ≦システム時間-基準時間ならば、
時間計測→停止
もし、情報@「スレ」≠「」ならば、
(情報@「スレ」)からコメント取得処理
もし(母艦→タイトル=「*」)&&(CCC=「」)ならば、
//「スレ終了しました」を言う
コメ再取得処理
違えば、
時間計測→開始
弾幕位置変更処理
弾幕サイズ変更処理
#二つの文字列を比較する。文字列の最初ほど、重みがある。
●文字列差異調査(AAとBBを)
#全角英数を半角に
AA=AAを英数半角変換
BB=BBを英数半角変換
#先頭のスレ番号を無くす
AAから「:」まで切り取る
BBから「:」まで切り取る
#数字を「 」に変換
AA=AAの「\d+」を「 」に正規表現置換
BB=BBの「\d+」を「 」に正規表現置換
AAAとは配列=AAを文字列分解
BBBとは配列=BBを文字列分解
一致とは整数=0
不一致とは整数=0
最大とは整数=AAAの配列要素数
#先頭ほど重みがある
AAAを反復
もし、対象=BBB[回数-1]ならば、
一致=一致+最大-(回数-1)
違えば、
不一致=不一致+最大-(回数-1)
もし、一致>不一致ならば、1で戻る
違えば、0で戻る
●コメ再取得処理
もし、情報@「スレ一覧」≠「」ならば、
(情報@「スレ一覧」)からスレ再取得処理
もし、それ≠「」ならば、
母艦→タイトル=それ\0
情報@「スレ」=それ\1
情報@「スレタイ」=母艦→タイトル
RR→テキスト="{〜}URL={情報@「スレ」}{〜}更新={情報@「間隔」}秒"
(情報@「スレ」)からコメント取得処理
時間計測→開始
●スレ再取得処理(SSから)
SS0とは文字列=SSからURL基本パス抽出
SS1とは文字列=SS0&「subback.html」#スレ一覧
SS1からHTTPデータ取得
SS2とは文字列=それの「」から「」まで範囲切り取る
#実際のスレ用に置換
SS0=SS0の「.5ch.net/」を「.5ch.net/test/read.cgi/」に置換
AAとは配列=「」
SS2を反復
対象を「(.+?)」で正規表現マッチ
もし、それ≠「」ならば、
AAに(抽出文字列\1&「|||」&SS0&抽出文字列\0)を配列追加
#スレが1000未満を抜き出す
BBとは配列=「」
AAを反復
それは、対象
それから「|||」まで切り取る
それを「\((\d+)\)」で正規表現マッチ
もし、それ≠「」ならば、
抽出文字列を整数変換
もし、それ<1000ならば、
BBに対象を配列追加
#前のスレと同タイトルを探す。なければスレ一覧の先頭スレ
XXとは文字列=情報@「スレタイ」
戻値とは文字列=BB\0
BBを反復
それは、対象
それから「|||」まで切り取る
XXと(それ)を文字列差異調査
もし、それ=1ならば、
戻値=対象
抜ける
それは、戻値
もし、それ≠「」ならば、
それを「|||」で区切る
それで戻る
#抽出するコメントはCCC(ハッシュ。グローバル)に入れる
●コメント取得処理(URLから)
#URLからデータ取得して、整形
URLからHTTPデータ取得
SSとは文字列=それ
SS=SSの「
(\d+)」で正規表現マッチ
もし、それ≠「」ならば、
仮数=抽出文字列
もし、仮数=「1000」ならば、
母艦→タイトル=「*」
//抜ける
対象を「
.+?(\d+:\d+:\d+)\.(\d+).+?
(.*?)」で正規表現マッチ
もし、それ≠「」ならば、
端数=TTと抽出文字列\0の秒差
もし、端数≧0ならば、
端数=端数*100
端数=端数+(抽出文字列\1を整数変換)
抽出文字列\2からタグ削除
それの「(>)+\d+」を「」に正規表現置換
CCC@(端数)=仮数&「:」&それ
カウント一覧に端数を配列追加
●個別スレ取得処理(SSから)
SS0とは文字列=SSからURL基本パス抽出
SS1とは文字列=SS0&「subback.html」#スレ一覧
SS1からHTTPデータ取得
SS2とは文字列=それの「
」から「」まで範囲切り取る
#実際のスレ用に置換
SS0=SS0の「.5ch.net/」を「.5ch.net/test/read.cgi/」に置換
AAとは配列=「」
SS2を反復
対象を「
(.+?)」で正規表現マッチ
もし、それ≠「」ならば、
AAに(抽出文字列\1&「|||」&SS0&抽出文字列\0)を配列追加
AAでリスト選択
もし、それ≠「」ならば、
それを「|||」で区切る
それで戻る
●弾幕サイズ変更処理
それは、弾幕→CW+弾幕→CH
もし、それ≠母艦→CW+母艦→CHならば、
弾幕→可視=オフ
弾幕→CW=母艦→CW
弾幕→CH=母艦→CH
もし、弾幕→可視=オフならば、
弾幕→可視=オン
●弾幕位置変更処理
微調整とは整数=4
もし、弾幕→Y≠母艦→Y+母艦→H-母艦→CH-微調整ならば、
弾幕→Y=母艦→Y+母艦→H-母艦→CH-微調整
もし、弾幕→X≠母艦→X+微調整ならば、
弾幕→X=母艦→X+微調整
#----------------------------------------------------------------------------
#----------------------------------------------------------------------------
#なでしこライブラリーから、少し改変して引用しました。
#透過色は黒のみ
#親を持つ場合は、透過できないようです
!WS_EX_LAYERED=$80000
!GWL_EXSTYLE=-20
!LWA_COLORKEY=1
!LWA_ALPHA=2
●GetWindowLong(h,i) = DLL("user32.dll","LONG GetWindowLongA(HWND hWnd,int nIndex)")
●SetWindowLong(h,n,d) =DLL("user32.dll","long SetWindowLongA(hwnd hWnd,int nIndex,long dwNewLong)")
●SetLayeredWindowAttributes(h,c,b,d) =DLL("user32.dll","BOOL SetLayeredWindowAttributes(HWND hwnd, LONG crKey, LONG bAlpha, DWORD dwFlags );")
●窓ハンドル黒色透明化(Sを)
SetWindowLong(S,GWL_EXSTYLE,GetWindowLong(S,GWL_EXSTYLE)||WS_EX_LAYERED)
SetLayeredWindowAttributes(S,0,0,LWA_COLORKEY)
#ここまで
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
■ラベルデータ
・X
・Y
・W
・H
・テキスト
・ポケット
・文字色
・文字サイズ
・スピード
・レーン
・作る〜
自身→X=0
自身→Y=0
自身→W=0
自身→H=0
自身→テキスト=「」
自身→ポケット=「」
自身→文字色=0
自身→文字サイズ=0
自身→スピード=0
自身→レーン=-1
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
■弾幕用
・X←X設定→X取得
・X設定(V)〜弾幕艦→X=Vを整数変換
・X取得〜それは、弾幕艦→X
・Y←Y設定→Y取得
・Y設定(V)〜弾幕艦→Y=Vを整数変換
・Y取得〜それは、弾幕艦→Y
・CW←CW設定→CW取得
・CW設定(V)〜弾幕艦→CW=Vを整数変換
・CW取得〜それは、弾幕艦→CW
・CH←CH設定→CH取得
・CH設定(V)〜弾幕艦→CH=Vを整数変換
・CH取得〜それは、弾幕艦→CH
・可視←可視設定→可視取得
・可視設定({整数}V)〜弾幕艦→可視=(V>0)
・可視取得〜それは、弾幕艦→可視
・文章色←文章色設定→文章色取得
・文章色設定({整数}V)〜
もし、V>0ならば、弾幕艦→タグ@「文字色」=V
・文章色取得〜それは、弾幕艦→タグ@「文字色」
・文章サイズ←文章サイズ設定→文章サイズ取得
・文章サイズ設定({整数}V)〜
もし、V>0ならば、弾幕艦→タグ@「文字サイズ」=V
・文章サイズ取得〜それは、弾幕艦→タグ@「文字サイズ」
・速度調整←速度調整設定→速度調整取得
・速度調整設定({整数}V)〜
もし、V>0ならば、弾幕艦→タグ@「速度調整」=V
・速度調整取得〜それは、弾幕艦→タグ@「速度調整」
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
・弾幕用初期化処理〜
弾幕数とは整数=弾幕艦→タグ@「弾幕数」
未使用とは配列=「」
(弾幕数)回
未使用に(回数-1)を配列追加
弾幕艦→タグ@「未使用」=未使用
予備弾幕数とは整数=弾幕艦→タグ@「予備弾幕数」
予備未使用とは配列=「」
(予備弾幕数)回
KOME[回数-1]→テキスト=「」
KOME[回数-1]→レーン=-1
予備未使用に(回数-1)を配列追加
弾幕艦→タグ@「予備未使用」=予備未使用
弾幕艦→タグ@「予備使用済」=「」
#設定処理、移動処理、複写処理の三つをセットで使う
#仮配列[0]=表示するコメント。仮配列[1]=コメントのオプション
#仮配列の配列要素数=1の場合、仮配列は、コメントのみ。
・設定処理({配列}仮配列を)〜
もし、仮配列=「」ならば、戻る
採寸用→文字サイズ=弾幕艦→タグ@「文字サイズ」
採寸用→文字色=弾幕艦→タグ@「文字色」
採寸用→ポケット=「naka」
採寸用→テキスト=仮配列[0]
もし、仮配列の配列要素数>1ならば、
仮配列[1]を「 」で区切って反復
対象で条件分岐
「ue」ならば、採寸用→ポケット=「ue」
「shita」ならば、採寸用→ポケット=「shita」
「white」ならば、採寸用→文字色=$FFFFFF
「red」ならば、採寸用→文字色=$FF0000
「pink」ならば、採寸用→文字色=$FF8080
「orange」ならば、採寸用→文字色=$FFC000
「green」ならば、採寸用→文字色=$00FF00
「cyan」ならば、採寸用→文字色=$00FFFF
「blue」ならば、採寸用→文字色=$0000FF
「purple」ならば、採寸用→文字色=$C000FF
「black」ならば、採寸用→文字色=$000004
「small」ならば、採寸用→文字サイズ=11
「big」ならば、採寸用→文字サイズ=24
違えば、#なにもしない
予備未使用とは配列=弾幕艦→タグ@「予備未使用」
予備使用済とは配列=弾幕艦→タグ@「予備使用済」
仮要素とは整数=予備未使用[0]
予備使用済に予備未使用[0]を配列追加
予備未使用の0を配列削除
弾幕艦→タグ@「予備使用済」=予備使用済
弾幕艦→タグ@「予備未使用」=予備未使用
弾幕数とは整数=弾幕艦→タグ@「弾幕数」
間隔とは整数=弾幕艦→CH/弾幕数の整数部分
速度とは整数=弾幕艦→CW/50の整数部分
速度調整とは整数=弾幕艦→タグ@「速度調整」
未使用とは配列=弾幕艦→タグ@「未使用」
もし、未使用=「」ならば、
KOME[仮要素]→Y=(弾幕艦→CH-採寸用→H)の乱数
違えば、
それは、(未使用の配列要素数)の乱数
KOME[仮要素]→レーン=未使用[それ]
未使用の(それ)を配列削除
弾幕艦→タグ@「未使用」=未使用
KOME[仮要素]→Y=間隔*(KOME[仮要素]→レーン)
KOME[仮要素]→X =弾幕艦→CW
KOME[仮要素]→W =採寸用→W
KOME[仮要素]→H =採寸用→H
KOME[仮要素]→テキスト =採寸用→テキスト
KOME[仮要素]→ポケット =採寸用→ポケット
KOME[仮要素]→文字色 =採寸用→文字色
KOME[仮要素]→文字サイズ=採寸用→文字サイズ
KOME[仮要素]→スピード =速度+(採寸用→テキストの文字数)
KOME[仮要素]→スピード =KOME[仮要素]→スピード/速度調整の整数部分
#コメントを移動させる。(表示はしてないので注意)
・移動処理〜
未使用とは配列=弾幕艦→タグ@「未使用」
予備使用済とは配列=弾幕艦→タグ@「予備使用済」
予備未使用とは配列=弾幕艦→タグ@「予備未使用」
削除用とは配列=「」
予備使用済を反復
もし、KOME[対象]→テキスト≠「」ならば、
KOME[対象]→X=KOME[対象]→X - KOME[対象]→スピード
もし、KOME[対象]→X + KOME[対象]→W<0ならば、
もし、KOME[対象]→レーン≧0ならば、
未使用に(KOME[対象]→レーン)を配列追加
KOME[対象]→レーン=-1
KOME[対象]→テキスト=「」
予備未使用に(対象)を配列追加
削除用に(回数-1)を配列追加
(削除用を配列数値ソート)を配列逆順
削除用を反復
予備使用済の対象を配列削除
弾幕艦→タグ@「未使用」=未使用
弾幕艦→タグ@「予備使用済」=予備使用済
弾幕艦→タグ@「予備未使用」=予備未使用
#コメントを画面に表示する。
・複写処理〜
弾幕艦を(弾幕艦→タグ@「透過色」)で画面クリア
文字色控えとは整数=文字色
文字サイズ控えとは整数=文字サイズ
予備使用済とは配列=弾幕艦→タグ@「予備使用済」
上側とは整数=0。下側とは整数=0
XXとは整数。YYとは整数。
予備使用済を反復
文字色 =KOME[対象]→文字色
文字サイズ=KOME[対象]→文字サイズ
もし、KOME[対象]→テキスト≠「」ならば、
(KOME[対象]→ポケット)で条件分岐
「ue」ならば、
上側=上側+KOME[対象]→H
XX =(弾幕艦→CW-KOME[対象]→W)*(弾幕艦→CW-KOME[対象]→W>0)/2の整数部分
YY =上側-KOME[対象]→H
「shita」ならば、
下側=下側+KOME[対象]→H
XX =(弾幕艦→CW-KOME[対象]→W)*(弾幕艦→CW-KOME[対象]→W>0)/2の整数部分
YY =弾幕艦→CH-下側
違えば、
XX =KOME[対象]→X
YY =KOME[対象]→Y
弾幕艦のXX,YYへ(KOME[対象]→テキスト)を文字表示
文字色=文字色控え
文字サイズ=文字サイズ控え
#弾幕艦→画像通り変形
窓ハンドル黒色透明化(弾幕艦→ハンドルを)
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
・作る〜
弾幕艦をフォームとして作成
弾幕艦→スタイル=「枠なし」
弾幕艦→最前面表示=オン
弾幕艦→タグ=「」をハッシュ変換
弾幕艦→タグ@「弾幕数」=12
弾幕艦→タグ@「透過色」=黒色
弾幕艦→タグ@「文字色」=緑色
弾幕艦→タグ@「文字サイズ」=18
弾幕艦→タグ@「未使用」=「」
弾幕艦→タグ@「予備弾幕数」=1000
弾幕艦→タグ@「予備未使用」=「」#配列
弾幕艦→タグ@「予備使用済」=「」#配列
弾幕艦→タグ@「速度調整」=2
採寸用をラベルとして作成
採寸用→可視=オフ
採寸用→親部品=弾幕艦
(弾幕艦→タグ@「予備弾幕数」)回、
KOME[回数-1]をラベルデータとして作成
自身→弾幕用初期化処理