Encontre imagens aleatórias em http://i.imgur.com/

11

Imgur logo

Imgur é um serviço gratuito de hospedagem de imagens. Muitas pessoas usam isso. Aqui está um exemplo de um link imgur: http://i.imgur.com/T55muMD.png . Escreva um programa que produz continuamente links aleatórios (válidos) para imgur. Por exemplo, aqui está um exemplo de saída do meu programa (não mostrado porque contém alguns truques que você precisará descobrir):

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

Dicas úteis:

  • Quando imgur era novo, eram usados ​​links de 5 letras.
  • Quando imgur era novo, os números não eram usados.
  • Você pode usar isso para sua vantagem: encontre apenas imagens de links de 5 letras apenas com letras. É isso que meu programa faz.
  • Além disso, todas as imagens são salvas como .png.

Requisitos:

  • Saída contínua de links imgur aleatórios
  • Links considerados suficientemente "aleatórios" se 50 forem emitidos sem repetições
  • Quando visitados, os links devem ser uma imagem
  • Os links devem começar http://i.imgur.com/e terminar com.png
  • Pontuação é quantidade de caracteres

Eu fiz isso em Java (TERRÍVEL para jogar golfe) em 452 caracteres. Não mostrado aqui porque contém alguns truques que você terá que descobrir por si mesmo!)

Maçaneta da porta
fonte
5
Espere, sua definição de aleatório é que a saída não deve conter repetições?
Lister
7
Atenção: imagens pornográficas podem estar presentes no imgur! =: o
Sr.Wizard
Todas as imagens de 5 letras são válidas?
L4m2 6/01/19

Respostas:

3

PHP 5.4, 76 caracteres

Os URLs são gerados em ordem sequencial usando apenas letras maiúsculas e nunca se repetem, atendendo à letra da especificação.

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

Perl (93 + 4 = 97)

Usando o próprio mecanismo aleatório do imgur para obter seus URLs de imagem, que não são URLs png na maioria das vezes:

$ 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
...

(Você precisa de Mojolicious para isso.)

memowe
fonte
1
Isso é brilhante e, portanto, não é justo!
elssar
@elssar Isso mesmo, pelo menos o seu segundo ponto. ;)
memowe
Oh, isso é :) inteligente
Doorknob
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()>

Isso registra todas as imagens encontradas no console JavaScript usando console.log(). Funciona em todos os navegadores testados (Firefox, Chrome, IE9, Safari e Opera).

A parte divertida é que todos os tipos de imagens engraçadas estão piscando para um piscar de olhos :).

Tente! (jsFiddle agrupa isso em uma página HTML mais completa, mas os navegadores também aceitam o único elemento.)

Adereços para o método incrível seqüência aleatória por doubletap !

Onde posso ver o console JavaScript e as imagens registradas?

  • Firefox: Pressione Control-Shift-K (Command-Option-K no Mac). Desmarque os botões Net, CSS e JS, selecione apenas o botão Log.
  • Opera: Pressione Control + Shift + i, selecione a guia Console.
  • Chrome: pressione Control + Shift + i, selecione a guia Console. Na parte inferior, selecione Logs.
  • Safari: basicamente como o Chrome, mas verifique primeiro se as ferramentas de desenvolvedor do Safari estão ativadas . Em seguida, pressione Control + Alt + C (no Windows, não tem certeza no Mac) em vez de Control + Shift + i, selecione a guia Console. Na parte inferior, selecione Logs.
  • IE: Pressione F12, selecione a guia console.
Thomas W.
fonte
Isso não atende aos requisitos. Muitas das imagens exibidas não são válidas.
Maçaneta
O que você quer dizer com "inválido"? No console, apenas as imagens que podem ser exibidas com êxito são registradas (consulte minha descrição atualizada).
Thomas W.
Ah, tudo bem. Tentando novamente agora. Editar: o Chrome parece estar registrando as imagens inválidas também.
Maçaneta
Por padrão, o Chrome combina mensagens de erro e logs. Na parte inferior da guia do console, você tem Todos, Erros, Avisos, Logs. Se uma imagem não puder ser carregada, ela exibirá um erro 404 com o URL da imagem. Se você selecionar Logs, somente a saída gerada pelo meu código deverá ser exibida.
Thomas W.
3
Muitos URLs da imagem registrada retornam a imagem de erro padrão do imgur que diz "A imagem que você está solicitando não existe ou não está mais disponível". Suponho que alguém possa argumentar que esses ainda são resultados válidos sob as regras fornecidas, pois o documento retornado é uma imagem.
Ilmari Karonen
3

Perl (87)

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

Localizando imagens com maiúsculas, minúsculas e dígitos de 0 a qualquer caractere, algum dia.

Daniel
fonte
Hehehe, urandom
beary605
3

Mathematica , 108

Espaço em branco adicionado.

While[True,
 Import@# /. _Image :> Print@# &[
  "http://i.imgur.com/" <> "a" ~CharacterRange~ "z" ~RandomChoice~ 5 <> ".png"
 ]
]
Mr.Wizard
fonte
2

Python ( 174 158 156)

Quero nomes de módulo mais curtos em Python. Também é um método mais fácil de obter letras aleatórias. :)

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

Explicação:

O operador de módulo em uma string é o comando de formatação; nesse caso, ele substitui '% s' na string por 5 letras maiúsculas aleatórias. O
anome do site (tipo str)
('File'not in urllib.urlopen(a).read())é True quando 'File' (de 'File not found!') é não encontrada no HTML da URL. (type bool)
bool* str= strif bool= True, portanto, somente será gerado ase 'Arquivo' não for encontrado no código HTML.

beary605
fonte
Que parte da especificação diz que você precisa usar letras maiúsculas e minúsculas? chr(random.randint(65,90))
Peter Taylor
Eu executei e não produziu nada. Bom truque com o 'File'que :) :)
Maçaneta da porta
@ PeterTaylor: :) Eu não sabia que havia links no imgur apenas com letras maiúsculas, mas acho que isso seria óbvio o suficiente. Obrigado!
beary605
@ Doorknob: Ele gera uma nova linha, a menos que um link seja encontrado, e ele fornece um link.
beary605
1
Qualquer sequência de tamanho 5 funcionará para seus 5 caracteres aleatórios, para que você possa raspar alguns caracteres usando algo como 'XXXXX'e não range(5). Isso também tem a vantagem de não exigir espaço em branco entre ele e o in.
Strigoides
2

Abordagem Python exclusiva. 361 355 334 332 322 314 caracteres - um pouco ofuscado, nada muito difícil. Pode resultar em uma densidade incomumente alta de fotos de gatos, você foi avisado.

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)

Resultado:

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
fonte
3
Todas as imagens ... são animais? Há alguns truques aqui: P +1 porque eu gosto dos animais fofos: 3
Maçaneta da porta
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
fonte
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

Enquanto isso funciona, é muito lento e pode levar muitos segundos antes de retornar qualquer saída.

Inspirado na solução de @ beary605 - ele me salvou um monte de caracteres, enquanto eu planejava procurar imagens pelo cabeçalho do tipo de conteúdo.

elssar
fonte
random.sample:) Essa é uma maneira muito melhor de escolher personagens.
precisa saber é o seguinte
Sim, incrível o que o Code Golf o levará ao Google e aprenda.
elssar
1

Bash (129, 121) (117, 109)

Eu tenho duas versões: uma iterativa e uma interminável recursiva (que consumirá lentamente toda a memória). Ambas as versões verificam se existe realmente um arquivo PNG (jpg, gif e outros tipos de arquivos são ignorados).

Iterativo (antigo) (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

Recursiva (antiga) (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 : Pode haver um problema de compatibilidade com o grep. Meu manual grep declara que -ssilencia a saída do grep, mas não faz nada. No entanto, usando --quiet, --silentou -qem vez disso funciona.

EDITAR:

Usando cabeçalhos de conteúdo agora depois de ler /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

Recursiva (109):

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

Ruby (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}
covarde anônimo
fonte
Você precisa adicionar um .pngno final do URL.
Maçaneta
@Doorknob: Opa, fixo
covarde anônimo
0

Bash / ferramentas de linha de comando, 72 caracteres

Emprestando a técnica inteligente de @ memowe :

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

Isso alcança um loop contínuo reexecutando-se no mesmo espaço de processo.

Trauma Digital
fonte