Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch / Bash-Shell

Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 14-jun-2014, 07:41   #1
Gran Colaborador
 
Avatar de ajr784
 
Fecha de Ingreso: marzo-2007
Amigos 7
Mensajes: 1.869
Gracias: 37
Agradecido 391 veces en 338 mensajes.
Predeterminado Script powershell para submanga.com

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:
Código:
.\get.ps1 -manga Bleach
  
√Č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
Código:
.\get.ps1 -manga Bleach -onlyTest
  
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
Código:
.\get.ps1 -manga Bleach -from 500 -to 510
  
(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).

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]"}
      }
    }
  }
}
  
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?)
__________________

12 a√Īos viviendo en el pa√≠s de las maravillas, hasta que un boludo viene y te despierta con una patada en los huevos...
Gracias Presidente Mau
ajr784 est√° desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas est√°n Activado
[IMG] est√° Activado
El Código HTML está Desactivado
Trackbacks est√°n Activado
Pingbacks est√°n Activado
Refbacks est√°n Activado



Temas Similares
Tema Autor Foro Respuestas √öltimo mensaje
[BATCH] Recopilatorio de herramientas CommandLine. (Actualizado el 30/03/2012) EleKtro Batch / Bash-Shell 25 16-ene-2017 09:21
Adobe Captivate v6.0.1.240 ML [Espa√Īol] kimeraman Software 0 02-may-2013 23:31
Mejores Aplicaciones Android komkal Software y Recursos Android 3 31-jul-2012 05:43
Juegos HD para Android (Samsung Galaxy S2 y otros) almapura Software y Recursos Android 0 02-ene-2012 07:09
[Guia] : Iniciando en Ruby bigbear Scripts: Python, Perl y Otros 2 05-jul-2011 16:32



Portal Hacker
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0