Script para descargar música y álbumes completos de GoEar desde Windows (PowerShell)

ACTUALIZACIÓN (19/02/2010): El Script ha sido modificado y vuelve a funcionar perfectamente ;)

Hace unos días publicaba un pequeño script Bash para descargar música de GoEar. Hoy os traigo un porte de ese mismo script a PowerShell, que vendría a ser el Bash de Windows pero no se parecen en nada :P

De paso le he metido esteroides al script, así que si lo invocáis “script UrlDeGoEar” se descargará el fichero exactamente igual que su versión de Bash. Sin embargo, si lo invocáis “script palabras clave de lo que queráis” realizará una búsqueda en GoEar y se bajará el mp3 si encuentra alguna coincidencia :D

Además, si le pasáis una url de gracenote, como esta: http://www.gracenote.com/search/album_details.php?tui_id=00c6abba5df653cd encontrará las canciones, las buscará en GoEar y se las bajará :D

function IsURL([string]$data) { return ($data.startswith("http")) }
function CreateSearchUrl([string]$data) { return "http://www.goear.com/search.php?q=$data".Replace(' ','+') }
function PrintBanner()
{
	Write-Host "GoEar Downloader for PowerShell - v0.1"
	Write-Host "Pablo Carballude - 20/01/2009"
	Write-Host ""
}

function DownloadFileFromURL([string]$url)
{
	$fileid = $url.Split('/')[4]
	echo "Looking for the mp3..."
	$xmlurl = "http://www.goear.com/localtrackhost.php?f=$fileid"
	$webclient = new-object net.webclient
	$webclient.headers.Add("Content-Type", "text/xml; charset=utf-8")
	$webclient.DownloadString($xmlurl) > temp.txt
	$chunks = (get-content temp.txt | select-string ".mp3").ToString().Trim().Split("=")
	$mp3url = $chunks[3].Split("`"")[1]
	$artist = $chunks[5].Split("`"")[1]
	$title = $chunks[6].Split("`"")[1]
	echo "Starting the download of $title..."
	[void][reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")
	(New-Object Microsoft.VisualBasic.Devices.Network).DownloadFile($mp3url, $artist+"-"+$title+".mp3", '', '', $true, 500,$true, 'DoNothing')
	echo "File downloaded :)"
}

function ProcessFileLine([string]$line)
{
	$data = $line.Split('=`"', [StringSplitOptions]::RemoveEmptyEntries)[3]
	echo "http://www.goear.com/$data"
	DownloadFileFromURL("http://www.goear.com/$data")
}

function LookForFile([string]$data)
{
	echo "Searching on GoEar..."
	$url = CreateSearchURL($data)
	(new-object net.webclient).DownloadString($url) > temp.txt
	$text = get-content temp.txt | select-string "href=`"listen"	
	foreach($line in ([string]$text).Split("<")){
		if($line.startswith("a title")){
			ProcessFileLine($line)
			rm temp.txt
			return
		}
	}
	echo "Sorry, I can't find the file :("
	rm temp.txt
}

function DownloadFilesListedOnGracenoteWeb([string]$url)
{
	$webclient = new-object net.webclient
	$webclient.headers.Add("Content-Type", "text/xml; charset=utf-8")
	$text = $webclient.DownloadString($url)
	$text > temp.txt
	$artist = get-content temp.txt | select-string "

" $artist = $artist.ToString().Trim().substring(15).Split("<")[0] $text = get-content temp.txt | select-string "class=`"track_name`"" foreach($line in ([string]$text).Split("<")){ if($line.startswith("div class=")){ echo "" $title = $line.substring(23) echo "Detected song $title" $tmp = $title + " " + $artist LookForFile($tmp) } } echo "All done :)" } PrintBanner if ($args[0].contains("http://www.goear.com")) { DownloadFileFromURL($args[0])} else { if ($args[0].contains("http://www.gracenote.com")) { DownloadFilesListedOnGracenoteWeb($args[0]) } else { LookForFile($args) } } # This was the old path # $xmlurl = "http://www.goear.com/files/xmlfiles/"+$fileid[0]+"/secm"+$fileid+".xml"

Por Carballude

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P

9 comentarios

  1. Hola he visto que ahora con los servicios online de downit que comunmente se bajaban las canciones de goear ahora baja un archivo mp3 secure_es.mp3 y no permite bajar la canción deseada, no estoy seguro pero creo que esa restricción es reciente, pero al leer tu articulo me interesé en lo que es Powershell y todo lo que permite automatizar y programar, pero bueno la pregunta es si aún con esta restricción de Goear es posible descargar los mp3 ???

  2. Cachis…. acabo de comprobarlo y no, no funciona. Actualizaré el post y si descubro una forma de hacerlo la publicaré.

    Gracias por el aviso Justibufidus ;)

  3. Por buda, que es eso de powerque O_O !! microsoft siempre ‘sobresaliendo’…parecen ecuaciones científicas xD copiaron tanto de gnu linux que se les olvido lo que es bash:

    #!/bin/bash
    echo "Introduce el id de la cancion"
    read SONGID
    echo "Buscando la ruta..."
    wget -nv -q "http://www.goear.com/local.php?f=$SONGID" -O "$SONGID.xml"
    SONGPATH=`grep -o "http://.*mp3" $SONGID.xml`
    ARTIST=`awk -F'"' '{ print $10 }' $SONGID.xml`
    TITLE=`awk -F'"' '{ print $12 }' $SONGID.xml`
    if [[ -z $TITLE ]]
    then
    echo "La cancion no existe"
    else
    echo "Descargando..."
    wget $SONGPATH -O "$ARTIST - $TITLE.mp3"
    echo "La descarga ha terminado"
    fi
    rm -f $SONGID.xml

    Saludos!

  4. Snake!, la PowerShell no tiene muy poco que ver con Bash. Para empezar, PowerShell está orientada a objetos y trabaja con .Net.

    A parte, la comparación de código tampoco es muy justa… tu script hace mucho menos que el que pongo. Aunque, tengo que darte la razón en que la sintaxis es muy verbosa… no anduvieron muy finos ahí.

    PD: ¡Gracias por la pista!

  5. Alguien sabe el codigo que utiliza dowint para que salga automaticamente el link?

    salu2
    muy bueno el blog!

  6. Mientras que algunas personas les encanta, otros lo encuentran demasiado duro para su gusto esteroides, es altamente anabólico y ligeramente androgénico. Está disponible en una píldora y un tiro de esteroides, también … Recomiendo este a cualquiera que esté buscando un servidor de proceso fácil con tarifas simples y un servicio excepcional en

  7. This spot is quickly and handy. iphone recambios the supervisor usually takes care of me. Every time anything fails with my cell phone for various motives, he fixes it very quickly. Excellent customer care and that i undoubtedly advise them!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *