"---数据库连接 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 %>
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
"---每次处理歌曲数量 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
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
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