#!/usr/bin/perl # 日本語EUC、LF use XML::RSS; use LWP::Simple; use WWW::Mechanize; use Unicode::Japanese qw(unijp); use File::Basename; my $PURL = 'http://purl.org/rss/1.0/modules/content/'; my $LOCK_DIR = basename( $0 ) . '.lock'; die if ( !mkdir( $LOCK_DIR ) ); my $url = '転載元のRSS'; my $mixiAccount = 'メールアドレス'; my $mixiPassword = 'パスワード'; sub SafeFilename { my $str = shift @_; $str =~ s/([^0-9a-zA-Z_.-])/'_' . unpack('H2', $1)/eg; return( $str ); } my $storeDir = $url; $storeDir =~ s#http://##; $storeDir = SafeFilename( $storeDir ); mkdir( $storeDir ) if ( ! -d $storeDir ); eval { my $rss = get( $url ) or die; my $oParser = new XML::RSS; $oParser->parse( $rss ); my $rArrayItems = $oParser->{items}; foreach my $item ( reverse @{ $rArrayItems } ) { # 新着順→旧着順に。sortなんかするか! my $url = $item->{link}; my $filename = $url; $filename =~ s#http://[^/]+/##; $filename = SafeFilename( $filename ); next if ( -f "$storeDir/$filename" ); my $eucTitle = unijp( '[' . $item->{dc}->{subject} . '] ' . $item->{title} )->euc; my $eucContent = Html2EucPlain( $item->{$PURL}->{encoded} ); $eucContent .= "\n\n-- $url"; open( OUT, ">$storeDir/$filename" ) or die "Cannot write to log"; print OUT $eucTitle . "\n"; print OUT $eucContent . "\n"; close( OUT ); MixiPost( $mixiAccount, $mixiPassword, $eucTitle, $eucContent, ) or do { unlink( "$storeDir/$filename" ); die "Cannot post to mixi"; } ; } }; warn $@ if ( $@ ); rmdir( $LOCK_DIR ); sub Html2EucPlain { my $str = shift @_; local $_ = unijp( $str )->euc; s/\x0D\x0A|\x0D|\x0A/\n/g; s#
#\n#ig;
s#
#\n#ig;
s#
#\n#ig;
# 画像はURLのみ(相対リンク? 知るか!)
s#]*>#$1\n#ig;
s#