Encuentre imágenes aleatorias de http://i.imgur.com/

11

Logotipo de Imgur

Imgur es un servicio gratuito de alojamiento de imágenes. Mucha gente lo usa. Aquí hay un ejemplo de un enlace imgur: http://i.imgur.com/T55muMD.png . Escriba un programa que muestre continuamente enlaces imgur aleatorios (válidos). Por ejemplo, aquí hay un ejemplo de salida de mi programa (no se muestra porque contiene algunos trucos que tendrá que descubrir usted mismo):

http://i.imgur.com/uFmsA.png
http://i.imgur.com/FlpHS.png
http://i.imgur.com/eAbsZ.png
http://i.imgur.com/lEUsq.png
http://i.imgur.com/RuveH.png
http://i.imgur.com/BoEwB.png
http://i.imgur.com/HVFGQ.png
http://i.imgur.com/PZpMg.png
http://i.imgur.com/DezCY.png

Consejos útiles:

  • Cuando imgur era nuevo, se usaban enlaces de 5 letras.
  • Cuando imgur era nuevo, no se usaban números.
  • Puede usar esto para su ventaja: solo encuentre imágenes de enlace de 5 letras con solo letras. Eso es lo que hace mi programa.
  • Además, todas las imágenes se guardan como .png.

Requisitos:

  • Salida continua de enlaces imgur aleatorios
  • Enlaces considerados suficientemente "aleatorios" si se emiten 50 sin repeticiones
  • Cuando se visita, los enlaces deben ser una imagen
  • Los enlaces deben comenzar http://i.imgur.com/y terminar con.png
  • La puntuación es la cantidad de caracteres

Lo hice en Java (TERRIBLE para jugar al golf) en 452 caracteres. ¡No se muestra aquí porque contiene algunos trucos que tendrás que descubrir por ti mismo!)

Pomo de la puerta
fuente
55
Espera, ¿tu definición de aleatorio es que la salida no debe contener repeticiones?
Sr. Lister el
77
Advertencia: ¡ las imágenes pornográficas pueden estar presentes en imgur! =: o
Mr.Wizard
¿Son válidas todas las imágenes de 5 letras?
l4m2

Respuestas:

3

PHP 5.4, 76 caracteres

Las URL se generan en orden secuencial utilizando solo letras mayúsculas y nunca se repiten, cumpliendo con la letra de la especificación.

<?for($t=@ZZZZ;$t++;)file($u="http://i.imgur.com/$t.png")[0]>@F&&print"$u
";
Por favor levantese
fuente
4

Perl (93 + 4 = 97)

Usando el propio mecanismo aleatorio de imgur para obtener sus URL de imágenes, que no son URL png la mayoría de las veces:

$ perl -Mojo -E 'say+g("http://imgur.com/gallery/random")->dom->at("[rel=image_src]")->attrs("href")for+1..50'
http://i.imgur.com/7cNoA.jpg
...

(Necesitas Mojolicious para esto).

memowe
fuente
1
¡Eso es brillante, y no es justo!
elssar
@elssar Así es, al menos tu segundo punto. ;)
memowe
Oh, eso es inteligente :)
Pomo de la puerta
4

HTML (152)

<img src=x
onload=console.log(s);g()
onerror=g=function(){s='http://i.imgur.com/'+Math.random().toString(36).substr(2,6)+'.png';event.target.src=s};g()>

Esto registra todas las imágenes encontradas en la consola JavaScript usando console.log(). Funciona en todos los navegadores probados (Firefox, Chrome, IE9, Safari y Opera).

La parte divertida es que todo tipo de imágenes divertidas están apareciendo por un abrir y cerrar de ojos :).

¡Intentalo! (jsFiddle envuelve esto en una página HTML más completa, pero los navegadores también aceptan el elemento único).

¡Apoyos al increíble método de cadenas aleatorias con doble toque !

¿Dónde puedo ver la consola de JavaScript y las imágenes registradas?

  • Firefox: presione Control-Shift-K (Comando-Opción-K en la Mac). Deseleccione los botones de Red, CSS y JS allí, solo seleccione el botón Registro.
  • Opera: Presione Control + Shift + i, seleccione la pestaña Consola.
  • Chrome: presione Control + Mayús + i, seleccione la pestaña Consola. En la parte inferior, selecciona Registros.
  • Safari: básicamente como Chrome, pero primero asegúrese de que las herramientas de desarrollador de Safari estén activadas . Luego presione Control + Alt + C (en Windows, no estoy seguro en Mac) en lugar de Control + Shift + i, seleccione la pestaña Consola. En la parte inferior, selecciona Registros.
  • IE: Presione F12, seleccione la pestaña de la consola.
Thomas W.
fuente
Esto no cumple con los requisitos. Muchas de las imágenes que aparece no son válidas.
Pomo de la puerta
¿Qué quieres decir con "no válido"? En la consola, solo se registran las imágenes que se pudieron mostrar con éxito (consulte mi descripción actualizada).
Thomas W.
Ah, vale. Reintentando ahora. Editar: Chrome también parece estar registrando las imágenes no válidas.
Pomo de la puerta
Chrome por defecto combina mensajes de error y registros. En la parte inferior de la pestaña de la consola tiene Todos, Errores, Advertencias, Registros. Si no se pudo cargar una imagen, muestra un error 404 con la URL de la imagen. Si selecciona Registros, solo se mostrará la salida generada por mi código.
Thomas W.
3
Muchas de las URL de imágenes registradas solo devuelven la imagen de error de imgur estándar que dice "La imagen que está solicitando no existe o ya no está disponible". Supongo que se podría argumentar que todavía son resultados válidos según las reglas dadas, ya que el documento devuelto es una imagen.
Ilmari Karonen
3

Perl (87)

perl -pe's/\W//g;$_="http://i.imgur.com/$_.png\n";$_=""if`curl $_`=~/^</'</dev/urandom

Encontrar imágenes con mayúsculas, minúsculas y dígitos desde 0 hasta cualquier carácter, algún día.

Daniel
fuente
Jejeje, urandom
beary605
3

Mathematica , 108

Espacio en blanco agregado.

While[True,
 Import@# /. _Image :> Print@# &[
  "http://i.imgur.com/" <> "a" ~CharacterRange~ "z" ~RandomChoice~ 5 <> ".png"
 ]
]
Señor mago
fuente
2

Pitón ( 174 158 156)

Quiero nombres de módulos más cortos en Python. También es un método más fácil de obtener letras al azar. :)

import urllib,random
while 1:a='http://i.imgur.com/%s.png'%''.join(chr(random.randint(65,90))for i in'AAAAA');print('File'not in urllib.urlopen(a).read())*a

Explicación:

El operador de módulo en una cadena es el comando de formateo, en este caso reemplaza '% s' en la cadena con 5 letras mayúsculas al azar si
ael nombre del sitio web (tipo str)
('File'not in urllib.urlopen(a).read())es Verdadero cuando 'Archivo' (de '¡Archivo no encontrado!') se no se encuentran en el código HTML de la URL. (type bool)
bool* str= strif bool= True, por lo que solo se generará asi 'File' no se encuentra en el código HTML.

beary605
fuente
¿Qué parte de la especificación dice que tienes que usar letras mayúsculas y minúsculas? chr(random.randint(65,90))
Peter Taylor
Lo ejecuté y no produjo nada. Buen truco con 'File':) :)
Pomo de la puerta
@PeterTaylor: :) No sabía que había enlaces en imgur con solo letras mayúsculas, pero supongo que sería bastante obvio. ¡Gracias!
beary605
@Doorknob: genera una nueva línea a menos que se encuentre un enlace, entonces dará un enlace.
beary605
1
Cualquier secuencia de longitud 5 funcionará para sus 5 caracteres aleatorios, por lo que puede eliminar algunos caracteres usando algo como en 'XXXXX'lugar de range(5). Esto también tiene la ventaja de no requerir espacios en blanco entre este y el in.
Strigoides
2

Enfoque único de Python. 361 355 334 332 322 314 caracteres: un poco ofuscado, nada demasiado difícil. Puede haber una inusualmente alta densidad de imágenes de gatos, se le ha advertido.

import json as j,urllib as o,time as t;a=0
while 1:
 q="i.imgur";y,p=('data','children');r="njj";h="erqqvg.pbz/";u="uggc://"+h+"e/"+r;c=j.loads(o.urlopen(u.decode('rot13')+".json?sorted=new&after=%s"%a).read())[y]
 for s in c[p]:
  f=s[y];w=f['url'].strip('?1')
  if w.find(q)!=-1:print w
 a=c['after'];t.sleep(3)

Salida:

http://i.imgur.com/u3vyMCW.jpg
http://i.imgur.com/zF7rPAf.jpg
http://i.imgur.com/aDTl7OM.jpg
http://i.imgur.com/KONVsYw.jpg
http://i.imgur.com/RVM2pYi.png
http://i.imgur.com/tkMhc9T.jpg
http://i.imgur.com/KxUrZkp.gif
http://i.imgur.com/mnDTovy.jpg
http://i.imgur.com/WpuXbHb.jpg
http://i.imgur.com/qZA3mCR.jpg
http://i.imgur.com/AxMS1Fs.png
http://i.imgur.com/TLSd571.jpg
http://i.imgur.com/VfMhLIQ.jpg
http://i.imgur.com/Wu32582.jpg
http://i.imgur.com/hrmQL2F.jpg
http://i.imgur.com/Clg8N.jpg
http://i.imgur.com/7Wsko.jpg
http://i.imgur.com/Rhb0UNx.jpg
http://i.imgur.com/LAXAf45.gif
http://i.imgur.com/jhOLJ9B.jpg
http://i.imgur.com/FQ9NeAl.jpg
http://i.imgur.com/oqzf6tE.jpg
http://i.imgur.com/rnpXs1A.jpg
http://i.imgur.com/DfUIz6k.jpg
http://i.imgur.com/orfGA5I.jpg
http://i.imgur.com/wBT7JNt.jpg
http://i.imgur.com/RycK1m2.jpg
http://i.imgur.com/7j21FIR.jpg
http://i.imgur.com/z2tVnNC.jpg
http://i.imgur.com/mnsAGuF.jpg
http://i.imgur.com/vIZM1NY.jpg
http://i.imgur.com/JT3XRI4.jpg
http://i.imgur.com/SNpwTmp.jpg
http://i.imgur.com/u9ynLb9.jpg
http://i.imgur.com/DrFWsBP.jpg
http://i.imgur.com/rU6oyup.jpg
http://i.imgur.com/XxBD5nl.jpg
http://i.imgur.com/d09qQzP.jpg
http://i.imgur.com/vvPSbqI.jpg
http://i.imgur.com/1hdfobQ.jpg
http://i.imgur.com/4LLC6Vs.jpg
http://i.imgur.com/RfasxO2.jpg
http://i.imgur.com/BBcpOos.jpg
http://i.imgur.com/zMH8mgG.jpg
http://i.imgur.com/7g8k2Ww.jpg
Thomas O
fuente
3
Todas las imágenes ... son animales? Aquí hay algunos trucos: P +1 porque me gustan los animales lindos: 3
Pomo de la puerta
1

R, 182 caracteres

library(httr);while(0<1){s=paste("http://i.imgur.com/",paste(sample(c(LETTERS,letters),5),collapse=""),".png",sep="");if(HEAD(s)$headers$'content-type'=='text/html')'' else print(s)}
Paolo
fuente
1

Python, 153 caracteres

import string as s,random as w,requests as r
while 1:
 t='http://i.imgur.com/%s.png'%''.join(w.sample(s.letters,5))
 if'not'not in r.get(t).text:print t

Si bien esto funciona, es muy lento y puede tardar muchos segundos antes de devolver cualquier salida.

Inspirado por la solución de @ beary605, me salvó un montón de personajes ya que estaba planeando buscar imágenes por encabezado de tipo de contenido.

elssar
fuente
random.sample:) Esa es una forma mucho mejor de elegir personajes.
beary605
Sí, es increíble lo que Code golf te obligará a buscar en Google y aprender.
elssar
1

Golpe (129, 121) (117, 109)

Tengo dos versiones: una iterativa y una recursiva interminable (que lentamente consumirá toda la memoria). Ambas versiones verifican si realmente hay un archivo PNG presente (se ignoran los archivos jpg, gif y otros tipos de archivos).

Iterativo (antiguo) (129):

while true;do u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -s 2>&1|head -c4|grep PNG$ -q&&echo $u;done

Recursivo (antiguo) (121):

:(){ u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -s 2>&1|head -c4|grep PNG$ -q&&echo $u;:;};:

Nota : puede haber un problema de compatibilidad con grep. Mi manual grep dice que -ssilencia la salida de grep pero no hace nada. Sin embargo, usar --quiet, --silento en su -qlugar funciona.

EDITAR:

Usando encabezados de contenido ahora después de leer /codegolf//a/10499/7195 :)

Iterativo (117):

while true;do u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -sI|grep image -q&&echo $u;done

Recursivo (109):

:(){ u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -sI|grep image -q&&echo $u;:;};:
usuario701072
fuente
1

Rubí (103 caracteres)

require"open-uri";loop{u="http://i.imgur.com/#{rand(1e9).to_s(36)[0,5]}.png";open u rescue next;puts u}
cobarde anónimo
fuente
Tienes que agregar un .pngal final de la URL.
Pomo de la puerta
@Doorknob: Whoops, fixed
anónimo cobarde
0

Bash / herramientas de línea de comandos, 72 caracteres

Pedir prestada la técnica inteligente de @ memowe :

curl -sL http://imgur.com/gallery/random|grep e_sr|cut -d\" -f4;exec $0

Esto logra un ciclo continuo al volver a ejecutarse dentro del mismo espacio de proceso.

Trauma digital
fuente