読者です 読者をやめる 読者になる 読者になる

mixiのエコーにポストするスクリプト書いた

mixiのエコーにコマンドラインから投稿したかったので、perlでスクリプト書きました。

#!/usr/bin/perl
use strict;
use warnings;

use LWP::UserAgent;
use HTML::TreeBuilder;
use Encode;

my $x = 0;
my $y = 0;
my $mail = 'hoge@hoge.co.jp';
my $passwd = 'hogehoge';
my $next_url = "/home.pl";

my $login_url = 'https://mixi.jp/login.pl';
#my $home_url = 'https://mixi.jp/home.pl';
my $home_url = 'http://mixi.jp/recent_echo.pl';#仕様変更のため、urlを変更
my $echo_url = 'http://mixi.jp/add_echo.pl';

my @echo_com = @ARGV;

die '入力なし' unless @echo_com;

my $ua = new LWP::UserAgent();
$ua->cookie_jar({});

my $login_info = {
    next_url => $next_url,
    email => $mail,
    password => $passwd,
};

my $res = $ua->post($login_url, $login_info);

my $res_con = $ua->get($home_url);

my $con = HTML::TreeBuilder->new_from_content($res_con->content);

my @echo = $con->look_down(
    id => 'EchoComment',
);

my @post_key;

for my $echo(@echo){
    @post_key = $echo->parent->parent->look_down(
        name => 'post_key',
    );
}

my $post_key;

for my $key_body(@post_key){
    $post_key = $key_body->attr('value');
}

for my $echo_com(@echo_com){
    
    $echo_com = encode('euc-jp',decode('utf-8',$echo_com));

    my $post_info = {
        body => $echo_com,
        x => 0,
        y => 0,
        redirect => 'home',
        post_key => $post_key,
    };

    my $pos_res = $ua->post($echo_url => $post_info);
    sleep(1);
    
}

一応、これで実行権限あげれば投稿できます。

追記

sleep(1)をしているのは、mixi側のサーバが連続投稿にはある一定の間隔をあけないと受け付けてくれないような設定になっている(推測)のためです。