mixiの日記をメールで見る方法
ここのところ twitter メインになりmixiは利用率は下がり気味です。そんなところ 「マイミクさんの日記はメールでみてます」と書いたら、「そんなことできるの?」というメッセージを頂きました。
仕事柄特にむずかしいことではないのですが、IT業界以外の方には理解しづらいのかもしれません。そこで、私がやっている方法を公開してみます。
私は自前のLinuxサーバを使って自動定期処理(いわゆる crontab)でperlスクリプトを作ってメールを送ってますが、perlがつかえれば、Windowsでも、Macintoshでもできます。
#!/usr/bin/perl
use warnings;
use strict;use Encode;
use Data::Dumper;
use WWW::Mixi::Scraper;
use LWP::UserAgent;
use HTTP::Request::Common;use Net::SMTP;
my $user=’ミクシィのメールアドレス’;
my $pass=’ミクシィのパスワード’;
my $mailfrom=’送信元メールアドレス’;
my $mailto=’送信先メールアドレス’;
my $smtpserver=’SMTPサーバメールアドレス’;
my $mailheader=’マイミク最新日記 ‘ . &GettDateString(0);my $diary_body = &get_mixi_diary($user, $pass);
&mailsend($mailfrom, $mailto, $smtpserver, $mailheader, $diary_body);exit;
sub get_mixi_diary()
{($user, $pass) = @_;
my $MAX_GET_ENTRY = 40;
my $MAX_OLDEST_DAYS = 1;my $return_body = “”;
my $useragent = ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4’;
my $cookie_file=”cookies-mixi.txt”;my $ua = LWP::UserAgent->new;
$ua->cookie_jar({file =>$cookie_file, autosave=>1 });$ua->agent($useragent);
my $req = POST( “http://mixi.jp/login.pl”,
[ “next_url” => ‘%2Fhome.pl’, “email” => $user, “password” => $pass ] );
my $res = $ua->request($req);$res = $ua->get(‘http://mixi.jp/new_friend_diary.pl’);
my $mixis = WWW::Mixi::Scraper->new;
my $html=decode(‘euc-jp’, $res->{_content});
my @diary = $mixis->new_friend_diary->parse( html => $html );$|=1;
my $cnt=0;
my $pastdatestring = &GettDateString($MAX_OLDEST_DAYS);
foreach my $ent ( @diary ) {
$cnt++;
if($cnt > $MAX_GET_ENTRY) {
last;
}
my ($entrydatestring,$entrytimestring) = split(/[\s]/, $ent->{time});
if($entrydatestring lt $pastdatestring) {
last;
}
my $entry_header = sprintf(“%20s %20s %-s\n%-s\n\n”,
encode(‘utf-8’, $ent->{time}),
encode(‘utf-8’, $ent->{name}),
encode(‘utf-8’, $ent->{subject}),
encode(‘utf-8’, $ent->{link}) );my $url=encode(‘utf-8’, $ent->{link});
my $dairy_res = $ua->get($url);
my $dairy_res_html = decode(‘euc-jp’,$dairy_res->{_content});
my @diary_ent = $mixis->view_diary->parse(html => $dairy_res_html);
my $diary_desc = encode(‘utf-8’, $diary_ent[0]->{description});
#$diary_desc =~s/^(.*)(\
<\/div\>)(.*)$/$1$3/;
$diary_desc =~s/\
/\n/g;
$diary_desc =~s/<.*?>//g;
my $entry_body = sprintf(“%s\n”, $diary_desc);$return_body = $return_body . $entry_header . $entry_body . “\n” . “=” x 59 . “\n\n”;
}
return $return_body;
}
sub mailsend() {
my ($from, $mailto, $smtpserver, $subject, $message) = @_;
Encode::from_to($subject, ‘utf-8’, ‘iso-2022-jp’);
encode(‘MIME-Header-ISO_2022_JP’, $subject);#メールヘッダー設定
my $header = << “MAILHEADER”;
From: $from
To: $mailto
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Trensfer-Encoding: 7bitMAILHEADER
#文字コードをJISに変換
Encode::from_to($message, ‘utf-8’, ‘iso-2022-jp’);#メール送信オブジェクト設定
my $smtp = Net::SMTP->new($smtpserver);
if ( !$smtp ) {
print “メールサーバーにアクセスできません!”;
exit;
}#メール送信
$smtp->mail($from);
$smtp->to($mailto);
$smtp->data();
$smtp->datasend($header);
$smtp->datasend($message);
$smtp->dataend();
$smtp->quit;}
sub GettDateString {
my ($pastdays) = shift;my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time() – (3600 * 24 * $pastdays));
return sprintf(“%04d-%02d-%02d”, $year+1900, $mon+1, $mday);
}