« boost::regexで悩む | メイン | perlでゴミ箱へ »
January 15, 2005
perl でWin32 Inet
次のようにすれば、perlでWin32 Inetを使いmixiからログイン後のHTMLデータを取得できる。
use Win32::Internet;
$email = 'your_addr@yourhost.ne.jp';
$password = 'your_password';
$next_url = '/home.pl';
$target_url = 'mixi.jp';
$target_object = 'login.pl';
$post_req = 'email=%EMAIL%&password=%PASSWORD%&next_url=%NEXT_URL%';
$success_login = 0;
$INET = new Win32::Internet(); # WinInetのインスタンスを得る
if( defined( $INET ) ) {
local $HTTP;
$INET->HTTP( $HTTP, $target_url );
if( defined( $HTTP ) ) {
$send_command = $post_req;
$send_command =~ s/%EMAIL%/$email/g;
$send_command =~ s/%PASSWORD%/$password/g;
$send_command =~ s/%NEXT_URL%/$next_url/g;
{
my $REQ;
my $params;
$params{"path"} = $target_object."?".$send_command;
$params{"flags"} = INTERNET_FLAG_RELOAD;
$params{"method"} = "POST";
$HTTP->OpenRequest( $REQ, \%params );
if( defined( $REQ ) ) {
$REQ->SendRequest( $send_command )
$file = $REQ->ReadEntireFile();
$REQ->Close();
@read_data = split( /\n/, $file );
foreach( @read_data ) {
chomp;
if( /url=\/check.pl\?n=\%2Fhome.pl/ ) {
$success_login = 1;
}
}
}
}
if( $success_login ) {
my $REQ;
my $params;
$params{"path"} = 'check.pl?n=\%2Fhome.pl';
$params{"flags"} = INTERNET_FLAG_RELOAD;
$params{"method"} = "GET";
$HTTP->OpenRequest( $REQ, \%params );
if( defined( $REQ ) ) {
$REQ->SendRequest();
$file = $REQ->ReadEntireFile();
$REQ->Close();
@read_data = split( /\n/, $file );
foreach( @read_data ) {
chomp;
print $_."\n";
}
}
}
}
$HTTP->Close();
}
$INET->Close();
perlでWin32 Inetを使えばプロトタイプを書いたり、そのまま使ったりするのに意外と便利。
と言うか、他のモジュールでHTML取得するスクリプト書いたことないんだけど。
ま、Winなら問題ないし、いいでしょ。
投稿者 Takenori : January 15, 2005 10:13 PM
Trackback Pings
このエントリーのトラックバックURL:
http://blog.kaede-software.com/mt-tb.cgi/452