WWW::MechanizeとWeb::ScraperでLast.fmからfreemp3をダウンロードする

2009年3月 2日
| コメント(0) | トラックバック(0) WWW::MechanizeとWeb::ScraperでLast.fmからfreemp3をダウンロードする

最近からかもしれないけど、Last.fmでmp3の無料ダウンロードをやっているようだ。

参考:Last.fm からのおすすめ無料mp3 - Last.fm

ちょうどWWW::Mechanizeを試していたので、それとWeb::Scraperを組み合わせてダウンロードするスクリプトを作った。

アカウントを持っているのが前提です。
アカウント情報は以下のように、YAMLで記述しておきます。
ソースコードをこのまま使う場合は、スクリプトのあるディレクトリに「lastfm.freemp3.yaml」という名前で保存しておきます。

---
config:
  id: xxxxxxxx
  pw: ********

最後は改行で終了しておく必要があります。たぶん。

ソースコードをこのまま使う場合は、スクリプトのあるディレクトリに「lastfm」というディレクトリが必要です。
実行すると、そのディレクトリにダウンロードしていきます。

また、保存する時に「mirror」を使うと、通常はファイルの比較をして再ダウンロードを防いでくれるのですが、Last.fmのサーバーの仕様なのかわかりませんが、その機能が効いていません。
その辺はもう少しどうにかしたいですね。
結構ダウンロードに時間がかかるので…。

ソースコード。

use strict;
use warnings;
use utf8;
use Perl6::Say;
 
use Encode;
use Config::YAML;
my $config = Config::YAML->new( config => './lastfm.freemp3.yaml' );
 
use Web::Scraper;
use WWW::Mechanize;
use File::Basename;
use List::MoreUtils qw(uniq);
 
my $uri = q{https://www.last.fm/login};
 
my $mech = WWW::Mechanize->new(
    autocheck => 1,
    agent =>
q{Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)},
);
 
# スタート
$mech->get($uri);
 
# ログイン
sleep 1;
$mech->form_number(2);
$mech->set_fields(
    username => $config->{id},
    password => $config->{pw},
);
$mech->submit;
 
# フリーMP3のページ
sleep 1;
$uri = q{http://www.last.fm/home/freemp3s};
$mech->get($uri);
 
# MP3リンクを取得
sleep 1;
my ( $scraper, $result );
$scraper = scraper {
    process 'a[href=~/\.mp3$/]', 'hrefs[]' => '@href';
    result 'hrefs';
};
$result = $scraper->scrape( $mech->content, $mech->uri );
 
foreach my $mp3 ( uniq @{$result} ) {
    my $filename = basename($mp3);
    print "try fetch : $mp3 : ";
    say $mech->mirror( $mp3, sprintf( "%s/%s", 'lastfm', $filename ) )->message;
    sleep 1;
}

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメントする

Google検索

Last.fm

このブログ記事について

このページは、のぶりんが2009年3月 2日 03:48に書いたブログ記事です。

ひとつ前のブログ記事は「Web::Scraperで正規表現を使って必要なリンクだけを取得する方法」です。

次のブログ記事は「勝手に改造-Web::Scraperではてブスクレイピング」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type