トップ «前の日記(2008-07-23(Wed)) 最新 次の日記(2008-07-25(Fri))» 編集

ぽっぺん日記@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

_ 『新世界より』の下巻を読み始めた

通勤電車から読み始めた。

500ページの大著だけど、すげー面白くて、もうちょいで読了。 大傑作の予感ビジバシ来てる。

新世界より 下 新世界より 下
貴志 祐介
講談社
¥ 1,995

[]
本日のPingbacks(全0件)

トップ «前の日記(2008-07-23(Wed)) 最新 次の日記(2008-07-25(Fri))» 編集