2013-03-24 278 views
0

我想要做的是從網站上下載音頻文件。音頻文件播放一次,你點擊小耳罩,它會觸發聲音播放。我想知道是否有可能找到並下載聲音。從網站下載音頻文件

我在試圖找到它的嘗試:

public void grabAudio() 
    { 
     string s = "http://pokedream.com/pokedex/pokemon/bulbasaur"; 

     HtmlWeb hw = new HtmlWeb(); 
     HtmlAgilityPack.HtmlDocument doc = hw.Load(s); 

     var audio = doc.DocumentNode.SelectNodes("//div[@class='triggers']//img#pokecry-trigger")[0]; 
     if (doc.DocumentNode.SelectNodes("//div[@class='triggers']//img#pokecry-trigger")[0] != null) 
     { 
      //I have no idea what im doing :(
     } 

    } 

Picture of what I am trying to getLink to website

任何和所有幫助表示讚賞:)

+0

請'PascalCase'您的功能!這看起來可能有些挑剔,但請按照命名約定。不要用C#編寫Java程序......(對不起,只要我看到有人在用'camelCase'就可以了) – antonijn 2013-03-24 10:31:22

+0

該站點可能使用javascript將函數附加到該元素的單擊事件。 – driis 2013-03-24 10:32:16

+0

在[fiddler](http://www.fiddler2.com/fiddler2/)這些類型的問題是一個很大的幫助... – rene 2013-03-24 10:35:13

回答

3

首先,如果你沒有網站作者的權限來做到這一點,你可能不應該這樣做。

現在,如果你有適當的權限和有效的理由做到這一點;您可以檢查信號源並查看圖像沒有明顯的功能 - 並且圖像無法播放聲音。所以這個功能很可能是用JavaScript來控制的。

所以,你開始瀏覽JavaScript,尋找重要元素的東西。你應該在pokedex.js找到這段代碼:

$('#pokecry-trigger').click(function() { 
    $('#pokecry').html('<embed src="/pokedex/images/cries/' + $('#identifier').text() + '.mp3" />'); 
    }); 

所以,當你點擊圖像,embed標籤添加到標記。查看src標籤,您可以得出結論:文件位於/pokedex/images/cries/<id>.mp3,其中站點輸出ID爲#identifier的標籤中的ID。

從那裏你只需找到你需要的每個聲音的ID,然後下載它。這是通過下載HTML標記,找到標識符DIV並將其插入URL模板,如上所述:

string id = "001"; // found in the markup 
string url = String.Format("http://pokedream.com/pokedex/images/cries/{0}.mp3", id); 
using(var cli = new System.Net.WebClient()) 
{ 
    var mp3Data = cli.DownloadData(url); 
} 
+0

1可愛解釋 – coolmine 2013-03-24 10:48:55

+0

哇,這個驚人的答案。只有一個問題,你是如何得出結論認爲「pokedex.js」與該元素相關的?總之非常感謝你。 – 2013-03-24 11:06:05

+0

我簡單地搜索了「pokecry-trigger」包含的js文件,因爲這個名字聽起來像什麼東西,將用作觸發器:-) – driis 2013-03-24 11:32:24