Bash рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ z-music.org рдкрд░ рд╕рдВрдЧреАрдд рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрдЬ рдХреЗ рдкреНрд░рдпреЛрдЧ рдХрд╛ "рд╢рд┐рдХрд╛рд░" рд╣реЛрдЧрд╛ z-music.org z-music.org рдЗрд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдЧрд╛рдирд╛ рдЦреЛрдЬрдиреЗ, рд╕реБрдирдиреЗ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред
рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП "рд╕рдЬреНрдЬрди рдХреЗ рд╕реЗрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧреАрдд рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ bash рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЬреЛ sed , awk рдФрд░ grep ред рдареАрдХ рд╣реИ, рдкреНрд▓рд╕ рдереЛрдбрд╝рд╛ рдХрд░реНрд▓ рдпрд╛ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рднреВрд▓ рдЬрд╛рдУред

рдереЛрдбрд╝рд╛ z-music.org рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐:
  1. рдЦреЛрдЬ z-music.org/search/ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдХреНрд╡реЗрд░реА рдкрд╛рда q , рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░ (AJAX) action рдФрд░ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо page рдХреА рдкреГрд╖реНрда рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  2. рдЖрдк рдбреЗрдЯрд╛ "id=<SONG_ID>" рд╕рд╛рде z-music.org/bitrate/ рд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдЧреАрдд рдХреА рдмрд┐рдЯрд░реЗрдЯ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ
  3. рдЧреАрдд рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ 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 рдмрдЬрд╛рдп 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}/
рдпрд╣ рд╕рдм рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред рдЙрд╕реЗ "рдкреЗрдЬ рдмрд╛рдп рдкреЗрдЬ" рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░реЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдЬрд┐рдирдХреА рдмрд┐рдЯрд░реЗрдЯ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рджрд┐рдП рдЧрдП рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
 #!/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 

рд╣рдо рд╣рдмреНрдмрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
 $ zmusic "рд╣реИрдмрд░" "256 \" 320 "
 320
 http://m1.z-music.org/t/-3ev4fnuc23h_2b49895762/
 рд╣рдмрд░ - рд╡реНрдпрд╕рдиреА рдЧреАрдд
 -
 320
 http://m1.z-music.org/t/-3ev4fnubytf_2b49895762/
 рд╣рд╛рдмрд░ - рдирд┐рджрд╛рдорд╛рд╕рд╛рд░рдХ
 -
 320
 http://m1.z-music.org/t/-3ev4fnuc1d3_2b49895762/
 HaBr - рдпрд╛рддреНрд░рд╛ [рд╣реЗрдЬрд╣реЙрдЧреНрдЬ рдФрд░ рдкреЗрдЯреНрд░реБрдХрд┐рдпреЛ рдХрд╡рд░]
 -
 320
 http://m1.z-music.org/t/-3ev4fntmcfl_2b49895762/
 HaBr - рд▓рд┐рдлреНрдЯ рдХреА рд╕рд╡рд╛рд░реА рди рдХрд░реЗрдВ (рдирдпрд╛ рд╕рд┐рдВрдЧрд▓)
 - рдкреЗрдЬ 1 рдХрд╛ рдЕрдВрдд -



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


All Articles