Perlを使って2ちゃんねるにHello Worldを書き込む
1 :
デフォルトの名無しさん :
2007/07/15(日) 16:16:50 俺、がんばる。みてて。
さて、httpをしゃべるライブラリには何を使ったら良いだろうか? むかしLWP::Simpleを使ったことはあるとはいえ、 Simpleっていうぐらいだからもっと高度なことをするときには 別のものがいいのだろうか?
>3で結果が見えたな
Perl でやるより Curl でやった方が楽だと思うが...
なんかCurlって名前のものいくつか無い? 言語? php用ライブラリ?
あぁ、やっとわかったよ。
http://d.hatena.ne.jp/keyword/curl ライブラリとしてのlibcurl、それをコマンドラインから使用するcurl。
それとはまったく別の、次世代ウェブ記述言語Curlがあるんだね。
>>5 さんがいっているのはコマンドライン用Curl?
悪くは無いんだけど、共有レンタルサーバーでも使えるようなやり方を
目指しているので。でもあとで使うよ!
ところで、phpではlibcurlを使うのかな? とりあえず、必要と思われる機能は UserAgentなどのヘッダやクッキーをいろいろ設定してhtmlを読み込む。 帰ってくるヘッダやクッキーを読み取れる機能。 まあ、シンプルじゃないライブラリなら大概、対応しているだろう。 あと個人的に、proxy対応、https対応のライブラリであってほしい。 さぁ、どんなライブラリがあるのか探すぞ!
あと認証機能もほしいね。BASIC認証とかいろいろ
LWPってlibwww-perl の略だったのか。今頃気づいたwww
12 :
獅子王 :2007/07/15(日) 17:22:00
あの〜、ずいぶん久方ぶりの書き込みなんですけど僕もperlを使ってみたいなぁと思うんです。 だけどあの英語漬けのサイトで一体どうやればダウンロードできるのかわかりません。 誰か暇つぶしついでに教えていただけませんか?
>>11 Javaかぁ、もっと大規模なのを作るときは使うけど、
簡単なツールレベルだと、ちょっと重く感じるな。
あと共有サーバーじゃ大概つかえないし。
よし、たいしたことができないであろう、LWP::Simpleじゃなくて、
もっといろいろできるであろうLWP::UserAgentを使ったコートだ
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->agent("Mozilla/8.0");
$req =
HTTP::Request- >new(GET => '
http://pc11.2ch.net/test/read.cgi/tech/1184483810/ ');
$req->header('Accept' => 'text/html');
$res = $ua->request($req);
if ($res->is_success) {
print $res->content;
} else {
print "Error: " . $res->status_line . "\n";
}
荒らしスクリプトをオープンで作ってる・・・
>>18 違いますよ。ただの2ちゃんねるブラウザですよ。^^;
あれ?
>>20 のやつVistaで動かない。XP上のIE7なら動いていたんだが・・・
まあ、それならそれでFirefoxのやつつかうけどさ
とりあえず、クッキーとか何も持っていない状態でブラウザから普通に書き込むと、 POSTで以下の内容が送られるな。 submit=%8F%91%82%AB%8D%9E%82%DE FROM=aaa mail=bbb MESSAGE=ccc bbs=tech key=10桁の数字 time=10桁の数字 そして、以下のクッキーを保存しろといってくる。意味はぐぐればわかるだろう PON=俺のホスト; expires=Friday, 01-Jan-2010 00:00:00 GMT; path=/ HAP=7桁の数字; expires=Friday, 01-Jan-2010 00:00:00 GMT; path=/ JavaScriptが有効になっていると少し変わるようだ。 いつの間にか、NAME="aaa" MAIL="bbb" がセットされており、 送信するときに、上記のクッキーを送っている。まあ無視して良いだろう。
23 :
デフォルトの名無しさん :2007/07/15(日) 19:05:53
WWW::2chに書き込み機能は相変わらず無いのか?
>>23 そんなのがあるのかw あとでみてみる。
2ちゃんねるを知っている人には当たり前だろうが、
初めて書き込むときには、「上記全てを承諾して書き込む」がでる。
クッキー名hanaにmogeraが設定されているかどうかで判断されるようだ。
これは今現在の話なので将来は変わる?スレごとに違うのかな?
とりあえずクッキーを持たずに書き込むと飛ばされる「上記全てを承諾して書き込む」ページには
>>22 で送られる内容にくわえ、hiddenでhana=mogeraが追加されている。(subject=""もあるがスレ立て時に使われるのか?)
そこらへんを見れば、クッキー名や値が変わっても対応できるのかもしれない。
どうやら、書き込むときに hana=mogera と PON = 俺のホスト名 が 無ければいけないようだ。 hana=mogeraはさっきも書いたように同意するかどうか、 PONが変わる(つまり回線をつなぎなおしたとき)は確認画面に飛ばされる。 HAPはなんだろう?無くても書き込めるようだがまたセットさせられる。 さてぐぐるかw
そういや、ルータを使っている場合に自分のホスト名って (外部のサーバーなしに)取得できるんかいな? ルータのUPnP機能に問い合わせればわかるようなことを 以前見た気がするが・・・ まあ、2ちゃんねるに限れば、普通にアクセスして 戻ってきたクッキーをちゃんと記憶すればいいだろうけど。
ふう。風呂はいっていたよ。 さてのんびりやるぞ! これからの投稿予定は次のとおりとなっております。お楽しみに。 ・POSTを使ったデータ送信 ・クッキーの取得 ・クッキーの送信 ・書き込めた! ・やっぱ文字コードはUNICODEでしょ! ・BASIC認証がある場合は・・・ ・それ以外認証ページは・・・ ・httpsページにトライ! ・そしてphp版へ・・・ ・そしてCurl版へ・・・
とても楽しめそうにない件について。
>>27 Perl で書けたのであれば Curl はやらなくて良いと思うよ。
それより書き込みだけじゃなく、スレ立ても出来る様になると嬉しいんじゃない?
楽しいなあ 楽しいなあ 楽しいなあ
どうも荒らしスクリプトを作ろうと思っている様にしか思えんなぁ。 そもそも人にきかなきゃわからんレベルの人間がやるものでもないし。
俺、別に聞いてないし・・・・。
何でもしたり顔でケチ付けようとする人間はいるもんだよ 自分でも言ってる意味が分かってないから、反論しても無駄
必死だな。
35 :
デフォルトの名無しさん :2007/07/15(日) 22:51:57
何事にも必死に取り組まなければ2ちゃんねらになっちゃう!! そう子供たちに教えるべきだね。
キチガイがいるな
38 :
test :2007/07/16(月) 02:34:11
test
あー。書き込めちゃった。まあゆっくりやるかw
脳内妄想が激しいスレだな
暗いスレだな
ていうか君以外のレスは全部 perl で書かれた bot がやってるって知ってた?惟も含めて。
日本語OK?
縺薙l縺ッ繝悶Λ繧ヲ繧カ縺九iUTF8縺ァ譖ク縺崎セシ繧薙□譁?蟄?
はいはい、またーりいくよ。 テスト用に、サーバーに送信したデータをそのまま表示するだけのphpコード ちゃんと送られているかこれで確認! <?php header("Content-Type: text/plain"); print "[REQUEST]\n"; print_r(apache_request_headers()); print "[SERVER]\n"; print_r($_SERVER); print "[GET]\n"; print_r($_GET); print "[POST]\n"; print_r($_POST); print "[COOKIE]\n"; print_r($_COOKIE); print "[FILES]\n"; print_r($_FILES); ?> IEはダウンロードしやがるぜ。けっ
さあて、いよいよpostだ。実際に動かすときは自分のサーバーに置いた
スクリプト(
>>45 でいい)に向けてpostするように。
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)");
$req =
HTTP::Request- >new(POST => '
http://www.example.com/test.php?getdata=gettest ');
$req->header(
'Accept' => '*/*',
'Accept-Language' => 'ja-JP,en-US;q=0.5',
'Referer' => '
http://www.example.com/ ',
);
$req->content_type('application/x-www-form-urlencoded');
$req->content('postdata=posttest');
print $ua->request($req)->as_string;
Hello World
Hello World 2
うーん。postするときのtimeの数字ってなんだろう? 日付に直すと Sun, 02 Jan 2005 17:55:08 GMT なんだが、 どこから取得すればいいのだ? htmlのフォームから取得できるのはわかるが・・・
Hello World 3
Hello World 3
Hello World 3
Hello World 3
よくわからんが、現在時刻マイナス? で書き込めるようだ。
ここでテストするのはやめれ。運営にチクるぜー?
通報しますた
あぼーんだらけの某板に書いてみるとか
最悪板あたりでやればいいのでは
結局どこいったん>
61 :
デフォルトの名無しさん :2007/07/27(金) 01:20:27
他の鯖でも試してみた?
Hello, World
64 :
ヒッキーの達人 ◆MEIDO...W. :2007/07/29(日) 03:50:50
僕も最近Perlを始めたので hello, world を作ってみました #!/usr/bin/perl use strict; my $hello = "hello, world"; my $tmp = './hello.world'; open OUT, "> $tmp" or die "$!"; flock OUT, 2; print OUT $hello; close OUT; open IN, $tmp or die "$!"; flock IN, 2; my @in = <IN>; close IN; unlink $tmp; foreach(@in){ s/$hello/herro, world/i; } my $res = `ping -c 4 www.google.com`; undef $res; print $hello; my @n = qq|\n|; foreach(@n){ print; }
Unrecognized character \x81 at C:/Users/Dai/workspace/PerlTest1/MainTest2.pl line 19.
66 :
デフォルトの名無しさん :2007/07/29(日) 20:52:03
ヒント:全角スペース
みんな車輪の再開発をして技術を身に付けるんだよ。 弟子は師匠の筆の跡を盗むもんだ。
perlだけでなくrubyやpythonその他 いろいろな言語でこれをするならどれが一番きれいだと思う?
elisp
71 :
デフォルトの名無しさん :2008/01/10(木) 11:13:45
hello world
pythonだったら2ch書込用ライブラリ作ったけど
omaeka
うんこ
cgiからも書き込めるようにしてみた。 だからアク禁くらってもレンタルサーバーにcgiぶっこめばいくらでも書き込める。
うんこ
うんこ
てすと
81 :
80 :2008/01/28(月) 12:02:46
すまん 誤爆した。
82 :
80 :2008/01/28(月) 12:04:16
すまん 誤爆した。
83 :
80 :2008/01/28(月) 12:09:40
すまん 誤爆した。
てすと
てすと
ActivePerl-5.10.0.1002-MSWin32-x86-283697.msi を保存して ダブルクイックすると 『インストール パッケージを開くことができませんでした。アプリケーションベンダに問い合わせ、このパッケージが有効なWindowsインストーラパッケージであることを確認してください。』 と出るのですが 何が問題あるのでしょうか
>>86 インストーラパッケージが壊れていまし。
保存のインスト不良でした
早とちり
で、しまったシマッタ!島倉千恵子!
(;^_^A フキフキ
とりあえず乙
>>86 亀レスだがそれはファイルが壊れてるだけ。
俺もこの前WIN再インスコしたときになった。
activeperlのある鯖が不安定っぽいからリジューム機能のついてるツール使ってダウソしたほうがいいよ。
90 :
デフォルトの名無しさん :2008/05/14(水) 13:50:09
test
91 :
デフォルトの名無しさん :2008/05/16(金) 17:59:54
クライアントがクッキーを受け入れているかどうかってどうやって判断しているんでしょうか?
92 :
デフォルトの名無しさん :2008/05/16(金) 20:42:21
食わせたクッキーを吐き出させればいいよ。
93 :
デフォルトの名無しさん :2008/08/22(金) 22:09:35
test
95 :
デフォルトの名無しさん :2008/08/31(日) 11:33:21
#!/usr/bin/perl
use warnings;
use strict;
use WWW::Mechanize;
my $url = '
http://pc11.2ch.net/test/read.cgi/tech/1184483810/ ';
my $mail = 'sage';
my $text = 'Hellow World;
my $mech = WWW::Mechanize->new;
$mech->agent_alias('Linux Mozilla');
$mech->get($url);
$mech->submit_form(
form_number => 2,
fields=>{
FROM => '',
mail => $mail,
MESSAGE => $text,
},
);
print $mech->content;
$mech->submit;
print $mech->content;
なんで、これでじゃかきこめないわけ?
hello world
97 :
デフォルトの名無しさん :2008/09/15(月) 20:22:15
ゆきさん、好きだ。
98 :
デフォルトの名無しさん :2008/10/10(金) 18:19:28
そんぽぷへるめ
99 :
デフォルトの名無しさん :2008/12/07(日) 20:49:28
http://pc11.2ch.net/test/read.cgi/software/1118219419/850 より
use utf8;
binmode STDOUT => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
use open IO => ":encoding(cp932)";
use Win32::IEAutomation;
use Encode;
$ie = Win32::IEAutomation->new( visible => 1, maximize => 0);
$ie->gotoURL('
http://pc11.2ch.net/test/read.cgi/software/1118219419/l1n ');
$ie->getTextBox('name:', 'FROM')->SetValue(encode('cp932', "名無しさん@お腹すいた") );
$ie->getTextBox('name:', 'mail')->SetValue('sage');
$ie->getTextArea('name:', 'MESSAGE')->SetValue(encode('cp932', "
>>845 \nソースきぼ〜ん") ) ;
$ie->getButton('name:', 'submit')->Click(1) ;
sleep(10);
$ie->getButton('name:', 'submit')->Click(1) ; # 初回投稿時の確認ウィンドウ用
Hellow World