ぽっぺん日記@karashi.org
2008-07-24(Thu) [長年日記]
_ Filter::FetchEnclosure::Mplayerでオリジナルのファイル名を使うpatch
Filter::FetchEnclosure::Mplayer用のpatch。
実はFilter::FetchEnclosure::Mplayerでファイル名を推測するpatchを書いてみたの改訂版。 別にファイル名を推測している訳ではないので、前のタイトルは大袈裟すぎた。反省。
今回の変更は次の通り。
- Dateがない場合か、original_file_nameオプションが指定されている場合にはオリジナルのファイル名を使うようにした。
- 指定ファイルがダウンロード済みだった時の処理に必要ないと思われる処理があったので削除。
patchファイルはこちら。
ツッコミ大歓迎。
--- Mplayer.pm (revision 4736)
+++ Mplayer.pm (revision 8630)
@@ -24,15 +24,22 @@
unless (defined $self->conf->{type}) {
$context->log(error => q{config 'type' is not set.});
}
- my $file_name_base = $args->{entry}->date->strftime('%Y%m%d-%H%M');
for my $enclosure ($args->{entry}->enclosures) {
-
unless ($enclosure->type =~ $self->conf->{type}) {
$enclosure->local_path('dummy') unless $enclosure->local_path;
next;
}
-
+
+ my $file_name_base;
+
+ if ( $self->conf->{original_file_name} || !defined($args->{entry}->date) ) {
+ $file_name_base = $self->_get_original_file_name_base($enclosure);
+ }
+ else {
+ $file_name_base = $args->{entry}->date->strftime('%Y%m%d-%H%M');
+ }
+
my $dir_name = $self->conf->{sub_dir_name} || $args->{feed}->id_safe;
my $feed_dir
= File::Spec->catfile($self->conf->{dir}, $dir_name);
@@ -51,11 +58,6 @@
my $fetched_extension = $self->conf->{consider_fetched} || 'mp3';
my $fetched_data_path = "$file_path_base.$fetched_extension";
if (-e $fetched_data_path || -e $output_path) {
- my $length = -s _;
- $ enclosure->url($enclosure->url);
- $enclosure->length($length);
- $enclosure->type('audio/x-wav');
- $enclosure->local_path($output_path);
$context->log(debug => $enclosure->url . "is already stored in $output_path");
next;
}
@@ -117,6 +119,33 @@
return @stream_urls;
}
+sub _get_original_file_name_base {
+ my ($self, $enclosure) = @_;
+
+ my $res = $self->{ua}->fetch($enclosure->url)
+ or Plagger->context->log;
+
+ my $file_name_base;
+
+ if ($enclosure->type =~ /asf/) {
+ $res->content =~ m!(?:http|mms)://.*/(.*?)\.(?:wmv|wsx|wma|asf)!;
+ $file_name_base = $1;
+ }
+ elsif ($enclosure->type =~ /realaudio/) {
+ $res->content =~ m!rtsp://.*/(.*?)\.(?:rm|smi)!;
+ $file_name_base = $1;
+ }
+
+ unless ($file_name_base) {
+ Plagger->context->log(warn => "Cannot get original file name base of " . $enclosure->url)
+ }
+ else {
+ Plagger->context->log(info => "original file name base is " . $file_name_base)
+ }
+
+ return $file_name_base;
+}
+
1;
__END__
@@ -137,6 +166,17 @@
This plugin dumps audio/video stream to a wav file.
+=head1 CONFIG
+
+=over 4
+
+=item original_file_name
+
+Optional.
+A flag to use original file name. Defaults to 0.
+
+=back
+
=head1 AUTHOR
Yohei Fushii
[ツッコミを入れる]
[]
本日のPingbacks(全0件)


まで頂ければ幸いです。
叛逆としての科学―本を語り、文化を読む22章(フリーマン・ダイソン)
ゲバルト時代 SINCE1966-1973 あるヘタレ過激派活動家の青春(中野正夫)