#概要 #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]をラベルデータとして作成          自身→弾幕用初期化処理