亲宝软件园·资讯

展开

使用Flash DownLoad编写采集器(之突破防盗连下载音乐文件)

人气:0
想了解使用Flash DownLoad编写采集器(之突破防盗连下载音乐文件)的相关内容吗,在本文为您仔细讲解的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:使用Flash,DownLoad编写采集器(之突破防盗连下载音乐文件),下面大家一起来学习吧。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Flash DownLoad 下载控件示例</title>
<meta name="MSSmartTagsPreventParsing" content="TRUE">
<meta http-equiv="MSThemeCompatible" content="Yes">
<style type="text/css">
body {
scrollbar-base-color: #F5FBFF;
scrollbar-arrow-color: #86B9D6;
font: 12px Tahoma, Verdana;
background-color: #FFFFFF;
color: #333333;
}
table {
font: 12px Tahoma, Verdana;
color: #333333;
empty-cells: show;
border-collapse: separate !important;
border-collapse: collapse;
}
input, select, textarea {
font: 12px Tahoma, Verdana;
color: #333333;
font-weight: normal;
background-color: #F5FBFF;
border: 1px solid #7AC4EA;
}
input {
height: 21px;
}
a {
text-decoration: none;
color: #154BA0;
}
a:hover {
text-decoration: underline;
}
.checkbox, .radio {
border: 0px;
background: none;
vertical-align: middle;
height: 16px;
}
</style>
</head>
<BODY>
<Script Language="JavaScript">
/********************************************************
* ProgressBar class
* @author null
* @param width - width of progress bar
* @param height - height of progress bar
* @param fgColor - fgColor of progress bar
* @param bgColor - bgColor of progress bar
* @param borderColor - borderColor of progress bar
          the rule is the same border-color of CSS
/********************************************************/
function ProgressBar(width,height,fgColor,bgColor,borderColor){

  if(borderColor==undefined){
    bgColor = "threedlightshadow";
    fgColor = "highlight";
    borderColor =  "buttonshadow window window buttonshadow";
  }
  else if(borderColor==undefined&&fgColor==undefined&&bgColor==undefined){
    bgColor = "threedlightshadow";
    fgColor = "highlight";
    borderColor =  "buttonshadow window window buttonshadow";
  }

  percent  = 0.0; //initialize to zero
  fontSize = Math.ceil(height/2)+1;

  font_bt = "<table width=100% height=100% cellpadding=0 cellspacing=0 style='font:bold "+fontSize+"px Arial;color:"+bgColor+";text-align:center;vertical-align:center;'><tr><td>"+parseInt(percent*100)+" %</td></tr></table>";
  font_ft = "<table width=100% height=100% cellpadding=0 cellspacing=0 style='font:bold "+fontSize+"px Arial;color:"+fgColor+";text-align:center;vertical-align:center;'><tr><td>"+parseInt(percent*100)+" %</td></tr></table>";

  squares = "";
  for(var i=0;;i++){
    var left = width-2-i*(height/2+1);
    //alert(left);
    if(left>=height/2+1){
      squares += "<span style='background-color:"+fgColor+";width:"+height/2+"px;height:"+(height-2)+";margin-right:1px;'></span>";
    }
    else if(left>=1){
      squares += "<span style='background-color:"+fgColor+";width:"+left+"px;height:"+(height-2)+";margin:0px;'></span>";
    }
    else
      break;
  }

  //position:absolute;
  str  = "<span id=progress_bg style='width:"+width+"px;height:"+height+"px;background-color:"+bgColor+";border:1px solid;border-color:"+borderColor+"'>"; //"+fgColor+" #transparent
  str += "  <span id=progress_fg style='position:absolute;width:100%;height:100%;clip:rect(0,"+parseInt(percent*100)+"%,100%,0);background-color:"+fgColor+";font-size:0px;line-height:0px;'>";
  str +=      squares;
  str += "  </span>";
  str += "  <span id=progress_bt style='position:absolute;z-index:8;width:100%;height:100%;background-color:#transparent;clip:rect(0,"+parseInt(percent*100)+"%,100%,0);text-align:center;'>";
  str +=      font_bt;
  str += "  </span>";
  str += "  <span id=progress_ft style='position:absolute;z-index:9;width:100%;height:100%;background-color:#transparent;clip:rect(0,100%,100%,"+parseInt(percent*100)+"%);text-align:center;'>";
  str +=      font_ft;
  str += "  </span>";
  str += "</span>";

  document.write(str);

function update(){
    font_bt = "<table width=100% height=100% cellpadding=0 cellspacing=0 style='font:bold "+fontSize+"px Arial;color:"+bgColor+";text-align:center;vertical-align:center;'><tr><td>"+parseInt(percent*100)+" %</td></tr></table>";
    font_ft = "<table width=100% height=100% cellpadding=0 cellspacing=0 style='font:bold "+fontSize+"px Arial;color:"+fgColor+";text-align:center;vertical-align:center;'><tr><td>"+parseInt(percent*100)+" %</td></tr></table>";

    document.getElementById("progress_fg").style.clip='rect(0,'+parseInt(percent*100)+'%,100%,0)';
    document.getElementById("progress_bt").style.clip='rect(0,'+parseInt(percent*100)+'%,100%,0)';
    document.getElementById("progress_ft").style.clip='rect(0,100%,100%,'+parseInt(percent*100)+'%)';

    document.getElementById("progress_bt").innerHTML=font_bt; 
    document.getElementById("progress_ft").innerHTML=font_ft; 
  }

  this.setModel=function(model){
    percent = model;
    update();
  }
}
</script>
<OBJECT id="FDown" CLASSID="CLSID:96561482-93D7-4C2F-BB4A-11CED3C9915D" CODEBASE="FDownload.CAB#version=1,0,0,40" style="display:none;"></OBJECT>
<br />
<fieldset>
        <legend>采集设置</legend>
        <table width="100%" style="border: none;">
          <tr width="100%">
            <td width="15%" align="right">专辑地址:</td>
            <td width="85%"><input type="text" name="SpecialURL" value="http://www.520music.com/MusicList/520music.com_5887.htm" style="width:360px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">保存路径:</td>
            <td width="85%"><input type="text" name="SavePath" value="d:\Spacial" style="width:200px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">专辑名称:</td>
            <td width="85%"><input type="text" name="SpecialName" value="" style="width:200px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">歌手名称:</td>
            <td width="85%"><input type="text" name="SinGer" value="" style="width:200px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">唱片公司:</td>
            <td width="85%"><input type="text" name="GongSi" value="" style="width:200px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">专辑语种:</td>
            <td width="85%"><input type="text" name="YuYan" value="" style="width:200px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">发行时间:</td>
            <td width="85%"><input type="text" name="Times" value="" style="width:200px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">专辑图片:</td>
            <td width="85%"><input type="text" name="PIC" value="" style="width:360px;"></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">专辑介绍:</td>
            <td width="85%"><textarea rows="7" cols="10" name="remark" style="width: 100%; height: 120px; word-break: break-all" tabindex="2"></textarea></td>
          </tr>
        </table>
</fieldset>

<br />
<fieldset>
        <legend>Flash DownLoad 1.2.0</legend>
        <table width="100%" style="border: none;">
          <tr width="100%">
            <td width="15%" align="right">下载文件:</td>
            <td width="85%"><span id="DownForm"></span></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">保存路径:</td>
            <td width="85%"><span id="DownTo"></span></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">下载进度:</td>
            <td width="85%"><span id="DownLoading"></span></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">下载速度:</td>
            <td width="85%"><span id="DownSpeed"></span></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">下载状态:</td>
            <td width="85%"><span id="DownState"></span></td>
          </tr>
          <tr width="100%">
            <td width="15%" align="right">进度条:</td>
            <td width="85%"><span id="ProBar" width="100%"><script>ww = ((document.body.offsetWidth/100)*85);var pb = new ProgressBar(ww,18,"navy","#FFFFFF","#8e8e8e");</script></span></td>
          </tr>
        </table>
</fieldset>
<br />

<Script Language="VBScript">
Dim IStr,StrSave,StrCookie
Dim CAIType
Dim MusicBody,MusicNameArr,MusicURLArr,MusicCount,MusicPtr,MusicName,MusicPlayer,MusicURL,MusicSave
Set IStr = CreateObject("IVVN.String")

'msgbox IStr.Version

FDown.BackColor  = "#FFFFFF"
FDown.FillColor  = "#FFFFFF"
FDown.FrameColor = "#E0E0E0"

'=============================================================================================================================================================
'FDown事件模块 开始
'=============================================================================================================================================================
'下载库通过该函数通知下载状态
Private Sub FDown_Status(ByVal lIndex, ByVal lStatus, ByVal bstrStatusParam)
    On Error Resume Next
    If blnDStop = True Then
        FDown.bStop
        Exit Sub
    End If

    document.getElementById("DownForm").innerText = FDown.Url

    If FDown.DownLoadType = dtToFile And FDown.SavePath <> "" And FDown.Filename <> "" Then
        document.getElementById("DownTo").innerText = FDown.SavePath & "\" & FDown.Filename
    Else
        document.getElementById("DownTo").innerText = "抓取数据..."
    End If

    Dim strMsg
    strMsg = "线程" & lIndex + 1 & ":"

    If lStatus = 0 Then
        strMsg = strMsg & "解析域名 "
    ElseIf lStatus = 1 Then
        strMsg = strMsg & "获得IP地址 "
    ElseIf lStatus = 2 Then
        strMsg = strMsg & "连接服务器 "
    ElseIf lStatus = 3 Then
        strMsg = strMsg & "连接服务器成功 "
    ElseIf lStatus = 4 Then
        strMsg = strMsg & "重定向到 "
    ElseIf lStatus = 5 Then
        strMsg = strMsg & "开始接收数据 "
    ElseIf lStatus = 6 Then
        strMsg = strMsg & "下载结束 "
    End If

    strMsg = strMsg & bstrStatusParam & vbCrLf
    document.getElementById("DownState").innerText = strMsg
End Sub

'下载库通过该事件通知文件下载进度
Private Sub FDown_Progress(ByVal dbFileSize, ByVal dbFinished, ByVal dbSpeed)
    On Error Resume Next
    If blnDStop = True Then
        FDown.bStop
        Exit Sub
    End If

    Dim BFile
    Dim BRead
    Dim BShare
    Dim BSpeed

    BFile = dbFileSize
    BRead = dbFinished
    BShare = dbFinished / (dbFileSize / 100)
    BSpeed = dbSpeed

    If IsNumeric(dbFinished) = True And IsNumeric(dbFileSize) = True Then
        BFile = dbFileSize
        BRead = dbFinished
        BShare = dbFinished / (dbFileSize / 100)
        pb.setModel(BRead/BFile)
        document.getElementById("DownLoading").innerText = BRead & " of " & BFile & " transferred (" & Round(BShare, 2) & "%)"
    End If
    If IsNumeric(dbSpeed) = True Then
        BSpeed = dbSpeed
        document.getElementById("DownSpeed").innerText = "Throughput " & BSpeed & " /s"
    End If

End Sub

'下载库通过该事件通知下载过程结束
Private Sub FDown_DownloadEnd(ByVal bSuccess)
    On Error Resume Next

    Select Case CAIType
        Case "C1"
        StrBody = FDown.Body
        oSpecialName = IStr.RegContent(StrBody,"专辑名称:","</li>")
        document.getElementById("SpecialName").value = oSpecialName
        oSinGer = IStr.RegContent(StrBody,"歌手名称:","</li>")
        document.getElementById("SinGer").value = oSinGer
        oGongSi = IStr.RegContent(StrBody,"唱片公司:","</li>")
        document.getElementById("GongSi").value = oGongSi
        oYuYan = IStr.RegContent(StrBody,"专辑语种:","</li>")
        document.getElementById("YuYan").value = oYuYan
        oTimes = IStr.RegContent(StrBody,"发行时间:","</li>")
        document.getElementById("Times").value = oTimes
        oPIC = IStr.RegContent(StrBody,"<div class=""rightcolumn""><div id=""albuminfo""><img src=""",""">")
        document.getElementById("PIC").value = oPIC
        oremark = IStr.RegContent(StrBody,"<h2>专辑介绍</h2><p>","</p>")
        document.getElementById("remark").value = oremark

        StrSave = document.getElementById("SavePath").value & "\" & oSinGer & "\" & oSpecialName

        CAIType = "C2"
        Download_File 0, oPIC, StrSave & "\1.jpg", True, document.getElementById("SpecialURL").value, StrCookie

        MusicBody = IStr.RegContent(StrBody,"<form name=form2 target=myplay action=../rd18playlist.htm>","<input name=""chkall2"" onclick=CheckAll(this.form) type=""button"" value=""全 选"" />")
        MusicNameArr = IStr.RegContent(MusicBody,"<a href=""../mydown.htm?musicname=",""" target=_blank>",0,True)
        MusicNameArr = Split(MusicNameArr,"§")
        MusicURLArr = IStr.RegContent(MusicBody,"<input name=""checked"" type=""checkbox"" value=""",""" />",0,True)
        MusicURLArr = Split(MusicURLArr,"§")
        MusicCount = UBound(MusicURLArr)
        CAIType = "C3"
        MusicPtr = 0
        GetMusic

        Case "C3"
        StrBody = FDown.Body
        MusicURL = "http://wma7.520music.com/20060312/" & IStr.RegContent(StrBody,"document.write(""<PARAM NAME=\""URL\"" VALUE='""+url+""/","'>"")")
        MusicSave = StrSave & "\" & MusicPtr+1 & IStr.GetFileExt(MusicURL)
        CAIType = ""
        StrCookie = Download_Text(0,"http://hi.520music.com/hi.htm", "gb2312", True, MusicPlayer, "")
        StrCookie = FDown.Body
        StrCookie = IStr.RegContent(StrCookie,"document.cookie=""","; domain=hi.520music.com;")
        'MsgBox StrCookie
        CAIType = "C4"
        Download_File 0, MusicURL, MusicSave, False, document.getElementById("SpecialURL").value, StrCookie

        Case "C4"
        CAIType = "C3"
        MusicPtr = MusicPtr + 1
        GetMusic
    End Select

    If blnDStop = True Then
        FDown.bStop
        Exit Sub
    End If

End Sub

'下载库通过该函数通知下载过程中发生的错误
Private Sub FDown_Error(ByVal lIndex, ByVal lErrorCode)
    On Error Resume Next
    If blnDStop = True Then
        FDown.bStop
    End If

    document.getElementById("DownState").innerText = lErrorCode

End Sub
'=============================================================================================================================================================
'FDown事件模块 结束
'=============================================================================================================================================================

' ============================================
' 根据路径获取扩展名
' ============================================
Public Function GetFileExt(ByVal FullPath)
    On Error Resume Next
    Dim pos, pvs
    pos = InStrRev(FullPath, ".")
    pvs = InStrRev(FullPath, "?") - pos
    If pvs < pos Then pvs = InStrRev(FullPath, "?")
    If pos > 0 Then
        If pvs > 0 Then
            GetFileExt = Mid(FullPath, pos, pvs)
        Else
            GetFileExt = Mid(FullPath, pos)
        End If
    End If
End Function

'=============================================================================================================================================================
'功能函数模块 开始
'=============================================================================================================================================================
'下载远程URL数据
Function Download_Text(ByVal MetHod, ByVal Url, ByVal Charset, ByVal Async, ByVal Referer, ByVal Cookie)
    On Error Resume Next
    If Referer = "" Then Referer = Url
    FDown.Init
    FDown.DownLoadType = 1
    FDown.MetHod = MetHod
    FDown.Url = Url
    FDown.Charset = Charset
    FDown.SyncMode = Async
    FDown.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1)"
    FDown.URLReferer = Referer
    FDown.Cookie = Cookie
    FDown.FailRetryTimes = 3
    FDown.DownLoad
End Function

'下载远程URL文件到本地
Function Download_File(ByVal MetHod, ByVal Url, ByVal SaveFile, ByVal Async, ByVal Referer, ByVal Cookie)
    'On Error Resume Next
    Dim UserAgent
    Dim SavePath
    Dim Filename
    If Referer = "" Then Referer = Url
    SavePath = Mid(SaveFile, 1, InStrRev(SaveFile, "\") - 1)
    Filename = Mid(SaveFile, InStrRev(SaveFile, "\") + 1, Len(SaveFile))

    Select Case LCase(GetFileExt(Url))
        Case ".mp3", ".wma", ".wmv", ".wav", ".avi", ".mpeg", ".mpg", ".mid"
        UserAgent = "NSPlayer/10.0.0.3708 WMFSDK/10.0"
        Case ".rm", ".rmvb"
        UserAgent = "RMA/1.0 (compatible; RealMedia) "
        Case Else
        UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1)"
    End Select

    'If FDown.CreateFolders(SavePath & "\" & Filename) = False Then
        'Download_File = False
        'Exit Function
    'End If
FDown.Init
    FDown.DownLoadType = 0
    FDown.MetHod = MetHod
    FDown.Url = Url
    FDown.SavePath = SavePath
    FDown.Filename = Filename
    FDown.SyncMode = Async
    FDown.UserAgent = UserAgent
    FDown.URLReferer = Referer
    FDown.Cookie = Cookie
    FDown.FailRetryTimes = 3

    Download_File = FDown.DownLoad

End Function

'下载远程URL头部信息
Function Download_Head(ByVal MetHod, ByVal Url, ByVal Async, ByVal Referer, ByVal Cookie, ByVal SAsync)
    On Error Resume Next
    Dim UserAgent
    If Referer = "" Then Referer = Url
    DownForm.Caption = Url
    Select Case LCase(GetFileExt(Url))
        Case ".mp3", ".wma", ".wmv", ".wav", ".avi", ".mpeg", ".mpg", ".mid"
        UserAgent = "NSPlayer/9.0.0.2991 WMFSDK/9.0 "
        Case ".rm", ".rmvb"
        UserAgent = "RMA/1.0 (compatible; RealMedia) "
        Case Else
        UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1)"
    End Select

    FDown.Init
    FDown.DownLoadType = 1
    FDown.MetHod = MetHod
    FDown.Url = Url
    FDown.SyncMode = Async
    FDown.UserAgent = UserAgent
    FDown.URLReferer = Referer
    FDown.Cookie = Cookie
    FDown.FailRetryTimes = 3
    Download_Head = FDown.DownLoadHead(Async, SAsync)
End Function

'下载Cookie
Function Download_Cookie(ByVal MetHod, ByVal Url, ByVal Referer, ByVal UserAgent, ByVal Cookie, ByVal N)
    On Error Resume Next
    If Referer = "" Then Referer = Url
    FDown.Init
    FDown.DownLoadType = 0
    FDown.MetHod = MetHod
    Download_Cookie = FDown.DownloadCookie(Url,Referer,UserAgent,Cookie,N)
End Function

'开始采集
Sub StartCai()
        CAIType = "C1"
        Download_Text 0, document.getElementById("SpecialURL").value, "gb2312", False, "", ""
End Sub

'下载音乐
Sub GetMusic()
        If MusicPtr>MusicCount Then
                MsgBox "全部下载完成!"
                Exit Sub
        End If
        MusicPlayer = "http://www.520music.com/play/" & MusicURLArr(MusicPtr) & ".htm"
        Download_Text 0, MusicPlayer, "gb2312", False, "", ""
End Sub
</Script>
<br />
<input type='button' value=' 开始采集 ' onclick='StartCai()'>
</BODY>
</HTML>

加载全部内容

相关教程
猜你喜欢
用户评论