M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2009年8月29日 14:24

JAGAT SNSの日記に投稿するPerlスクリプト

このエントリーをはてなブックマークに追加 mixiチェック

JAGAT SNSは、DTPエキスパート認証の更新試験をWebで申し込むといやがおうにでも入らせられるSNSでありまして、このSNSを使って回答を交換しろってことかな? JAGATも粋な計らいをしやがる。更新試験料7000円を払って良かった! て思ったら全くそういう動きがありません。というわけで、せっかく入ったJAGAT SNSなので、日記を投稿するサンプルスクリプトです。

JAGAT SNSはOpenPNEだと思うので、もしかしたらOpenPNEでできている他のSNSでも使えるかもね。

スクリプトを動かす前に、上記リンク先を参照して、コマンドラインからアカウントとパスワードをセットしておこう。こんな感じでいいのでは。

$ perl -MConfig::Pit -e'Config::Pit::set("www.jagat.jp", data=>{ username => "ABC12345", password => "password" })'

filename: jagatsns_post_diary.pl

#!/usr/bin/perl
 
use strict;
use warnings;
use utf8;
use GD;
use Config::Pit;
use Encode;
use URI::Fetch;
use XML::Feed;
use WWW::Mechanize;
 
 
# JAGAT SNSの自分のアカウント情報はConfig::Pitで
# あらかじめセットしておこう。コマンドラインからは
# $ perl -MConfig::Pit -e'Config::Pit::set("www.jagat.jp", data=>{ username => "ABC12345", password => "password" })'
 
my $config = pit_get("www.jagat.jp");
die "not preset account data in Pit." if !%$config;
my $username = $config->{username} or die 'username not found.';
my $password = $config->{password} or die 'password not found.';
 
# ダミー画像(1x1pxの白のgif画像)のファイル名。無ければ作る。
my $dummy_image = 'dummy.gif';
 
# Mechanize 初期化
my $mech = WWW::Mechanize->new();
$mech->agent_alias( 'Windows Mozilla' );  
 
 
# Main
 
set_dummy();
write_sns();
exit;
 
 
sub set_dummy {
  return if -e $dummy_image;
  my $im = new GD::Image(1,1);
  $im->fill(0,0, $im->colorAllocate(255,255,255) );
  open my $fh, '>', $dummy_image or die $!;
  print $fh $im->gif;
  close $fh;
  return;
}
 
sub write_sns {
  
  # JAGAT SNSログイン
  login( $username, $password );
  
  # 日記書き込み  
  post( "タイトル", "本文" );    # JAGAT SNSへ投稿 
  
  return;
}
 
sub login { # JAGAT SNSへログイン
  my $username = shift;
  my $password = shift;
  my $res = $mech->get('http://www.jagat.jp/mypage/login.php');
  $mech->form_number(2);
  $mech->set_visible( $username, $password );
  $mech->submit();
  die 'Login Failed.' if ($mech->uri() =~m|https://www.jagat.jp/index.php?option=login|);
  return;
}
 
sub post { # JAGAT SNS Todoへ投稿
  my $subject = shift;
  my $body    = shift;
  my $res = $mech->get('http://www.jagat.jp/igns/?m=pc&a=page_h_diary_add');
  $mech->form_number(1);       # HTML内の1番目のフォーム
  $mech->set_fields( 
    subject => $subject,
    body    => $body,
    public_flag => 'private', 
    upfile_1 => $dummy_image,
    upfile_2 => $dummy_image,
    upfile_3 => $dummy_image,
  );
  $mech->submit();             # 送信
  sleep 3;
  $mech->form_number(1);       # HTML内の1番目のフォーム
  $mech->submit();             # 送信
  return;
}

__END__

画像のダミーファイルを送っているところあたりもうちょっとスマートにできそうなんですが、とりあえず目的は達成できるかな。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2959

コメントする