Aqui os dejo esta aplicación que he terminado de programar hace unos excasos minutos.
Funcionamiento:
Es sencillo, introducimos el grupo de música del que queramos descargar la tablatura, nos muestra una lista de resultados con las tablaturas de las canciones de ese autor disponibles en formato guitar pro y nos ofrece la opción de descargar todas las tablaturas correspondientes a la canción que elijamos o descargar las tablaturas de todas las canciones de ese artista.
Notese que soy guitarrista asi que no busqueis tablaturas para piano ni cosas raras puesto que quizás no muestre resultados.
A considerar que el formato en el que baja las tablaturas es en *.GP4, lo cual quiere decir que si queremos abrir algún archivo deberemos instalar el Guitar Pro
Captura:
Descargar: Archivo adjunto en el foro
Código fuente
Edito:
*Añadida la opción para que busque todas las páginas
*Corrección de errores internos
*Corregido error producido en la descarga masiva para las canciones que no cumplían ciertos requisitos
Codigo fuente:
Código: Seleccionar todo
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\Downloads\Guitar_Pro_icon.ico
#AutoIt3Wrapper_outfile=tabdownlaoder.exe
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <inet.au3>
#include <IE.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <GuiStatusBar.au3>
$ver = "0.2"
$Form1 = GUICreate("GuitarProTab Downloader v" & $ver, 539, 424)
$Label1 = GUICtrlCreateLabel("Artista", 32, 24, 33, 17)
$Input1 = GUICtrlCreateInput("", 80, 22, 305, 21)
$Group1 = GUICtrlCreateGroup("Tablaturas", 8, 48, 521, 329)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Buscar", 416, 18, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Descargar", 8, 384, 75, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Descargar todas", 96, 384, 99, 25, $WS_GROUP)
$estado = GUICtrlCreateLabel("Estado: Sin acciones..", 200, 390, 600)
GUISetState(@SW_SHOW)
$hListView = GUICtrlCreateListView("Titulo|Enlace", 18, 70, 500, 300)
_GUICtrlListView_SetColumnWidth($hListView, 0, 220)
_GUICtrlListView_SetColumnWidth($hListView, 1, 260)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
rellenar(StringLeft(GUICtrlRead($Input1), 1), StringReplace(GUICtrlRead($Input1), " ", "_"))
Case $Button2
$total = _GUICtrlListView_GetItemCount($hListView)
For $a = 0 To $total
If _GUICtrlListView_GetItemSelected($hListView, $a) = True Then
$artista = _GUICtrlListView_GetItemText($hListView, $a)
$url = _GUICtrlListView_GetItemText($hListView, $a, 1)
GUICtrlSetData($estado, "Estado: Descargando " & $artista & " de " & GUICtrlRead($Input1))
download($url, _GUICtrlListView_GetItemText($hListView, 0), GUICtrlRead($Input1))
EndIf
Next
Case $Button3
$total = _GUICtrlListView_GetItemCount($hListView)
For $a = 0 To $total
$artista = _GUICtrlListView_GetItemText($hListView, $a)
$url = _GUICtrlListView_GetItemText($hListView, $a, 1)
GUICtrlSetData($estado, "Estado: Descargando " & $artista & " de " & GUICtrlRead($Input1))
download($url, _GUICtrlListView_GetItemText($hListView,$a, 0), GUICtrlRead($Input1))
Next
EndSwitch
WEnd
Func rellenar($inicial, $artista)
GUICtrlSetData($estado, "Estado: Oteniendo resultados...")
_GUICtrlListView_DeleteAllItems($hListView)
$dir = "http://www.911tabs.com/tabs/" & $inicial & "/" & $artista & "/guitar_pro_tabs/"
$code = _INetGetSource($dir)
$cuerpo = StringRegExp($code, '(?s)<td><a href="(.*?)">(.*?)</a></td>(?s)', 3)
For $a = 0 To UBound($cuerpo) - 2 Step 2
GUICtrlCreateListViewItem($cuerpo[$a + 1] & "|http://www.911tabs.com" & $cuerpo[$a], $hListView)
Next
;Ahora debe obtener todas las tabs de todas las páginas
$cuerpo = StringRegExp($code, '<A href="(.*?)" class="pag">.*?</A>', 3)
For $a = 0 To UBound($cuerpo) - 2
$dir = "http://www.911tabs.com" & $cuerpo[$a]
$code = _INetGetSource($dir)
$cuerpo = StringRegExp($code, '<td><a href="(.*?)">(.*?)</a></td>', 3)
For $a = 0 To UBound($cuerpo) Step 2
If $a == UBound($cuerpo) - 2 Then ExitLoop
GUICtrlCreateListViewItem($cuerpo[$a + 1] & "|http://www.911tabs.com" & $cuerpo[$a], $hListView)
Next
Next
GUICtrlSetData($estado, "Estado: Búsqueda completada")
EndFunc ;==>rellenar
Func download($link, $nombrearchivo, $artista)
Global $token,$tab_id
$code = _INetGetSource($link)
$cuerpo = StringRegExp($code, '<a href="(.*?)" rel="nofollow" class="link_list">.*?</a>', 3)
For $a = 0 To UBound($cuerpo) - 1
$link1 = "http://www.911tabs.com" & $cuerpo[$a]
$uguitarlink = _INetGetSource($link1)
$tablink = StringRegExp($uguitarlink, '<iframe src="(.*?)" id="LinkFrame" name="LinkFrame" frameborder=no style="width: 100%; height: 100%; overflow: auto"></iframe>', 3)
$taburl = $tablink[0]
If StringLeft($taburl, 31) == "http://tabs.ultimate-guitar.com" Then
If StringInStr($taburl, "online") Then
GUICtrlSetData($estado, "Estado: Tab no válida")
Else
$oIE = _IECreate($taburl, 0, 0)
_IELoadWait($oIE)
$sHTML = _IEDocReadHTML($oIE)
;
$oInputs = _IETagNameGetCollection($oIE, "input")
For $oInput In $oInputs
If $oInput.name == "tab_id" Then
$tab_id = $oInput.value
ExitLoop
EndIf
Next
For $oInput In $oInputs
If $oInput.name == "token" Then
$token = $oInput.value
ExitLoop
EndIf
Next
;
If $tab_id <> "" And $token <> "" Then
$tabname = $nombrearchivo & " id(" & $tab_id&")"
$tablink = "http://www.ultimate-guitar.com/tab_download.php?tab_id=" & $tab_id & "&token=" & $token
ConsoleWrite($tablink)
$folder2save = @DesktopDir & "\Downloaded Tabs\" & $artista
DirCreate($folder2save)
Local $tab = InetGet($tablink, $folder2save & "\" & $tabname & ".gp4", 1, 1)
Do
GUICtrlSetData($estado, "Estado: Descargando tab " & $a + 1 & " de " & UBound($cuerpo) - 1)
Until InetGetInfo($tab, 2) ; Check if the download is complete.
_IEQuit($oIE)
GUICtrlSetData($estado, "Estado: Tabs descargadas con éxito!")
Else
GUICtrlSetData($estado, "Estado: Error al descargar!")
EndIf
EndIf
Else
GUICtrlSetData($estado, "Estado: Tab no válida")
EndIf
Next
EndFunc ;==>download