#!/usr/local/bin/perl
#!/usr/bin/perl
#!/bin/perl
# ヽ(京)ノ
use Lingua::JA::Numbers qw/ ja2num /;
use DirHandle;
use constant MINUTE => 60;
use constant HOUR => 60 * MINUTE;
use constant DAY => 24 * HOUR;
use utf8;
use Jcode;
use Encode;
# ISO 6429
use Term::ANSIColor qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
# --------------------------------------------------------------------
do 'config.pl';
do "$ENV{HOME}/autoytb.conf";
$DLDIR ||= '/tmp/';
$base = $DLDIR;
$playlist = 'playlist.pls';
$t = time;
$d = new DirHandle $base;
if (defined $d) {
while (defined($_ = $d->read)) {
print "\n";
next if(/^\.\.?$/); # . .. ignore
next unless(-d "$base$_"); # dir only
print GREEN " --- playlist maker* $_";
if(-f "$base$_/$playlist" ) {
($write_time)=(stat("$base$_/$playlist"))[9];
printf(GREEN . " --- exist($base$_/$playlist), " . CYAN . "%u days ago", ($t - $write_time)/DAY);
next if(($t - $write_time)/DAY<2); # 2day?
}
print YELLOW " => do";
&make_playlist("$base$_/");
}
undef $d;
}
# DIR のみ取り出す
sub make_playlist
{
($dir) = @_;
my %fhash = ();
# ファイル...
my $d = new DirHandle $dir;
if (defined $d) {
while (defined($_ = $d->read)) {
chomp;
next if(/^\.\.?$/); # . .. ignore
next unless(-f "$dir$_"); # file only
next unless(/\.(avi|mpeg|flv|wmv|divx?|rm|asf|mov|mp4|3gp|mp3|aac|wma|swf)$/i); # . .. ignore
# 変漢: $file は後で使う正しいファイル名
my $file = $_;
# 日本語数字 適当に対応
s/1/1/g;
s/2/2/g;
s/3/3/g;
s/4/4/g;
s/5/5/g;
s/6/6/g;
s/7/7/g;
s/8/8/g;
s/9/9/g;
s/0/0/g;
# 漢数字
$_ = kanji($_);
# おまえらも結構ややこしいぜ
s/①/_1_/g;
s/②/_2_/g;
s/③/_3_/g;
s/④/_4_/g;
s/⑤/_5_/g;
s/⑥/_6_/g;
s/⑦/_7_/g;
s/⑧/_8_/g;
s/⑨/_9_/g;
s/⑩/_10_/g;
s/⑪/_11_/g;
s/⑫/_12_/g;
s/⑬/_13_/g;
s/⑭/_14_/g;
s/⑮/_15_/g;
s/⑯/_16_/g;
s/⑰/_17_/g;
s/⑱/_18_/g;
s/⑲/_19_/g;
s/⑳/_20_/g;
# フェイク
s/FIN(AL)?/_9999999999_/ig;
s/END/_99999999_/ig;
s/OP(enn)?(ing)?/_0_/ig;
s/En?d(ing)?/_9999999_/ig;
# 数値だけ抜き出し
while(1)
{
/(\d+)/ or last;
$fhash{$file} .= sprintf( "%032d", $1);
$_ = $';
}
# 最後にファイル名添加して微妙な物を選別できる幼にする
$fhash{$file} .= $file;
}
undef $d;
}
# 数値のみでソーティング
@keys = sort { $fhash{$a} cmp $fhash{$b} } keys %fhash;
$entry=$#keys+1;
# ファイルがなければ次へ
unless(@keys)
{
print GREEN " => nofile ach so ";
unlink "$dir$playlist" or do print RED "$dir$playlist ($!)." and do print GREEN "=>ok.";
return;
}
print GREEN " => make";
# playlist.pls として保存 nkfパイプ
open PLS, "| nkf --cp932 -s | tee \'$dir$playlist$$.work\'" or die $!;
# plsファイル生成
print PLS <<"_PLAYLIST_";
[playlist]
NumberOfEntries=$entry
Version=2
_PLAYLIST_
$cnt = 1;
foreach(@keys)
{
print PLS "File$cnt=$_\n";
$cnt ++;
}
close PLS;
rename "$dir$playlist$$.work","$dir$playlist" or die $!;
print GREEN " => done.";
return;
};
;
# --------------------------------------------------------------------
sub kanji
{
my $RE_Numerals = $Lingua::JA::Numbers::RE_Numerals;
my $name = shift;
Encode::_utf8_on($name);
$name =~ s{ ($RE_Numerals) }{ ja2num($1) }iegx;
Encode::_utf8_off($name);
return $name;
}