bashを使用してz-music.orgで音楽を検索する

今日の実験の「犠牲者」は z-music.org z-music.org このサイトでは、曲を見つけて、聞いてダウンロードする機会があります。
目標はsedawk 、およびgrepの「紳士のセット」を使用して音楽を検索するbashスクリプトを作成することです。 さて、加えて少しカールしたり、味見したりします。

少しz-music.orgを調べたところ、次のことが明らかになりました。
  1. 検索はz-music.org/search/ます。 GETパラメーターとして、クエリテキストq 、リクエストタイプ(AJAX) actionおよび検索結果のページ番号を渡すことができます
  2. データ"id=<SONG_ID>"とともにPOSTリクエストをz-music.org/bitrate/送信することで、曲のビットレートを知ることができます
  3. 曲をダウンロードするための直接リンクは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 -Fcurl -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つのスクリプトに結合することが残っています。 彼に「ページごと」に曲を検索させ、ビットレートが事前に指定されたものと一致する曲のみに関する情報を表示させます。
 #!/bin/bash case $# in 1) query=$1 bitrate=320 ;; 2) query=$1 bitrate=$2 ;; *) echo -e 'Usage:\n\tzmusic "song name"\nor:\n\tzmusic "song name" 256\nwhere 256 is bitrate' exit ;; esac hsh=$(curl -s http://z-music.org/theme/new/js/lang.js | sed -n 's/^var hsh="\([^"]*\)";$/\1/p') # infinite loop incrementing search page for (( page=1; page>0; page++ )) do result=$( \ curl -s "http://z-music.org/search/?page=$page&action=ajax&q=$query" | \ sed -n 's/^\s*<a class="info" data-aid="\([^"]*\)"[^>]*>\([^<]*\)<\/a>\s*$/\1\t\2/p' | \ awk -v hsh=$hsh -F"\t" ' \ { \ system("curl -sF \"id=" $1 "\" http://z-music.org/bitrate/ | cut -d\"\\\"\" -f8"); \ print "http://m1.z-music.org/t/" $1 "_" hsh "/"; \ print $2 "\n"; \ }') # stop the script if nothing found on this page if [ -z "$result" ]; then exit; fi # output songs with $bitrate only while read -r res; do echo -e $res; done <<< "$result" | grep -A2 "$bitrate" echo -e "-- end of page $page --\n" done 

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の終わり-



Source: https://habr.com/ru/post/J141924/


All Articles