Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Descargar el archivo más reciente de un repositorio

Estas en el tema de Descargar el archivo más reciente de un repositorio en el foro de .NET en Foros del Web. Buenas, me estoy metiendo de lleno de un tema que desconozco por completo. El programa es bajo VB.NET con Windows Forms, y aunque ya he ...
  #1 (permalink)  
Antiguo 16/08/2013, 18:13
 
Fecha de Ingreso: noviembre-2009
Mensajes: 67
Antigüedad: 14 años, 5 meses
Puntos: 2
Descargar el archivo más reciente de un repositorio

Buenas, me estoy metiendo de lleno de un tema que desconozco por completo.

El programa es bajo VB.NET con Windows Forms, y aunque ya he hecho mis pinitos, con esto no sé por donde empezar.

http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/

Necesito que mi programa sepa buscar y descargar la versión más reciente de CraftBukkit de ese repositorio. Pero no mediante los metadatos, pues curiosamente me dice que la carpeta de la 1.6.2-R0.1-SNAPSHOT es más reciente que 1.6.2-R0.2-SNAPSHOT/

Por ejemplo, ahora mismo el archivo correspondiente a la versión más reciente que debería dar un programa que hiciera esto sería este: http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/1.6.2-R0.2-SNAPSHOT/craftbukkit-1.6.2-R0.2-20130818.053356-14.jar

Me han comentado que una cosa que podría usar es http://msdn.microsoft.com/es-es/library/system.net.http.httpclient.aspx, o también https://github.com/hhariri/EasyHttp

Este es el código que estoy utilizando por ahora, que aún solo funciona para descargar alguna versión en concreto.

Código vb:
Ver original
  1. ' 1. Listar los directorios de una dirección.
  2. ' 2. Obtener el directorio más reciente en función del que tenga números más altos en su nombre.
  3. ' 3. Listar los archivos con extensión ".jar" de ese directorio.
  4. ' 4. Obtener la dirección del archivo más reciente de la misma forma y asignársela a FileToDownload (Pongo ya una de forma temporal sólo para que funcione)
  5. Dim FileToDownload = "http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/1.6.2-R0.2-SNAPSHOT/craftbukkit-1.6.2-R0.2-20130818.053356-14.jar"
  6. ' 5. Asignarle el nombre del archivo más reciente a FileName (Pongo ya uno de forma temporal sólo para que funcione)
  7. Dim FileName = "craftbukkit-1.6.2-R0.2-20130818.053356-14.jar"
  8. My.Computer.Network.DownloadFile(FileToDownload, Application.StartupPath & "\versions\" & FileName)
  9. ' En lugar de esta última línea uso otro código más avanzado que no me congela la interfaz mientras realiza la descarga y además me permite realizar múltiples acciones ante eventos como fallo de la descarga, cancelado o cambio del progreso de la descarga, útil para poner una barra de progreso. Pero para el caso es irrelevante ya que ocuparía mucho espacio aquí, de todas formas para quien le interese: http://vbcity.com/forums/t/157974.aspx, la segunda respuesta.

Edito 1:

He descubierto un procedimiento más viable para lograr la dirección del archivo más reciente, lo dejo aquí anotado por si algún alma caritativa me ayuda con el código, pues aunque yo no paro de investigar, y con el tiempo lo acabaría logrando, un poco de ayudita no está mal.

1. Descargar este archivo y buscar las etiquetas <latest>1.6.2-R0.2-SNAPSHOT</latest>: http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/maven-metadata.xml

2. Añadirle a la dirección "http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/", el contenido de las etiquetas latest: http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/1.6.2-R0.2-SNAPSHOT/

3. Añadirle "maven-metadata.xml" y descargarlo: http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/1.6.2-R0.2-SNAPSHOT/maven-metadata.xml

4. Buscar en él:

<extension>jar</extension>
<value>1.6.2-R0.2-20130821.061651-17</value>

5. Añadirle a la dirección sin "maven-metadata.xml": "craftbukkit-" + el valor de las etiquetas value y ".jar". Queda así: http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/1.6.2-R0.2-SNAPSHOT/craftbukkit-1.6.2-R0.2-20130821.061651-17.jar

7. Descargar la URL con nombre de archivo: valor de las etiquetas value más ".jar".

Ya tenemos la versión más reciente.

Última edición por vistaero; 21/08/2013 a las 20:44
  #2 (permalink)  
Antiguo 22/08/2013, 17:50
 
Fecha de Ingreso: noviembre-2009
Mensajes: 67
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Descargar el archivo más reciente de un repositorio

Lo logré, pero creo que de una forma un poco chapuza, ya que tras un buen rato intentando hacer un lector de xml, no logré nada, decidí simplemente tratar el archivo xml como un archivo de texto plano en el que buscar la etiqueta correspondiente y aislar el valor, eliminando del principio y el final de la cadena la cantidad de caracteres que sé que siempre van a estar ocupando las etiquetas. Dejo aquí el código de un BackgroundWorker que hice para calcular la dirección:

Código vb:
Ver original
  1. Dim FileName
  2. Dim FileToDownload
  3. Private LatestVersionFolder As String
  4. Private LatestVersionFile As String
  5. Private UrlDownload
  6.  
  7.     Private Sub FileURLCalculator_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles FileURLCalculator.DoWork
  8.         Dim CraftBukkitUrl As String = "http://repo.bukkit.org/content/groups/public/org/bukkit/craftbukkit/"
  9.         FileToDownload = CraftBukkitUrl & "maven-metadata.xml"
  10.         FileName = "maven-metadata.xml"
  11.         wc = New System.Net.WebClient()
  12.         AddHandler wc.DownloadProgressChanged, AddressOf OnDownloadProgressChanged
  13.         AddHandler wc.DownloadFileCompleted, AddressOf OnFileDownloadCompleted
  14.         wc.DownloadFile(New Uri(FileToDownload), Application.StartupPath & "\versions\temp\" & FileName)
  15.  
  16.         Dim xmlfile As Object = System.IO.File.ReadAllLines(Application.StartupPath & "\versions\temp\" & "maven-metadata.xml")
  17.         For Each line As String In xmlfile
  18.             If line.StartsWith("    <latest>") Then
  19.                 Dim line2 As String
  20.                 Dim line2l As Integer
  21.                 line2 = line.Remove(0, 12)
  22.                 line2l = line2.Count - 9
  23.                 line2 = line2.Remove(line2l, 9)
  24.                 LatestVersionFolder = line2
  25.             End If
  26.         Next
  27.  
  28.         Dim Url1 As String = CraftBukkitUrl & "/" & LatestVersionFolder & "/" & FileName
  29.         wc.DownloadFile(New Uri(Url1), Application.StartupPath & "\versions\temp\" & FileName & "2")
  30.         wc.Dispose()
  31.         Dim xmlfile2 As Object = System.IO.File.ReadAllLines(Application.StartupPath & "\versions\temp\" & "maven-metadata.xml2")
  32.         For Each line As String In xmlfile2
  33.             If line.StartsWith("        <value>") Then
  34.                 Dim line2 As String
  35.                 Dim line2l As Integer
  36.                 line2 = line.Remove(0, 15)
  37.                 line2l = line2.Count - 8
  38.                 line2 = line2.Remove(line2l, 8)
  39.                 LatestVersionFile = line2
  40.             End If
  41.         Next
  42.  
  43.         UrlDownload = CraftBukkitUrl & LatestVersionFolder & "/craftbukkit-" & LatestVersionFile & ".jar"
  44.         FileURLCalculator.Dispose()
  45.  
  46.     End Sub

Etiquetas: net, repositorio, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:17.