2009-03-21 9 views
0

YMからMacにログを変換する方法はありますか?Yahoo MessengerログをAdiumログに変換する

おかげ セザール

+0

形式に応じて、あなたのYMログがでている、あなたはここで提供される解決策のうちのいくつかの走行距離を取得することがあります。http://li-ma.blogspot.com/2008/10 /pidgin-log-file-to-adium-log-converter.html – bernie

答えて

0
#!/usr/bin/perl 
use warnings; 
use strict; 
use File::Find; 
use File::Copy; 
use Getopt::Long; 

my $inDir = undef; 
my $outDir = undef ; 
my $adiumUser = undef; 
my $force = 0; 
my $foundLogs = 0; 
my $help = 0; 

my %Protocols = (    #Map gaim protocol IDs to Adium ones 
           "aim" =>  "AIM", 
           "yahoo" =>  "Yahoo!", 
           "msn" =>  "MSN" 
           #Add the rest here, or tell me what they are, someone who uses other protocols 
           ); 

sub usage 
{ 
     my $msg = shift; 
     print "Error: $msg\n" if $msg; 
     print "Usage: gaim2adium.pl [--adiumUser <user> | --outDir <output dir>] [--inDir <input dir>] [--yes]\n"; 
     print "Options: (defaults)\n\n"; 
     print "\tinDir:\t\t\tDirectory to import logs from (~/.gaim/logs)\n"; 
     print "\toutDir:\t\t\tDirectory to import logs to (./Logs)\n"; 
     print "\tadiumUser:\t\tAttempt to automatically import logs to the specified Adium user\n"; 
     print "\tyes:\t\t\tDon't prompt before overwriting existing logs\n"; 
     print "\thelp:\t\t\tDisplay this help.\n"; 
     print "\nOnce the logs have been imported, the contents of outDir can be dragged to your Adium log folder\n\n"; 
     exit(1); 
} 

sub process_log 
{ 
     -f or return; 
     #gaim logs are LOG_BASE/Protocol/Account/Contact/YYYY-MM-DD-TIME.(html|txt) 
     if($File::Find::name =~ m!^$inDir(?:/)?(.*?)/(.*?)/(.*?)/(\d{4})-(\d{2})-(\d{2})\.(\d{4})(\d{2}).(html|txt)!) 
     { 
       my ($proto,$acct,$contact,$year,$month,$day,$hour,$seconds,$ext) = ($1,$2,$3,$4,$5,$6,$7,$8,$9); 
       return unless defined ($proto = $Protocols{lc $proto}); 
       $foundLogs = 1;   #Set the logs found flag 
       my $outFN = "$contact ($year|$month|$day)."; 
       $outFN .= ((lc $ext) eq "html") ? "html" : "adiumLog"; 
       mkdir("$outDir/$proto.$acct"); 
       mkdir("$outDir/$proto.$acct/$contact"); 
       my $file = "$outDir/$proto.$acct/$contact/$outFN"; 
       if(-e $file && !$force) 
       { 
#      print(($adiumUser?"$adiumUser already has":"There already exists"), 
#      " a log from $proto.$acct to $contact on $day/$month/$year.\n"); 
         `cat '$File::Find::name' >> '$file'`; 
       } else { 
         copy($File::Find::name,$file); 
       } 
       `touch -t $year$month$day$hour.$seconds '$file'`; 
     } 
} 

#Sort a list of log files by time 
sub sort_logs 
{ 
     my @files = @_; 
     return sort logcmp @files; 
} 

sub logcmp 
{ 
     my ($t1,$t2); 
     $t1 = $& if $a =~ /\d{6}/; 
     $t2 = $& if $b =~ /\d{6}/; 
     return 0 unless defined($t1) && defined($t2); 
     return $t1 <=> $t2; 
} 


GetOptions( "adiumUser=s" =>  \$adiumUser, 
         "inDir=s"    =>  \$inDir, 
         "outDir=s"    =>  \$outDir, 
         "yes"     =>  \$force, 
         "help"     =>  \$help) 
     or usage(); 
usage() if $help; 
usage("You must supply at most one of adiumUser and outDir") if defined($outDir) && defined($adiumUser); 

$outDir ||= "$ENV{HOME}/Library/Application Support/Adium 2.0/Users/$adiumUser/Logs" if defined $adiumUser; 
$outDir ||= "$ENV{PWD}/Logs"; 

$inDir ||= shift; 
$inDir ||= "$ENV{HOME}/.gaim/logs"; 

print "NOTE: Output directory exists, existing logs will be appended to.\n" if(-d $outDir); 

mkdir($outDir) unless -e $outDir; 
usage("Output dir must be a directory") unless -d $outDir; 
usage("Output dir must be writeable") unless -w $outDir; 

usage("Input directory '$inDir' does not exist") unless -d $inDir; 
usage("Input directory '$inDir' is not readable") unless -r $inDir; 

#Spider the logs dir 
find({wanted => \&process_log, 
       preprocess => \&sort_logs}, $inDir); 

#Warn if we didn't find any logs 
unless($foundLogs) 
{ 
     print "Warning: No recognized logs found.\n"; 
     print "Note:\tThis script only supports logs generated by gaim 0.73 and above.\n"; 
     print "\tYou may be able to update older gaim logs to the new format using the script from\n"; 
     print "\thttp://sourceforge.net/forum/message.php?msg_id=2392758\n"; 
     exit(1); 
} 

exit(0); 
+0

この回答の書式のみを修正したことにご注意ください。私はコードがどこから来るのか分からないが、それはかなり馬鹿だ。 –