asp实现的7xi音乐网的采集源代码 共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 ┆ '''┆ @版权: 源码公开,无任何版权问题,您可以 ┆ '''┆ 放心使用!!!尊重作者劳动成果,请 ┆ '''┆ 保留此信息! ┆ '''┆ ┆ '''╚=======================================╝ ''' '%> 添加歌手分类_7xi音乐采集更新系统
7xi音乐采集更新系统

<% 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 "
歌手信息

姓名:"&singer_name&"
字母:"&singer_first_name&"
性质:"&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 "

"&sql conn.execute(sql) CloseConn() '---歌手添加完成后转入信息采集重新检测 response.write "

歌手信息检查添加完成,正在准备检查获取更新...
" response.write "" %> 2个是采集程序: get.asp '---采集歌手专辑歌曲信息,内容如下 程序代码 <% ''' '''╔=======================================╗ '''┆ ┆ '''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆ '''┆ @模块: 歌手、专辑、歌曲信息采集 ┆ '''┆ @创建: 2006/07/24 ┆ '''┆ @作者: D.S.Fang ┆ '''┆ @联系: fangds@gmail.com QQ-3700909 ┆ '''┆ @版权: 源码公开,无任何版权问题,您可以 ┆ '''┆ 放心使用!!!尊重作者劳动成果,请 ┆ '''┆ 保留此信息! ┆ '''┆ ┆ '''╚=======================================╝ ''' '%> 歌手专辑歌曲信息采集_7xi音乐采集更新系统
7xi音乐采集更新系统

<% 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 "
当前ID号不存在,正在检查下一ID号 ...
" response.write "" else '---不需要递增ID检测时,转到歌曲信息采集 response.write "
歌手专辑信息检查完毕,正在准备检查获取歌曲信息 ...
" response.write "" response.end end if else str0 = split(str,"歌 手 : ") str1 = split(str0(1),"") strsinger = IndbStr(str1(0)) response.write "
歌手:"&strsinger str0 = split(str,"语 种 : ") str1 = split(str0(1),"") strlang = str1(0) response.write "
语种:"&strlang str0 = split(str,"专 辑 : ") str1 = split(str0(1),"") str2 = split(str1(0),""">") stralbum = IndbStr(str2(1)) response.write "
专辑:"&stralbum str0 = split(str,"时 间 : ") str1 = split(str0(1),"") strtime = str1(0) response.write "
时间:"&strtime str0 = split(str,"公 司 : ") str1 = split(str0(1),"") strcorp = str1(0) response.write "
公司:"&strcorp str0 = split(str,"") str1 = split(str0(1),"") strcontent = replace(replace(IndbStr(str1(0)),"
",chr(13))," "," ") response.write "
简介:"&strcontent str0 = split(str,"图片:"&strpicc response.write "
" set rssinger = conn.execute("select * from d_singer where singer_name='"&strsinger&"'") '---歌手信息不存在时需要手动添加歌手 if rssinger.eof then response.write "
select * from d_singer where singer_name='"&strsinger&"'" response.write "

歌手不存在,需要手动操作添加。

请按以下要求添加歌手:

" %>
<% CloseConn() response.end else '---歌手信息已存在,检查专辑信息是否需要入库 singerid = rssinger("id") conn.execute("update d_singer set is_down=0 where id="&singerid) response.write "

歌手信息正确,正在检查获取专辑信息 ...
" 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 "
专辑信息检查添加完成,正在检查获取歌曲信息 ..."&"
SQL语句:"&sql else response.write "

专辑信息正确,正在准备检查获取歌曲信息 ..." 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 "

专辑歌曲信息
" '----歌曲ID i = 1 str0 = split(str,"歌曲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,"
歌曲:" do while m <= Ubound(str0) str1 = split(str0(m),""" target=""_blank""> m then response.write "

错误:歌曲ID数目与歌曲名数目不一致,请检查目标页面:"& url &"" 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 "
添加:"&songname(i-2)&"" response.write sql else response.write "
跳过:"&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 "
正在检测下一ID信息 ..." response.write "" end if %> getrm.asp '---采集RM文件更新歌曲信息,内容如下: 程序代码 <% ''' '''╔=======================================╗ '''┆ ┆ '''┆ @系统: 7xi音乐采集系统 Version 2.0 ┆ '''┆ @模块: 歌曲文件、歌词等信息采集 ┆ '''┆ @创建: 2006/07/24 ┆ '''┆ @作者: D.S.Fang ┆ '''┆ @联系: fangds@gmail.com QQ-3700909 ┆ '''┆ @版权: 源码公开,无任何版权问题,您可以 ┆ '''┆ 放心使用!!!尊重作者劳动成果,请 ┆ '''┆ 保留此信息! ┆ '''┆ ┆ '''╚=======================================╝ ''' '%> 歌曲文件歌词等信息采集_7xi音乐采集更新系统
7xi音乐采集更新系统

<% 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 "
歌曲文件信息检查采集完成!" response.write "

采集完了,可以做垃圾站了!" 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 "

歌曲名 - "& singer & "-" &song '---目标页面 url = v_7xiplay_url&t7xiid&".htm" set httpobj = server.createobject("paopao.http") Err.Clear on error resume next response.write "
"&url str = httpobj.get(url) if Err = 0 then '---读取目标页面正常时的处理 '----歌曲文件名及文件夹 str0 = split(str,"") filerm = str1(0) response.write "
文件名 - "& filerm tmpurl = v_7ximp3_url & filerm response.write "
目标源 - "& 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 "
保存为 - "& tmpfolder & "\" & str0(Ubound(str0)) okrm = GetRemoteFiles(tmpurl,tmpfolder,replace(str0(Ubound(str0)),".rm","")) else response.write "
请注意 - RM文件配置为不保存!!!!!!!!!!" end if '---歌词采集 tmp_url = "http://www.7xi.net/showword.asp?id=" & t7xiid response.write "
"&tmp_url set httpobj = server.createobject("paopao.http") str0 = httpobj.get(tmp_url) Err.Clear on error resume next str1 = split(str0,""&chr(13)) str2 = split(str1(1)," ") lyric = str2(0) lyric = replace(lyric,"
",chr(13)) lyric = replace(lyric," "," ") lyric = replace(replace(lyric,"

",""),"

","") lyric = IndbStr(trim(lyric)) if Instr(lyric,"mp3.baidu.com") then lyric = "暂时还没歌词" if len(lyric) < 20 or Err <> 0 then lyric = "暂时还没歌词" response.write "
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 "
"&tmp_url str0 = httpobj.get(tmp_url) str1 = split(str0,""&song&"") if Ubound(str1) >= 1 then str2 = split(str0,"
") str3 = split(str2(1),"
") lyric = str3(0) lyric = replace(lyric,"
",chr(13)) lyric = replace(lyric," "," ") lyric = replace(lyric,"","") lyric = replace(lyric,"","") else lyric = "暂时还没歌词" end if end if response.write "
歌词 - "&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 "

错误:获取目标页面错误,请检查:"& url &"" response.end end if rssong.movenext loop rssong.close set rssong = nothing CloseConn() '---继续检测采集下一批歌曲信息 response.write "
正在检测下一批歌曲信息 ...

" response.write "" end if %> 数据库表的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