Descarga de un archivo de audio desde un sitio web

audio c# download html-agility-pack web

Pregunta

Lo que estoy tratando de hacer es descargar un archivo de audio de un sitio web. El archivo de audio se reproduce una vez que haces clic en las orejeras y se dispara un sonido para reproducir. Me preguntaba si es posible encontrar y descargar el sonido.

Mi intento de tratar de encontrarlo:

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 :(
        }

    }

Imagen de lo que estoy tratando de obtener y enlace al sitio web

Cualquier ayuda es apreciada :)

Respuesta aceptada

En primer lugar, si no tiene permisos del autor del sitio para hacer esto, probablemente no debería hacerlo.

Ahora, si usted tiene el permiso apropiado y una razón válida para hacerlo; puede inspeccionar la fuente y ver que no hay una función aparente adjunta a la imagen, y las imágenes no reproducen el sonido. Así que la funcionalidad es probablemente controlada con JavaScript.

Entonces, comienzas a mirar a través del JavaScript, buscando cosas que se adhieran al elemento de interés. Debería encontrar este código en pokedex.js :

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

Por eso, cuando hace clic en la imagen, una embed se añade etiqueta para el marcado. Mirando la etiqueta src, puede llegar a la conclusión de que los archivos están en /pokedex/images/cries/<id>.mp3 , donde el sitio envía el ID en una etiqueta con el identificador #identifier ID.

A partir de ahí, simplemente busque la ID para cada sonido que necesite y descárguela. Esto se hace descargando el marcado HTML, encontrando el identificador DIV e insertándolo en la plantilla de URL tal como se mencionó anteriormente:

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);
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué