今日の実験の「犠牲者」は
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の終わり-