use strict;
use WWW::Mixi;
use Encode;
use Time::HiRes qw(gettimeofday);#所要時間計測用
#エンコード変換とファイルへの出力用サブルーチン
sub pfsjis{
my ($file,$str)=@_;
Encode::from_to($str,"euc-jp","shift-jis");
print $file $str."\n";
}
my $t0 = gettimeofday();
my $mixi_email='xxxxxx@xxx.xx.xx'; # ユーザ名
my $mixi_password='xxxxxxxx'; # パスワード
if(( $mixi_email ne '' )&&( $mixi_password ne '' ) ){
my $mixi = WWW::Mixi->new( $mixi_email, $mixi_password );
# ログイン
my $res = $mixi->login;
if( !$res->is_success ){
print $res->status_line;
exit;
};
# 日記一覧取得
my $url = 'list_diary.pl';
my $page = 1;#ページカウンター
my @diaries =();
my @items =();
my $item;
while($url ne ''){
last if ($page > 1);#取りあえず最新1ページ分ダウンロード
$res = $mixi->get( $url );
@items = $mixi->parse_list_diary( $res );
push( @diaries, @items );
$item = $mixi->parse_list_diary_next( $res );
$url = $item->{link};
$page++;
}
my $num = @diaries;
print $num."件分の日記を準備。\n";
#@diaries = reverse( @diaries ); 古い順に取り出したいとき
my $outfile = 'mixiNikkiDL.txt'; #ダウンロードするテキストファイル
open (my $FOUT,'>',$outfile)|| die "can't open file:$!";
# 日記を処理
my $diary;
my $str;#encoding変換用文字列変数
my $ken = 1;#日記件数カウンター
foreach $item ( @diaries ){
last if ( $ken > 3);#取りあえず3件の日記ダウンロード
sleep(5);#画面遷移アクセス制限の関係
$res = $mixi->get( $item->{link} ); # 日記取得
($diary) = $mixi->parse_view_diary( $res ); # 日記解析
pfsjis($FOUT,$diary->{subject});#日記題名取得
pfsjis($FOUT,$diary->{time});#日記投稿日時取得
pfsjis($FOUT,$diary->{description});#日記本文取得
$ken++;
}
$ken--;
print $ken."件分の日記をダウンロードしました。\n";
close $FOUT;
}
my $t1 = gettimeofday();
my $elapsed = $t1 - $t0;
my $min = int($elapsed/60);
my $sec = $elapsed%60;
$sec = $elapsed if ($min == 0 and $sec == 0);
print "$min min. $sec sec. passed!\n";
use strict;
use WWW::Mixi;
use Encode;
use Time::HiRes qw(gettimeofday);#所要時間計測用
#エンコード変換とファイルへの出力用サブルーチン
sub pfsjis{
my ($file,$str)=@_;
Encode::from_to($str,"euc-jp","shift-jis");
print $file $str."\n";
}
my $t0 = gettimeofday();
my $mixi_email='xxxxxxx@xxx.xx.xx'; # ユーザ名
my $mixi_password='xxxxxxxx'; # パスワード
my $nikkifile = 'mixiNikkiDL.txt'; #前回ダウンロードしたファイル(又は新規)
open (my $FIN,'<',$nikkifile)|| die "can't open file:$!";
my @lines = <$FIN>;
close $FIN;
@lines = reverse (@lines);
my $date = '';
my $nikkino = 0;
for my $line (@lines){
if ($line =~ m/^(\d{4}\/\d{2}\/\d{2} \d{2}:\d{2})$/){
$date = $1;
print "前回最終日付時刻:$date\n";
}
if ($line =~ m/^NikkiNo\.(\d+)$/){
$nikkino = $1;
print "前回最終日記NO:$nikkino\n";
last;
}
}
if ($date eq '' && $nikkino == 0){
print "指定ファイルに日記がありません。\n";
print "日記をこのファイルに書き込みしますか?\n";
print "宜しければ 「Y」を中止は「N」を入力下さい。\n";
my $ret = <STDIN>;
if ($ret ne 'y' || $ret ne 'Y' || $ret ne 'Y' || $ret ne 'y'){
exit(1);
}
}
if(( $mixi_email ne '' )&&( $mixi_password ne '' ) ){
my $mixi = WWW::Mixi->new( $mixi_email, $mixi_password );
# ログイン
my $res = $mixi->login;
if( !$res->is_success ){
print $res->status_line;
exit;
};
# 日記一覧取得
my $url = 'list_diary.pl';
my @diaries =();
my @items =();
my $item;
while($url ne ''){
$res = $mixi->get( $url );
@items = $mixi->parse_list_diary( $res );
my @newitems;
my $find = 0;
for my $nikki (@items){
if ($nikki->{time} eq $date){
$find = 1;
last;
}
else {
push @newitems,$nikki;
}
}
push( @diaries, @newitems );
last if ($find == 1);
$item = $mixi->parse_list_diary_next( $res );
$url = $item->{link};