在做抓取的時候,不知道什麼原因,無法直接抓到,於是想到調用迅雷下載,這個是網站上找的,沒想到還很好用,我只是使用了簡單的下載檔案功能。
【導讀】本文詳細講解了使用VB.NET編程來調用訊雷下載檔案的過程和步驟。內容包括:建立訊雷調用對象、使用訊雷調用物件查詢下載任務資訊、迅雷平台介面函數定義等。
首先確保電腦已經安裝訊雷,開啟VS.NET 點擊菜單:項目->添加引用->COM->添加對ThunderAgent 1.0 Type Library的引用。
1.建立訊雷調用對象
Private ThunderEng As New THUNDERAGENTLib.Agent'建立訊雷調用對象
ThunderEng.AddTask("", "另存檔案名稱", "儲存目錄","任務注釋","引用地址","開始模式", "只從原始地址下載","從原始地址下載線程數") '添加下載任務
ThunderEng.CommitTasks()'提交下載任務
2.使用訊雷調用物件查詢下載任務資訊
sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")'擷取下載檔案大小
sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")'擷取已完成大小
sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")'擷取檔案名稱
二、迅雷平台介面函數定義
獲得資訊
1. BSTR GetInfo(BSTR pInfoName)
功能:獲得迅雷或平台相關資訊
參數:
| 參數名 |
含義 |
| pInfoName |
資訊名稱,有如下4種 ◆“ThunderExists”:迅雷是否存在 ◆“ThunderRunning”:迅雷是否運行 ◆“ThunderVersion”:迅雷版本號碼 ◆“PlatformVersion”:平台版本號碼 |
傳回值:傳回值是字串與參數pInfoName有對應關係
| 參數 |
傳回值 |
| “ThunderExists” |
“true”存在,“false”不存在 |
| “ThunderRunning” |
“true” 運行中, “false”未運行 |
| “ThunderVersion” |
迅雷版本號碼 “x.x.x.x” |
| “PlatformVersion” |
平台版本號碼 “x.x.x.x” |
2. HRESULT GetInfoStruct(INT pInfo)
功能:擷取迅雷或平台相關全部資訊
參數:
| 參數名 |
含義 |
| pInfo |
其實是THUNDER_INFO類型的結構指標,調用前把它轉換為INT類型;調用後結構中將填充平台資訊,定義如下: typedef struct _THUNDER_INFO { BOOL bThunderExists; BOOL bThunderRunning; CHAR szThunderVersion[32]; CHAR szPlatformVersion[32]; } THUNDER_INFO; 函數調用後,結構中將填充相應的資訊。 |
傳回值:
任務操作
3. 加入任務
HRESULT AddTask
(BSTR pURL,
BSTR pFileName = "",
BSTR pPath = "",
BSTR pComments = "",
BSTR pReferURL = "",
INT nStartMode = -1,
INT nOnlyFromOrigin = 0,
INT nOriginThreadCount = -1);
功能:
往平台加入下載任務資訊,此時尚未體現到迅雷中
參數:
| 參數名 |
含義 |
| pURL |
目標URL,必須參數 |
| pFileName |
另存名稱,預設為空白,表示由迅雷處理,選擇性參數 |
| pPath |
儲存目錄,預設為空白,表示由迅雷處理,選擇性參數 |
| pComments |
下載注釋,預設為空白,選擇性參數 |
| pReferURL |
引用頁URL,預設為空白,選擇性參數 |
| nStartMode |
開始模式,0手工開始,1立即開始,預設為-1,表示由迅雷處理,選擇性參數 |
| nOnlyFromOrigin |
是否只從原始URL下載,1隻從原始URL下載,0多資源下載,預設為0,選擇性參數 |
| nOriginThreadCount |
原始地址下載線程數,範圍1-10,預設為-1,表示由迅雷處理,選擇性參數 |
4. 開始任務
HRESULT CommitTaskss()
功能:
把AddTask所加入的下載任務資訊真正提交到迅雷中進行下載,並從平台中刪除
注意:如果AddTask添加的任務沒有被提交沒有被取消(調用CancelTasks),則Agent對象析構時會阻塞,所以調用者不應該殘留一些沒有被提交或者取消的任務,以避免指令碼執行者停止回應。
5. 取消任務
HRESULT CancelTasks()
功能:
取消平台中所有由AddTask所加入的下載任務資訊
6. 查詢任務資訊
BSTR GetTaskInfo(BSTR pURL,BSTR pInfoName);
參數:
| 參數名 |
含義 |
| pURL |
所要查詢的下載URL資訊 |
| pInfoName |
狀態名稱,有如下幾種 ◆“Exists”:pURL是否在迅雷的工作清單 ◆“Path”:儲存目錄 ◆“FileName”:檔案名稱 ◆“FileSize”:檔案大小 ◆“CompletedSize”:已下載大小 ◆“Percent”:下載進度 ◆“Status”:任務狀態 |
傳回值: 傳回值是字串與參數pInfoName有對應關係
| 參數 |
傳回值 |
| “Exists” |
”true”存在,”false”不存在 |
| “Path” |
儲存目錄,最後帶反斜線\,例:C:\TDDownload\ |
| “FileName” |
檔案名稱 |
| “FileSize” |
檔案大小,以位元組為單位,0表示大小未知 |
| “CompletedSize” |
已下載大小,以位元組為單位 |
| “Percent” |
下載進度,帶1位小數,例:70.0 |
| “Status” |
任務狀態,有以下6種狀態 。“running”: 運行狀態 。“stopped”: 停止狀態 。“failed”: 失敗狀態 。“success”: 成功狀態 。“creatingfile”:正在建立資料檔案 。“connecting”: 正在串連 |
7. GetTaskInfoStruct(INT pTaskInfo)
功能:查詢一個任務的所有資訊
| 參數名 |
含義 |
| pTaskInfo |
其實是THUNDER_TASKINFO類型的結構指標,調用前把它轉換為INT類型;調用後結構中將填充平台資訊,定義如下: typedef struct _THUNDER_TASKINFO { CHAR szURL[1024]; // 任務URL,預先填充 BOOL bTaskExists; // 任務是否存在,TRUE為存在 CHAR szPath[256]; // 下載的本地儲存路徑 CHAR szFileName[256]; // 本地檔案名稱 ULONGLONG nFileSize; // 檔案大小 ULONGLONG nCompletedSize; // 已完成的大小 CHAR szPercent[16]; // 完成的百分數,用 “56.8”的格式 CHAR szStatus[16]; // 目前狀態,定義同GetTaskInfo函數 } THUNDER_TASKINFO; 調用者先填充結構中的szURL成員,來指定需要查詢的任務的URL,然後等函數返回後就可以從其他成員中取得該任務的資訊。 |
本例所有代碼:
Imports System
Imports System.Text
Public Class frmThunderClass frmThunder
Private _iStartMode As Integer '訊雷任務下載開始模式
Private ThunderEng As New THUNDERAGENTLib.Agent '建立訊雷調用對象
Private Sub frmThunder_Load()Sub frmThunder_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub btnCancel_Click()Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Close()
End Sub
'開始下載任務
Private Sub btnStartDown_Click()Sub btnStartDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartDown.Click
Dim iOnlyFromOrigin, iOriginThreadCount As Integer
iOnlyFromOrigin = IIf(chkOnlyFromOrigin.Checked = True, 1, 0)
iOriginThreadCount = CInt(txtOriginThreadCounts.Text)
If chkDefault.Checked Then
iOriginThreadCount = -1
End If
ThunderEng.AddTask(txtURL.Text, txtSaveAsFileName.Text, txtSaveDir.Text, txtComment.Text, _ txtReferencePage.Text, _iStartMode, iOnlyFromOrigin, iOriginThreadCount)
ThunderEng.CommitTasks()
Timer1.Enabled = True
End Sub
Private Sub radMaual_Click()Sub radMaual_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles radMaual.Click, radImmediate.Click, radDefault.Click
Dim rad As RadioButton = CType(sender, RadioButton)
_iStartMode = CInt(rad.Tag)
End Sub
'當任務開始時定時查詢任務下載資訊
Private Sub Timer1_Tick()Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim sFileSize, sDownedSize, sStatus, sFileName, sPercent As String
Try
sStatus = ThunderEng.GetTaskInfo(txtURL.Text, "Status")
sFileSize = ThunderEng.GetTaskInfo(txtURL.Text, "FileSize")
sDownedSize = ThunderEng.GetTaskInfo(txtURL.Text, "CompletedSize")
sFileName = ThunderEng.GetTaskInfo(txtURL.Text, "FileName")
lblDownedSize.Text = String.Format(lblDownedSize.Tag, sDownedSize)
lblFileSize.Text = String.Format(lblFileSize.Tag, sFileSize)
lblTaskStatus.Text = String.Format(lblTaskStatus.Tag, sStatus)
lblFilename.Text = String.Format(lblFilename.Tag, sFileName)
sPercent = ThunderEng.GetTaskInfo(txtURL.Text, "Percent") '擷取下載百分比
lblProgress.Text = String.Format(lblProgress.Tag, sPercent.Remove(3, Len(sPercent) - 3))
Catch ex As Exception
End Try
End Sub
Private Sub chkOnlyFromOrigin_CheckedChanged_1()Sub chkOnlyFromOrigin_CheckedChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkOnlyFromOrigin.CheckedChanged
Panel1.Enabled = chkOnlyFromOrigin.Checked
End Sub
Private Sub GroupBox1_Enter()Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter
End Sub
End Class |