WWW::YouTube::Download 0.27にパッチを当てた。

WWW::YouTube::Download 0.27 がなぜか最近、よくこけるようになったので、ちょっと調べた。

どうやらyoutubeのhtmlが変わったので、このモジュールの内部で使っている正規表現が
マッチしなくなっちゃったのが原因くさい。

ので、その箇所にパッチを当てるプログラムを書いた。

use WWW::YouTube::Download;
しているプログラム(plなりpmなり)の内部で、このコードをコピペすれば動くようになります。
少なくとも、get_title、get_video_url、get_fmtの動作は確認しました。

#------------------------------------------------------------
#モジュールの内部メソッドを外部から書き換える。
&_fixup();
sub _fixup{
    return if WWW::YouTube::Download->VERSION > 0.27;
    package WWW::YouTube::Download;
    no warnings 'redefine';
    *_get_args = sub {
        my ($self, $content) = @_;
        my $data;
        if ($content =~ /'PLAYER_CONFIG': ({.*?)}\);/s) {
            $data = JSON->new->utf8(1)->decode($1);
        }
        return $data->{args};
    };
    *WWW::YouTube::Download::_get_args = \&_get_args;
    return 1;
}
#------------------------------------------------------------

こういうのって、作者様にパッチ送れれば最高なんですけども、どうしたら良いんですかね?
ツイッターやってないかなあ?

PC

Posted by namahage