« 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

コメント

Total : Today : Yesterday :