asp实现的7xi音乐网的采集源代码
2022-10-29 12:22:55内容摘要
共5个文件: 2个是配置文件: 配置文件: cfg.txt '---保存检测ID信息的,第一次采集时设为1,从小到大检测 cfg.asp '---ASP的配置信息,内容如下: 复制代码 代码如下:<% ''' '''╔=====
文章正文
共5个文件:
2个是配置文件:
配置文件:
cfg.txt '---保存检测ID信息的,第一次采集时设为1,从小到大检测
cfg.asp '---ASP的配置信息,内容如下:
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 配置文件 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'
dim picc_FolderPath,mp3_FolderPath
dim v_7xijs_url,v_7xipicc_url,v_7xiplay_url,v_7xialbum_url,v_7ximp3_url,cfg_name,cfg_line
dim httpobj,str,str0,str1,str2,str3,str4,str5,str6,str7,str8,str9
dim is_getrm
'---音乐文件是否保存到本地,true-保存;false-不保存
is_getrm = false
'---保存路径
picc_FolderPath = "H:\mp3data\images\"
mp3_FolderPath = "H:\mp3data\rm\"
'---7xi相关页面
v_7xijs_url = "http://7xi.net/player/Js.js"
v_7xipicc_url = "http://ww.7xi.net/picc/"
v_7xiplay_url = "http://7xi.net/playsong/"
v_7xialbum_url = "http://ww.7xi.net/Vo2/"
v_7ximp3_url = "" '---实时读取
'---检测ID
cfg_name = "cfg.txt"
cfg_line = 1
'---读取播放js文件,获得rm文件路径
set httpobj = server.createobject("paopao.http")
str = httpobj.get(v_7xijs_url)
str0 = split(str,"theurl2="&chr(34))
str1 = split(str0(1),chr(34))
v_7ximp3_url = str1(0)
set httpobj = nothing
str = ""
'---数据库连接
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={SQL server};server=localhost;uid=mp3;pwd=mp3;database=mp3db"
'---拼SQL语句execute时需要过滤一下
Function IndbStr(str)
if isNull(str) or str = "" then
IndbStr = str
else
IndbStr = replace(replace(trim(str),"'","''"),"%","")
end if
End Function
'---关闭数据库连接
Function CloseConn()
conn.close
set conn=nothing
End Function
'---取得远程文件并保存到本地
Function GetRemoteFiles(RemotePath, LocalPath, FileName)
Dim strBody
Dim FilePath
On Error Resume Next
'---取得流
strBody = GetBody(RemotePath)
'---取得保存的文件名
if Right(LocalPath, 1) <> "\" then LocalPath = LocalPath & "\"
if not CheckDir(bkfolder) then MakeNewsDir bkfolder
FilePath = LocalPath & GetFileName(RemotePath, FileName)
'---保存文件
if SaveToFile(strBody, FilePath) = true and err.Number = 0 then
GetRemoteFiles = true
else
GetRemoteFiles = false
end if
End Function
'---远程获取内容
Function GetBody(url)
Dim Retrieval
'---建立XMLHTTP对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
'---重组文件名
Function GetFileName(RemotePath, FileName)
Dim arrTmp
Dim strFileExt
arrTmp = Split(RemotePath, ".")
strFileExt = arrTmp(UBound(arrTmp))
GetFileName = FileName & "." & strFileExt
End Function
'---将流内容保存为文件
Function SaveToFile(Stream, FilePath)
Dim objStream
On Error Resume Next
'---建立ADODB.Stream对象,必须要ADO 2.5以上版本
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 '以二进制模式打开
objStream.Open
objstream.write Stream
objstream.SaveToFile FilePath, 2
objstream.Close()
'---关闭对象,释放资源
Set objstream = Nothing
if err.Number <> 0 then
SaveToFile = false
else
SaveToFile = true
end if
End Function
'---读取文本文件
Function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
End function
'---检查绝对路径是否存在
Function CheckFolder(FolderPath)
dim fso1
Set fso1 = CreateObject("Scripting.FileSystemObject")
If fso1.FolderExists(FolderPath) then
'存在
CheckFolder = True
Else
'不存在
CheckFolder = False
End if
Set fso1 = nothing
End Function
'---根据指定名称生成目录
Function MakeNewsDir(foldername)
dim fso1,f
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f = fso1.CreateFolder(foldername)
MakeNewsDir = True
Set fso1 = nothing
End Function
''''''''编码(日文字符)''''''''
Function Jencode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Jencode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Jencode=iStr
for i=0 to 25
Jencode=replace(Jencode,F(i),E(i))
next
End Function
''''''''解码(日文字符)''''''''
Function Juncode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Juncode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Juncode=iStr
for i=0 to 25
Juncode=replace(Juncode,E(i),F(i))'□
next
End Function
%>
1个是手动添加歌手:
addsinger.asp '---手动添加歌手,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 手动添加歌手 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>添加歌手分类_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim sql
dim singer_name,singer_first_name,singer_sort
singer_name = IndbStr(request("singer_name"))
singer_first_name = Ucase(IndbStr(request("singer_first_name")))
singer_sort = request("singer_sort")
response.write "<br>歌手信息<br><br>姓名:"&singer_name&"<br>字母:"&singer_first_name&"<br>性质:"&singer_sort
sql = "insert into d_singer (singer_name,singer_first_name,singer_sort,is_down) values ('"&singer_name&"','"&singer_first_name&"','"&singer_sort&"',0)"
response.write "<br><br>"&sql
conn.execute(sql)
CloseConn()
'---歌手添加完成后转入信息采集重新检测
response.write "<br><br>歌手信息检查添加完成,正在准备检查获取更新...<br>"
response.write "<meta http-equiv=refresh content=""1 ; url=get.asp"">"
%>
</body>
</html>
2个是采集程序:
get.asp '---采集歌手专辑歌曲信息,内容如下
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌手、专辑、歌曲信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌手专辑歌曲信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim t7xiid,url,FolderPath,fso,fout
dim songid(100),songname(100)
dim strsinger,strlang,stralbum,strtime,strcorp,strcontent,strpicc,singerid,albumid
dim rssort,rssinger,rsalbum,rssong,i,m,sql,okimg
t7xiid = FSOlinedit(cfg_name,cfg_line)
url = v_7xialbum_url&"v_"&t7xiid&".htm"
set httpobj=server.createobject("paopao.http")
Err.Clear
'on error resume next
str = ""
str = httpobj.get(url)
if str = "" then
CloseConn()
if t7xiid < 3198 then '---没有检测到时是否递增ID,继续检测
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
response.write "<br>当前ID号不存在,正在检查下一ID号 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
else '---不需要递增ID检测时,转到歌曲信息采集
response.write "<br>歌手专辑信息检查完毕,正在准备检查获取歌曲信息 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
response.end
end if
else
str0 = split(str,"歌 手 : ")
str1 = split(str0(1),"</td>")
strsinger = IndbStr(str1(0))
response.write "<br>歌手:"&strsinger
str0 = split(str,"语 种 : ")
str1 = split(str0(1),"</td>")
strlang = str1(0)
response.write "<br>语种:"&strlang
str0 = split(str,"专 辑 : ")
str1 = split(str0(1),"</a>")
str2 = split(str1(0),""">")
stralbum = IndbStr(str2(1))
response.write "<br>专辑:"&stralbum
str0 = split(str,"时 间 : ")
str1 = split(str0(1),"</td>")
strtime = str1(0)
response.write "<br>时间:"&strtime
str0 = split(str,"公 司 : ")
str1 = split(str0(1),"</td>")
strcorp = str1(0)
response.write "<br>公司:"&strcorp
str0 = split(str,"<tr valign=""top""><td colspan=""2"">")
str1 = split(str0(1),"</td>")
strcontent = replace(replace(IndbStr(str1(0)),"<br>",chr(13))," "," ")
response.write "<br>简介:"&strcontent
str0 = split(str,"<img src=""../picc/")
str1 = split(str0(1),"""")
strpicc = str1(0)
response.write "<br>图片:"&strpicc
response.write "<br><img src="&v_7xipicc_url&strpicc&" border=0>"
set rssinger = conn.execute("select * from d_singer where singer_name='"&strsinger&"'")
'---歌手信息不存在时需要手动添加歌手
if rssinger.eof then
response.write "<br>select * from d_singer where singer_name='"&strsinger&"'"
response.write "<br><br>歌手不存在,需要手动操作添加。<br><br>请按以下要求添加歌手:<br><br>"
%>
<form action="addsinger.asp">
<input type="text" size="20" name="singer_name" value="<%=strsinger%>">
<input type="text" size="6" name="singer_first_name" value="姓" maxlength="3">
<select name="singer_sort" size="1"><%'%>
<%
set rssort = conn.execute("select * from s_sort ")
do while not rssort.eof and i < 10
%>
<option value="<%=rssort("id")%>"><%=rssort("sort_name")%></option><%'%>
<%
rssort.movenext
loop
rssort.close
set rssort = nothing
%></select>
<input type="submit" value="添加">
</form>
<%
CloseConn()
response.end
else '---歌手信息已存在,检查专辑信息是否需要入库
singerid = rssinger("id")
conn.execute("update d_singer set is_down=0 where id="&singerid)
response.write "<br><br>歌手信息正确,正在检查获取专辑信息 ...<br>"
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
if rsalbum.eof then
str1 = split(strpicc,".")
str2 = str1(0)
sql="insert into d_album (album_singer,file_img,album_name,album_lang,album_corp,album_time,album_intro,add_time,is_down,album_7xi) values ('"&singerid&"','"&strpicc&"','"&stralbum&"','"&strlang&"','"&strcorp&"','"&strtime&"','"&strcontent&"','"&now&"',0,"&t7xiid&")"
conn.execute(sql)
'---采集保存专辑缩略图
okimg = GetRemoteFiles(v_7xipicc_url&strpicc,picc_FolderPath,str2)
response.write "<br>专辑信息检查添加完成,正在检查获取歌曲信息 ..."&"<br>SQL语句:"&sql
else
response.write "<br><br>专辑信息正确,正在准备检查获取歌曲信息 ..."
end if
rsalbum.close
set rsalbum = nothing
end if
rssinger.close
set rssinger = nothing
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
albumid = rsalbum("id")
rsalbum.close
set rsalbum = nothing
response.write "<br><br>专辑歌曲信息<br>"
'----歌曲ID
i = 1
str0 = split(str,"<input type="&chr(34)&"checkbox"&chr(34)&" name="&chr(34)&"checked"&chr(34)&" value="&chr(34))
response.write "<br>歌曲ID:"
do while i <= Ubound(str0)
str1 = split(str0(i),chr(34))
songid(i-1) = str1(0)
response.write songid(i-1)&" - "
i = i + 1
loop
response.write "共"&i&"首。"
'---歌曲名称
m = 1
str0 = split(str,"<a href=""../IVR.asp?id=")
response.write "<br><br>歌曲:"
do while m <= Ubound(str0)
str1 = split(str0(m),""" target=""_blank""><img src=""../images/mmsring1.gif"" alt=""免费点歌")
songname(m-1) = Jencode(replace(str1(0),"'","''"))
response.write Juncode(songname(m-1))&" - "
m = m + 1
loop
response.write "共"&i&"首。"
'---歌曲ID数目和歌曲名数目不一致时需要检查是否有误
if i <> m then
response.write "<br><br><font color=red><b>错误:</b>歌曲ID数目与歌曲名数目不一致,请检查目标页面:"& url &"</font>"
response.end
end if
'---检查歌曲是否需要入库
do while i > 1
set rssong = conn.execute("select * from d_mp3 where mp3_album="&albumid&" and mp3_singer="&singerid&" and mp3_name='"&songname(i-2)&"'")
if rssong.eof then
sql = "insert into d_mp3 (mp3_7xi,mp3_singer,mp3_album,mp3_name) values ('"&songid(i-2)&"','"&singerid&"','"&albumid&"','"&songname(i-2)&"')"
conn.execute(sql)
response.write "<br><font color=red>添加:"&songname(i-2)&"</font>"
response.write sql
else
response.write "<br>跳过:"&songname(i-2)
end if
rssong.close
set rssong = nothing
i = i-1
loop
CloseConn()
'---记录下一检测ID号
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
'---继续检测下一ID
response.write "<br>正在检测下一ID信息 ..."
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
end if
%>
</body>
</html>
getrm.asp '---采集RM文件更新歌曲信息,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌曲文件、歌词等信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌曲文件歌词等信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim getcount,rssong,id,t7xiid,url,filerm,tmpurl,i,tmpfolder,okrm,singer,song,tmp_url,lyric,rs
'---每次处理歌曲数量
getcount = 5
set rssong = conn.execute("select top " & getcount & " a.*,b.singer_name from d_mp3 a,d_singer b where a.mp3_singer=b.id and a.file_rm is null order by a.id desc")
if rssong.eof then '---歌曲信息处理完成
rssong.close
set rssong = nothing
CloseConn()
response.write "<br>歌曲文件信息检查采集完成!"
response.write "<br><br>采集完了,可以做垃圾站了!"
response.end
else
do while not rssong.eof
id = rssong("id")
t7xiid = rssong("mp3_7xi")
singer = replace(rssong("singer_name")," ","%20")
song = replace(rssong("mp3_name")," ","%20")
response.write "<br><br>歌曲名 - "& singer & "-" &song
'---目标页面
url = v_7xiplay_url&t7xiid&".htm"
set httpobj = server.createobject("paopao.http")
Err.Clear
on error resume next
response.write "<br>"&url
str = httpobj.get(url)
if Err = 0 then '---读取目标页面正常时的处理
'----歌曲文件名及文件夹
str0 = split(str,"<param name='src' value='"&chr(34)&"+s_list+"&chr(34))
str1 = split(str0(1),"'>")
filerm = str1(0)
response.write "<br>文件名 - "& filerm
tmpurl = v_7ximp3_url & filerm
response.write "<br>目标源 - "& tmpurl
'---需要保存音乐文件到本地时,采集保存音乐文件
if is_getrm then
str0 = split(filerm,"/")
i = 0
do while i < Ubound(str0)
tmpfolder = mp3_FolderPath & str0(i)
if not CheckFolder(tmpfolder) then MakeNewsDir tmpfolder
i = i + 1
loop
response.write "<br>保存为 - "& tmpfolder & "\" & str0(Ubound(str0))
okrm = GetRemoteFiles(tmpurl,tmpfolder,replace(str0(Ubound(str0)),".rm",""))
else
response.write "<br><font color=red>请注意 - </font>RM文件配置为不保存!!!!!!!!!!"
end if
'---歌词采集
tmp_url = "http://www.7xi.net/showword.asp?id=" & t7xiid
response.write "<br>"&tmp_url
set httpobj = server.createobject("paopao.http")
str0 = httpobj.get(tmp_url)
Err.Clear
on error resume next
str1 = split(str0,"<td width=""92%"">"&chr(13))
str2 = split(str1(1)," </td>")
lyric = str2(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(replace(lyric,"<p>",""),"</p>","")
lyric = IndbStr(trim(lyric))
if Instr(lyric,"mp3.baidu.com") then lyric = "暂时还没歌词"
if len(lyric) < 20 or Err <> 0 then
lyric = "暂时还没歌词"
response.write "<br>7xi自带歌词不完整,将采集baidu歌词"
end if
if lyric = "暂时还没歌词" then
Err.Clear
tmp_url = "http://mp3.baidu.com/m?f=ms&rn=10&tn=baidump3lyric&ct=150994944&word="&singer&"+"&song
response.write "<br>"&tmp_url
str0 = httpobj.get(tmp_url)
str1 = split(str0,"<B><font style=color:#e10900>"&song&"</font></B>")
if Ubound(str1) >= 1 then
str2 = split(str0,"<div style=""padding-left:10px;line-height:20px;padding-top:1px"">")
str3 = split(str2(1),"</div>")
lyric = str3(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(lyric,"<font style=color:#e10900>","")
lyric = replace(lyric,"</font>","")
else
lyric = "暂时还没歌词"
end if
end if
response.write "<br>歌词 - "&lyric
'---将采集到的信息更新到数据库
if is_getrm then
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='1' where id="&id)
else
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='0' where id="&id)
end if
else '---读取目标页面出错时的处理
conn.execute("update d_mp3_t set file_rm='nourl',is_down='1' where id="&id)
response.write "<br><br><font color=red><b>错误:</b>获取目标页面错误,请检查:"& url &"</font>"
response.end
end if
rssong.movenext
loop
rssong.close
set rssong = nothing
CloseConn()
'---继续检测采集下一批歌曲信息
response.write "<br>正在检测下一批歌曲信息 ...<br><br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
end if
%>
</body>
</html>
数据库表的SQL脚本:
数据库表
程序代码
s_sort ----歌手分类表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s_sort]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[s_sort]
GO
Create TABLE [dbo].[s_sort] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[sort_name] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[s_sort] WITH NOCHECK ADD
CONSTRAINT [PK_s_sort] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_singer ----歌手信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_singer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_singer]
GO
Create TABLE [dbo].[d_singer] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[singer_name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_first_name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_sort] [int] NULL ,
[mp3_num] [int] NULL ,
[is_putup] [bit] NULL ,
[view_count] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_singer] WITH NOCHECK ADD
CONSTRAINT [PK_d_singer] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_album ----专辑信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_album]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_album]
GO
Create TABLE [dbo].[d_album] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[album_singer] [int] NULL ,
[file_img] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_name] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_lang] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_corp] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_time] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_intro] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
[is_singer_album] [bit] NULL ,
[view_count] [int] NULL ,
[is_putup] [bit] NULL ,
[add_time] [datetime] NULL ,
[album_7xi] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Alter TABLE [dbo].[d_album] WITH NOCHECK ADD
CONSTRAINT [PK_d_album] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_mp3 ----歌曲信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_mp3]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_mp3]
GO
Create TABLE [dbo].[d_mp3] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[mp3_name] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[mp3_album] [int] NULL ,
[mp3_singer] [int] NULL ,
[file_rm] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[file_size] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[is_putup] [bit] NULL ,
[mp3_lyric] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL ,
[view_count] [int] NULL ,
[down_count] [int] NULL ,
[is_my] [bit] NULL ,
[mp3_7xi] [int] NULL ,
[is_down] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_mp3] WITH NOCHECK ADD
CONSTRAINT [PK_d_mp3] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
共5个文件:
2个是配置文件:
配置文件:
cfg.txt '---保存检测ID信息的,第一次采集时设为1,从小到大检测
cfg.asp '---ASP的配置信息,内容如下:
复制代码 代码如下:
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 配置文件 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'
dim picc_FolderPath,mp3_FolderPath
dim v_7xijs_url,v_7xipicc_url,v_7xiplay_url,v_7xialbum_url,v_7ximp3_url,cfg_name,cfg_line
dim httpobj,str,str0,str1,str2,str3,str4,str5,str6,str7,str8,str9
dim is_getrm
'---音乐文件是否保存到本地,true-保存;false-不保存
is_getrm = false
'---保存路径
picc_FolderPath = "H:\mp3data\images\"
mp3_FolderPath = "H:\mp3data\rm\"
'---7xi相关页面
v_7xijs_url = "http://7xi.net/player/Js.js"
v_7xipicc_url = "http://ww.7xi.net/picc/"
v_7xiplay_url = "http://7xi.net/playsong/"
v_7xialbum_url = "http://ww.7xi.net/Vo2/"
v_7ximp3_url = "" '---实时读取
'---检测ID
cfg_name = "cfg.txt"
cfg_line = 1
'---读取播放js文件,获得rm文件路径
set httpobj = server.createobject("paopao.http")
str = httpobj.get(v_7xijs_url)
str0 = split(str,"theurl2="&chr(34))
str1 = split(str0(1),chr(34))
v_7ximp3_url = str1(0)
set httpobj = nothing
str = ""
'---数据库连接
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={SQL server};server=localhost;uid=mp3;pwd=mp3;database=mp3db"
'---拼SQL语句execute时需要过滤一下
Function IndbStr(str)
if isNull(str) or str = "" then
IndbStr = str
else
IndbStr = replace(replace(trim(str),"'","''"),"%","")
end if
End Function
'---关闭数据库连接
Function CloseConn()
conn.close
set conn=nothing
End Function
'---取得远程文件并保存到本地
Function GetRemoteFiles(RemotePath, LocalPath, FileName)
Dim strBody
Dim FilePath
On Error Resume Next
'---取得流
strBody = GetBody(RemotePath)
'---取得保存的文件名
if Right(LocalPath, 1) <> "\" then LocalPath = LocalPath & "\"
if not CheckDir(bkfolder) then MakeNewsDir bkfolder
FilePath = LocalPath & GetFileName(RemotePath, FileName)
'---保存文件
if SaveToFile(strBody, FilePath) = true and err.Number = 0 then
GetRemoteFiles = true
else
GetRemoteFiles = false
end if
End Function
'---远程获取内容
Function GetBody(url)
Dim Retrieval
'---建立XMLHTTP对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
'---重组文件名
Function GetFileName(RemotePath, FileName)
Dim arrTmp
Dim strFileExt
arrTmp = Split(RemotePath, ".")
strFileExt = arrTmp(UBound(arrTmp))
GetFileName = FileName & "." & strFileExt
End Function
'---将流内容保存为文件
Function SaveToFile(Stream, FilePath)
Dim objStream
On Error Resume Next
'---建立ADODB.Stream对象,必须要ADO 2.5以上版本
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 '以二进制模式打开
objStream.Open
objstream.write Stream
objstream.SaveToFile FilePath, 2
objstream.Close()
'---关闭对象,释放资源
Set objstream = Nothing
if err.Number <> 0 then
SaveToFile = false
else
SaveToFile = true
end if
End Function
'---读取文本文件
Function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
End function
'---检查绝对路径是否存在
Function CheckFolder(FolderPath)
dim fso1
Set fso1 = CreateObject("Scripting.FileSystemObject")
If fso1.FolderExists(FolderPath) then
'存在
CheckFolder = True
Else
'不存在
CheckFolder = False
End if
Set fso1 = nothing
End Function
'---根据指定名称生成目录
Function MakeNewsDir(foldername)
dim fso1,f
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f = fso1.CreateFolder(foldername)
MakeNewsDir = True
Set fso1 = nothing
End Function
''''''''编码(日文字符)''''''''
Function Jencode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Jencode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Jencode=iStr
for i=0 to 25
Jencode=replace(Jencode,F(i),E(i))
next
End Function
''''''''解码(日文字符)''''''''
Function Juncode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Juncode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Juncode=iStr
for i=0 to 25
Juncode=replace(Juncode,E(i),F(i))'□
next
End Function
%>
1个是手动添加歌手:
addsinger.asp '---手动添加歌手,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 手动添加歌手 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>添加歌手分类_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim sql
dim singer_name,singer_first_name,singer_sort
singer_name = IndbStr(request("singer_name"))
singer_first_name = Ucase(IndbStr(request("singer_first_name")))
singer_sort = request("singer_sort")
response.write "<br>歌手信息<br><br>姓名:"&singer_name&"<br>字母:"&singer_first_name&"<br>性质:"&singer_sort
sql = "insert into d_singer (singer_name,singer_first_name,singer_sort,is_down) values ('"&singer_name&"','"&singer_first_name&"','"&singer_sort&"',0)"
response.write "<br><br>"&sql
conn.execute(sql)
CloseConn()
'---歌手添加完成后转入信息采集重新检测
response.write "<br><br>歌手信息检查添加完成,正在准备检查获取更新...<br>"
response.write "<meta http-equiv=refresh content=""1 ; url=get.asp"">"
%>
</body>
</html>
2个是采集程序:
get.asp '---采集歌手专辑歌曲信息,内容如下
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌手、专辑、歌曲信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌手专辑歌曲信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim t7xiid,url,FolderPath,fso,fout
dim songid(100),songname(100)
dim strsinger,strlang,stralbum,strtime,strcorp,strcontent,strpicc,singerid,albumid
dim rssort,rssinger,rsalbum,rssong,i,m,sql,okimg
t7xiid = FSOlinedit(cfg_name,cfg_line)
url = v_7xialbum_url&"v_"&t7xiid&".htm"
set httpobj=server.createobject("paopao.http")
Err.Clear
'on error resume next
str = ""
str = httpobj.get(url)
if str = "" then
CloseConn()
if t7xiid < 3198 then '---没有检测到时是否递增ID,继续检测
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
response.write "<br>当前ID号不存在,正在检查下一ID号 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
else '---不需要递增ID检测时,转到歌曲信息采集
response.write "<br>歌手专辑信息检查完毕,正在准备检查获取歌曲信息 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
response.end
end if
else
str0 = split(str,"歌 手 : ")
str1 = split(str0(1),"</td>")
strsinger = IndbStr(str1(0))
response.write "<br>歌手:"&strsinger
str0 = split(str,"语 种 : ")
str1 = split(str0(1),"</td>")
strlang = str1(0)
response.write "<br>语种:"&strlang
str0 = split(str,"专 辑 : ")
str1 = split(str0(1),"</a>")
str2 = split(str1(0),""">")
stralbum = IndbStr(str2(1))
response.write "<br>专辑:"&stralbum
str0 = split(str,"时 间 : ")
str1 = split(str0(1),"</td>")
strtime = str1(0)
response.write "<br>时间:"&strtime
str0 = split(str,"公 司 : ")
str1 = split(str0(1),"</td>")
strcorp = str1(0)
response.write "<br>公司:"&strcorp
str0 = split(str,"<tr valign=""top""><td colspan=""2"">")
str1 = split(str0(1),"</td>")
strcontent = replace(replace(IndbStr(str1(0)),"<br>",chr(13))," "," ")
response.write "<br>简介:"&strcontent
str0 = split(str,"<img src=""../picc/")
str1 = split(str0(1),"""")
strpicc = str1(0)
response.write "<br>图片:"&strpicc
response.write "<br><img src="&v_7xipicc_url&strpicc&" border=0>"
set rssinger = conn.execute("select * from d_singer where singer_name='"&strsinger&"'")
'---歌手信息不存在时需要手动添加歌手
if rssinger.eof then
response.write "<br>select * from d_singer where singer_name='"&strsinger&"'"
response.write "<br><br>歌手不存在,需要手动操作添加。<br><br>请按以下要求添加歌手:<br><br>"
%>
<form action="addsinger.asp">
<input type="text" size="20" name="singer_name" value="<%=strsinger%>">
<input type="text" size="6" name="singer_first_name" value="姓" maxlength="3">
<select name="singer_sort" size="1"><%'%>
<%
set rssort = conn.execute("select * from s_sort ")
do while not rssort.eof and i < 10
%>
<option value="<%=rssort("id")%>"><%=rssort("sort_name")%></option><%'%>
<%
rssort.movenext
loop
rssort.close
set rssort = nothing
%></select>
<input type="submit" value="添加">
</form>
<%
CloseConn()
response.end
else '---歌手信息已存在,检查专辑信息是否需要入库
singerid = rssinger("id")
conn.execute("update d_singer set is_down=0 where id="&singerid)
response.write "<br><br>歌手信息正确,正在检查获取专辑信息 ...<br>"
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
if rsalbum.eof then
str1 = split(strpicc,".")
str2 = str1(0)
sql="insert into d_album (album_singer,file_img,album_name,album_lang,album_corp,album_time,album_intro,add_time,is_down,album_7xi) values ('"&singerid&"','"&strpicc&"','"&stralbum&"','"&strlang&"','"&strcorp&"','"&strtime&"','"&strcontent&"','"&now&"',0,"&t7xiid&")"
conn.execute(sql)
'---采集保存专辑缩略图
okimg = GetRemoteFiles(v_7xipicc_url&strpicc,picc_FolderPath,str2)
response.write "<br>专辑信息检查添加完成,正在检查获取歌曲信息 ..."&"<br>SQL语句:"&sql
else
response.write "<br><br>专辑信息正确,正在准备检查获取歌曲信息 ..."
end if
rsalbum.close
set rsalbum = nothing
end if
rssinger.close
set rssinger = nothing
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
albumid = rsalbum("id")
rsalbum.close
set rsalbum = nothing
response.write "<br><br>专辑歌曲信息<br>"
'----歌曲ID
i = 1
str0 = split(str,"<input type="&chr(34)&"checkbox"&chr(34)&" name="&chr(34)&"checked"&chr(34)&" value="&chr(34))
response.write "<br>歌曲ID:"
do while i <= Ubound(str0)
str1 = split(str0(i),chr(34))
songid(i-1) = str1(0)
response.write songid(i-1)&" - "
i = i + 1
loop
response.write "共"&i&"首。"
'---歌曲名称
m = 1
str0 = split(str,"<a href=""../IVR.asp?id=")
response.write "<br><br>歌曲:"
do while m <= Ubound(str0)
str1 = split(str0(m),""" target=""_blank""><img src=""../images/mmsring1.gif"" alt=""免费点歌")
songname(m-1) = Jencode(replace(str1(0),"'","''"))
response.write Juncode(songname(m-1))&" - "
m = m + 1
loop
response.write "共"&i&"首。"
'---歌曲ID数目和歌曲名数目不一致时需要检查是否有误
if i <> m then
response.write "<br><br><font color=red><b>错误:</b>歌曲ID数目与歌曲名数目不一致,请检查目标页面:"& url &"</font>"
response.end
end if
'---检查歌曲是否需要入库
do while i > 1
set rssong = conn.execute("select * from d_mp3 where mp3_album="&albumid&" and mp3_singer="&singerid&" and mp3_name='"&songname(i-2)&"'")
if rssong.eof then
sql = "insert into d_mp3 (mp3_7xi,mp3_singer,mp3_album,mp3_name) values ('"&songid(i-2)&"','"&singerid&"','"&albumid&"','"&songname(i-2)&"')"
conn.execute(sql)
response.write "<br><font color=red>添加:"&songname(i-2)&"</font>"
response.write sql
else
response.write "<br>跳过:"&songname(i-2)
end if
rssong.close
set rssong = nothing
i = i-1
loop
CloseConn()
'---记录下一检测ID号
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
'---继续检测下一ID
response.write "<br>正在检测下一ID信息 ..."
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
end if
%>
</body>
</html>
getrm.asp '---采集RM文件更新歌曲信息,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌曲文件、歌词等信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌曲文件歌词等信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim getcount,rssong,id,t7xiid,url,filerm,tmpurl,i,tmpfolder,okrm,singer,song,tmp_url,lyric,rs
'---每次处理歌曲数量
getcount = 5
set rssong = conn.execute("select top " & getcount & " a.*,b.singer_name from d_mp3 a,d_singer b where a.mp3_singer=b.id and a.file_rm is null order by a.id desc")
if rssong.eof then '---歌曲信息处理完成
rssong.close
set rssong = nothing
CloseConn()
response.write "<br>歌曲文件信息检查采集完成!"
response.write "<br><br>采集完了,可以做垃圾站了!"
response.end
else
do while not rssong.eof
id = rssong("id")
t7xiid = rssong("mp3_7xi")
singer = replace(rssong("singer_name")," ","%20")
song = replace(rssong("mp3_name")," ","%20")
response.write "<br><br>歌曲名 - "& singer & "-" &song
'---目标页面
url = v_7xiplay_url&t7xiid&".htm"
set httpobj = server.createobject("paopao.http")
Err.Clear
on error resume next
response.write "<br>"&url
str = httpobj.get(url)
if Err = 0 then '---读取目标页面正常时的处理
'----歌曲文件名及文件夹
str0 = split(str,"<param name='src' value='"&chr(34)&"+s_list+"&chr(34))
str1 = split(str0(1),"'>")
filerm = str1(0)
response.write "<br>文件名 - "& filerm
tmpurl = v_7ximp3_url & filerm
response.write "<br>目标源 - "& tmpurl
'---需要保存音乐文件到本地时,采集保存音乐文件
if is_getrm then
str0 = split(filerm,"/")
i = 0
do while i < Ubound(str0)
tmpfolder = mp3_FolderPath & str0(i)
if not CheckFolder(tmpfolder) then MakeNewsDir tmpfolder
i = i + 1
loop
response.write "<br>保存为 - "& tmpfolder & "\" & str0(Ubound(str0))
okrm = GetRemoteFiles(tmpurl,tmpfolder,replace(str0(Ubound(str0)),".rm",""))
else
response.write "<br><font color=red>请注意 - </font>RM文件配置为不保存!!!!!!!!!!"
end if
'---歌词采集
tmp_url = "http://www.7xi.net/showword.asp?id=" & t7xiid
response.write "<br>"&tmp_url
set httpobj = server.createobject("paopao.http")
str0 = httpobj.get(tmp_url)
Err.Clear
on error resume next
str1 = split(str0,"<td width=""92%"">"&chr(13))
str2 = split(str1(1)," </td>")
lyric = str2(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(replace(lyric,"<p>",""),"</p>","")
lyric = IndbStr(trim(lyric))
if Instr(lyric,"mp3.baidu.com") then lyric = "暂时还没歌词"
if len(lyric) < 20 or Err <> 0 then
lyric = "暂时还没歌词"
response.write "<br>7xi自带歌词不完整,将采集baidu歌词"
end if
if lyric = "暂时还没歌词" then
Err.Clear
tmp_url = "http://mp3.baidu.com/m?f=ms&rn=10&tn=baidump3lyric&ct=150994944&word="&singer&"+"&song
response.write "<br>"&tmp_url
str0 = httpobj.get(tmp_url)
str1 = split(str0,"<B><font style=color:#e10900>"&song&"</font></B>")
if Ubound(str1) >= 1 then
str2 = split(str0,"<div style=""padding-left:10px;line-height:20px;padding-top:1px"">")
str3 = split(str2(1),"</div>")
lyric = str3(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(lyric,"<font style=color:#e10900>","")
lyric = replace(lyric,"</font>","")
else
lyric = "暂时还没歌词"
end if
end if
response.write "<br>歌词 - "&lyric
'---将采集到的信息更新到数据库
if is_getrm then
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='1' where id="&id)
else
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='0' where id="&id)
end if
else '---读取目标页面出错时的处理
conn.execute("update d_mp3_t set file_rm='nourl',is_down='1' where id="&id)
response.write "<br><br><font color=red><b>错误:</b>获取目标页面错误,请检查:"& url &"</font>"
response.end
end if
rssong.movenext
loop
rssong.close
set rssong = nothing
CloseConn()
'---继续检测采集下一批歌曲信息
response.write "<br>正在检测下一批歌曲信息 ...<br><br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
end if
%>
</body>
</html>
数据库表的SQL脚本:
数据库表
程序代码
s_sort ----歌手分类表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s_sort]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[s_sort]
GO
Create TABLE [dbo].[s_sort] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[sort_name] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[s_sort] WITH NOCHECK ADD
CONSTRAINT [PK_s_sort] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_singer ----歌手信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_singer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_singer]
GO
Create TABLE [dbo].[d_singer] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[singer_name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_first_name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_sort] [int] NULL ,
[mp3_num] [int] NULL ,
[is_putup] [bit] NULL ,
[view_count] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_singer] WITH NOCHECK ADD
CONSTRAINT [PK_d_singer] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_album ----专辑信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_album]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_album]
GO
Create TABLE [dbo].[d_album] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[album_singer] [int] NULL ,
[file_img] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_name] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_lang] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_corp] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_time] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_intro] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
[is_singer_album] [bit] NULL ,
[view_count] [int] NULL ,
[is_putup] [bit] NULL ,
[add_time] [datetime] NULL ,
[album_7xi] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Alter TABLE [dbo].[d_album] WITH NOCHECK ADD
CONSTRAINT [PK_d_album] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_mp3 ----歌曲信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_mp3]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_mp3]
GO
Create TABLE [dbo].[d_mp3] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[mp3_name] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[mp3_album] [int] NULL ,
[mp3_singer] [int] NULL ,
[file_rm] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[file_size] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[is_putup] [bit] NULL ,
[mp3_lyric] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL ,
[view_count] [int] NULL ,
[down_count] [int] NULL ,
[is_my] [bit] NULL ,
[mp3_7xi] [int] NULL ,
[is_down] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_mp3] WITH NOCHECK ADD
CONSTRAINT [PK_d_mp3] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
2个是配置文件:
配置文件:
cfg.txt '---保存检测ID信息的,第一次采集时设为1,从小到大检测
cfg.asp '---ASP的配置信息,内容如下:
复制代码 代码如下:
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 配置文件 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'
dim picc_FolderPath,mp3_FolderPath
dim v_7xijs_url,v_7xipicc_url,v_7xiplay_url,v_7xialbum_url,v_7ximp3_url,cfg_name,cfg_line
dim httpobj,str,str0,str1,str2,str3,str4,str5,str6,str7,str8,str9
dim is_getrm
'---音乐文件是否保存到本地,true-保存;false-不保存
is_getrm = false
'---保存路径
picc_FolderPath = "H:\mp3data\images\"
mp3_FolderPath = "H:\mp3data\rm\"
'---7xi相关页面
v_7xijs_url = "http://7xi.net/player/Js.js"
v_7xipicc_url = "http://ww.7xi.net/picc/"
v_7xiplay_url = "http://7xi.net/playsong/"
v_7xialbum_url = "http://ww.7xi.net/Vo2/"
v_7ximp3_url = "" '---实时读取
'---检测ID
cfg_name = "cfg.txt"
cfg_line = 1
'---读取播放js文件,获得rm文件路径
set httpobj = server.createobject("paopao.http")
str = httpobj.get(v_7xijs_url)
str0 = split(str,"theurl2="&chr(34))
str1 = split(str0(1),chr(34))
v_7ximp3_url = str1(0)
set httpobj = nothing
str = ""
'---数据库连接
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={SQL server};server=localhost;uid=mp3;pwd=mp3;database=mp3db"
'---拼SQL语句execute时需要过滤一下
Function IndbStr(str)
if isNull(str) or str = "" then
IndbStr = str
else
IndbStr = replace(replace(trim(str),"'","''"),"%","")
end if
End Function
'---关闭数据库连接
Function CloseConn()
conn.close
set conn=nothing
End Function
'---取得远程文件并保存到本地
Function GetRemoteFiles(RemotePath, LocalPath, FileName)
Dim strBody
Dim FilePath
On Error Resume Next
'---取得流
strBody = GetBody(RemotePath)
'---取得保存的文件名
if Right(LocalPath, 1) <> "\" then LocalPath = LocalPath & "\"
if not CheckDir(bkfolder) then MakeNewsDir bkfolder
FilePath = LocalPath & GetFileName(RemotePath, FileName)
'---保存文件
if SaveToFile(strBody, FilePath) = true and err.Number = 0 then
GetRemoteFiles = true
else
GetRemoteFiles = false
end if
End Function
'---远程获取内容
Function GetBody(url)
Dim Retrieval
'---建立XMLHTTP对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
'---重组文件名
Function GetFileName(RemotePath, FileName)
Dim arrTmp
Dim strFileExt
arrTmp = Split(RemotePath, ".")
strFileExt = arrTmp(UBound(arrTmp))
GetFileName = FileName & "." & strFileExt
End Function
'---将流内容保存为文件
Function SaveToFile(Stream, FilePath)
Dim objStream
On Error Resume Next
'---建立ADODB.Stream对象,必须要ADO 2.5以上版本
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 '以二进制模式打开
objStream.Open
objstream.write Stream
objstream.SaveToFile FilePath, 2
objstream.Close()
'---关闭对象,释放资源
Set objstream = Nothing
if err.Number <> 0 then
SaveToFile = false
else
SaveToFile = true
end if
End Function
'---读取文本文件
Function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
End function
'---检查绝对路径是否存在
Function CheckFolder(FolderPath)
dim fso1
Set fso1 = CreateObject("Scripting.FileSystemObject")
If fso1.FolderExists(FolderPath) then
'存在
CheckFolder = True
Else
'不存在
CheckFolder = False
End if
Set fso1 = nothing
End Function
'---根据指定名称生成目录
Function MakeNewsDir(foldername)
dim fso1,f
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f = fso1.CreateFolder(foldername)
MakeNewsDir = True
Set fso1 = nothing
End Function
''''''''编码(日文字符)''''''''
Function Jencode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Jencode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Jencode=iStr
for i=0 to 25
Jencode=replace(Jencode,F(i),E(i))
next
End Function
''''''''解码(日文字符)''''''''
Function Juncode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Juncode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Juncode=iStr
for i=0 to 25
Juncode=replace(Juncode,E(i),F(i))'□
next
End Function
%>
1个是手动添加歌手:
addsinger.asp '---手动添加歌手,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 手动添加歌手 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>添加歌手分类_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim sql
dim singer_name,singer_first_name,singer_sort
singer_name = IndbStr(request("singer_name"))
singer_first_name = Ucase(IndbStr(request("singer_first_name")))
singer_sort = request("singer_sort")
response.write "<br>歌手信息<br><br>姓名:"&singer_name&"<br>字母:"&singer_first_name&"<br>性质:"&singer_sort
sql = "insert into d_singer (singer_name,singer_first_name,singer_sort,is_down) values ('"&singer_name&"','"&singer_first_name&"','"&singer_sort&"',0)"
response.write "<br><br>"&sql
conn.execute(sql)
CloseConn()
'---歌手添加完成后转入信息采集重新检测
response.write "<br><br>歌手信息检查添加完成,正在准备检查获取更新...<br>"
response.write "<meta http-equiv=refresh content=""1 ; url=get.asp"">"
%>
</body>
</html>
2个是采集程序:
get.asp '---采集歌手专辑歌曲信息,内容如下
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌手、专辑、歌曲信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌手专辑歌曲信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim t7xiid,url,FolderPath,fso,fout
dim songid(100),songname(100)
dim strsinger,strlang,stralbum,strtime,strcorp,strcontent,strpicc,singerid,albumid
dim rssort,rssinger,rsalbum,rssong,i,m,sql,okimg
t7xiid = FSOlinedit(cfg_name,cfg_line)
url = v_7xialbum_url&"v_"&t7xiid&".htm"
set httpobj=server.createobject("paopao.http")
Err.Clear
'on error resume next
str = ""
str = httpobj.get(url)
if str = "" then
CloseConn()
if t7xiid < 3198 then '---没有检测到时是否递增ID,继续检测
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
response.write "<br>当前ID号不存在,正在检查下一ID号 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
else '---不需要递增ID检测时,转到歌曲信息采集
response.write "<br>歌手专辑信息检查完毕,正在准备检查获取歌曲信息 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
response.end
end if
else
str0 = split(str,"歌 手 : ")
str1 = split(str0(1),"</td>")
strsinger = IndbStr(str1(0))
response.write "<br>歌手:"&strsinger
str0 = split(str,"语 种 : ")
str1 = split(str0(1),"</td>")
strlang = str1(0)
response.write "<br>语种:"&strlang
str0 = split(str,"专 辑 : ")
str1 = split(str0(1),"</a>")
str2 = split(str1(0),""">")
stralbum = IndbStr(str2(1))
response.write "<br>专辑:"&stralbum
str0 = split(str,"时 间 : ")
str1 = split(str0(1),"</td>")
strtime = str1(0)
response.write "<br>时间:"&strtime
str0 = split(str,"公 司 : ")
str1 = split(str0(1),"</td>")
strcorp = str1(0)
response.write "<br>公司:"&strcorp
str0 = split(str,"<tr valign=""top""><td colspan=""2"">")
str1 = split(str0(1),"</td>")
strcontent = replace(replace(IndbStr(str1(0)),"<br>",chr(13))," "," ")
response.write "<br>简介:"&strcontent
str0 = split(str,"<img src=""../picc/")
str1 = split(str0(1),"""")
strpicc = str1(0)
response.write "<br>图片:"&strpicc
response.write "<br><img src="&v_7xipicc_url&strpicc&" border=0>"
set rssinger = conn.execute("select * from d_singer where singer_name='"&strsinger&"'")
'---歌手信息不存在时需要手动添加歌手
if rssinger.eof then
response.write "<br>select * from d_singer where singer_name='"&strsinger&"'"
response.write "<br><br>歌手不存在,需要手动操作添加。<br><br>请按以下要求添加歌手:<br><br>"
%>
<form action="addsinger.asp">
<input type="text" size="20" name="singer_name" value="<%=strsinger%>">
<input type="text" size="6" name="singer_first_name" value="姓" maxlength="3">
<select name="singer_sort" size="1"><%'%>
<%
set rssort = conn.execute("select * from s_sort ")
do while not rssort.eof and i < 10
%>
<option value="<%=rssort("id")%>"><%=rssort("sort_name")%></option><%'%>
<%
rssort.movenext
loop
rssort.close
set rssort = nothing
%></select>
<input type="submit" value="添加">
</form>
<%
CloseConn()
response.end
else '---歌手信息已存在,检查专辑信息是否需要入库
singerid = rssinger("id")
conn.execute("update d_singer set is_down=0 where id="&singerid)
response.write "<br><br>歌手信息正确,正在检查获取专辑信息 ...<br>"
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
if rsalbum.eof then
str1 = split(strpicc,".")
str2 = str1(0)
sql="insert into d_album (album_singer,file_img,album_name,album_lang,album_corp,album_time,album_intro,add_time,is_down,album_7xi) values ('"&singerid&"','"&strpicc&"','"&stralbum&"','"&strlang&"','"&strcorp&"','"&strtime&"','"&strcontent&"','"&now&"',0,"&t7xiid&")"
conn.execute(sql)
'---采集保存专辑缩略图
okimg = GetRemoteFiles(v_7xipicc_url&strpicc,picc_FolderPath,str2)
response.write "<br>专辑信息检查添加完成,正在检查获取歌曲信息 ..."&"<br>SQL语句:"&sql
else
response.write "<br><br>专辑信息正确,正在准备检查获取歌曲信息 ..."
end if
rsalbum.close
set rsalbum = nothing
end if
rssinger.close
set rssinger = nothing
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
albumid = rsalbum("id")
rsalbum.close
set rsalbum = nothing
response.write "<br><br>专辑歌曲信息<br>"
'----歌曲ID
i = 1
str0 = split(str,"<input type="&chr(34)&"checkbox"&chr(34)&" name="&chr(34)&"checked"&chr(34)&" value="&chr(34))
response.write "<br>歌曲ID:"
do while i <= Ubound(str0)
str1 = split(str0(i),chr(34))
songid(i-1) = str1(0)
response.write songid(i-1)&" - "
i = i + 1
loop
response.write "共"&i&"首。"
'---歌曲名称
m = 1
str0 = split(str,"<a href=""../IVR.asp?id=")
response.write "<br><br>歌曲:"
do while m <= Ubound(str0)
str1 = split(str0(m),""" target=""_blank""><img src=""../images/mmsring1.gif"" alt=""免费点歌")
songname(m-1) = Jencode(replace(str1(0),"'","''"))
response.write Juncode(songname(m-1))&" - "
m = m + 1
loop
response.write "共"&i&"首。"
'---歌曲ID数目和歌曲名数目不一致时需要检查是否有误
if i <> m then
response.write "<br><br><font color=red><b>错误:</b>歌曲ID数目与歌曲名数目不一致,请检查目标页面:"& url &"</font>"
response.end
end if
'---检查歌曲是否需要入库
do while i > 1
set rssong = conn.execute("select * from d_mp3 where mp3_album="&albumid&" and mp3_singer="&singerid&" and mp3_name='"&songname(i-2)&"'")
if rssong.eof then
sql = "insert into d_mp3 (mp3_7xi,mp3_singer,mp3_album,mp3_name) values ('"&songid(i-2)&"','"&singerid&"','"&albumid&"','"&songname(i-2)&"')"
conn.execute(sql)
response.write "<br><font color=red>添加:"&songname(i-2)&"</font>"
response.write sql
else
response.write "<br>跳过:"&songname(i-2)
end if
rssong.close
set rssong = nothing
i = i-1
loop
CloseConn()
'---记录下一检测ID号
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
'---继续检测下一ID
response.write "<br>正在检测下一ID信息 ..."
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
end if
%>
</body>
</html>
getrm.asp '---采集RM文件更新歌曲信息,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌曲文件、歌词等信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌曲文件歌词等信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim getcount,rssong,id,t7xiid,url,filerm,tmpurl,i,tmpfolder,okrm,singer,song,tmp_url,lyric,rs
'---每次处理歌曲数量
getcount = 5
set rssong = conn.execute("select top " & getcount & " a.*,b.singer_name from d_mp3 a,d_singer b where a.mp3_singer=b.id and a.file_rm is null order by a.id desc")
if rssong.eof then '---歌曲信息处理完成
rssong.close
set rssong = nothing
CloseConn()
response.write "<br>歌曲文件信息检查采集完成!"
response.write "<br><br>采集完了,可以做垃圾站了!"
response.end
else
do while not rssong.eof
id = rssong("id")
t7xiid = rssong("mp3_7xi")
singer = replace(rssong("singer_name")," ","%20")
song = replace(rssong("mp3_name")," ","%20")
response.write "<br><br>歌曲名 - "& singer & "-" &song
'---目标页面
url = v_7xiplay_url&t7xiid&".htm"
set httpobj = server.createobject("paopao.http")
Err.Clear
on error resume next
response.write "<br>"&url
str = httpobj.get(url)
if Err = 0 then '---读取目标页面正常时的处理
'----歌曲文件名及文件夹
str0 = split(str,"<param name='src' value='"&chr(34)&"+s_list+"&chr(34))
str1 = split(str0(1),"'>")
filerm = str1(0)
response.write "<br>文件名 - "& filerm
tmpurl = v_7ximp3_url & filerm
response.write "<br>目标源 - "& tmpurl
'---需要保存音乐文件到本地时,采集保存音乐文件
if is_getrm then
str0 = split(filerm,"/")
i = 0
do while i < Ubound(str0)
tmpfolder = mp3_FolderPath & str0(i)
if not CheckFolder(tmpfolder) then MakeNewsDir tmpfolder
i = i + 1
loop
response.write "<br>保存为 - "& tmpfolder & "\" & str0(Ubound(str0))
okrm = GetRemoteFiles(tmpurl,tmpfolder,replace(str0(Ubound(str0)),".rm",""))
else
response.write "<br><font color=red>请注意 - </font>RM文件配置为不保存!!!!!!!!!!"
end if
'---歌词采集
tmp_url = "http://www.7xi.net/showword.asp?id=" & t7xiid
response.write "<br>"&tmp_url
set httpobj = server.createobject("paopao.http")
str0 = httpobj.get(tmp_url)
Err.Clear
on error resume next
str1 = split(str0,"<td width=""92%"">"&chr(13))
str2 = split(str1(1)," </td>")
lyric = str2(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(replace(lyric,"<p>",""),"</p>","")
lyric = IndbStr(trim(lyric))
if Instr(lyric,"mp3.baidu.com") then lyric = "暂时还没歌词"
if len(lyric) < 20 or Err <> 0 then
lyric = "暂时还没歌词"
response.write "<br>7xi自带歌词不完整,将采集baidu歌词"
end if
if lyric = "暂时还没歌词" then
Err.Clear
tmp_url = "http://mp3.baidu.com/m?f=ms&rn=10&tn=baidump3lyric&ct=150994944&word="&singer&"+"&song
response.write "<br>"&tmp_url
str0 = httpobj.get(tmp_url)
str1 = split(str0,"<B><font style=color:#e10900>"&song&"</font></B>")
if Ubound(str1) >= 1 then
str2 = split(str0,"<div style=""padding-left:10px;line-height:20px;padding-top:1px"">")
str3 = split(str2(1),"</div>")
lyric = str3(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(lyric,"<font style=color:#e10900>","")
lyric = replace(lyric,"</font>","")
else
lyric = "暂时还没歌词"
end if
end if
response.write "<br>歌词 - "&lyric
'---将采集到的信息更新到数据库
if is_getrm then
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='1' where id="&id)
else
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='0' where id="&id)
end if
else '---读取目标页面出错时的处理
conn.execute("update d_mp3_t set file_rm='nourl',is_down='1' where id="&id)
response.write "<br><br><font color=red><b>错误:</b>获取目标页面错误,请检查:"& url &"</font>"
response.end
end if
rssong.movenext
loop
rssong.close
set rssong = nothing
CloseConn()
'---继续检测采集下一批歌曲信息
response.write "<br>正在检测下一批歌曲信息 ...<br><br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
end if
%>
</body>
</html>
数据库表的SQL脚本:
数据库表
程序代码
s_sort ----歌手分类表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s_sort]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[s_sort]
GO
Create TABLE [dbo].[s_sort] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[sort_name] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[s_sort] WITH NOCHECK ADD
CONSTRAINT [PK_s_sort] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_singer ----歌手信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_singer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_singer]
GO
Create TABLE [dbo].[d_singer] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[singer_name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_first_name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_sort] [int] NULL ,
[mp3_num] [int] NULL ,
[is_putup] [bit] NULL ,
[view_count] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_singer] WITH NOCHECK ADD
CONSTRAINT [PK_d_singer] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_album ----专辑信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_album]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_album]
GO
Create TABLE [dbo].[d_album] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[album_singer] [int] NULL ,
[file_img] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_name] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_lang] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_corp] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_time] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_intro] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
[is_singer_album] [bit] NULL ,
[view_count] [int] NULL ,
[is_putup] [bit] NULL ,
[add_time] [datetime] NULL ,
[album_7xi] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Alter TABLE [dbo].[d_album] WITH NOCHECK ADD
CONSTRAINT [PK_d_album] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_mp3 ----歌曲信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_mp3]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_mp3]
GO
Create TABLE [dbo].[d_mp3] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[mp3_name] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[mp3_album] [int] NULL ,
[mp3_singer] [int] NULL ,
[file_rm] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[file_size] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[is_putup] [bit] NULL ,
[mp3_lyric] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL ,
[view_count] [int] NULL ,
[down_count] [int] NULL ,
[is_my] [bit] NULL ,
[mp3_7xi] [int] NULL ,
[is_down] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_mp3] WITH NOCHECK ADD
CONSTRAINT [PK_d_mp3] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
2个是配置文件:
配置文件:
cfg.txt '---保存检测ID信息的,第一次采集时设为1,从小到大检测
cfg.asp '---ASP的配置信息,内容如下:
复制代码 代码如下:
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 配置文件 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'
dim picc_FolderPath,mp3_FolderPath
dim v_7xijs_url,v_7xipicc_url,v_7xiplay_url,v_7xialbum_url,v_7ximp3_url,cfg_name,cfg_line
dim httpobj,str,str0,str1,str2,str3,str4,str5,str6,str7,str8,str9
dim is_getrm
'---音乐文件是否保存到本地,true-保存;false-不保存
is_getrm = false
'---保存路径
picc_FolderPath = "H:\mp3data\images\"
mp3_FolderPath = "H:\mp3data\rm\"
'---7xi相关页面
v_7xijs_url = "http://7xi.net/player/Js.js"
v_7xipicc_url = "http://ww.7xi.net/picc/"
v_7xiplay_url = "http://7xi.net/playsong/"
v_7xialbum_url = "http://ww.7xi.net/Vo2/"
v_7ximp3_url = "" '---实时读取
'---检测ID
cfg_name = "cfg.txt"
cfg_line = 1
'---读取播放js文件,获得rm文件路径
set httpobj = server.createobject("paopao.http")
str = httpobj.get(v_7xijs_url)
str0 = split(str,"theurl2="&chr(34))
str1 = split(str0(1),chr(34))
v_7ximp3_url = str1(0)
set httpobj = nothing
str = ""
'---数据库连接
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={SQL server};server=localhost;uid=mp3;pwd=mp3;database=mp3db"
'---拼SQL语句execute时需要过滤一下
Function IndbStr(str)
if isNull(str) or str = "" then
IndbStr = str
else
IndbStr = replace(replace(trim(str),"'","''"),"%","")
end if
End Function
'---关闭数据库连接
Function CloseConn()
conn.close
set conn=nothing
End Function
'---取得远程文件并保存到本地
Function GetRemoteFiles(RemotePath, LocalPath, FileName)
Dim strBody
Dim FilePath
On Error Resume Next
'---取得流
strBody = GetBody(RemotePath)
'---取得保存的文件名
if Right(LocalPath, 1) <> "\" then LocalPath = LocalPath & "\"
if not CheckDir(bkfolder) then MakeNewsDir bkfolder
FilePath = LocalPath & GetFileName(RemotePath, FileName)
'---保存文件
if SaveToFile(strBody, FilePath) = true and err.Number = 0 then
GetRemoteFiles = true
else
GetRemoteFiles = false
end if
End Function
'---远程获取内容
Function GetBody(url)
Dim Retrieval
'---建立XMLHTTP对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", url, False, "", ""
.Send
GetBody = .ResponseBody
End With
Set Retrieval = Nothing
End Function
'---重组文件名
Function GetFileName(RemotePath, FileName)
Dim arrTmp
Dim strFileExt
arrTmp = Split(RemotePath, ".")
strFileExt = arrTmp(UBound(arrTmp))
GetFileName = FileName & "." & strFileExt
End Function
'---将流内容保存为文件
Function SaveToFile(Stream, FilePath)
Dim objStream
On Error Resume Next
'---建立ADODB.Stream对象,必须要ADO 2.5以上版本
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = 1 '以二进制模式打开
objStream.Open
objstream.write Stream
objstream.SaveToFile FilePath, 2
objstream.Close()
'---关闭对象,释放资源
Set objstream = Nothing
if err.Number <> 0 then
SaveToFile = false
else
SaveToFile = true
end if
End Function
'---读取文本文件
Function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
End function
'---检查绝对路径是否存在
Function CheckFolder(FolderPath)
dim fso1
Set fso1 = CreateObject("Scripting.FileSystemObject")
If fso1.FolderExists(FolderPath) then
'存在
CheckFolder = True
Else
'不存在
CheckFolder = False
End if
Set fso1 = nothing
End Function
'---根据指定名称生成目录
Function MakeNewsDir(foldername)
dim fso1,f
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set f = fso1.CreateFolder(foldername)
MakeNewsDir = True
Set fso1 = nothing
End Function
''''''''编码(日文字符)''''''''
Function Jencode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Jencode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Jencode=iStr
for i=0 to 25
Jencode=replace(Jencode,F(i),E(i))
next
End Function
''''''''解码(日文字符)''''''''
Function Juncode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Juncode=""
Exit function
end if
dim F,i,E
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Juncode=iStr
for i=0 to 25
Juncode=replace(Juncode,E(i),F(i))'□
next
End Function
%>
1个是手动添加歌手:
addsinger.asp '---手动添加歌手,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 手动添加歌手 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>添加歌手分类_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim sql
dim singer_name,singer_first_name,singer_sort
singer_name = IndbStr(request("singer_name"))
singer_first_name = Ucase(IndbStr(request("singer_first_name")))
singer_sort = request("singer_sort")
response.write "<br>歌手信息<br><br>姓名:"&singer_name&"<br>字母:"&singer_first_name&"<br>性质:"&singer_sort
sql = "insert into d_singer (singer_name,singer_first_name,singer_sort,is_down) values ('"&singer_name&"','"&singer_first_name&"','"&singer_sort&"',0)"
response.write "<br><br>"&sql
conn.execute(sql)
CloseConn()
'---歌手添加完成后转入信息采集重新检测
response.write "<br><br>歌手信息检查添加完成,正在准备检查获取更新...<br>"
response.write "<meta http-equiv=refresh content=""1 ; url=get.asp"">"
%>
</body>
</html>
2个是采集程序:
get.asp '---采集歌手专辑歌曲信息,内容如下
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌手、专辑、歌曲信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌手专辑歌曲信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim t7xiid,url,FolderPath,fso,fout
dim songid(100),songname(100)
dim strsinger,strlang,stralbum,strtime,strcorp,strcontent,strpicc,singerid,albumid
dim rssort,rssinger,rsalbum,rssong,i,m,sql,okimg
t7xiid = FSOlinedit(cfg_name,cfg_line)
url = v_7xialbum_url&"v_"&t7xiid&".htm"
set httpobj=server.createobject("paopao.http")
Err.Clear
'on error resume next
str = ""
str = httpobj.get(url)
if str = "" then
CloseConn()
if t7xiid < 3198 then '---没有检测到时是否递增ID,继续检测
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
response.write "<br>当前ID号不存在,正在检查下一ID号 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
else '---不需要递增ID检测时,转到歌曲信息采集
response.write "<br>歌手专辑信息检查完毕,正在准备检查获取歌曲信息 ...<br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
response.end
end if
else
str0 = split(str,"歌 手 : ")
str1 = split(str0(1),"</td>")
strsinger = IndbStr(str1(0))
response.write "<br>歌手:"&strsinger
str0 = split(str,"语 种 : ")
str1 = split(str0(1),"</td>")
strlang = str1(0)
response.write "<br>语种:"&strlang
str0 = split(str,"专 辑 : ")
str1 = split(str0(1),"</a>")
str2 = split(str1(0),""">")
stralbum = IndbStr(str2(1))
response.write "<br>专辑:"&stralbum
str0 = split(str,"时 间 : ")
str1 = split(str0(1),"</td>")
strtime = str1(0)
response.write "<br>时间:"&strtime
str0 = split(str,"公 司 : ")
str1 = split(str0(1),"</td>")
strcorp = str1(0)
response.write "<br>公司:"&strcorp
str0 = split(str,"<tr valign=""top""><td colspan=""2"">")
str1 = split(str0(1),"</td>")
strcontent = replace(replace(IndbStr(str1(0)),"<br>",chr(13))," "," ")
response.write "<br>简介:"&strcontent
str0 = split(str,"<img src=""../picc/")
str1 = split(str0(1),"""")
strpicc = str1(0)
response.write "<br>图片:"&strpicc
response.write "<br><img src="&v_7xipicc_url&strpicc&" border=0>"
set rssinger = conn.execute("select * from d_singer where singer_name='"&strsinger&"'")
'---歌手信息不存在时需要手动添加歌手
if rssinger.eof then
response.write "<br>select * from d_singer where singer_name='"&strsinger&"'"
response.write "<br><br>歌手不存在,需要手动操作添加。<br><br>请按以下要求添加歌手:<br><br>"
%>
<form action="addsinger.asp">
<input type="text" size="20" name="singer_name" value="<%=strsinger%>">
<input type="text" size="6" name="singer_first_name" value="姓" maxlength="3">
<select name="singer_sort" size="1"><%'%>
<%
set rssort = conn.execute("select * from s_sort ")
do while not rssort.eof and i < 10
%>
<option value="<%=rssort("id")%>"><%=rssort("sort_name")%></option><%'%>
<%
rssort.movenext
loop
rssort.close
set rssort = nothing
%></select>
<input type="submit" value="添加">
</form>
<%
CloseConn()
response.end
else '---歌手信息已存在,检查专辑信息是否需要入库
singerid = rssinger("id")
conn.execute("update d_singer set is_down=0 where id="&singerid)
response.write "<br><br>歌手信息正确,正在检查获取专辑信息 ...<br>"
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
if rsalbum.eof then
str1 = split(strpicc,".")
str2 = str1(0)
sql="insert into d_album (album_singer,file_img,album_name,album_lang,album_corp,album_time,album_intro,add_time,is_down,album_7xi) values ('"&singerid&"','"&strpicc&"','"&stralbum&"','"&strlang&"','"&strcorp&"','"&strtime&"','"&strcontent&"','"&now&"',0,"&t7xiid&")"
conn.execute(sql)
'---采集保存专辑缩略图
okimg = GetRemoteFiles(v_7xipicc_url&strpicc,picc_FolderPath,str2)
response.write "<br>专辑信息检查添加完成,正在检查获取歌曲信息 ..."&"<br>SQL语句:"&sql
else
response.write "<br><br>专辑信息正确,正在准备检查获取歌曲信息 ..."
end if
rsalbum.close
set rsalbum = nothing
end if
rssinger.close
set rssinger = nothing
set rsalbum = conn.execute("select * from d_album where album_singer="&singerid&" and album_name='"&stralbum&"'")
albumid = rsalbum("id")
rsalbum.close
set rsalbum = nothing
response.write "<br><br>专辑歌曲信息<br>"
'----歌曲ID
i = 1
str0 = split(str,"<input type="&chr(34)&"checkbox"&chr(34)&" name="&chr(34)&"checked"&chr(34)&" value="&chr(34))
response.write "<br>歌曲ID:"
do while i <= Ubound(str0)
str1 = split(str0(i),chr(34))
songid(i-1) = str1(0)
response.write songid(i-1)&" - "
i = i + 1
loop
response.write "共"&i&"首。"
'---歌曲名称
m = 1
str0 = split(str,"<a href=""../IVR.asp?id=")
response.write "<br><br>歌曲:"
do while m <= Ubound(str0)
str1 = split(str0(m),""" target=""_blank""><img src=""../images/mmsring1.gif"" alt=""免费点歌")
songname(m-1) = Jencode(replace(str1(0),"'","''"))
response.write Juncode(songname(m-1))&" - "
m = m + 1
loop
response.write "共"&i&"首。"
'---歌曲ID数目和歌曲名数目不一致时需要检查是否有误
if i <> m then
response.write "<br><br><font color=red><b>错误:</b>歌曲ID数目与歌曲名数目不一致,请检查目标页面:"& url &"</font>"
response.end
end if
'---检查歌曲是否需要入库
do while i > 1
set rssong = conn.execute("select * from d_mp3 where mp3_album="&albumid&" and mp3_singer="&singerid&" and mp3_name='"&songname(i-2)&"'")
if rssong.eof then
sql = "insert into d_mp3 (mp3_7xi,mp3_singer,mp3_album,mp3_name) values ('"&songid(i-2)&"','"&singerid&"','"&albumid&"','"&songname(i-2)&"')"
conn.execute(sql)
response.write "<br><font color=red>添加:"&songname(i-2)&"</font>"
response.write sql
else
response.write "<br>跳过:"&songname(i-2)
end if
rssong.close
set rssong = nothing
i = i-1
loop
CloseConn()
'---记录下一检测ID号
str = t7xiid + 1
FolderPath = Server.MapPath(".\")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fout = fso.CreateTextFile(FolderPath & "\cfg.txt")
fout.WriteLine str
fout.close
'---继续检测下一ID
response.write "<br>正在检测下一ID信息 ..."
response.write "<meta http-equiv=refresh content=""0 ; url=get.asp"">"
end if
%>
</body>
</html>
getrm.asp '---采集RM文件更新歌曲信息,内容如下:
程序代码
<%
'''
'''╔=======================================╗
'''┆ ┆
'''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆
'''┆ @模块: 歌曲文件、歌词等信息采集 ┆
'''┆ @创建: 2006/07/24 ┆
'''┆ @作者: D.S.Fang ┆
'''┆ @联系: fangds@gmail.com QQ-3700909 ┆
'''┆ @版权: 源码公开,无任何版权问题,您可以 ┆
'''┆ 放心使用!!!尊重作者劳动成果,请 ┆
'''┆ 保留此信息! ┆
'''┆ ┆
'''╚=======================================╝
'''
'%>
<!--#include file="cfg.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="gb2312" />
<title>歌曲文件歌词等信息采集_7xi音乐采集更新系统</title>
</head>
<body>
<br>7xi音乐采集更新系统<br><br>
<%
dim getcount,rssong,id,t7xiid,url,filerm,tmpurl,i,tmpfolder,okrm,singer,song,tmp_url,lyric,rs
'---每次处理歌曲数量
getcount = 5
set rssong = conn.execute("select top " & getcount & " a.*,b.singer_name from d_mp3 a,d_singer b where a.mp3_singer=b.id and a.file_rm is null order by a.id desc")
if rssong.eof then '---歌曲信息处理完成
rssong.close
set rssong = nothing
CloseConn()
response.write "<br>歌曲文件信息检查采集完成!"
response.write "<br><br>采集完了,可以做垃圾站了!"
response.end
else
do while not rssong.eof
id = rssong("id")
t7xiid = rssong("mp3_7xi")
singer = replace(rssong("singer_name")," ","%20")
song = replace(rssong("mp3_name")," ","%20")
response.write "<br><br>歌曲名 - "& singer & "-" &song
'---目标页面
url = v_7xiplay_url&t7xiid&".htm"
set httpobj = server.createobject("paopao.http")
Err.Clear
on error resume next
response.write "<br>"&url
str = httpobj.get(url)
if Err = 0 then '---读取目标页面正常时的处理
'----歌曲文件名及文件夹
str0 = split(str,"<param name='src' value='"&chr(34)&"+s_list+"&chr(34))
str1 = split(str0(1),"'>")
filerm = str1(0)
response.write "<br>文件名 - "& filerm
tmpurl = v_7ximp3_url & filerm
response.write "<br>目标源 - "& tmpurl
'---需要保存音乐文件到本地时,采集保存音乐文件
if is_getrm then
str0 = split(filerm,"/")
i = 0
do while i < Ubound(str0)
tmpfolder = mp3_FolderPath & str0(i)
if not CheckFolder(tmpfolder) then MakeNewsDir tmpfolder
i = i + 1
loop
response.write "<br>保存为 - "& tmpfolder & "\" & str0(Ubound(str0))
okrm = GetRemoteFiles(tmpurl,tmpfolder,replace(str0(Ubound(str0)),".rm",""))
else
response.write "<br><font color=red>请注意 - </font>RM文件配置为不保存!!!!!!!!!!"
end if
'---歌词采集
tmp_url = "http://www.7xi.net/showword.asp?id=" & t7xiid
response.write "<br>"&tmp_url
set httpobj = server.createobject("paopao.http")
str0 = httpobj.get(tmp_url)
Err.Clear
on error resume next
str1 = split(str0,"<td width=""92%"">"&chr(13))
str2 = split(str1(1)," </td>")
lyric = str2(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(replace(lyric,"<p>",""),"</p>","")
lyric = IndbStr(trim(lyric))
if Instr(lyric,"mp3.baidu.com") then lyric = "暂时还没歌词"
if len(lyric) < 20 or Err <> 0 then
lyric = "暂时还没歌词"
response.write "<br>7xi自带歌词不完整,将采集baidu歌词"
end if
if lyric = "暂时还没歌词" then
Err.Clear
tmp_url = "http://mp3.baidu.com/m?f=ms&rn=10&tn=baidump3lyric&ct=150994944&word="&singer&"+"&song
response.write "<br>"&tmp_url
str0 = httpobj.get(tmp_url)
str1 = split(str0,"<B><font style=color:#e10900>"&song&"</font></B>")
if Ubound(str1) >= 1 then
str2 = split(str0,"<div style=""padding-left:10px;line-height:20px;padding-top:1px"">")
str3 = split(str2(1),"</div>")
lyric = str3(0)
lyric = replace(lyric,"<br>",chr(13))
lyric = replace(lyric," "," ")
lyric = replace(lyric,"<font style=color:#e10900>","")
lyric = replace(lyric,"</font>","")
else
lyric = "暂时还没歌词"
end if
end if
response.write "<br>歌词 - "&lyric
'---将采集到的信息更新到数据库
if is_getrm then
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='1' where id="&id)
else
conn.execute("update d_mp3 set file_rm='"&filerm&"',mp3_lyric='"&lyric&"',is_down='0' where id="&id)
end if
else '---读取目标页面出错时的处理
conn.execute("update d_mp3_t set file_rm='nourl',is_down='1' where id="&id)
response.write "<br><br><font color=red><b>错误:</b>获取目标页面错误,请检查:"& url &"</font>"
response.end
end if
rssong.movenext
loop
rssong.close
set rssong = nothing
CloseConn()
'---继续检测采集下一批歌曲信息
response.write "<br>正在检测下一批歌曲信息 ...<br><br>"
response.write "<meta http-equiv=refresh content=""0 ; url=getrm.asp"">"
end if
%>
</body>
</html>
数据库表的SQL脚本:
数据库表
程序代码
s_sort ----歌手分类表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[s_sort]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[s_sort]
GO
Create TABLE [dbo].[s_sort] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[sort_name] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[s_sort] WITH NOCHECK ADD
CONSTRAINT [PK_s_sort] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_singer ----歌手信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_singer]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_singer]
GO
Create TABLE [dbo].[d_singer] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[singer_name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_first_name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[singer_sort] [int] NULL ,
[mp3_num] [int] NULL ,
[is_putup] [bit] NULL ,
[view_count] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_singer] WITH NOCHECK ADD
CONSTRAINT [PK_d_singer] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_album ----专辑信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_album]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_album]
GO
Create TABLE [dbo].[d_album] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[album_singer] [int] NULL ,
[file_img] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_name] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_lang] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_corp] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_time] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[album_intro] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
[is_singer_album] [bit] NULL ,
[view_count] [int] NULL ,
[is_putup] [bit] NULL ,
[add_time] [datetime] NULL ,
[album_7xi] [int] NULL ,
[is_down] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Alter TABLE [dbo].[d_album] WITH NOCHECK ADD
CONSTRAINT [PK_d_album] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
d_mp3 ----歌曲信息表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[d_mp3]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[d_mp3]
GO
Create TABLE [dbo].[d_mp3] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[mp3_name] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[mp3_album] [int] NULL ,
[mp3_singer] [int] NULL ,
[file_rm] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[file_size] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[is_putup] [bit] NULL ,
[mp3_lyric] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL ,
[view_count] [int] NULL ,
[down_count] [int] NULL ,
[is_my] [bit] NULL ,
[mp3_7xi] [int] NULL ,
[is_down] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
Alter TABLE [dbo].[d_mp3] WITH NOCHECK ADD
CONSTRAINT [PK_d_mp3] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
代码注释