今日の実験の「犠牲者」は
z-music.org z-music.org このサイトでは、曲を見つけて、聞いてダウンロードする機会があります。
目標は
sed 、
awk 、および
grepの「紳士のセット」を使用して音楽を検索する
bashスクリプトを作成することです。 さて、加えて少しカールしたり、味見したりします。
少しz-music.orgを調べたところ、次のことが明らかになりました。
- 検索は
z-music.org/search/ます。 GETパラメーターとして、クエリテキストq 、リクエストタイプ(AJAX) actionおよび検索結果のページ番号を渡すことができます - データ
"id=<SONG_ID>"とともにPOSTリクエストをz-music.org/bitrate/送信することで、曲のビットレートを知ることができます - 曲をダウンロードするための直接リンクは
m1.z-music.org/t/<SONG_ID>_<HASH>ようにm1.z-music.org/t/<SONG_ID>_<HASH>ます。 <HASH>はz-music.org/theme/new/js/lang.jsのスクリプトで見つかりました
スクリプトの作成を開始できます。 サーバー要求には
curlを使用しますが、
wget使用を妨げるものは何もありません。
curl -s代わりに
wget -q -O - curl -F 、
curl -F代わりに
wget --post-data最初に、
hsh変数に
<HASH>を書き込みます。
hsh=$(curl -s http://z-music.org/theme/new/js/lang.js | sed -n 's/^var hsh="\([^"]*\)";$/\1/p')
変数
$queryおよび
$pageには、クエリテキストと結果のページ番号が含まれます。 サーバーにリクエストを送信します。
curl -s "http://z-music.org/search/?page=$page&action=ajax&q=$query"
HTMLを入手してください。 曲に関する情報は、
<a class="info" data-aid="SONG_ID"...>SONG_NAME</a>という形式の行にあります。 タブで区切られた
<SONG_ID>と
<SONG_NAME>を
<SONG_ID>します。
sed -n 's/^\s*<a class="info" data-aid="\([^"]*\)"[^>]*>\([^<]*\)<\/a>\s*$/\1\t\2/p'
<SONG_ID>知って
<SONG_ID>ば、ビットレートのリクエストを送信できます。 JSONが戻ってきます。 ビットレート値自体を抽出するために、
cutユーティリティを使用します。 変更のため。
curl -sF "id=$songid" http://z-music.org/bitrate/ | cut -d'"' -f8
曲をダウンロードするためのリンクは次のようになります
m1.z-music.org/t/${songid}_${hsh}/ /
m1.z-music.org/t/${songid}_${hsh}/ /
m1.z-music.org/t/${songid}_${hsh}/これらすべてを1つのスクリプトに結合することが残っています。 彼に「ページごと」に曲を検索させ、ビットレートが事前に指定されたものと一致する曲のみに関する情報を表示させます。
habrahabrについて何かを見つけようとしています。
$ zmusic "Habr" "256 \ | 320"
320
http://m1.z-music.org/t/-3ev4fnuc23h_2b49895762/
Habr-中毒性の歌
-
320
http://m1.z-music.org/t/-3ev4fnubytf_2b49895762/
HaBr-Nedomassaraks
-
320
http://m1.z-music.org/t/-3ev4fnuc1d3_2b49895762/
HaBr-Travel [ハリネズミとペトルッチョのカバー]
-
320
http://m1.z-music.org/t/-3ev4fntmcfl_2b49895762/
HaBr-エレベーターに乗らない(新しいシングル)
-ページ1の終わり-