したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

テストその2

1名無しさん:2002/11/28(木) 00:05
テストその2

161 ◆/vmukiyuzw:2013/10/05(土) 19:10:53
http://qb5.2ch.net/test/read.cgi/operate/1380281358/562,565

こういう口出しするのはどうかと自分でも思うんですが
http://mirrorhenkan.g.ribbon.to/jane/htmltodat-convert/
は、もう公開やめたほうがいいんじゃないですかね
http://mirrorhenkan.g.ribbon.to/jane/htmltodat-convert2/
のほうがはるかに良いと思われますし

162 ◆/vmukiyuzw:2013/10/06(日) 19:07:39
http://yy14.kakiko.com/test/read.cgi/mirror/1353918147/46

勢いでなんか書いてしまいすみません
相変わらずお忙しそうなのでまた気の向いたときにでも

163 ◆/vmukiyuzw:2013/10/28(月) 20:37:03
http://anago.2ch.net/test/read.cgi/software/1348064199/871-

私は時々htmltodatでまとめサイトのコメントをdat化して読んでますが
経験的にはやっぱその都度正規表現考えないといけなくて
汎用化は難しい気がしますね。

まあdat化そのものは経験があれば大して難しくは無いと思うのですが
面倒なのは、コメント中のレスアンカーに統一された形式が無い事。
2ch互換の掲示板なら>>1みたいにするところを※1だとか米1だとか
しかも同じhtmlの中でも統一されてなかったりするのが厄介だなと
思ったことがありました。

164 ◆/vmukiyuzw:2013/11/07(木) 21:45:19
最近、「詳説 正規表現」という本を入手しました。
正規表現のバイブルとして有名な本なので前から読んでみたかったものです。
(amazonで中古本がやたら安かったのでつい買ってしまった^^;)

で読んでみて、非常に勉強になりました。
今まで正規表現には結構詳しいつもりでいたのが全然そうでないのを思い知らされました。
今は
http://perldoc.jp/docs/perl/5.18.1/perlretut.pod
http://homepage3.nifty.com/k-takata/mysoft/bregonig.html
など見ながら何ができるか再度勉強してます。実際に動かしてみるのが一番身に付く気がします。

で、htmltodatをバージョンアップして、覚えた事の一部を反映したい気持ちが湧いてきました。
(また誰得のひとりよがりな更新になっちゃう可能性が高いですが)

165 ◆/vmukiyuzw:2013/11/25(月) 19:37:37
http://jbbs.livedoor.jp/bbs/read.cgi/computer/21256/1164941934/797-800

htmltodatもバッチファイルやスクリプトから呼べるようになったし
いろいろ機能拡張してるんで
これはその辺組み合わせればできるんじゃね?と思ってやってみました。
# 結構イレギュラーな使い方なんでサポートスレでなくこちらで軽く雑談程度に

必要なファイル:
・sorttest.cmd (処理全体を起動するバッチファイル。後述)
・Rちゃんねる.prm (Rちゃんねるをdat変換するためのprmファイル。後述)
・sortN.cmd (datファイルをソートするために使う外部ツール。
 http://www.vector.co.jp/soft/winnt/util/se428840.html からダウンロードしたものを
 解凍すると含まれているものをそのまま利用)
・ソート後処理.prm (ソート後のdatファイルを加工するためのprmファイル。後述)

必要なファイルはとりあえず htmltodat 本体と同じフォルダに置いてください。
(実行もコマンドプロンプトで htmltodat のフォルダに移動してから)

(続く)

166 ◆/vmukiyuzw:2013/11/25(月) 19:40:19
(続き)

まずはバッチファイル、sorttest.cmd 。
コマンドプロンプトから sorttest.cmd URL(←URLは http://・・・の形式で)
で実行します。
まあちょっと弄れば専ブラの外部コマンドとかでも動かせると思います。

@rem -----ここから----------------------------------------------------------------------

echo off
@rem 使い方:コマンドプロンプトで sorttest.cmd URL(←URLは http://・・・の形式で)を入力

@rem 手順1.Rちゃんねるのログをdat変換(行番号付き)
@rem  (0行目に後で使うためスレタイを入れている)
htmltodat.exe %1 Rちゃんねる.prm $temp1.dat

@rem 手順2.行番号でソート
call sortN.cmd < $temp1.dat > $temp2.dat

@rem 手順3.行番号の削除(andスレタイ付与)
@rem  第3パラメータを省略しているので変換処理までしか行わない(ファイル保存は手動でやる)
@rem  ファイル保存後はhtmltodatを手動で必ず終了すること(でないとこのコマンド全体が終了しない)
htmltodat.exe $temp2.dat ソート後処理.prm

@rem 手順4.テンポラリファイルの削除(一応お行儀よく)
del $temp1.dat
del $temp2.dat

167 ◆/vmukiyuzw:2013/11/25(月) 19:44:13
(続き)

次に、Rちゃんねる.prm。


コメント:
# Rちゃんねるのhtmlをdat変換
# ただし、レス番号順に並んでいないため、後でソートするためレス番号を先頭に付加しておく
# (そのため「変換結果式」に$1が入る)
# また、スレタイトルを後で取得するためレス番号0に入れておく

前処理:
# スレタイトルをレス番号0に偽装させるための処理
s`(<title>)([^|]+) \|.*(</title>)`<div id="0"><div class="comment">$2</div>`ik

変換結果式:
$1<>$2<>$3<>$4<>$5<>

プレビューを表示しない:
true

正規表現: ※拡張形式を使ってみた
m`
(?# レス番号) <div\ id="(\d+)"
(?# 名前・メール欄・投稿日はこのhtmlには存在しないためダミーでマッチさせる) ()()().*?
(?# レス内容) <div\ class="comment">(.*?)</div>
`ikx

168 ◆/vmukiyuzw:2013/11/25(月) 19:45:49
(続き)

次に、ソート後処理.prm。


コメント:
# レス番号付きのdatがソートされた後の処理
# ・レス番号をとっぱらう
# ・レス番号0に偽装していたスレタイをレス番号1の後ろに付与する
# これらは前処理だけで話は済むのでdat変換処理はしない

前処理:
# レス番号の除去
s`(^|\n)\d+<>``ikg
# 0行目に設定されていたスレタイを1行目の後ろに付ける
s`^<><><>(.*?)<>\s*(<><><>.*?<>)`$2$1`ik

dat変換をしない(前処理のみ行う):
true

プレビューを表示しない:
true

169 ◆/vmukiyuzw:2013/11/25(月) 20:01:40
(続き)

まあやってることはコメント参照してください。

ソートした後、もう一度htmltodatを呼び出して
あたかもhtmltodat一発で変換・並べ替えまでできてるように
見せかけたとこが工夫といえば工夫ですかね〜。

あと、バッチファイルなどさわるのは久々だったんで
sortN.cmdを呼び出すのに、callをつけないと
制御が戻ってこないことに気づくまでしばらく悩みました^^;

170 ◆/vmukiyuzw:2013/11/26(火) 19:10:40
>>167
ちょっと修正
(「URLの変換」の記述が漏れていた、&
dat上の「投稿日」欄が空だとブラウザにより破損ログとみなされてしまうことがわかったので
とりあえず「名前」欄($2)と「投稿日」欄($4)に半角スペースを入れるようにしてみた)


コメント:
# Rちゃんねるのhtmlをdat変換
# ただし、レス番号順に並んでいないため、後でソートするためレス番号を先頭に付加しておく
# (そのため「変換結果式」に$1が入る)
# また、スレタイトルを後で取得するためレス番号0に入れておく

URLの変換:
s`http://(.+?)/test/read\.cgi/(.+?)/(\d+)/?.*`http://r-2ch.com/t/$2/$3/`

前処理:
# スレタイトルをレス番号0に偽装させるための処理
s`(<title>)([^|]+) \|.*(</title>)`<div id="0"><div class="comment">$2</div>`ik

変換結果式:
$1<>$2 <>$3<>$4 <>$5<>

プレビューを表示しない:
true

正規表現: ※拡張形式を使ってみた
m`
(?# レス番号) <div\ id="(\d+)"
(?# 名前・メール欄・投稿日はこのhtmlには存在しないためダミーでマッチさせる) ()()().*?
(?# レス内容) <div\ class="comment">(.*?)</div>
`ikx

171 ◆/vmukiyuzw:2013/11/26(火) 19:13:59
>>168
ちょっと修正
>>170の修正を受け、datの形式が多少変わっても汎用的に
対処できるようにしてみた)


コメント:
# レス番号付きのdatがソートされた後の処理
# ・レス番号をとっぱらう
# ・レス番号0に偽装していたスレタイをレス番号1の後ろに付与する
# これらは前処理だけで話は済むのでdat変換処理はしない

前処理:
# レス番号の除去
s`(^|\n)\d+<>``ikg
# 0行目に設定されていたスレタイを1行目の後ろに付ける
s`^.*?<>.*?<>.*?<>(.*?)<>\s(.*?<>.*?<>.*?<>.*?<>)`$2$1`ik

dat変換をしない(前処理のみ行う):
true

プレビューを表示しない:
true

172 ◆/vmukiyuzw:2013/11/26(火) 23:16:37
さて、これをもう少し発展させれば
以前どこかで話が出ていたいわゆる「まとめサイト」の変換にも
応用できるかもしれません。

まあまとめサイトにもいろいろあるようで、例えば
複数スレを一つにまとめたようなものには
到底対応できないと思いますが。

173 ◆/vmukiyuzw:2013/11/28(木) 05:51:29
http://yy14.kakiko.com/test/read.cgi/mirror/1353918147/49-56
いい感じに出来上がってきましたね。

一点コメントさせていただくなら、
「getdatpath.wsf の結果を手動でコピーしてhtmltodatに貼り付けてdat保存」
という手順になってるようですが、ここは自動化できるのでは。
getdatpath スクリプトの結果をバッチファイル内で変数にセットして
2回目の htmltodat.exe 呼び出し時に第3パラメータで指定する方式にすれば
できるのではと思いました。

ちょっとやり方調べてみました。
wsf側では、処理結果のdat保存ファイル名を WScript.echo(・・・) の形式で
結果を標準出力に吐くように変更すれば
(で、実行を cscript から呼び出すようにすれば)バッチファイル側で受け取れるはずです。

で、バッチファイル側では for コマンドを使えば標準出力を変数にセットできるようです。

for /f %%D in ('cscript getdatpath.wsf %1') do set datpath=%%D

# これはサンプルをほぼコピーしただけで動いちゃったので
# for コマンドのパラメータとか正直まだあんまり理解してないです^^;
# unixのシェルスクリプトだともっとシンプルな記述でできそうですが
# windowsのバッチコマンドだと for コマンドに色々機能が詰まってるようです

これで多分バッチファイル内の変数 datpath にdatの保存ファイル名がセットされるので、
後は手順3.を

htmltodat.exe $temp2.dat ソート後処理.prm %datpath%

としてやれば、datファイル保存の部分までは自動化できると思います。

174 ◆/vmukiyuzw:2013/11/28(木) 05:54:47
http://yy14.kakiko.com/test/read.cgi/mirror/1353918147/55

> それと>>51の正規表現がJaneだとカッコが%28に化けてるのは何とかなんないのかな

もしかしてReplaceStr.txtをお使いではないですか?
以前うちのサポスレでこんなやり取りがありましたが似た様な話に思えます

http://jbbs.livedoor.jp/bbs/read.cgi/computer/1929/1038588508/679-681
(実際にはもう少し前から結構長いやり取りがあるのですが要点と思われるとこのみ)

175 ◆/vmukiyuzw:2013/11/28(木) 21:47:27
http://yy14.kakiko.com/test/read.cgi/mirror/1353918147/57

あんまり自信ないんですけど・・・こんなのどうでしょう

for /f "tokens=* delims=" %%D in ('cscript getdatpath.wsf %1') do set datpath="%%D"

これで途中半角スペースがあるようなパスでも正しく取得できるような。

176 ◆/vmukiyuzw:2013/11/28(木) 22:51:03
あと、最後の

@rem 手順5.Janeで該当スレッドを開く
Jane2ch.exe %1

だとバッチコマンド自体が終了せずプロセスが残ってしまうかも。

start Jane2ch.exe %1

だと非同期起動なのでいいかもしれません

177 ◆/vmukiyuzw:2013/11/29(金) 01:23:50
>>176
いや、起動中のJaneを横から(?)叩いてスレを開かせる場合
叩いた側のJaneは終了するようになってたかな
であれば非同期にしなくても問題ないか

178 ◆/vmukiyuzw:2013/11/29(金) 19:09:10
>>175
なんとなく分かったんですけど、たぶん問題は2段階あって

・forコマンドで途中にスペースを含むパス名をとりだすのに"delims="が必要

・これをhtmltodatの引数にそのまま渡すとスペースがそのままシェル(cmd.exe)に解釈されて
 複数の引数として渡ってしまうので、コマンド変数を""でくくって
 「1つの引数ですよ」とシェルに教えてやる必要がある

>>175 の例では set datpath="%%D" とやってたまたまできたのですが
htmltodat起動方法を

htmltodat.exe $temp2.dat ソート後処理.prm "%datpath%"

とするほうがいい方法のような気がします。

179 ◆/vmukiyuzw:2013/12/02(月) 23:16:58
どうも最近PCの動作がトロくて
どうやらメモリ不足でスワップが多発している模様だったので
メモリ増設することにしました。
(またamazonで安いのをgetした)

しかし、取り付けてみたもののBIOSでは認識されてるようなのに
OSが起動しない。なんでじゃ?

検索してみると「標準実装のメモリと同時には使用できません」とのこと。
結局標準のメモリを外して付け替えることになり、
「増設」とはならず「入れ替え」に終わったのでした・・・
まあそれでも前よりはメモリが増えて若干快適になったような。

180 ◆/vmukiyuzw:2013/12/09(月) 20:44:42
htmltodatの最新版(v0.11.2)は
 ・「変換オプション」-「dat変換をしない(前処理のみ行う)」をONにした場合、
  前処理の結果を「dat変換結果」欄に表示するようにした。
この機能のおかげで、簡易正規表現チェッカーとして使うことが可能なんです。

(「HTMLソース」欄に対象の文字列を入力し
「前処理」欄でテストしたい正規表現を指定し「dat変換をしない」オプションをONにすると
「dat変換結果」欄に前処理の結果が表示される)

エンジンがbregonig.dllでJane系統と同じ(バージョンは若干違うようですが)なので、
NGEx.txtとかReplacestr.txtのチェックに使えたりもします。

そんな中ちょっと気づいたことがあるのですが長くなりそうなので次レスで。

182 ◆/vmukiyuzw:2013/12/09(月) 21:20:01
あーなんか勘違い。取り消します

183 ◆/vmukiyuzw:2013/12/13(金) 21:59:51
ちょっと面白いのを見つけたんですが。

ttp://1st.geocities.jp/neeetest/jane.html

なんか似てませんか(笑)
てか同じようなことをしようとすると似たようなUIになっちゃうのかしら。

それより気になったのが、このソフトで使われてるテキストエディット部分。
どんなコンポーネント使ってるんだ?と思ったらreadmeに書いてくれてました。
どうやらDelphiで作られてるようなのでhtmltodatにも組み込めるかな?
今の(htmlソース欄等の)エディット部分には正直不満があるので
差し替えることができないか検討してみようと思います。

184 ◆/vmukiyuzw:2014/01/11(土) 01:27:03
いろいろやりたいことはあるのですが年末からずっとバタバタしててなかなか捗らないです。
とりあえず、だいぶ前の話なのですが
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/631,632,638-643

これは>>165- の手法でできるんじゃね?と考え、やってみました。

必要なファイル:
・sorttest.cmd → >>166 のものを「Rちゃんねる.prm」の部分だけ「テレビジン.prm」に書き換える。
 もしくは「%2.prm」みたいにしてしまって実行時に与える形にしたほうがいいかも。
 専ブラから外部コマンドで呼び出したいような場合は663(mirrorhenkan)さんの
 http://yy14.kakiko.com/test/read.cgi/mirror/1353918147/50-
 を参考に。
・テレビジン.prm (後述)
・sortN.cmd (>>165で書いたものと同じ)
・ソート後処理.prm (>>171で書いたものと同じ)

(続く)

185 ◆/vmukiyuzw:2014/01/11(土) 01:35:43
(続き)

テレビジン.prm。


コメント:
# テレビジンのhtmlをdat変換
# 後でソートするための処理はRちゃんねる.prmとほぼ同じなのでそちら参照

前処理:
# スレタイトルをレス番号0に偽装させるための処理
s`(<title>)(.+?)\ -\ テレビジン(</title>)`<dt>0<b></b></font>:</dt><dd>$2</dd>`ik
# <br />タグに対応していないブラウザのための処理
s`<br />`<br>`ikg

プレビューを表示しない:
false

変換結果式:
$1<>$2<>$3<>$4<>$5<>

正規表現:
m`<dt>(?:<a\ name=.*?>)?(\d+).*?<b>(.*?)()</b></font>:(.*?)</dt><dd>(.*?)</dd>`ikx

186 ◆/vmukiyuzw:2014/03/04(火) 23:51:49
XPのサポートが終わるってことで、消費税も上がるぜってことで、
新しいPC(Windows8)買っちゃいました。(めっちゃ安かったので^^;)
いろいろ弄ってる最中です。

意外(でもないか)だったのは、htmltodatもJaneも特に何もしなくても動くんですね。
htmltodatはなぜかprmファイルのウィンドウだけがボタンがはみ出してしまったりしたので
そこだけはちょっと何か対応しないといけないか。。。

187 ◆/vmukiyuzw:2014/04/01(火) 20:55:21
http://anago.2ch.net/test/read.cgi/software/1394109798/771,775,776,778,780

これって多分

http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/799

の事象なんでしょうね。
(ブラウザでは読めるがdatは取れない)
ともあれ役に立ったようで良かった。

188 ◆/vmukiyuzw:2014/04/06(日) 00:29:36
ようやくWindows8.1環境にもろもろの環境を移し終えました。
(買ったときは8だったけどアップデートが来て8.1になった)

しかし前回XP→XPの移行時も結構大変でしたが今回はOSも違うし
なかなか大変でしたね。なかでもやはり開発環境の移行。
次にまた痛い目に合わないよう一つ一つメモしながら作業しました。
そんな感じの中、新環境でコンパイルしたものをリリースしました。
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/800

まあXPのサポートが終わるのもあってその前にXP環境以外で
コンパイルしたバージョンを出しておきたかったというのがちょっとあります。
開発ツールが変わったわけじゃないんで吐かれるバイナリは
基本的には変わらないはずなんですけどね。気持ちの問題。

189 ◆/vmukiyuzw:2014/04/26(土) 22:12:08
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/801
について若干補足。

663さん(mirrorhenkanさん)の
http://mirrorhenkan.g.ribbon.to/jane/htmltodat-convert2/
を使って、
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/799
のprmファイル(readcgi.prmで保存)を使って、JaneStyleの外部コマンドで過去ログを読んでました。
(コマンド登録内容:htmltodat-readcgi=wscript "$BASEPATHhtmltodat-convert2.wsf" "$LINK$URL" "readcgi")

ところが某スレで、1001まであるはずのスレが1000までしか取得できていないのを発見。
調べてみると、スレの1が取得できていないことがわかった。
さらに調べると、コマンドの引数 "$LINK$URL" には、リンク右クリックで呼び出した場合
リンクのURLと呼び出し元のURLがつながった形で渡ることを確認。
つまり、本来呼び出したいURLの後ろに不要なものがくっついた形で呼び出されてしまうのです。
この形式でスレをhtmlで呼び出した場合、スレURL/2- みたいに解釈されるのか(この辺は原因不明)
スレの2以降しか取得できず1が飛ばされる結果になっていた。

GetLogとかもコマンド引数に "$LINK$URL" を取っていたはずだが不具合は起きないんだろうか・・・
と調べてみたら、必ず正規表現でURL引数を読み替えてから呼び出す仕様になっていて、
不要なものがくっついていても問題ないようになっていました。
この不具合を避けるためにはhtmltodatのprmファイルでもURLの変換を入れて
引数から必要な部分だけを自分で拾うようにするべきかと考えました。

190 ◆/vmukiyuzw:2014/05/02(金) 22:40:00
http://anago.2ch.net/test/read.cgi/software/1396868726/741

googleよりもログ速のスレタイ検索のほうが確実じゃないの?と思って

$CHOTTO http://www.logsoku.com/search?q=$TEXTIU

こんなコマンド作ってみたんですが、返ってくるURLリンクが2ch.netのものではなくlogsoku.comのものなので
Janeで読むにはひと工夫必要なんです。

とりあえず、リンクをクリックするとログ速でのスレが既定のブラウザ(うちではFirefox)で開かれるので
Firefoxの右クリでコマンドを実行できるアドオンを入れてみました。
(ログ速で表示されるスレで「2ch元スレ」を右クリしてJane2ch.exeを呼び返す)

しかし一旦Firefoxを経由しないといけないのがいまいちか。スクリプトでlogsoku.comのURLを
うまいこと2ch.netに読み替えるとかできたら使い勝手あるかもだけどやっぱニッチかな?
連休といってもほぼ暇なんで研究してみるけどあまり期待はできない^^;

191 ◆/vmukiyuzw:2014/05/04(日) 05:42:43
http://jbbs.shitaraba.net/bbs/read.cgi/computer/21256/1164941934/810

2回外部コマンドを呼ぶのはやむを得ないと思うんですが
2・3(つまりFirefoxを呼んで返ってくる手間)を何とか省けないかなと思ったのです。
ここをスクリプトで自動化できたら1ステップ減らせるかなと。

ログ速のURLに鯖名が含まれないのを取り返す方法はいくつか考えられたのですが、
ログ速のスレを読み込むとその中に2ch元スレへのリンクが含まれてるので
それを抜き出して利用するのが簡単かなと思いました。
(bbsmenuを経由するようなアプローチだと、過去ログの場合
鯖移転でそのスレが実在してた時点の鯖と違う可能性があると思われる。
これにより鯖違いで過去ログが読めないケースも出ているようなので)

で、一応形になったかもしれないのでUPしておきます。
http://mukiyu.g.ribbon.to/scripts/URLConvertLogsokuTo2ch.wsf

コマンドでの呼び出しはこんな感じで。

wscript $BASEPATHURLConvertLogsokuTo2ch.wsf "$LINK"

基本的には>>190の「ログ速のスレタイ検索」から呼び出す専用です。

あと現行ログ用です。ログ速のスレタイ検索では現行ログかdat落ちかは
識別できるようになってますが、もしdat落ちしてた場合はhtmltodatで
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/801
(補足>>189)など使っていただければ。

ところで、ttsearchが復活したという話をあちこちで見かけますね。
であればログ速でのスレタイ検索なんてやはり誰も使うことはないのか・・・
過去ログも含めて検索できるといういい点があると思うんですけどねー

192 ◆/vmukiyuzw:2014/06/04(水) 23:20:58
http://mukiyu.g.ribbon.to に繋がらないなーと思ってたら
ribbon.to の都合でIPアドレスが変更されたみたいです。
DNSの浸透が遅れていたのかな?やっと繋がるようになりました。

繋がらないといえばもう一つ
yyかきこがずっと死んでるみたいですね。
もう復活することはないみたいな噂も目にしましたが
今yyに板を構えてる方々はどうされるのか。。
チェックしていた板もあるので気になるところです。

193 ◆/vmukiyuzw:2014/06/12(木) 22:35:57
http://mattari.plusvip.jp/test/read.cgi/jane2ch/1368370279/128-129

http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/801
だと取得できますけどね。みみずんにもログがないとはどういう状況だろう。

http://anago.2ch.net/test/read.cgi/software/1401011356/461-462

も同じスレのことみたいだけどどこから取得できたんだろう。

194 ◆/vmukiyuzw:2014/06/13(金) 20:31:06
http://anago.2ch.net/test/read.cgi/software/1398335147/615

以前みみずんにあるまちBBSの過去ログ変換をやったことがあります。
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/709-712

今回はこれのprmファイル化を考えてみます。
(但し、以下をprmファイル化するだけではスクリプトでのログ取得はできない。
次レスに続く)


コメント:
# まちBBSの過去ログをみみずんから取得する

URLの変換:
s`http://(.*?)/bbs/read\.cgi/(.*?)/(\d+)/?.*`http://mimizun.com/log/machi/$2/$3.dat`

前処理:
# 1行目最終フィールドからスレタイを生成
s`^(\d+<>.*?<>.*?<>.*?<>.*?<>)(.*?)\n`<title>$2</title>\n$1`ik

透明あぼーんを補う:
true

変換結果式:
$2<>$3<>$4<>$5<>

正規表現:
m`(\d+)(?# 第一フィールドはレス番なので捨てる)<>(.*?)<>(.*?)<>(.*?)<>(.*?)<>`ikx

195 ◆/vmukiyuzw:2014/06/13(金) 20:43:34
>>194続き)
上で書いたprmファイルをJaneのコマンドに組み込んで動作するかテストしたのですが
>>189と同様 http://mirrorhenkan.g.ribbon.to/jane/htmltodat-convert2/ を利用)
「Unregistered BBS」のエラーになります。
このエラーは、指定したURLの板がJane2ch.brdに存在しないということなのですが
調べてみると、URLにマッチさせてJane2ch.brdを検索するために指定されている正規表現が
まちBBSのURL形式に対応できていない部分がありエラーになっているようです。

スクリプトの13行目、
var src = 〜 として正規表現が指定されてるのですが、途中 /(?:test/.+?/) となってる部分があり
xxx.2ch.net/test/read.cgi/ の部分にマッチさせることを意図してると思うのですが
まちBBSでは xxx.machi.to/bbs/read.cgi/ となっているためマッチせずエラーになっていた模様。
ここを /(?:(?:test|bbs)/.+?/) としてやると多分うまくいくようになったと思います。

この話(/bbs/read.cgi/にマッチしない)のはほぼ同じような処理をしてるGetlogとかでも同じなんですが
URLの読み替えだけ対応しても取得できるdatの形式が2chとは異なるので
プラス何らかの対処をしないとそれだけでは専ブラで読めないと思われます。
htmltodat+htmltodat-convert2だとそこにはすでに対処しているので大丈夫と思います。


ところで、これのテストの為に過去ログをいくつか漁ってて気づいたんですが、
まちBBSではログURLをPATH_INFO形式でなくQUERY_STRING形式
(/read.cgi/板名/スレ番号/ ではなく /read.cgi?BBS=板名&KEY=スレ番号 の形式)
で表現されてるものがたまにあるようなのです。
2chではかなり昔に廃れた形式なのですが、まちBBSでは今でも使われてるのか
たまたま開いたスレがそうだっただけなのか。
この形式に対応しようと思うとまた別の読み替えパターンを考えないといけない・・・
面倒そうだしとりあえず放置しますか。

196 ◆/vmukiyuzw:2014/07/12(土) 00:46:17
http://anago.2ch.net/test/read.cgi/software/1405086867/

htmltodatでは 2ch.net のサーバにdatを取りに行く必要性はないので
直接的な影響はなさそうですが、なんか回りまわって
間接的な影響が出てきそうな予感がします。
いずれにせよ現時点では様子見くらいしかできないですが。

197 ◆/vmukiyuzw:2014/07/15(火) 06:45:17
まあどこまでできるかはわからないけれども
やりたいことのネタは振ってもらった感じですかね〜
目標としてレベル1,2,3と設定したんで
とりあえずレベル1を頑張る。といっても多分のんびりだし
同じことを先にやる人がいたらあきらめちゃうでしょうが。

198 ◆/vmukiyuzw:2014/09/14(日) 23:41:26
レベル1というのは、既存のプロキシツールを使って
htmltodat的処理を実現することだったんです。
本当はhtmltodat自体にプロキシ機能を組み込めたらいいなと思ったんですが
それは結構ハードルが高い・・・ので後回しにして手軽そうなとこから始めようかと
思った次第です。

最初はproxomitronのフィルタ程度でできるんじゃね?とタカをくくってたのですが
あんまりややこしいことするにはちょっと厳しいかなと断念。
で、いろいろ探してみたんですが、Fiddlerというソフトを発見しました。
わかりやすい解説は以下など
http://blog.loadlimits.info/2009/09/%E5%AE%9F%E3%81%AFfiddler%E3%81%8C%E3%81%99%E3%81%94%E3%81%99%E3%81%8E%E3%81%9F%E3%81%AE%E3%81%A7%E3%80%81%E6%A9%9F%E8%83%BD%E3%81%BE%E3%81%A8%E3%82%81%E7%B4%B9%E4%BB%8B/
http://www.hagurese.net/blog/default.aspx?pn=Fiddler%E3%81%A8%E3%81%AF&amp;sn=1

webアプリ開発に関わる人には驚くほど多機能で便利なソフトなのですが
ここで推す理由はhttpリクエスト・レスポンスをスクリプトで書き換え可能なところ。
つまり、datへのリクエストをread.cgiへのリクエストに変換でき
返ってきたhtmlをdatに変換することもできてしまうのです。
英語のソフトで日本語の解説もあんまりなくてとっつきにくい点はあるんですけどね・・・

てことでとりあえずread.cgiからdat変換するスクリプトをあくまでテストですが書いてみました。
http://mukiyu.g.ribbon.to/ の htmltodatByFiddler て奴です。

199 ◆/vmukiyuzw:2014/09/15(月) 23:59:16
>>41で書いたんですが(てもう9年も前かよ!)、
以前、Javaでプロキシもどきを書いてhtmltodatの前身みたいなことしてたんです。
その当時を思い起こすと、やりたいことは
・リクエストされたURLの読み替え
・返ってきたhtmlからdatへの変換
だけなのに、プロキシソフトとして成立させようと思うと
やりたいことの100倍くらいコード書かないといけなかったんです。
(通信回りとか文字コード変換だとかもろもろですな)
それでもプロキシの機能をすべて満たしてたわけではなかった・・・

それを考えると今回>>198で私の書いたコードは30行程度?
プロキシソフトの機能は満たしてる上に必要な機能を乗っけられたので
ものすごく簡単にできたのです。
実のところ、レベル2とか3とかいうのは
自分でプロキシサーバを書くことを目標にしてたんですが
こんな便利なツールがあるならこれを生かしていったほうがいいのでは?
とちょっと考え中です。

200 ◆/vmukiyuzw:2014/09/16(火) 21:01:28
>>198
今日、知人と「連休にこんなスクリプト書いたよ」って話をしていると
「それって配布していいもんなの?」との指摘を受けました。
確かに著作権の問題はあまり気にしていなかった・・・
C#等で作ったアドオンを公開されている方もおられるので
その延長で問題ないかと思ったのですが、
スクリプトで公開するとなると「Fiddlerが自動生成したスクリプト」を
含むことになるので、もしかしたらこれが問題になるかもしれません。
(生成されたスクリプトには著作権に関する記述はないようなので
問題ないのかもしれませんが)

ちょっと導入の敷居を上げることにはなるのですが、
配布するのは自分で書き足した部分だけにして
使う側でマージしてもらうということにしたほうが安全かなと考え
そのように変更しました。

201 ◆/vmukiyuzw:2014/09/21(日) 22:05:49
>>198
のスクリプトを修正しました。
 ・bbspinkへの対応が漏れていたので追加
 ・BE周りの処理が漏れていたので追加

しかし修正して再度配布することまで考慮してなかった(←考えが浅い)。
まるごとのスクリプトであれば全部上書きしてくれ、で済んだんですが
>>200みたいな事情で少々面倒なことしてるんで
すでに導入された方にはまたご面倒をかけると思います。
次の修正がもしあるなら配布方法を考えたほうがいいだろうなあ。

202 ◆/vmukiyuzw:2014/09/21(日) 23:19:00
さて、「これはいったい何をやってるのか」という話ですが。

>>196
でちょっと書いたのですが、2ch.netのdatの取得方法が変わるという話が
上がっているのです。
(現行スレは http://anago.2ch.net/test/read.cgi/software/1409909191/

で、既存の専ブラは何らかの対応が必要になると思われているのですが、
更新が長く止まっていてこの仕様変更に対応できないのではないかと
危惧されるものも少なからずあり、
プロキシでread.cgi直読みしてdatに変換することで当面対応できないかという話も
上がってるわけです。

新仕様についての具体的な話はまだないので
この先どうなるかはまだ不明ですが、とりあえず何かできないかなと思って
まあ遊びがてらですがいろいろやってみているという状況です。

203 ◆/vmukiyuzw:2014/10/01(水) 20:33:55
> プロキシでread.cgi直読みして
て表現はおかしいですね
「datを直読みするのではなくread.cgiを叩いてdatに変換する」
というのが言いたかったことです。

さて、いろいろ面倒そうなのであまり手を出したくはないんですが
Fiddlerのスクリプトでローカルのファイルを読み書きする方法は
あるかないかだけ調べてみました。

Javascriptの仲間なのでFileSystemObjectとか使うのかとか思ったのですが
これは全然見当違い。
.NET フレームワークで作られたツールなので
そっちの方向から攻めるべきだったんです。

で、具体的にどうするのかというと、スクリプトの先頭付近に

import System.IO;

てのを追記します。
これでFileクラスなどが利用できるようになるので

var lines = File.ReadAllLines(filepath);

みたいにファイルの読み書きが可能になります。
この方向で拡張したいという方の参考になれば。

# FiddlerScriptやJavaScriptで検索してもなかなか情報は得られず
# 結局C#のサンプルコードを参考にしました

204 ◆/vmukiyuzw:2014/10/17(金) 20:01:17
とある要件で調べものをしているときに、以下のようなページを発見。

http://scripting.cocolog-nifty.com/blog/2010/01/dir-c6fe.html

ん?バッチファイルの中にJScriptらしきコードが書かれてる。
そんなことできるの?
と不思議に思い調べてみました。

わかりやすかった解説

http://atl.blog.shinobi.jp/html%EF%BC%86javascript/jscript%E3%81%AE%E5%AE%9F%E8%A1%8Clogo%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%9F%E3%81%8F%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82

・バッチファイルの中から自分自身をJScript(WSH)として呼び出す
・バッチファイルとJScriptのどちらで実行されてもうまくいくように
 トリックを仕込んでおく

ということのようです。
これにより、本来二つのファイルに分けるところのものを
一つにまとめることができるわけです。

私が知らなかっただけで実は結構定番のテクニックらしいのですが
かなりトリッキーな気もします。
こういうのを思いつける人は頭いいなーと感心してしまいました。

205 ◆/vmukiyuzw:2014/10/17(金) 23:13:39
>>203
> Javascriptの仲間なのでFileSystemObjectとか使うのかとか思ったのですが
> これは全然見当違い。

これは勘違い(というか調査不足)だったので訂正。

WSHだと

var fso = WScript.CreateObject("Scripting.FileSystemObject");

みたいにして使うのですがFiddlerScriptだとWScriptオブジェクトはないので
できないと決めつけてたのですが

var fso = new ActiveXObject("Scripting.FileSystemObject");

とする方法がありました。
これを使えば

var file = fso.OpenTextFile("Scripts\\SampleRules.js");
var text = file.ReadAll();

みたいにファイルアクセスが可能なようです。

206 ◆/vmukiyuzw:2014/10/18(土) 21:50:50
>>198
のスクリプトを修正しました。
 ・サーバによってはgzip圧縮されたレスポンスを返してくるようなので対応
 ・サーバによってはread.cgiのバージョンが微妙に異なるようなので対応
 ・USER-AGENTでMonazillaを名乗らないブラウザにはhtmltodat変換をしないよう修正

最初にテストしてたサーバではプレーンなレスポンスを返してきてたので
こういうものなのかなと思ったんですけど、サーバによっては
gzip圧縮+チャンクエンコーディングで返すものもあるとわかりました。
まあFiddlerスクリプトにこれに対応するメソッドがあらかじめ用意されてたので
それを呼ぶだけだったんですが。

それから、その同じサーバで返ってくるHTMLの形式が微妙に異なるものがあったので
正規表現をちょっと修正しました。

あと、Fiddlerは起動するとIE等の一般ブラウザのリクエストレスポンスにも介入してしまうので
USER-AGENTをチェックしないと一般ブラウザから普通に2chのページを読むことが
できなくなっちゃう(dat形式で表示されてしまう)ので対応しました。
まあこれは「専ブラはUAでMonazzilaを名乗るはず」との前提なんですが
この暗黙の前提に従わない専ブラもあるかもしれません。
その場合は適当に弄ってください。

207 ◆/vmukiyuzw:2014/10/18(土) 22:32:18
>>206
> ・サーバによってはgzip圧縮されたレスポンスを返してくるようなので対応
> ・サーバによってはread.cgiのバージョンが微妙に異なるようなので対応

この辺がサーバによって違ってたら嫌なんで
一応、今アクティブと思われる2chのサーバ
http://ch2.ma.cx/で表示されるもの)は一通り検証しました。

その結果、このスクリプトでかなり高い確率で
生datと完全に一致する変換結果datを生成できるのを確認しました。

---------------------------------------------------
ちなみに一致しないのは以下のようなケース

http://anago.2ch.net/test/read.cgi/software/1399253195/555

みたいに文字化けしてる場合
(これは多分故意にUTF-8としてPOSTしたものだと思われる)

FiddlerScript内部ではUnicodeとして扱うはずなので
SJIS→Unicode→SJISの変換が行われてると思われます。
この過程で正確に変換できない(元に戻せない)ものがでてくるようです。
まあこの辺は仕方ないですかね。

208 ◆/vmukiyuzw:2014/10/18(土) 23:03:25
それから、readmeにちらっと書いたのですが
この訳わからないスクリプトについての質問・不具合報告等は
当面このスレッドで受け付けようと思います。

あと、663さん(mirrorhenkanさん)の書かれたhtmltodat-convert2
http://mirrorhenkan.g.ribbon.to/jane/htmltodat-convert2/
についても、当面このスレッドでサポートしようと思っています。
(663さんは「htmltodatサポートには質問しないで」と書かれてましたが
現状ネットにアクセスするのが難しい状態なのかな?みたいなので)

209 ◆/vmukiyuzw:2014/11/07(金) 23:14:10
http://anago.2ch.net/test/read.cgi/software/1415161116/171

経験的にsendkeysは結構誤爆率が高くてあまり信用できないし
ちゃんとした終了待ちをせずにsleepで済ませてるのもなんだかなあ
と思いました。
かつては自分もよくこんなスクリプト書いてたなあと思うと
あまりネガティブなことも言えないんですが。

こういうのを簡単にかつちゃんとやるには実はpowershellがいいんだと思います。
プロセスの終了だとか終了待ちだとかが標準で用意されてますし。
http://technet.microsoft.com/ja-jp/library/dd315272.aspx

ただ、powershellでスクリプトを実行するには
セキュリティポリシーの壁を越えないといけないんです。
http://www.atmarkit.co.jp/fwin2k/win2ktips/1023ps1sec/ps1sec.html
「これ使えばできるよー」って人に勧めにくいんですよね・・・
使えれば相当便利なツールだと思うんですがちょっと残念。

210 ◆/vmukiyuzw:2014/11/24(月) 22:39:23
http://anago.2ch.net/test/read.cgi/software/1415161116/910

うーむ、やっぱ使えてる人はいるんだよね。
(うちでは使えているので当然かもしれないけど)

http://anago.2ch.net/test/read.cgi/software/1383498862/722

こういう方は何が悪かったんだろう。
「ログ速にもログがなかった」くらいしか思いつかない。
ここで聞いてくれたら何かサポートできたかもしれないんだけど。

211 ◆/vmukiyuzw:2014/11/25(火) 04:55:52
http://anago.2ch.net/test/read.cgi/software/1415161116/925

> これはXenoに実装されるべき

そんなんされたら私の居場所がなくなるんで勘弁してください^^;

212名無しさん:2014/11/28(金) 08:06:51
>>210
風邪でもないのにくしゃみが出たのでXenoスレから遊びに来ますた
普段は新しいパラメータを盗み読みするだけでサーセンwwwww

たしか●流出騒動直後のRokka開発段階で差分取得の仕様変更があった時かな
問題になった一部IDのNYANNYAN化に伴い旧式のdat差分配信から新式のdat全行配信へと変更され
専ブラ内部でもそれに沿った処理をするように各専ブラが軒並み仕様変更を余儀なくされたアレね
所謂さっしーえっち事件
多分その影響で取得済みスレに対してのアクションに各専ブラごとの仕様で若干の違いがあったり
または回復モードやdat落ち判定解除等の機能の有無やその使い方に違いがあったりと
各々の使用条件によって取得済みスレに対して上書きの可否が変わることもあるはず

特に開きっぱなしの強制dat落ち状態のスレタブではほとんどの専ブラで上書きが不可能なはずなので
Styleスレの彼は他の手段で取得に失敗したスレタブを開いたまま再取得を試みていたり
古いパラメータファイルを使ってるせいで表示がおかしくなったりしているのではなかろうかと妄想


>>211
あ、そいつ𠮟った時なんですが
こんだけ便利なツールを玩具呼ばわりしたのは謝ります
Jimは讃岐に対してでさえかなり冷たい態度だったので相当重度の重いコンダラ症候群と思われ
声高にログ速連呼してるやつがいるといつまたクローラタイサクガーに変身するか分からないんで
そこは方便ということでひとつ

213 ◆/vmukiyuzw:2014/11/28(金) 21:48:02
>>212
どうもです
いるかいないのかよくわからなかったhtmltodat-convert2ユーザーがいらっしゃったということで
今後もよろしくです

214 ◆/vmukiyuzw:2014/12/04(木) 02:11:09
fiddlerのスクリプトでスレタイの [転載禁止](c)2ch.net 等の文字列を消すことができるんじゃないか?
とdatのレスポンスを変換できないかいろいろやってたんですがうまくいかない。
なんか結果の文字列がUTF-8で返されてるようで
何とかしてSJISに変換しないといけないんだろうけど
方法がよくわからなくて放置してたんです。

そんでこないだ、「Jane系でばっかテストしてたけどV2Cで動くのかな?」
とふと思ってテストしてみたんですが、
いきなり「Content-Typeがtext-plainじゃないよ(text-html)」ってエラーで拒否られる。
Content-Typeをtext-plainにしてみる一行書いてみたんですが
やっぱUTF-8に文字化けしたスレしか取得できない。

ここでなぜか思い出したのですがContent-Typeには確か文字コード指定出来たよな・・・
でこんなコード追加してみました。

oSession.oResponse["Content-Type"] = "text/plain; charset=\"Shift_Jis\"";

これでなんとうまく動いてしまった・・・こんなので大丈夫なのか?^^;

もう少し検証したいと思いますが、fiddlerでは
スクリプトで設定されたContent-Typeからcharsetを検知して
相当の文字コード変換とかやってくれるのかな?

# プロキシとしてはこれくらいの機能は当然なのかな?
# だとしたら自力でプロキシ書くとか絶対無理だわ〜

215 ◆/vmukiyuzw:2014/12/05(金) 23:11:10
わざわざエスケープしたダブルクォーテーションでくくる必要はなかったようです。
以下でもOK

oSession.oResponse["Content-Type"] = "text/plain; charset=Shift_JIS";

あと、Shift_JIS の部分を EUC-JP とかにしてもちゃんとEUCのレスポンスが返されたので
まだ検証中ですがとりあえず言えるのは
・Content-Typeヘッダーでcharsetを指定してやると任意の文字コードで出力が可能
てことなのか。だとしたらかなり便利だ。

しかし前にも書いたかもですがfiddlerには日本語のドキュメント自体がなかなかない上に
こういう日本語の変換の取り扱いについてなんて記述は皆無?
徒手空拳でやってみるしかない状況です。
まあ未踏の世界に立ち向かってるようでそれはそれで楽しいんですけど。

216 ◆/vmukiyuzw:2014/12/06(土) 05:34:45
という感じで、fiddlerによるhtml→datの変換はまだいくつか問題はありつつも
少しずつ前進した感じなのですが、
datを直接読んでちょっと細工して返す、てなことをやろうとすると
(これはまあ本筋からは外れたお試しなのですが)これがまた文字化けします。
元データはhtmlもdatもShift_JISなのになぜdatだと化けるのか。

色々試して考えたのですが、htmlのレスポンスだと、自分で(metaタグのcharsetで)
「自分の文字コードはShift_JISですよー」て名乗るじゃないですか。
fiddlerは賢いので(httpヘッダのcharsetも理解するくらいだから)
これを判別してhtmlの文字コードはShift_JISだと認識しているんではないか。
だが、datでのレスポンスにはそういう識別コードがないので、文字コードを判別できない
(だから、おそらくUTF-8のつもりで読み込んでいるものと思われる)ため
文字化けが起こっているのだと推測しました。
ならdatのレスポンスをShift_JISだと認識させて読み込めればいいはずです。

var oBody = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(oSession.responseBodyBytes);

うわ、ちょっと長いね^^;もっとスマートなのがあるかもですが
当面これしか見つからなかった。
System.〜で始まるので.netのメソッドを直接叩くのかな。

あとはこれを好きに加工した後、上のレスと同様 charset=Shift_JIS で出力すればいいわけです。

うーむ、なんか敵(じゃないけどね^^;)の正体が少しずつ見えてきたような・・・
結構手こずったけど思ったほど手ごわくはないかもしれない。
結局、入力・出力の文字コードを認識させるにはどうするかって話になるような。

217名無しさん:2014/12/13(土) 04:34:18
したらばで『〜』が『潤オ』に化けてたことを思いだして敢えてこのスレでリベンジしてみるテスト

218 ◆/vmukiyuzw:2014/12/18(木) 01:16:06
Fiddlerでの日本語変換について色々わかってきたので
一旦まとめといたほうがいいのかもですが、次に関心が移っちゃっているので
まあ落ち着いたら改めてということで。

で何に関心を持ってるかというと、Fiddlerのスクリプト以外での拡張。
スクリプトを書き換えての拡張は個人利用には楽なんですが
配布とかには面倒だし更なる拡張性とか考えるともっといい方法がないかと。
それがC#やVB.NETで拡張ができるのです。

http://docs.telerik.com/fiddler/extend-fiddler/extendwithdotnet

最初、同じ.NETなんだから今までのスクリプトの延長で
Jscipt.NETでもいけんじゃないの?といろいろやってみたんですが
徒手空拳ではうまくいかずドキュメント等もなく頓挫気味。
C#でやってみるとなんかうまくいったみたいなのでこの路線でとりあえずやってみます。
まあ前からC#やろうとか言ってながら回りまわってやっとたどりついた感じか。

219 ◆/vmukiyuzw:2015/01/15(木) 02:57:54
http://jbbs.shitaraba.net/bbs/read.cgi/computer/21256/1164941934/821

htmltodat-convert2を弄って何とかならないかと思ったのですが
2chとしたらばではURLの形式が微妙に違って
同じスクリプトで両方に対応させようとすると結構難しい部分があったので
htmltodat-convert3として別コマンドにしてみました。
(prmファイルを別にする以上コマンド自体別にしないといけないはずなんで
特に困ることはないかと思ったのですが)

http://mukiyu.g.ribbon.to/cgi-bin/download2.cgi?name=htmltodat-convert3&amp;url=htmltodat-convert3.zip

使い方はhtmltodat-convert2とほぼ変わらないのですが
コマンドの第二引数に "$LINK$URL" を指定できるように
ちょっと修正してます(GetLogの仕様に近づけるため)。

>>208に書きましたがこのスクリプト関連のサポートは
私が勝手に引き継ごうと思っているので
何か問題等あればここで報告いただければと思います。

220 ◆/vmukiyuzw:2015/01/25(日) 01:55:33
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/821-822
の変更を受けてfiddlerスクリプトのほうも修正しました。
(ver1.03)
http://mukiyu.g.ribbon.to/cgi-bin/download2.cgi?name=htmltodatByFiddler1.03&amp;url=htmltodatByFiddler1.03.zip

しかし>>218でちょっと書きましたがC#に移行しようと考えていて
実は当面の機能は移植できていてプラスの何かをやろうと考えてた時だったので
ちょっと引き戻されたような感じで少し残念ではあります。

221<削除>:<削除>
<削除>

222<削除>:<削除>
<削除>

223 ◆/vmukiyuzw:2015/01/27(火) 22:08:29
http://anago.2ch.net/test/read.cgi/software/1421448195/351

最近新しい正規表現作る機会がなかなかなかったもので
頭の体操がてら考えてみました。まあいつものちょっとした遊びで。
htmltodatではgzip圧縮に対応してるんで*.gzの形式でも
そのまま解凍して読み込めます。


コメント:
# http://atchs.jp/ の過去ログ変換できるかも-20150127

前処理:
s#(<title>)\s*(.*?) - 過去ログ .*?(</title>)#$1$2$3#iks
s#\tID:# ID:#g
s#\s{2,}(?!ID)##g
s#<br />#<br>#g
s#&nbsp;\[.*?\]##g

プレビューを表示しない:
false

正規表現:
m`<div\ class="res">.*?(?:<a\ href.*?>)?
(?# レス番号) (\d+)
(?:</a>)?.nbsp;名前:
(?# メール欄) (?:<a\ href="mailto:(.+?)">|<span\ style="color.*?>)?
(?# 名前) (.*?)
(?:</span>|</a>):
(?# 投稿日・ID) (.*?)
<p\ class="res_body">
(?# レス内容) (.*?)
</p>
`mikx

224 ◆/vmukiyuzw:2015/02/01(日) 00:32:00
http://anago.2ch.net/test/read.cgi/software/1418396135/890

このサイト見て
「そういやread.cgiにはrawモードてのがあったよな・・・
これ使えばhtmlからdatに変換しなくてもdat取れるんじゃ?」
と思って試してみたのですが、rawモードは廃止されてしまったのかな?
指定してもレスポンスは何も変わらないです。
dat直読みができなくなりそうな現状(まあポシャる気配も濃厚ですが^^;)
あったらよさそうな感じですけどね。

225 ◆/vmukiyuzw:2015/02/19(木) 22:25:20
http://anago.2ch.net/test/read.cgi/software/1424147714/19-20

htmltodatのfiddlerスクリプトで実現できていなかった差分取得を
このスクリプトでは実現できているので、とりあえず私の書いたスクリプトは
お役目終了かもしれません。
このスクリプトでいろんな専ブラで動作確認してみたんですがいくつかうまく動かないのがある。
どうも既存ログのサイズと新規に取得したサイズをきっちりチェックしてるものがうまく動かないようで、
responceCode = 206 となるケースで以下のコードが必要なようです。

oSession.oResponse.headers("Content-Range") = "bytes " + sbyte + "-" + (bodylength - 1) + "/" + bodylength;

と足したらうまく動くなるようになるものもありました。
手元で確認したものではJane系・V2C・ギコナビ・Live2ch・かちゅ〜しゃ は
新規取得も差分取得もうまくいってるようです。

「もうこのブラウザだめだ乗り換えよう」とか「.net以外に移住しよう」とか言っておられる方は
一度試して見られては。

226 ◆/vmukiyuzw:2015/02/19(木) 23:28:25
>>225
訂正。Live2chでは差分取得がうまく動きませんでした。
fiddlerスクリプトで差分取得かどうかを判定してレスポンスコードを書き換える場合

HTTP/1.1 206 Fiddeled

みたいなレスポンスになるんですがLive2chはそれを受け付けてくれないような?
(一般的には「206 Partial content」とかになる)

227 ◆/vmukiyuzw:2015/03/02(月) 00:55:46
htmltodatのfiddlerスクリプトなんですが、2点ほど壁にぶつかっていました。
・メール欄に全角文字が書かれていると文字化けする
・名前やレス本文にメールアドレスが書かれているとスレが壊れる

どちらもCloudFlareのemail-protection処理に起因する問題なのですが
なかなかやっかいでちょっとお手上げ状態で放置していました。
ところが、このemail-protection処理により2ch自体のread.cgiでも
スレが壊れたりセキュリティホールが発生したりという事態になって
emai-protectionは外されることになったようです。
よって、目の前の壁は勝手にどいてくれたかなという感じです。

これによってやれることはまだできたかなと思うのですが
まだまだ状況は流動的ぽいのでしばらくは様子見ですかね。

228名無しさん:2015/03/02(月) 04:03:37
ということはそのままで壊れなくなったってことか

229名無しさん:2015/03/02(月) 11:11:41
email-protection処理を無効化
変換は GET method だけ有効にする
で何となく動いている
当面これで乗り切れそう
ありがとうございます

230名無しさん:2015/03/19(木) 04:25:09
レス1だとレス取得が壊れることがあるのですが、
>>225はhtmltodatByFiddler1.03のどこにコピペすればいいんでしょうか?

231 ◆/vmukiyuzw:2015/03/19(木) 21:15:27
>>230さん

>>225のレスはhtmltodatByFiddlerについてのものではなく
http://anago.2ch.net/test/read.cgi/software/1424147714/19 さんの書かれた
スクリプト(以下19スクリプトと略す)についてのものだったんです。

で、19スクリプトのどこにコピペすればということになるんですが、
人の書いたスクリプトにケチをつけるようでなんなんですが
このスクリプトはhtmltodat変換の精度にやや問題があるような。
(メール欄の内容が失われたりレス本文の一部が特定の条件で欠けたりします)

ので、19スクリプトのまずい部分を修正するより、htmltodatByFiddlerに
差分取得ロジックを移植するほうが楽だし問題も少なそうなので
そうすることにしました。
次レスに続く。

232 ◆/vmukiyuzw:2015/03/19(木) 21:22:30
htmltodatByFiddlerを更新しました。(ver 2.00)
 ・差分取得に対応
 ・メール欄デコード処理は不要になったので削除
 ・USER-AGENTでのmonazillaの判定を外す
  (USER-AGENTを変更しても問題ないように)

readmeにも書いたのですが、
前バージョンまでで対応していなかった差分取得に対応しました。
ただ、その対応のためにdat変換処理を修正する必要があったため、
前バージョン以前を使って取得済みのログを更新しようとするとログ破損状態に
なってしまいます。
申し訳ないですが再取得してください。
もしくは、前バージョンで問題が起きていない場合は今回のバージョンアップは
見送るのでもいいと思います。
(Jane系の専ブラ等は自力で差分だけを取れるようになっているので
前バージョンでも問題なく動いてるはず)

233 ◆/vmukiyuzw:2015/03/19(木) 22:04:10
まあ差分取得とか言ってますが実際には全レス取得してブラウザには差分だけ返す
疑似差分取得です。
一般的な専ブラならログをローカルに保存してそこからの差分をリクエストするような
方式で動作してると思うのですが、それと同じようなことをやろうと思うと
やはりローカルに何らかの形で情報を保存しておかないと実現できないと思うんです。
実際その方向で実装しようと試行錯誤してたときもあったんですが、いろいろと面倒だし
多少重くはあるけど当面はこの形で行こうかと。

しかし、他にも専ブラ用プロキシソフトはいろいろよさげなものが出てきて
htmltodatByFiddlerなんてもうお役目御免かなくらいに思ってたのですが、
Fiddler(実績のあるプロキシソフト)+ソース丸見えのFiddlerScript
ていう安心の組み合わせはそれなりにニーズはあるのかな?
ダウンロード数が跳ね上がっていてちょっとビビってます^^;

234名無しさん:2015/03/19(木) 22:32:41
htmltodatByFiddler1.03(32bitWin7Xeno150312)で
>>230に似た症状が自分も出てたんですが
2.00にしたら無事直りました
個人的に使いやすいのでとても助かってます
ありがとうございました

235名無しさん:2015/03/19(木) 23:09:26
更新お疲れ様です

お絵描き機能の(http://maguro.2ch.net/oekaki/とか)
タグ除去置いておきます
BE周りの処置を弄っただけですが

//oekaki対応
oBody = oBody.replace(/<img src="http:\/\/(o\.8ch\.net\/.+?)">/ig,"http://$1");
//ここまで

//BE周りの処置と変換後の//1レス目にタイトルを付加の間に入れてます

236 ◆/vmukiyuzw:2015/03/19(木) 23:47:58
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/831-832

私が作ったものではないので積極的には推せなかったのですが
htmltodat-convert2 がようやく日の当たる場に出た感じですか。よかった。
あと、したらば過去ログがJaneStyleで読めないって方には
>>219 みたいなのもありますのでお試しいただければ。

237名無しさん:2015/03/21(土) 00:24:04
使い始めました。
感謝、感謝です。

238230:2015/03/21(土) 06:49:39
>>231
ありがとうございました!

239 ◆/vmukiyuzw:2015/03/22(日) 19:28:21
http://jbbs.shitaraba.net/bbs/read.cgi/computer/1929/1038588508/835 さん

http://anago.2ch.net/test/read.cgi/software/1426858616/907
にもありますが、

> 117のスレのように本文が長いレスが大量にある場合に起こるようです。
> read.cgiはdatの半角スペースの連続を1つの半角スペースに置き換える処理を行っていますが
> これを途中でやめてしまうのが原因のようです。

これに加えて、プロキシからはread.cgiに対し同じリクエストを投げているのに
返ってくるレスポンスでは半角スペースの連続を省略したりしなかったり
一定しない。これで416が発生するようです。
(read.cgiの潜在バグかもしれない)

とりあえず対処としては、半角スペースの連続を省略する処理を組み込んでしまって
read.cgi側でブレが出ても影響ないようにすることかと思いました。

oBody = oBody.replace(/ +/g," ");

↑これを

oBody = oBody.replace(/^(.*?<>.*?<>.*?<>.*?<>$)/m,"$1" + title[1]);

の後あたりに挿入。

対応したバージョンは追ってアップします。

240835:2015/03/22(日) 20:12:27
>>239
さっそくの対応ありがとうございます。
追加しまして無事に206にて取得できております。
ありがとうございました。

241 ◆/vmukiyuzw:2015/03/22(日) 22:33:01
htmltodatByFiddlerを更新しました。(ver 2.01、1.04)
 ・特定のスレで更新時に破損ログとなってしまう問題の対処ととして
  連続する半角スペースを1個に省略するよう修正

変更した部分は>>239のみです。
ver 1.xxで不都合がなくてまだお使いの方もいらっしゃると思うので
今回はver 2.xx、1.xx両方について更新しました。

ただ、今回もdat変換処理に修正が入っているため、
前のバージョンを使って取得済みのログを更新しようとするとログ破損状態に
なってしまう可能性があります。申し訳ないですが再取得してください。
(今回は長文が多くレス容量が大きいスレが危ないような)

242名無しさん:2015/03/22(日) 22:59:39
>>241
ありがとうございます!
chaika+htmltodatByFiddler2.00でフリーズしたことがあったので、1.03使ってました。
1.03で安定しているので、1.04使わせていただきます。

243 ◆/vmukiyuzw:2015/03/23(月) 00:25:38
http://anago.2ch.net/test/read.cgi/software/1427009587/56

200で返ってくるけど本来は404なり302になるようなやつをはじけば
いいのかな?

if (title[1] == "2ちゃんねる error 3001"){
oSession.responseCode = 404;
return;
}

こういうの入れとけばCPUが上がるのは避けられるような

244名無しさん:2015/03/23(月) 00:28:25
>>241
お疲れ様です!

2.01にてCPUが100%になるという書き込みがありましたので、
一応報告させていただきます。

専用ブラウザを助けるプロクシ作らね?7串目 [転載禁止]©2ch.net
http://anago.2ch.net/test/read.cgi/software/1427009587/56

56 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/03/22(日) 23:03:22.23 ID:8oJm1s6h0
htmltodatByFiddlerでCPU使用率が上がるのは
「datが存在しません。削除されたかURL間違ってますよ。」のスレを開いたときかな

245 ◆/vmukiyuzw:2015/03/23(月) 00:34:25
あ、>>243

//スレのタイトルを取得
var title = oBody.match(/<title.*?>(.*?)<\/title>/mi);

の後ね。
ちょっといろいろ試して問題なければバージョンアップします。

246 ◆/vmukiyuzw:2015/03/23(月) 02:28:49
http://anago.2ch.net/test/read.cgi/software/1427009587/156

確かにそうなのでこんな感じに修正したほうがいいか

if (!oBody.match(/<dl /)){
oSession.responseCode = 404;
return;
}

眠いので続きは明日以降に

247 ◆/vmukiyuzw:2015/03/23(月) 22:40:55
htmltodatByFiddlerを更新しました。(ver 2.02、1.05)
 ・2ch側で削除済みのスレを取得しようとするとFiddlerのCPU使用率が上がってしまう問題の対処として
  エラーと思われるhtmlが返された場合にステータスコードを404とするよう修正

今回もver 2.xx、1.xx両方について更新しました。
変更した部分は>>246のみです。
今まで自力で修正していて、今回も自力で反映させたいという方は

var oBody = oSession.GetResponseBodyAsString();

の後あたりに挿入していただければいいと思います。

248名無しさん:2015/03/23(月) 22:48:48
>>247
ありがとうございます!

249 ◆/vmukiyuzw:2015/03/24(火) 01:47:38
うわ、今気づいた
http://mukiyu.g.ribbon.to/
のトップを更新するの忘れてましたわ・・・
「バージョン変わってないじゃん?おかしいな〜」
という方は再度ダウンロードしていただければ・・・
ごめんなさい。

250名無しさん:2015/03/24(火) 05:31:48
>>249
乙です
一番使いやすい串なので使っております

251名無しさん:2015/03/24(火) 10:12:13
>>249
更新乙です。
fiddler+わかりやすいスクリプトはやはりいい!
愛用させてもらってます。

ところでこちらで生成したdatはLast-Modifiedがないようですがこれは取得が難しいのでしょうか?
chaikaで書き込みする際にフォームエラーが返ってきます。
ひとまずは下記のコードを追加して問題なく動作はしていますが
正確なLast-Modifiedの値ではないのでちょっとモヤモヤします。
oSession.oResponse["Last-Modified"] = oSession.oResponse["Date"];

datの仕組みはよく知らないので的外れかも知れませんが
最終レスのDATEをLast-Modifiedに返せれば正確な値となるのかな?と思っております。

252 ◆/vmukiyuzw:2015/03/24(火) 23:52:26
>>251さん

> 正確なLast-Modifiedの値ではないのでちょっとモヤモヤします。
> oSession.oResponse["Last-Modified"] = oSession.oResponse["Date"];
>
> datの仕組みはよく知らないので的外れかも知れませんが
> 最終レスのDATEをLast-Modifiedに返せれば正確な値となるのかな?と思っております。

Last-Modifiedを使ってエラーチェックをしてるブラウザがあるとは寡聞にして知りませんでした。
うーむ、思うにhtmltodat変換をしてる時点で正確なLast-Modifiedは存在しないわけで
最終レスの投稿日時とて=Last-Modefiedとなるとも100%は限らない
(ほぼイコールになるだろうとは思いますが)と思うので
それをやったところでモヤモヤは残るのでは。というか気分の問題かもしれませんね。
とかいいつつ以下のようなのも書いてみました。

var arr1 = oBody.split("\n"); //各行にばらす
for (var i = arr1.length - 2; i >= 0; i--){ //最終行が1001だと投稿日時が取得できないため後ろからなめる
var arr2 = arr1[i].split("<>");
var t = arr2[2].match(/(\d+)\/(\d+)\/(\d+).*?(\d+):(\d+):?(\d+)?\.?(\d+)?/); //投稿日時取り出し
if (t){
if (!t[7]) t[7] = "00"; if (!t[6]) t[6] = "00"; //古いログでは秒やミリ秒は存在しないものがあるため
var d = new Date(t[1],t[2],t[3],t[4],t[5],t[6],t[7]);
oSession.oResponse["Last-Modified"] = d.toUTCString();
break;
}
}

この前書いた

oBody = oBody.replace(/ +/g," ");

の後あたりに挿入してください。というかこんなのは関数化したほうがいいんだろうな。
htmltodatByFiddlerへの取り込みはちょっと考えさせてください。

253251:2015/03/26(木) 01:37:24
>>252
返信ありがとうございます。
Last-Modefied自体が元々存在しないとなると
最終レスの日付から取得しても偽データということなんですね。
となると言いだしっぺの私が言うのもあれですが
たかがその為に冗長的なコード増やすのは無駄だと思われますし
chaika限定かつ個人的な問題ですのでhtmltodatByFiddlerへの反映は不要だと思います。

ちなみにせっかく書いて頂きましたコードを追加しましたところ
最終レス日時の1か月後の日時がLast-Modefiedに格納されて
Last-Modefied>dateとなり不整合で結局エラーとなりました。
ひとまずは現状のLast-Modified=Dateで問題もないので
後は書いて頂いたコードを参考に自分でもう少し勉強してみます。
ご教示ありがとうございました。

254251:2015/03/26(木) 18:14:39
Last-Modefiedが1ヶ月ズレる件、解決できました!
dateオブジェクトの月は0〜11で表さなきゃいけなかったんですね。
なのでt[2]を-1することで正常な最終レス日時を返すことが出来て書き込みも可能と希望通りの結果となりました。
私の自己満足に付き合って頂き本当にありがとうございました。

255名無しさん:2015/03/26(木) 22:49:13
差分取得のちょっとした改善案です。

html変換のdatサイズより途中まで取得済みの正規のdatサイズの方が大きいがため、
本来追記されるであろう残りのレスがなくあぼーん分岐してしまうのを可能な限り防げるかと思います。

まず以下をスレタイ取得の前後何れかに入れる。

// スレサイズを取得(取得したサイズの方が小さい時の保険)
var aSize = oBody.replace(/<font color=red face="Arial"><b>(\d+) KB<\/b><\/font>/mg, "$1");
var getSize = parseInt(aSize, 10) * 1024;

で、差分取得処理のサイズ判定を以下の様にする。

if (sbyte > bodylength){



if ((sbyte > bodylength) && (sbyte > getSize)){

以上です。

256名無しさん:2015/04/11(土) 16:30:11
>>255
ちゃんとスレサイズ取れてなかったので訂正

// スレサイズを取得(取得したサイズの方が小さい時の保険)
var aSize = oBody.replace(/<font color=red face="Arial"><b>(\d+) KB<\/b><\/font>/mg, "$1");
var getSize = parseInt(aSize, 10) * 1024;



// スレサイズを取得(取得したサイズの方が小さい時の保険)
var aSplitBody = oBody.split('<font color=red face="Arial"><b>');
var aSize = aSplitBody[1].split('\n')[0].replace(/(\d+) KB<\/b><\/font>/, '$1');
var getSize = parseInt(aSize, 10) * 1024;

257名無しさん:2015/04/11(土) 20:56:12
動作確認を行った環境は
Windows 7 Professional (x64) Build 7601
.NET Framework 4.5.51209(← regeditのVersion)
(でもFiddlerで確認すると、.NET 4.0.30319.34209と表示)
Fiddler v4.5.0.0
htmltodatByFiddler 2.02

作者さんありがとう

258名無しさん:2015/04/17(金) 21:26:42
htmltodatByFiddler 2.02 ありがたく使わせてもらっています
先日2chのスレでftp://が書き込まれたスレが取得できない状態になってしまいました
何らかの形で対応できないものでしょうか

259名無しさん:2015/04/17(金) 23:32:31
>>258
Fiddlerと2chの間にはCloudFlareがあってだな
2chのread.cgiのバグを修正しない限りCloudFlareが誤動作するんだ
これは端末のツールでどうこう出来る問題じゃないんだよ

260 ◆/vmukiyuzw:2015/04/17(金) 23:51:11
>>259さん、フォローありがとうございます。

>>258さん
一応状況は把握していて、何か逃げ道はないかと考えていたのですが
htmlを取得して変換するという仕組み上、そこでエラーになる状況であれば
完全に回避することは難しいと考えます。
(どのレスにftp://が書かれてるかは読んでみないと分かりませんしね)
現状ではAPI対応のプロキシもいろいろあるようなんで
そちらをお使いいただいたほうがよろしいかと。

しかし、2ch.net側としても
read.cgi経由(htmlプロキシだけでなく汎用のwebブラウザでも)で
読めない状況はまずいと思われるので
そのうち対応されるだろうと期待して様子見してるのですが。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板