2chproxy.pl
概要
900行ぐらいの Perl スクリプト。分かる人向け。
元々 Linux 環境で JD を使う人向けに作られていたが、Navi2ch や rep2 などにも対応。
Perl 環境が整っている OS 上で有用の串。
作者 | ◆okL.s3zZY5iC |
動作環境 | Perl環境(動作確認は基本的にLinux) |
動作タイプ | HTML |
ライセンス | MIT license |
ソース配布 | GitHub: https://github.com/yama-natuki/2chproxy.pl |
最新 | 2017/05/04 |
(関連リンク)
●JD for Linux
JD は gtkmm/GTK+ を用いた 2ch ブラウザです。
(関連スレ)
2chproxy.pl
2chブラウザJD
使い方
ソース参照。
作者のレス
更新履歴も説明書もなく、作者のレス頼みな部分があるので、ページが長くなってしまうが、作者のレスをまとめることにした。
トリ付けてたり、付けなかったりで、捕捉できてないかも?
2015/03/03~03/12 Linux板
(レス内容を表示する)
492 名前:login:Penguin[sage] 投稿日:2015/03/03(火) 23:59:53.05 ID:TzWrJl/O [2/2]
http://pastebin.com/Y91KfVsJ
1日クオリティでWEBスクレイピングも出来るかもなプロクシ
要perl
クッキー周りは>>394をリスペクト
クッキーがあんな適当なので通るとは思わなかった
546 名前:492[sage] 投稿日:2015/03/05(木) 02:11:42.93 ID:uLqFeG+d
http://pastebin.com/B3ymp66m
鯖から受けとったクッキーで通信するように変更した
出来ればWebスクレイピングでRangeヘッダーに対応させたいところ
整合性はお察し
自己満で作ってるだけなので使う意味はあんまりない
699 名前:492[sage] 投稿日:2015/03/09(月) 22:37:09.95 ID:e89pzUxG
http://pastebin.com/DD2QPHat
色々と手を加えたので一応上げてみる
・Webスクレイピング時のRangeへ対応
・スレの更新チェック(HEAD)へ仮対応
・eqと==を間違えるとんでもないミスを修正
・BEがちゃんと取得出来てなかったのを修正
・daemon化をもうちょっとまともにした
・整合性をとるのは諦めた
・他細々した修正ときっと増えてるバグ
前回のもそうだけどデフォルトではWebスクレイピングしないようになっているので
有効にする時はENABLE_WEB_SCRAPINGの値を1に、
スクレイピング時にRangeヘッダーへ対応させる時は
ENABLE_PARTIAL_CONTENTの値を1にすれば有効化される
721 名前:492[sage] 投稿日:2015/03/12(木) 00:44:39.80 ID:TRfMK6kP [1/5]
http://pastebin.com/10ZttsCM
バグ報告があったので修正+α
・ssspなgifのimgタグ周りが処理されていなかったのを修正
・V2C/Live2ch使用時のスクレイピング時の差分取得の対応(多分)
・スクレイピング時の差分取得のエラー検出への対応を若干強化(デフォルトでは強化前のものを使用、現状では強化の意味はなし)
・多分増えたバグ
一番上と下以外はJDには関係ないのでJDユーザーはこれに書き換えなくてもいい気がする
V2Cで使いたい時は
35行目辺りのDEDICATED_BROWSERの値"JD"を"V2C"に、
DAT_DIRECTORYの値を"$ENV{HOME}/.v2c/"にするとスクレイピング時の差分取得が出来るようになるはず
Webスクレイピング等の設定は前回の通りなので使う場合は有効にしてね
740 名前:492[sage] 投稿日:2015/03/12(木) 21:38:31.72 ID:TRfMK6kP [2/5]
>>738
ファイル内のENABLE_WEB_SCRAPINGとENABLE_PARTIAL_CONTENTの値を0から1に変更してから起動してくれれば多分大丈夫だと思う
今回のdat廃止ってのがもしブラウザで閲覧する際のurl
(ttp://....2ch.net/test/read.cgi/linux/...)の方まで見れなくなるようならこれを使っても無理なので
今使っている専ブラを使いたいなら
http://prokusi.wiki.fc2.com/wiki/%E3%83%88%E3%83%83%E3%83%97%E3%83%9A%E3%83%BC%E3%82%B8
のAPI以下から好きなものを選んで使うしかないかも
API対応の方は個人的にはpythonのやつがおすすめ
(pythonはver2.xじゃないと動かないかもしれない)
まあこっちも明日になって使える保証はないけど…
#API対応の方はkeyの入手手段がアレなのであんまり使いたくはない…
751 名前:492[sage] 投稿日:2015/03/12(木) 22:44:28.83 ID:TRfMK6kP [3/5]
http://www1.axfc.net/u/3429262
1.ダウンロード
2.ダウンロードしたものを解凍
3.ディレクトリ内のrun.shを実行
4.JDのメニューバーの設定→ネットワーク→プロキシをクリック
5.2ch読み込み用の使用するにチェックをいれる
6.ホスト名に127.0.0.1を、ポート番号に8080を設定する
(7.>>418の設定を行っていない人は2ch書き込み用も同様の操作を行う)
8.適当なスレを開いてみる/testスレに何か書き込む
9. 8.がうまくいっていれば無事に読み込み/書き込みが出来ると思う
764 名前:492[sage] 投稿日:2015/03/12(木) 23:32:01.05 ID:TRfMK6kP [4/5]
>>761
何がどううまくいかないのか詳しく教えて
自分の環境だと適当な場所に置いても動くので…
perl入ってない?
少々修正
http://pastebin.com/xHYsXNLz
・SIGPIPEを無視するように
・さっきのaxfcのものからWebスクレイピング関係をデフォルトで有効に
769 名前:492[sage] 投稿日:2015/03/12(木) 23:51:31.51 ID:TRfMK6kP [5/5]
>>767
connect失敗しているのでホスト名かポート番号間違えてるか
プロクシの起動に失敗しているかかな
後者の方が可能性高い気がする
端末の2chproxyの方には何か出てる?
出ていないようだったら1回終了させて
run.shの
perl ./2chproxy
を
perl ./2chproxy --verbose
のようにして保存してもう一回実行して何か表示されるか見てみて
2015/03/12 ソフトウェア板
(レス内容を表示する)
803 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/03/12(木) 01:35:30.23 ID:aMSiqlYn0 [1/2] (PC)
>>800
imgタグ周りの修正しましたが新たなバグがあるかもしれないので注意してください
http://pastebin.com/10ZttsCM
他変更点は別所にも書きましたが
・V2CとLive2chでのスクレイピング時の差分取得への対応
・差分取得時のエラー訂正の検出を若干強化
ですね
>専ブラがなんとかしてくれる事もあるようですね
Range付きの要求を送って200 OKを返ってきた時にdatファイル全体を返してきたと認識するもの、
差分を取得したとみなすがエラーを検出してdat全体を再取得するものがあるようです
Windowsの専ブラでRangeに対応させるのはまだまだ時間がかかりそうです
ギコナビはプロクシから専ブラに送ったdatのデータのサイズと保存されているdatのデータのサイズが
違うようなので(文字コードが違う?)まだ対応してません
V2C、Live2ch(Ver.1.33)ではそれぞれ次のようにすればスクレイピング時の差分取得が出来るようになると思います。
・ソースコードの35行目辺りのDEDICATED_BROWSERの値"JD"を"V2C"もしくは"Live2ch"にする
・同じくその辺りのDAT_DIRECTORYの値をV2CもしくはLive2chの実行ファイルのあるフォルダを\の代わりに/でフォルダを区切ったものにする
(例"C:/User/Hoge/Desktop/live2ch133/")
なお、wikiの方にも書いてあると思いますが
デフォルトではWebスクレイピング(とその時の差分取得)はしないようになっているので有効化したい時は
ENABLE_WEB_SCRAPING(とENABLE_PARTIAL_CONTENT)の値を1にしてください
809 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/03/12(木) 07:47:14.93 ID:04b5KDlY0 [3/3] (PC)
>>803
ギコナビのログは改行が 0D 0A になってる。
835 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/03/12(木) 20:22:30.50 ID:aMSiqlYn0 [2/2] (PC)
>>809
CRLFだったのが問題だったのか…
ありがとうございます
ギコナビも差分取得に(多分)対応させました
V2C等と同様にDEDICATED_BROWSERを"gikoNavi"に
DAT_DIRECTORYをギコナビのexeのあるフォルダのパスを/区切りで設定すれば
206で返ってくるようになっていると思います
http://pastebin.com/WrbJJGtM
(2chproxy.pl)
トリってつけた方が良い?
2015/03/12~03/14 ソフトウェア板
(レス内容を表示する)
62 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2015/03/12(木) 23:38:46.93 ID:aMSiqlYn0 (PC)
perlのスクレイピング版もあります(小声)
http://pastebin.com/xHYsXNLz
・SIGPIPEを無視するように
・Webスクレイピングをデフォルトで有効に
#OSがWin、或いはpython串使っている人はあまり使う意味ない
842 名前:62[sage] 投稿日:2015/03/13(金) 23:40:17.36 ID:RBkqHA9e0 (PC)
http://pastebin.com/TN4EYQxu
・TEヘッダーの抑制
・UAを書き換えられるように
・bbspinkへ書き込めるように
952 : ◆okL.s3zZY5iC :2015/03/14(土) 01:25:27.07 ID:luUT7pI00
>>943
ttp://pastebin.com/3k19a2B5
navi2chに対応させました(一応確認済)
ソース内のDEDICATED_BROWSERを"JD"→"Navi2ch"
DAT_DIRECTORYを"$ENV{HOME}/.navi2ch/"
にすれば差分取得出来ると思います
JDとディレクトリ構成が一緒だったので対応が楽でした
>linux環境でどうなのかなとちょっと興味あっただけなんです
linux環境下じゃないemacs使いの方だったらどうしようかと
(DAT_DIRECTORYの指定が面倒)
972 : ◆okL.s3zZY5iC :2015/03/14(土) 02:08:00.66 ID:luUT7pI00
>>961
気分を害していたら申し訳ありません、URLとかちゃんと確認するべきでした
自分のはそもそもWin向けではないし他の2つと比べられる程の出来ではないので変だとは思っていました…
とりあえず今後間違いがなくなるようにこちらは2chproxy.plと.plを付けておきたいと思います
ttp://pastebin.com/J7emtiTz
rep2に*多分*対応しました
DEDICATED_BROWSERに"rep2"を、DAT_DIRECTORYに"$ENV{HOME}/public_html/rep2/data/"
とすれば差分取得が可能になると思います
もしrep2用に新たにuser1を用意しているなら
DAT_DIRECTORYは"/home/user1/public_html/rep2/data/"
とした上で、↑のディレクトリを2chproxy.plを実行するユーザーの権限で
読み取り可能にしておく必要があります
#更新待つのが面倒な方はソース内のget_local_dat_pathを自分用に弄るといいかもしれません
2015/03/16~ Linux板
(レス内容を表示する)
208 名前:login:Penguin[sage] 投稿日:2015/03/16(月) 21:13:54.83 ID:ZwmJKVE0 [3/3]
>>202
ググって>コピペ>テンプレ
なのでググって出てくるのが一番新しい
shift_jisでデコード&エンコードしていた部分を
cp932に書き換えたら一部の環境依存文字も正常に表示できるとの報告があったので修正したのと
今までローカルにdat見つからなかったらRangeヘッダー付きのリクエストでも
200 OKを返すようにしていたのをとりあえずは206を返すようにした
(一部datは壊れる可能性があるのでその時はdat全体を取得し直せば多分大丈夫)
というのが主な変更部分だったと思う
どの専ブラでもとりあえずの差分取得は出来るようになったかな
(他のdat串だと当然のようについている機能なんだけどね…)
ただ、依然としてdatが見つからない時の通信はproxy2ch見たいに差分取得しているわけではないので通信量が多くてちょっとなー
と思ってpastebinに貼り付けるだけ貼り付けて放置していたやつなので見つかったことに驚きを隠せない
decoded_contentに失敗して云々という問題があるようなので
13行目辺りに
use IO::HTML;
を追加したものを上げた方が良いのだろうか…
226 :login:Penguin:2015/03/17(火) 23:09:49.76 ID:sCXXm5Ij
ttp://pastebin.com/SkRnUaPR
・メモリ上でキャッシュ出来るようにしました(EXPERIMENTAL)
・多分バグが増えました
参照順はメモリ→ローカルのdatの順番です
ENABLE_MEMORY_CACHEを0にするとメモリでのキャッシュをしないようになります
また、今回メモリ上でキャッシュさせる処理を書く際に通信部分を大幅に書き換えたので
もしかしたら以前よりうまく動作しなくなっているかもしれません(バックアップ推奨)
また、今回俺環のJD以外での動作確認は行っておらず
前回のものには入っていた修正が抜けていたり
必要なファイルが増えていたりする可能性があり
特に他の専ブラだと色々と問題が出るかもしれませんので
その場合は以前のバージョンで留めておくか頑張って修正するかしてください
>>219
speedyってSpeedyCGIのことでしょうか
適当にググったところSpeedyCGIはperlを起動しっぱなしにすることで
CGIの処理を高速化するもののようなのでこのプロクシを高速化できるかは微妙ですが
実際のところは分からないので試してみてください
259 名前:login:Penguin[sage] 投稿日:2015/03/18(水) 17:56:06.62 ID:QBvgTx8t [1/2]
>>227
キャッシュしているのは1つのdatに対して
受信済みのdatの大きさ、一番新しいレスの番号とその内容の3つです
>>228,231
自分がgitの使いかたをあまり分かっていないというのと
(ローカルでは一応使っていますが…)
246さんも言っているように堂々と開発するものではないと思うので
現状ではそういうことは考えていません
>>232
使わないと変数名typoした時しんどい
>>236
ですね、今のところいいprefixが思い浮かばないので
PRX_をそのまま使うかもです
>>242,243,245
現状NYSLからMIT程度を考えていますが、正直著作表示するほどのものか?…という気はしています
>>252
それは正常な動作です
0にした場合は(以前は)直接datを取れるようになっていましたが
最近はそれが出来なくなっているため今現在その値を0にする意味はありません
>>257,258
IO/HTML.pmが無い場合にdecoded_contentが失敗する場合があったようなので
あらかじめ必要であると明記することで解決が早くなることを期待しています
もしかしたら今はdecoded_contentの際にcharsetを指定しているので必要ないかもしれません
長くなったので他スレで見つかった問題などは後ほど
>>227
キャッシュしているのは1つのdatに対して
受信済みのdatの大きさ、一番新しいレスの番号とその内容の3つです
>>228,231
自分がgitの使いかたをあまり分かっていないというのと
(ローカルでは一応使っていますが…)
246さんも言っているように堂々と開発するものではないと思うので
現状ではそういうことは考えていません
>>232
使わないと変数名typoした時しんどい
>>236
ですね、今のところいいprefixが思い浮かばないので
PRX_をそのまま使うかもです
>>242,243,245
現状NYSLからMIT程度を考えていますが、正直著作表示するほどのものか?…という気はしています
>>252
それは正常な動作です
0にした場合は(以前は)直接datを取れるようになっていましたが
最近はそれが出来なくなっているため今現在その値を0にする意味はありません
>>257,258
IO/HTML.pmが無い場合にdecoded_contentが失敗する場合があったようなので
あらかじめ必要であると明記することで解決が早くなることを期待しています
もしかしたら今はdecoded_contentの際にcharsetを指定しているので必要ないかもしれません
長くなったので他スレで見つかった問題などは後ほど
280 名前:login:Penguin[sage] 投稿日:2015/03/18(水) 23:50:11.15 ID:QBvgTx8t [2/2]
他のスレで上げられていた問題点など
・速報headlineは見出ししか読めない
(JDではスレを開いてもDAT落ちですと表示される)
・>>244
多分どの時点のを使っても発生すると思います
共に原因は同じで244さんが挙げられている通り
simple_requestを使っていて302 Found が返ってくるので
前者はDAT落ちと認識して、後者は書き込み直後に文字列が表示されてしまうようです
前者については、subject.txtへのアクセスをsubback.htmlに書き換えて串側でスレのタイトルとURLを対応付けて
クライアントへはsubject.txtと同等の内容を返してやれば
速報headline等もうまく飛べるようになるかな、と思います
この機能を入れるかは現状未定です
後者はsimple_requestからrequestに変えると
dat落ちや人大杉などの302等も勝手に処理してしまい
特に差分取得時は脳内ソースコードではhtml->datがうまくいかずに
クライアントへ416を返すようになっているので
datファイルが壊れましたと表示される可能性が高いです
したがって、.2ch.netと.bbspink.comへのPOSTをした際にだけsimple_requestの代わりに
requestを使えばよいと思うので、適切な部分のsimple_requestを
if ($uri =~ m@^http://\w+(?:\.2ch\.net|\.bbspink\.com)/@ && $request->method eq "POST") {
$response = $UA->request($request);
}
else {
$response = $UA->simple_request($request);
}
(一番新しいやつ(http://pastebin.com/SkRnUaPR)では$uriではなく$uri->as_string)
みたいな処理にすればいいのかなと思いますが
プロクシでリダイレクトの処理はあんまりしたくないので気になる人は上記の書き換えを行っておいて下さい
281 名前:login:Penguin[sage] 投稿日:2015/03/19(木) 01:08:45.62 ID:zsK/RFlW
Copyright (c) 2015 ◆okL.s3zZY5iC
Released under the MIT license
http://opensource.org/licenses/mit-license.php
こんな感じの表記をするんでしたっけ
ライセンスは暫定的にMIT…と思ったんだけどCPANモジュール使ってる場合は
そっちに引っ張られるのかな?
バージョンを表記しなかったのはこちらのミスですね
(というかこんなに更新するつもりなかった)
質問されてもバージョン表記出来ないとどれで起こってるのか分かりづらいですし
とりあえずpastebinに貼り付けたものを小さい方から適当に
v0.1 http://pastebin.com/Y91KfVsJ (前スレ)
v0.2 http://pastebin.com/B3ymp66m (前スレ)
v0.3 http://pastebin.com/DD2QPHat (前スレ)
v0.4 http://pastebin.com/10ZttsCM (前スレ/ソフ板プロクシ作らね?)
v0.5 http://pastebin.com/WrbJJGtM (ソフ板プロクシ作らね?)
v0.6 http://www1.axfc.net/u/3429262 (前スレ)
v0.7 http://pastebin.com/xHYsXNLz (前スレ/ソフ板プロクシ作らね? Part.2)
v0.8 http://pastebin.com/TN4EYQxu (前スレ/ソフ板プロクシ作らね? Part.2)
v0.9 http://pastebin.com/3k19a2B5 (ソフ板プロクシ作らね? Part.2)
v0.10 http://pastebin.com/J7emtiTz (ソフ板プロクシ作らね? Part.2)
v0.11 http://pastebin.com/HNRKHWKh (ここ/ソフ板rep2)
v0.12 http://pastebin.com/SkRnUaPR (ここ)
としておきます
多分間に抜けているのは無いと思いますが
もしあっても2chに上げていなければ多分ミスが見つかったので放置しているだけです
ChangeLog的なのは次のソースに多分入れておきます
Copyright (c) 2015 ◆okL.s3zZY5iC
Released under the MIT license
http://opensource.org/licenses/mit-license.php
こんな感じの表記をするんでしたっけ
ライセンスは暫定的にMIT…と思ったんだけどCPANモジュール使ってる場合は
そっちに引っ張られるのかな?
バージョンを表記しなかったのはこちらのミスですね
(というかこんなに更新するつもりなかった)
質問されてもバージョン表記出来ないとどれで起こってるのか分かりづらいですし
とりあえずpastebinに貼り付けたものを小さい方から適当に
v0.1 http://pastebin.com/Y91KfVsJ (前スレ)
v0.2 http://pastebin.com/B3ymp66m (前スレ)
v0.3 http://pastebin.com/DD2QPHat (前スレ)
v0.4 http://pastebin.com/10ZttsCM (前スレ/ソフ板プロクシ作らね?)
v0.5 http://pastebin.com/WrbJJGtM (ソフ板プロクシ作らね?)
v0.6 http://www1.axfc.net/u/3429262 (前スレ)
v0.7 http://pastebin.com/xHYsXNLz (前スレ/ソフ板プロクシ作らね? Part.2)
v0.8 http://pastebin.com/TN4EYQxu (前スレ/ソフ板プロクシ作らね? Part.2)
v0.9 http://pastebin.com/3k19a2B5 (ソフ板プロクシ作らね? Part.2)
v0.10 http://pastebin.com/J7emtiTz (ソフ板プロクシ作らね? Part.2)
v0.11 http://pastebin.com/HNRKHWKh (ここ/ソフ板rep2)
v0.12 http://pastebin.com/SkRnUaPR (ここ)
としておきます
多分間に抜けているのは無いと思いますが
もしあっても2chに上げていなければ多分ミスが見つかったので放置しているだけです
ChangeLog的なのは次のソースに多分入れておきます
315 名前:login:Penguin[sage] 投稿日:2015/03/20(金) 00:30:55.01 ID:3e47ROvL
ttp://pastebin.com/gyPremjN v0.13
・v0.12でHEADへの対応が消えていたので追加
・タイムアウト値を設定出来るように
・上位プロクシを環境変数からも設定できるように
タイムアウト値を設定していなかった(デフォルトで180秒)ので
専ブラがタイムアウト→しばらくしてプロクシはデータを受信→プロクシのキャッシュのみが更新
というとんでもバグが起こっていたのを修正しました
現在はJDの読み込み時のタイムアウト(10秒)より1少ない9秒に設定してあるので
各自の環境にあったタイムアウトの値に変更して下さい
また、現状ではタイムアウトの値は全ての通信に使われるので
大きなファイルをやりとりする際にはこのプロクシを使わない方がいいと思います
#uri毎にtimeout書き換えればそれぞれの用途毎に変更出来るような気もしますがとりあえず放置
最後の変更は今までやり忘れていただけです
http_proxy=http://localhost:8123/ ./2chproxy.pl
みたいな感じで環境変数を設定して2chproxy.plを呼び出せば多分OKです
もちろんexport(setenv)しておくのも良いと思います
なお、優先順位はFORWARD_PROXY > 環境変数です
360 名前:login:Penguin[sage] 投稿日:2015/03/20(金) 20:51:11.35 ID:3e47ROvL [2/2]
ttp://pastebin.com/0D5Eet91 v0.13.1
v0.13でHEADに対応したと言っていたがありゃ嘘だ
ということで
・HEADなリクエストにちゃんと対応
>>350の操作がちゃんと動くようになったはず…
>>329
まだまだ先になりそうです…
個人的な話ではありますがグレーなブツを堂々と公開するのは気が引けます…
>>353
>>357
再現性があれば詳細をお願いします
488 名前:login:Penguin[sage] 投稿日:2015/03/23(月) 01:39:30.30 ID:ptnR4R5B [1/2]
ttp://pastebin.com/ksnse9AY v0.14
・1001に達したスレは通信せずに304を返す機能がv0.12で消えていたので追加
・rep2でdatディレクトリのパスを取得する際に勝手に"dat/"を補完する機能を削除
・rep2でbbspinkのdatも2channelディレクトリ以下に保存するように変更
・他細々した修正
DEDICATED_BROWSERにrep2を指定した時の挙動の修正がメインです
1001到達前にdat落ちした場合のものも通信しないようにするのはまた今度
490 名前:488[sage] 投稿日:2015/03/23(月) 01:44:42.28 ID:ptnR4R5B [2/2]
いっけないポート番号やらを変えないまま挙げたのでこっちで
ttp://pastebin.com/2rFKtd9v
493 名前:login:Penguin[sage] 投稿日:2015/03/23(月) 01:54:45.64 ID:ptnR4R5B [3/3]
>>491
portが18080の方(>>488)はミスです
自分の環境ではこのプロクシを18080で使っているので
pastebinに上げる時は8080にするように注意はしていたんですが…
- 最終更新:2017-05-05 11:55:03