En muchos desafíos de procesamiento de imágenes , la publicación contiene imágenes, que deben guardarse en un archivo para poder resolver el problema. Esta es una tarea manual especialmente tediosa. Nosotros, los programadores, no deberíamos tener que ser sometidos a tal trabajo pesado. Su tarea es descargar automáticamente todas las imágenes contenidas en una pregunta de Code Golf.SE.
Reglas
- Su programa puede conectarse a cualquier parte de
stackexchange.com
, pero no puede conectarse a ningún otro dominio, excepto las ubicaciones de las imágenes (es decir, no se moleste con un acortador de URL). - Un entero N se da como entrada, en la línea de comando o stdin.
- Se garantiza que la URL es un enlace válido a una pregunta de Code Golf.
http://codegolf.stackexchange.com/questions/N
- Cada imagen que se muestra en el cuerpo de la pregunta N debe guardarse en un archivo en la computadora local. Cualquiera de las siguientes ubicaciones es aceptable:
- El directorio actual
- Una entrada de directorio por el usuario
- Su programa no debe guardar archivos que no sean las imágenes en el cuerpo de la pregunta (por ejemplo, avatares de usuario o imágenes contenidas en las respuestas).
- Las imágenes deben guardarse con la misma extensión de archivo que la original.
Este es un código de golf : escriba el programa más corto que pueda.
Criterio de validez para respuestas
Hay varios casos límite posibles con múltiples imágenes del mismo nombre, texto con el mismo nombre que elementos HTML, etc. Una respuesta se invalidará solo si se puede demostrar que falla en alguna revisión de una pregunta publicada antes del 10 de enero de 2015 .
Respuestas:
Mathematica,
211210 bytesSin golf:
Es bastante sencillo. He configurado un filtro para la API de StackExchange, que solo devuelve el cuerpo de una pregunta. El código recupera la información de la pregunta con ese filtro y la analiza como JSON. Selecciono el elemento correcto (el cuerpo) y lo uso
ImportString
para analizar el HTML y filtrar todas las URL de las imágenes.FileNameTake@#~Export~Import@#
luego descarga cada una de las imágenes y la almacena en el directorio de trabajo actual con el mismo nombre de archivo que el de la URL.Puede encontrar el directorio de trabajo actual con
Directory[]
.En principio, hay una versión mucho más corta, porque en
ImportString
realidad puede descargar todos los archivos de inmediato, en lugar de solo darme las URL. Pero luego pierdo información sobre el tipo de archivo original (ya que se convierten enImage
objetos tras la descarga), por lo que solo puedo guardarlos como el mismo tipo (PNG, por ejemplo).fuente
Javascript -
149161 bytescon espacios en blanco
el script debe ejecutarse desde el sitio stackexchange para funcionar.
Se establecerá de forma predeterminada en la página actual si no se especifica ningún número de pregunta en la solicitudfuente
$('[src*="imgur"]',d)
, creo. Me gusta que esto se pueda ejecutar en la consola: gratificación instantánea.questions
puede acortarseq
, pero debe incluir lacodegolf.stackexchange.com
parte en lugar de depender de estar en esa página. @Josiah es posible incluir imágenes de otros dominios en las publicaciones.#question .post-text img
se puede acortar a.post-text:first img
o.post-text:eq(0) img
.Python 2 - 241 bytes
Bastante sencillo, probablemente se pueda jugar más al golf. Busco en el sitio todas las ocurrencias
img src=
entre la primera apariciónpost-text
y la/div
inmediatamente posterior. Cada url de imagen se lee y se guarda en el directorio de trabajo.fuente
[-9:]
) de la url de la imagen, que debe mantener su nombre de 5 caracteres y.png
ao.jpg
etc. Cortará los bytes del nombre de archivo si la extensión tiene más de 3 caracteres .for
bucle sea una línea.for p re.findall(...):f=open(...);f.write(...)
Mathematica, 195
Esto exporta imágenes de la misma manera que Martin hizo en su solución de Mathematica, lea su respuesta para obtener más información al respecto. Este enfoque es muy diferente al suyo, en lugar de analizar el resultado de la API, analizo la página HTML directamente. O, mejor dicho, analizo el XML simbólico que Mathematica puede generar a partir de HTML.
fuente
Python 2 -
398342334 bytesEl programa descarga la página SE, extrae la parte de publicación (el elemento div post-texto), encuentra las URL que terminan en una extensión de imagen y las descarga. Las imágenes se guardan como
img<n>.<ext>
en el directorio actual.Este programa también descargará imágenes que se proporcionan como un enlace, no solo imágenes incrustadas. Al dar a cada imagen un nombre de archivo único, también se evitan los conflictos de nombres.
fuente
questions
conq
(en la URL).Bash - 86 bytes
Nada wget no solucionará.
-np
evita que wget ingrese directorios superiores (Imgs de usuario)-A
solo toma archivos con la extensión que coincide con la lista presentada.-r
es una descarga recursiva-l
evita que wget vaya demasiado profundo.$1
es la pregunta para agarrar.fuente
questions
conq
en la URL.Nodo.js,
251247 bytesSe utiliza
request
para hacer HTTPGET
sycheerio
para analizar el HTML. Las colisiones de nombres se resuelven anteponiendo el índice de la imagen actual al nombre base de la URL del archivo. Las imágenes se guardan en el mismo directorio que el archivo actual.fuente
Lua, 200 bytes
Acepta el número como argumento de línea de comando.
Asume que cualquier
src=
atributo será para unaimg
etiqueta ya que estas son las únicas etiquetas consrc
atributos que permite el intercambio de pila (¿verdad?).También tenga en cuenta el
.. ...
. Estoy particularmente orgulloso de eso.fuente