Resulta que me robaron la notebook con mi querido GNU/Linux sabayon. Con ello, tuve que volverme a amigar con la pc de escritorio con windows 7 (todavía no lo consigo).
Con GNU/Linux, pasar tiempo en la consola es agradable, pero en windows ésto no sucede. Existe powershell, pero si por lo menos fuera más amigable...
Bien, entonces veamos el baso medio lleno y aprovechemos éste impass para aprender a usar powershell (incluso sirve para el trabajo).
Junto con mi notebook, se fueron un montón de imágenes y scripts que utilizaba para bajar mangas y leerlos tranquilamente desde mi teléfono... el leerlo desde la web me resulta incómodo, decae mucho el tener que esperar a que cargue la imagen para poder leer, un delay de 3 segundos (que aquellos que leen sabrán comprender).
Fue así que, con los pocos conocimientos que tenía, junto con los nuevos que fui aprendiendo, llegué a éste script, sólo funciona sobre submanga. Ejemplos de uso:
* Ejemplo 1, supongamos que quiero bajar todo Bleach (cosa que no va a pasar, aparentemente éste tipo de servidores detectan la intromisión de éstos bots y bloquean cada cierto tiempo, pero para bajar de a uno puede que sirva), la cosa sería:
Ésto lo que hace es generar una página cache, para luego no tener que volver a descargarla.
* Ejemplo 2: Supongamos que quiero ver cuáles son los últimos 10 capítulos que salieron de Bleach
Ahora, de nuevo, hay que tener presente que si existe la página cache la va a utilizar, ésto significa que puede que estemos consultando una página antigua y ya exista un nuevo capítulo, para evitar ésto se puede hacer utilizar el parámetro -invalidateCache.
* Ejemplo 3: bajar un rango de capítulos
(No lo probé, pero calculo que si no le pasamos el parámetro -from descargará desde el capítulo 1 hasta el que dice el parámetro -to, a la inversa si no le pasamos -to descargará desde -from hasta... 1000, un valor totalmente aleatorio tomando como referencia Bleach un manga con casi 600 capítulos (hasta la fecha), y el cual es muy extenso).
Realmente con la organización del código estoy bastante desconforme, pero el funcionamiento es muy lindo y el API de uso mucho mejor. Más allá de que lo... usé (y lo usaré), el objetivo final en realidad era aprender y ver qué es lo que tiene windows para ofrecer a un administrador de sistemas, gracias a ésto estoy empezando a entender el funcionamiento de powershell y la mecánica de uso, muy entretenida... pero está a años luz de lo que un sistema *NIX tiene para ofrecer con sus consolas en interfaces gráficas (alguien mencionó konsole?)
Con GNU/Linux, pasar tiempo en la consola es agradable, pero en windows ésto no sucede. Existe powershell, pero si por lo menos fuera más amigable...
Bien, entonces veamos el baso medio lleno y aprovechemos éste impass para aprender a usar powershell (incluso sirve para el trabajo).
Junto con mi notebook, se fueron un montón de imágenes y scripts que utilizaba para bajar mangas y leerlos tranquilamente desde mi teléfono... el leerlo desde la web me resulta incómodo, decae mucho el tener que esperar a que cargue la imagen para poder leer, un delay de 3 segundos (que aquellos que leen sabrán comprender).
Fue así que, con los pocos conocimientos que tenía, junto con los nuevos que fui aprendiendo, llegué a éste script, sólo funciona sobre submanga. Ejemplos de uso:
* Ejemplo 1, supongamos que quiero bajar todo Bleach (cosa que no va a pasar, aparentemente éste tipo de servidores detectan la intromisión de éstos bots y bloquean cada cierto tiempo, pero para bajar de a uno puede que sirva), la cosa sería:
Código:
.\get.ps1 -manga Bleach
* Ejemplo 2: Supongamos que quiero ver cuáles son los últimos 10 capítulos que salieron de Bleach
Código:
.\get.ps1 -manga Bleach -onlyTest
* Ejemplo 3: bajar un rango de capítulos
Código:
.\get.ps1 -manga Bleach -from 500 -to 510
Código:
Param (
[Parameter(Mandatory=$True)]
[string]$manga,
[int]$fromChapter=1,
[int]$toChapter=1000,
[switch]$invalidateCache,
[switch]$onlyTest
)
$ext = ".html"
$cache_path = "$pwd\tmp_$manga$ext"
if(-not $invalidateCache){
$invalidateCache = (-not (Test-Path $cache_path))
}
#Write-Host "$fromChapter ------ $toChapter"
$r = [regex]"submanga.com/$manga/\d+/[0-9]+"
$client = New-Object System.Net.WebClient
# Bajo la página principal
if($invalidateCache){
Write-Host "Bajando página principal"
Remove-Item $cache_path 2> Out-Null
$client.DownloadFile("http://submanga.com/$manga/completa", $cache_path)
}
$file = Get-Content $cache_path
# Nos quedamos con los capítulos que nos interesan
$all_matches = $r.Matches($file) | `
ForEach { $_.Captures[0].value } |`
Where-Object {
[int]$_.Split("/")[2] -ge [int]$fromChapter -and
[int]$_.Split("/")[2] -le [int]$toChapter
}
$all_matches = ($all_matches | Sort -desc { [int]$_.Split("/")[2]})
if($onlyTest){
Write-Host Last Chapters:
# mostrar los últimos 10 nomás.
$i = 0
$all_matches | ForEach {
Write-Host " Chapter:" $_.Split("/")[2]
$i++
if($i -gt 9){
exit
}
}
exit
}
$ext = ".jpg"
$all_matches | ForEach {
Sleep 4
$chapter = $_.Split("/")[2]
$flag = $_.Split("/")[3]
Write-Host "Descargando $_"
$client.DownloadFile("http://$_", "$pwd/tmp$chapter")
$chapter_content = [String]::Join(" ", (Get-Content tmp$chapter))
if($chapter_content -match "submanga.com/.{1,3}/$flag"){
$url = "http://" + $matches[0]
Write-Host "Encontrado comic $url"
del tmp$chapter
$client.DownloadFile($url, "$pwd/tmp_$chapter")
$chapter_content = [String]::Join(" ", (Get-Content tmp_$chapter))
del tmp_$chapter
if($chapter_content -match 'http://[iomg]{3}\.submanga.com/.+1\.jpg'){
$img_url = $matches[0].Replace("1.jpg", "")
Write-Host "Encontrada primera página $img_url"
md $chapter
$is_ok = 1
$i = 1;
Write-Host -noNewLine "Descargando página: "
while($is_ok -eq 1){
Write-Host -noNewLine $i-
$file_name = "$i$ext"
if($i -lt 10){
$file_name = "0$file_name"
}
try{
$client.DownloadFile("$img_url/$i$ext", "$pwd/$chapter/$file_name")
$i++;
}catch { $is_ok = 0; Write-Host "[FIN]"}
}
}
}
}