Automatice las descargas de imágenes del sitio web con autenticación, segunda parte
Esta pregunta se deriva de esta otra pregunta:Automatice las descargas de imágenes del sitio web con autenticación donde pregunté cómo descargar una imagen de un sitio web específico que requiere un inicio de sesión.
Hay dos sitios web de la misma compañía,cgwallpapers.com ygamewallpapers.com, ya que con la ayuda del usuario que respondió la otra pregunta, finalmente logré cómo automatizar la descarga de uno de los sitios web, no puedo reproducir los mismos pasos engamewallpapers.com sitio web.
Tal vez pueda estar equivocado con las cosas que voy a decir debido a mi inexperiencia en las solicitudes, así que si un ayudante / experto tiene tiempo, realmente sugiero verificar que los parámetros y otras cosas que voy a decir son como Estoy diciendo o no, como digo, puedo estar equivocado.
En cgwallpapers.com, básicamente configuré la consulta de esta manera para descargar un fondo de pantalla:
http://www.cgmewallpapers.com/members/getwallpaper.php?id=100&res=1920x1080
Pero descubrí que en gamewallpapers.com no puedo usar los mismos datos de publicación porque parece ser así:
En cgwallpapers es más fácil porque solo puedo usar un bucle incremental para los identificadores con la resolución de fondo de pantalla específica, pero con el sitio gamewallpapers.com no puedo entender cómo puedo automatizar las descargas de fondos de pantalla, parece necesitar un tratamiento totalmente diferente si no me equivoco.
Por lo tanto, no sé qué probar ni siquiera cómo hacerlo.
Después de iniciar sesión en gamewallpapers.com, esta es la forma en que intento descargar un fondo de pantalla, por supuesto, esto no funciona porque no estoy usando la consulta adecuada, pero este código funcionó para el sitio cgwallpaper.com, así que ' mostraré si puede ayudar para algo:
NOTA:WallpaperInfo
es un objeto no relevante que utilizo para devolver la secuencia de imágenes descargadas del fondo de pantalla, es mucho código, así que lo omití.
''' <summary>
''' Tries to download the specified wallpaper from GameWallpapers server.
''' </summary>
''' <param name="id">The wallpaper id.</param>
''' <param name="res">The wallpaper resolution.</param>
''' <param name="cookieCollection">The cookie collection.</param>
''' <returns>A <see cref="WallpaperInfo"/> instance containing the wallpaper info and the image stream.</returns>
Private Function GetWallpaperMethod(ByVal id As String,
ByVal res As String,
ByRef cookieCollection As CookieCollection) As WallpaperInfo
Dim request As HttpWebRequest
Dim url As String = String.Format("http://www.gamewallpapers.com/members/getwallpaper.php?id={0}&res={1}", id, res)
Dim contentDisposition As String
Dim webResponse As WebResponse = Nothing
Dim responseStream As Stream = Nothing
Dim imageStream As MemoryStream = Nothing
Dim wallInfo As WallpaperInfo = Nothing
Try
request = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
With request
.Method = "GET"
.Headers.Add("Accept-Language", "en-US,en;q=0.5")
.Headers.Add("Accept-Encoding", "gzip, deflate")
.Headers.Add("Keep-Alive", "300")
.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
.AllowAutoRedirect = False
.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0"
.KeepAlive = True
End With
If cookieCollection IsNot Nothing Then
' Pass cookie info so that we remain logged in.
request.CookieContainer = Me.SetCookieContainer(url, cookieCollection)
End If
webResponse = request.GetResponse
Using webResponse
contentDisposition = CType(webResponse, HttpWebResponse).Headers("Content-Disposition")
If Not String.IsNullOrEmpty(contentDisposition) Then ' There is an image to download.
Dim filename As String = contentDisposition.Substring(contentDisposition.IndexOf("=") + "=".Length).
TrimStart(" "c).TrimEnd({" "c, ";"c})
Try
imageStream = New MemoryStream
responseStream = webResponse.GetResponseStream
Using responseStream
Dim buffer(2047) As Byte
Dim read As Integer
Do
read = responseStream.Read(buffer, 0, buffer.Length)
imageStream.Write(buffer, 0, read)
Loop Until read = 0
responseStream.Close()
End Using
Catch ex As Exception
Throw
End Try
' This is the object that I'll return
' that I'm storing the url, the wallpaper id,
' the wallpaper resolution, the wallpaper filename
' and finally the downloaded MemoryStream (the wallpaper image stream)
wallInfo = New WallpaperInfo(url:=url,
id:=id,
resolution:=res,
filename:=filename,
imageStream:=imageStream)
End If ' String.IsNullOrEmpty(contentDisposition)
End Using ' webResponse
Catch ex As Exception
Throw
Finally
If webResponse IsNot Nothing Then
webResponse.Close()
End If
If responseStream IsNot Nothing Then
responseStream.Close()
End If
End Try
Return wallInfo
End Function
Private Function SetCookieContainer(ByVal url As String,
ByVal cookieCollection As CookieCollection) As CookieContainer
Dim cookieContainer As New CookieContainer
Dim refDate As Date
For Each oldCookie As Cookie In cookieCollection
If Not DateTime.TryParse(oldCookie.Value, refDate) Then
Dim newCookie As New Cookie
With newCookie
.Name = oldCookie.Name
.Value = oldCookie.Value
.Domain = New Uri(url).Host
.Secure = False
End With
cookieContainer.Add(newCookie)
End If
Next oldCookie
Return cookieContainer
End Function
Aquí está la fuente completa de la que estoy tratando de darme cuenta con un uso de ejemplo de cómo esperaba que funcionara (un bucle para incrementar los identificadores de los fondos de pantalla para automatizar las descargas), funciona perfecto cuando CAMBIA el nombre de la URL base degamewallpapers.com
acgwallpapers.com
, porque esta fuente solo funciona paracgwallpapers.com
pero solo lo estoy intentando congamewallpapers.com
url: