Trâu bò đi xem nhạc

Tự nhiên lại quan tâm đến âm nhạc Việt Nam. Nhưng vì đã quên mất Perl là gì, sed thì chả nhớ được bao nhiêu nên lại để cơ hội cho trâu bò ra tay…

#! /bin/sh
# Tải thông tin về các album trên vnmusic.com.vn

for AID in `seq 7 280`
do
	# Check for file existence
	if [ -f album_"$AID".html ]
	then
		rm -f album_"$AID".html
	fi
	
	# Download page
	wget http://www.vnmusic.com.vn/music/index.php?aid=album\&id=$AID -O album_"$AID".html
	
	# Get album title
	album=$(grep "title_big_chung" album_"$AID".html | sed -r "s/^.*<h1>Album \"(.*)\"<\/h1>.*$/\1/")

	if [ -n "$album" ]
	then
		# Get song title and id
		grep "onclick=\"playlistAdd(" album_"$AID".html |\
			sed -r "s/^.*onclick=\"playlistAdd\('([0-9]+)', '(.*)'\)\".*$/sid='\1' t='\2'/g" > tmp1.txt
		# Get composer's name and id
		grep -P "^\t{5}\(<a href=\"index.php\?aid=nhacsi\&amp;id=([0-9]+)?\">(.*)</a>\)" album_"$AID".html |\
			sed -r "s/^.*\&amp;id=([0-9]+)?\">(.*)?<\/a>.*$/cid='\1' c='\2'/g" > tmp2.txt
		# Get artist's name and id
		grep -P "^\t{5}<a href=\"index.php\?aid=nghesi\&id=([0-9]+)?\">" album_"$AID".html |\
			sed -r "s/^.*\&id=([0-9]+)?\">(.*)?<\/a>/aid='\1' a='\2'/g" > tmp3.txt

		# Merge informations
		paste tmp1.txt tmp2.txt tmp3.txt > tmp.txt

		# Create XML file
		sed = tmp.txt | sed "N;s/\n/\t/" > album_"$AID".txt
		sed -r "s/^([0-9]+)\t(.*)$/\t<song n='\1' \2 \/>/g" -i album_"$AID".txt
		echo "<album id='$AID' title='$album'>" > album_"$AID".xml
		cat album_"$AID".txt >> album_"$AID".xml
		echo '</album>' >> album_"$AID".xml

		sed 's/\&amp;/\&/g' -i album_"$AID".xml

		# Remove temporary files
		rm -f tmp*.txt album_"$AID".txt

		# Log
		echo "$AID - OK" >> logging.txt

	else
		echo '########## Invalid album ID ##########'
		rm -f album_"$AID".html
		echo "$AID - DIE" >> logging.txt
	fi
done

Còn việc tải từng bài về, chuyển định dạng, sử dụng easyTAG như thế nào thì miễn bàn 😛

Người đăng: Lựợm

Lựợm là một cử nhân ngôn ngữ học thích chụp ảnh tư liệu và biết làm web. Anh kiếm sống chủ yếu bằng nghề chụp ảnh ở Hà Nội.

Bình luận

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.