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: 7bit

MAILHEADER

#文字コードを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);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です