Perlを使って2ちゃんねるにHello Worldを書き込む

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
俺、がんばる。みてて。
2デフォルトの名無しさん:2007/07/15(日) 16:23:17
とりあえず、http://www.activestate.com/ からperlをインストール。

というか、すでに入っているんだけど^^;
3デフォルトの名無しさん:2007/07/15(日) 16:46:02
さて、httpをしゃべるライブラリには何を使ったら良いだろうか?
むかしLWP::Simpleを使ったことはあるとはいえ、
Simpleっていうぐらいだからもっと高度なことをするときには
別のものがいいのだろうか?
4デフォルトの名無しさん:2007/07/15(日) 16:49:03
>3で結果が見えたな
5デフォルトの名無しさん:2007/07/15(日) 16:55:14
Perl でやるより Curl でやった方が楽だと思うが...
6デフォルトの名無しさん:2007/07/15(日) 16:58:13
なんかCurlって名前のものいくつか無い?
言語? php用ライブラリ?
7デフォルトの名無しさん:2007/07/15(日) 17:10:48
あぁ、やっとわかったよ。
http://d.hatena.ne.jp/keyword/curl

ライブラリとしてのlibcurl、それをコマンドラインから使用するcurl。
それとはまったく別の、次世代ウェブ記述言語Curlがあるんだね。

>>5さんがいっているのはコマンドライン用Curl?

悪くは無いんだけど、共有レンタルサーバーでも使えるようなやり方を
目指しているので。でもあとで使うよ!
8デフォルトの名無しさん:2007/07/15(日) 17:15:09
ところで、phpではlibcurlを使うのかな?
とりあえず、必要と思われる機能は
UserAgentなどのヘッダやクッキーをいろいろ設定してhtmlを読み込む。
帰ってくるヘッダやクッキーを読み取れる機能。
まあ、シンプルじゃないライブラリなら大概、対応しているだろう。

あと個人的に、proxy対応、https対応のライブラリであってほしい。

さぁ、どんなライブラリがあるのか探すぞ!
9デフォルトの名無しさん:2007/07/15(日) 17:18:34
あと認証機能もほしいね。BASIC認証とかいろいろ
10デフォルトの名無しさん:2007/07/15(日) 17:19:43
LWPってlibwww-perl の略だったのか。今頃気づいたwww
11デフォルトの名無しさん:2007/07/15(日) 17:21:18
>>1
Javaが簡単だお
12獅子王:2007/07/15(日) 17:22:00
あの〜、ずいぶん久方ぶりの書き込みなんですけど僕もperlを使ってみたいなぁと思うんです。
だけどあの英語漬けのサイトで一体どうやればダウンロードできるのかわかりません。
誰か暇つぶしついでに教えていただけませんか?
13デフォルトの名無しさん:2007/07/15(日) 17:22:26
とりあえず、肩慣らしにこのスレを読み込むコード

use LWP::Simple;
print get 'http://pc11.2ch.net/test/read.cgi/tech/1184483810/';
14デフォルトの名無しさん:2007/07/15(日) 17:23:55
>>11
Javaかぁ、もっと大規模なのを作るときは使うけど、
簡単なツールレベルだと、ちょっと重く感じるな。
あと共有サーバーじゃ大概つかえないし。
15デフォルトの名無しさん:2007/07/15(日) 17:25:40
しかし、PerlではLWPを使うのが基本でいいのだろうか?
今はもっといいのがあるのではないかと思いながら、ぐぐっていると

ここみれば出来そうw
http://homepage3.nifty.com/hippo2000/perltips/LWP.html
16デフォルトの名無しさん:2007/07/15(日) 17:28:06
うほっ!らくだなw

http://digit.que.ne.jp/work/index.cgi?Perl%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%2FLWP#i3

LWPで、「https://」で始まるSSL使用サイトにアクセスできますか?
編集
できます。

LWPはCrypt::SSLeayがインストールされていれば、自動的にSSL使用サイトへのアクセスも適切に処理してくれます。
アクセス先が「https://」で始まっていても、スクリプトを変える必要はまったくありません。
それどころか、プロトコルが「http」か「https」かということすら判定する必要はありません。
17デフォルトの名無しさん:2007/07/15(日) 17:37:42
よし、たいしたことができないであろう、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デフォルトの名無しさん:2007/07/15(日) 17:55:21
荒らしスクリプトをオープンで作ってる・・・
19デフォルトの名無しさん:2007/07/15(日) 17:59:35
>>18
違いますよ。ただの2ちゃんねるブラウザですよ。^^;
20デフォルトの名無しさん:2007/07/15(日) 18:13:22
ちょっとIEがだすhttpヘッダみたいから、これいれる。
http://www.blunck.info/iehttpheaders/iehttpheaders.html
21デフォルトの名無しさん:2007/07/15(日) 18:22:23
あれ?>>20のやつVistaで動かない。XP上のIE7なら動いていたんだが・・・
まあ、それならそれでFirefoxのやつつかうけどさ
22デフォルトの名無しさん:2007/07/15(日) 19:00:03
とりあえず、クッキーとか何も持っていない状態でブラウザから普通に書き込むと、
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に書き込み機能は相変わらず無いのか?
24デフォルトの名無しさん:2007/07/15(日) 19:10:52
>>23
そんなのがあるのかw あとでみてみる。


2ちゃんねるを知っている人には当たり前だろうが、
初めて書き込むときには、「上記全てを承諾して書き込む」がでる。
クッキー名hanaにmogeraが設定されているかどうかで判断されるようだ。
これは今現在の話なので将来は変わる?スレごとに違うのかな?

とりあえずクッキーを持たずに書き込むと飛ばされる「上記全てを承諾して書き込む」ページには
>>22で送られる内容にくわえ、hiddenでhana=mogeraが追加されている。(subject=""もあるがスレ立て時に使われるのか?)
そこらへんを見れば、クッキー名や値が変わっても対応できるのかもしれない。
25デフォルトの名無しさん:2007/07/15(日) 19:16:15
どうやら、書き込むときに
hana=mogera と
PON = 俺のホスト名 が
無ければいけないようだ。

hana=mogeraはさっきも書いたように同意するかどうか、
PONが変わる(つまり回線をつなぎなおしたとき)は確認画面に飛ばされる。

HAPはなんだろう?無くても書き込めるようだがまたセットさせられる。
さてぐぐるかw
26デフォルトの名無しさん:2007/07/15(日) 19:28:22
そういや、ルータを使っている場合に自分のホスト名って
(外部のサーバーなしに)取得できるんかいな?

ルータのUPnP機能に問い合わせればわかるようなことを
以前見た気がするが・・・

まあ、2ちゃんねるに限れば、普通にアクセスして
戻ってきたクッキーをちゃんと記憶すればいいだろうけど。
27デフォルトの名無しさん:2007/07/15(日) 20:00:15
ふう。風呂はいっていたよ。

さてのんびりやるぞ!

これからの投稿予定は次のとおりとなっております。お楽しみに。

・POSTを使ったデータ送信
・クッキーの取得
・クッキーの送信
・書き込めた!
・やっぱ文字コードはUNICODEでしょ!
・BASIC認証がある場合は・・・
・それ以外認証ページは・・・
・httpsページにトライ!
・そしてphp版へ・・・
・そしてCurl版へ・・・
28デフォルトの名無しさん:2007/07/15(日) 21:05:45
とても楽しめそうにない件について。
29デフォルトの名無しさん:2007/07/15(日) 21:19:28
>>27
Perl で書けたのであれば Curl はやらなくて良いと思うよ。
それより書き込みだけじゃなく、スレ立ても出来る様になると嬉しいんじゃない?
30デフォルトの名無しさん:2007/07/15(日) 21:25:47
楽しいなあ
楽しいなあ
楽しいなあ
31デフォルトの名無しさん:2007/07/15(日) 22:04:46
どうも荒らしスクリプトを作ろうと思っている様にしか思えんなぁ。
そもそも人にきかなきゃわからんレベルの人間がやるものでもないし。
32デフォルトの名無しさん:2007/07/15(日) 22:08:02
俺、別に聞いてないし・・・・。
33デフォルトの名無しさん:2007/07/15(日) 22:22:52
何でもしたり顔でケチ付けようとする人間はいるもんだよ
自分でも言ってる意味が分かってないから、反論しても無駄
34デフォルトの名無しさん:2007/07/15(日) 22:28:28
必死だな。
35デフォルトの名無しさん:2007/07/15(日) 22:51:57
何事にも必死に取り組まなければ2ちゃんねらになっちゃう!!

そう子供たちに教えるべきだね。
36デフォルトの名無しさん:2007/07/15(日) 23:46:11
キチガイがいるな
37デフォルトの名無しさん:2007/07/16(月) 00:13:27
>>36
自己紹介乙!
38test:2007/07/16(月) 02:34:11
test
39デフォルトの名無しさん:2007/07/16(月) 02:34:57
あー。書き込めちゃった。まあゆっくりやるかw
40デフォルトの名無しさん:2007/07/16(月) 08:42:43
脳内妄想が激しいスレだな
41デフォルトの名無しさん:2007/07/16(月) 09:38:59
暗いスレだな
42デフォルトの名無しさん:2007/07/16(月) 13:34:11
ていうか君以外のレスは全部 perl で書かれた bot がやってるって知ってた?惟も含めて。
43デフォルトの名無しさん:2007/07/16(月) 15:27:23
日本語OK?
44デフォルトの名無しさん:2007/07/16(月) 15:34:37
縺薙l縺ッ繝悶Λ繧ヲ繧カ縺九iUTF8縺ァ譖ク縺崎セシ繧薙□譁?蟄?
45デフォルトの名無しさん:2007/07/16(月) 16:25:06
はいはい、またーりいくよ。
テスト用に、サーバーに送信したデータをそのまま表示するだけの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はダウンロードしやがるぜ。けっ
46デフォルトの名無しさん:2007/07/16(月) 20:07:51
さあて、いよいよ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;
47デフォルトの名無しさん:2007/07/16(月) 21:23:57
Hello World
48デフォルトの名無しさん:2007/07/16(月) 21:31:30
なんか資料見つけたので追加
http://age.s22.xrea.com/talk2ch/
49デフォルトの名無しさん:2007/07/16(月) 22:12:37
Hello World 2
50デフォルトの名無しさん:2007/07/16(月) 22:22:18
うーん。postするときのtimeの数字ってなんだろう?
日付に直すと Sun, 02 Jan 2005 17:55:08 GMT なんだが、
どこから取得すればいいのだ?
htmlのフォームから取得できるのはわかるが・・・
51デフォルトの名無しさん:2007/07/16(月) 22:37:29
Hello World 3
52デフォルトの名無しさん:2007/07/16(月) 22:38:34
Hello World 3
53デフォルトの名無しさん:2007/07/16(月) 22:40:05
Hello World 3
54デフォルトの名無しさん:2007/07/16(月) 22:41:19
Hello World 3
55デフォルトの名無しさん:2007/07/16(月) 22:42:24
よくわからんが、現在時刻マイナス? で書き込めるようだ。
56デフォルトの名無しさん:2007/07/16(月) 23:03:50
ここでテストするのはやめれ。運営にチクるぜー?
57デフォルトの名無しさん:2007/07/17(火) 00:09:52
通報しますた
58デフォルトの名無しさん:2007/07/17(火) 01:46:58
あぼーんだらけの某板に書いてみるとか
59デフォルトの名無しさん:2007/07/17(火) 08:54:34
最悪板あたりでやればいいのでは
60デフォルトの名無しさん:2007/07/26(木) 18:14:07
結局どこいったん>
61デフォルトの名無しさん:2007/07/27(金) 01:20:27
>>60
書き込めるようになって、飽きました。
62デフォルトの名無しさん:2007/07/27(金) 01:49:01
他の鯖でも試してみた?
63デフォルトの名無しさん:2007/07/27(金) 14:21:01
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;
}
65デフォルトの名無しさん:2007/07/29(日) 20:40:58
Unrecognized character \x81 at C:/Users/Dai/workspace/PerlTest1/MainTest2.pl line 19.
66デフォルトの名無しさん:2007/07/29(日) 20:52:03
ヒント:全角スペース
67デフォルトの名無しさん:2007/09/08(土) 00:57:04
このスレは車輪の再発明をするスレのようですね

Age2ch Part14
http://pc11.2ch.net/test/read.cgi/software/1118219419/l50
68デフォルトの名無しさん:2007/09/08(土) 14:36:00
みんな車輪の再開発をして技術を身に付けるんだよ。
弟子は師匠の筆の跡を盗むもんだ。
69デフォルトの名無しさん:2007/10/04(木) 13:01:14
perlだけでなくrubyやpythonその他
いろいろな言語でこれをするならどれが一番きれいだと思う?
70デフォルトの名無しさん:2007/10/05(金) 09:53:41
elisp
71デフォルトの名無しさん:2008/01/10(木) 11:13:45
>>22
これってどうやって調べたん?
72デフォルトの名無しさん:2008/01/10(木) 12:04:21
hello world
73デフォルトの名無しさん:2008/01/10(木) 23:37:44
74デフォルトの名無しさん:2008/01/11(金) 09:22:43
pythonだったら2ch書込用ライブラリ作ったけど
75デフォルトの名無しさん:2008/01/11(金) 11:51:26
omaeka
76デフォルトの名無しさん:2008/01/15(火) 05:41:47
うんこ
77デフォルトの名無しさん:2008/01/15(火) 05:42:50
cgiからも書き込めるようにしてみた。
だからアク禁くらってもレンタルサーバーにcgiぶっこめばいくらでも書き込める。
78デフォルトの名無しさん:2008/01/15(火) 05:45:20
うんこ
79デフォルトの名無しさん:2008/01/15(火) 05:46:25
うんこ
80デフォルトの名無しさん:2008/01/28(月) 11:56:22
てすと
8180:2008/01/28(月) 12:02:46
すまん
誤爆した。
8280:2008/01/28(月) 12:04:16
すまん
誤爆した。
8380:2008/01/28(月) 12:09:40
すまん
誤爆した。
84デフォルトの名無しさん:2008/01/31(木) 05:50:43
てすと
85デフォルトの名無しさん:2008/01/31(木) 05:53:43
てすと
86デフォルトの名無しさん:2008/03/19(水) 02:51:43
ActivePerl-5.10.0.1002-MSWin32-x86-283697.msi
を保存して
ダブルクイックすると
『インストール パッケージを開くことができませんでした。アプリケーションベンダに問い合わせ、このパッケージが有効なWindowsインストーラパッケージであることを確認してください。』  と出るのですが
何が問題あるのでしょうか
87うっかり八兵衛:2008/03/19(水) 06:04:17
>>86 
インストーラパッケージが壊れていまし。
保存のインスト不良でした
早とちり
で、しまったシマッタ!島倉千恵子!
(;^_^A フキフキ
88デフォルトの名無しさん:2008/03/19(水) 07:27:01
とりあえず乙
89デフォルトの名無しさん:2008/03/29(土) 00:38:42
>>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
94デフォルトの名無しさん:2008/08/22(金) 22:10:36
wget --referer=http://pc11.2ch.net --save-cookie=c --load-cookie=c --post-data='hana=mogera&bbs=tech&key=1184483810&time=1&mail=&FROM=&MESSAGE=test' http://pc11.2ch.net/test/bbs.cgi
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;
なんで、これでじゃかきこめないわけ?
96デフォルトの名無しさん:2008/09/07(日) 15:18:17
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) ; # 初回投稿時の確認ウィンドウ用

100デフォルトの名無しさん:2008/12/10(水) 02:24:59
Hellow World