2013-03-24 286 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