Finde zufällige Bilder von http://i.imgur.com/

11

Imgur Logo

Imgur ist ein kostenloser Image-Hosting-Service. Viele Leute benutzen es. Hier ist ein Beispiel für einen Imgur-Link: http://i.imgur.com/T55muMD.png . Schreiben Sie ein Programm, das kontinuierlich zufällige (gültige) Imgur-Links ausgibt. Hier ist zum Beispiel eine Beispielausgabe meines Programms (nicht gezeigt, da es einige Tricks enthält, die Sie selbst herausfinden müssen):

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

Nützliche Hinweise:

  • Als imgur neu war, wurden Links mit 5 Buchstaben verwendet.
  • Als imgur neu war, wurden keine Zahlen verwendet.
  • Sie können dies zu Ihrem Vorteil nutzen: Finden Sie nur 5-Buchstaben-Linkbilder mit nur Buchstaben. Das macht mein Programm.
  • Außerdem werden alle Bilder als gespeichert .png.

Bedarf:

  • Geben Sie kontinuierlich zufällige Imgur-Links aus
  • Links, die als ausreichend "zufällig" angesehen werden, wenn 50 ohne Wiederholungen ausgegeben werden
  • Links müssen beim Besuch ein Bild sein
  • Links müssen mit beginnen http://i.imgur.com/und mit enden.png
  • Punktzahl ist die Anzahl der Zeichen

Ich habe es in Java (SCHRECKLICH zum Golfen) in 452 Zeichen gemacht. Wird hier nicht gezeigt, da es einige Tricks enthält, die Sie selbst herausfinden müssen!)

Türknauf
quelle
5
Warten Sie, ist Ihre Definition von zufällig, dass die Ausgabe keine Wiederholungen enthalten sollte?
Herr Lister
7
Achtung: Auf imgur können pornografische Bilder vorhanden sein! =: o
Mr.Wizard
Sind alle 5-Buchstaben-Bilder gültig?
14m2

Antworten:

3

PHP 5.4, 76 Zeichen

URLs werden in sequentieller Reihenfolge nur mit Großbuchstaben generiert und niemals wiederholt, wobei der Buchstabe der Spezifikation erfüllt wird.

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

Perl (93 + 4 = 97)

Verwenden Sie den zufälligen Mechanismus von imgur , um die Bild-URLs abzurufen, bei denen es sich meistens nicht um PNG-URLs handelt:

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

( Dafür brauchst du Mojolicious .)

memowe
quelle
1
Das ist genial und daher nicht fair!
Elssar
@elssar Das stimmt, zumindest dein zweiter Punkt. ;)
memowe
Oh, das ist klug :)
Türknauf
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()>

Dies protokolliert alle gefundenen Bilder auf der JavaScript-Konsole mit console.log(). Funktioniert in allen getesteten Browsern (Firefox, Chrome, IE9, Safari und Opera).

Der lustige Teil ist, dass alle möglichen lustigen Bilder für einen Augenblick aufblitzen :).

Versuch es! (jsFiddle packt dies in eine vollständigere HTML-Seite, aber Browser akzeptieren auch das einzelne Element.)

Requisiten für die erstaunliche Zufallsstring-Methode von Doubletap !

Wo kann ich die JavaScript-Konsole und die protokollierten Bilder sehen?

  • Firefox: Drücken Sie Strg-Umschalt-K (Befehl-Option-K auf dem Mac). Deaktivieren Sie dort die Schaltflächen Net, CSS und JS, und klicken Sie nur auf die Schaltfläche Protokollierung.
  • Opera: Drücken Sie Strg + Umschalt + i und wählen Sie die Registerkarte Konsole.
  • Chrome: Drücken Sie Strg + Umschalt + i und wählen Sie die Registerkarte Konsole. Wählen Sie unten Protokolle aus.
  • Safari: Grundsätzlich wie Chrome, aber stellen Sie zunächst sicher, dass die Entwicklertools von Safari aktiviert sind . Drücken Sie dann Strg + Alt + C (unter Windows nicht sicher auf dem Mac) anstelle von Strg + Umschalt + i und wählen Sie die Registerkarte Konsole. Wählen Sie unten Protokolle aus.
  • IE: Drücken Sie F12 und wählen Sie die Registerkarte Konsole.
Thomas W.
quelle
Dies entspricht nicht den Anforderungen. Viele der angezeigten Bilder sind ungültig.
Türknauf
Was meinst du mit "ungültig"? In der Konsole werden nur Bilder protokolliert, die erfolgreich angezeigt werden konnten (siehe meine aktualisierte Beschreibung).
Thomas W.
Oh ok. Ich versuche es jetzt noch einmal. Bearbeiten: Chrome scheint auch die ungültigen Bilder zu protokollieren.
Türknauf
Chrome mischt standardmäßig Fehlermeldungen und Protokolle. Am unteren Rand der Konsolenregisterkarte befinden sich Alle, Fehler, Warnungen, Protokolle. Wenn ein Bild nicht geladen werden konnte, wird ein 404-Fehler mit der Bild-URL angezeigt. Wenn Sie Protokolle auswählen, sollte nur die von meinem Code generierte Ausgabe angezeigt werden.
Thomas W.
3
Viele der protokollierten Bild-URLs geben nur das Standard-Imgur-Fehlerbild zurück, das besagt: "Das von Ihnen angeforderte Bild ist nicht vorhanden oder nicht mehr verfügbar." Ich denke , man könnte argumentieren , dass diejenigen , sind nach wie vor gültige Ergebnisse nach den Regeln als gegeben an , da das zurückgegebene Dokument ist ein Bild.
Ilmari Karonen
3

Perl (87)

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

Suchen Sie eines Tages nach Bildern mit Groß-, Klein- und Ziffern von 0 bis zu beliebigen Zeichen.

Daniel
quelle
Hehehe, urandom
beary605
3

Mathematica , 108

Leerraum hinzugefügt.

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

Python ( 174 158 156)

Ich möchte kürzere Modulnamen in Python. Auch eine einfachere Methode, um zufällige Buchstaben zu erhalten. :) :)

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

Erläuterung:

Der Moduloperator für eine Zeichenfolge ist der Formatierungsbefehl. In diesem Fall ersetzt er '% s' in der Zeichenfolge durch 5 zufällige Großbuchstaben.
aDer Name (Typ str) der Website
('File'not in urllib.urlopen(a).read())ist True, wenn 'Datei' (aus 'Datei nicht gefunden!'). wird im HTML der URL nicht gefunden. (Typ bool)
bool* str= strif bool= True, wird also nur ausgegeben, awenn 'Datei' nicht im HTML-Code gefunden wird.

beary605
quelle
Welcher Teil der Spezifikation besagt, dass Sie sowohl Groß- als auch Kleinbuchstaben verwenden müssen? chr(random.randint(65,90))
Peter Taylor
Ich habe es ausgeführt und es wurde nichts ausgegeben. Netter Trick mit 'File'obwohl :)
Türknauf
@PeterTaylor: :) Ich wusste nicht, dass es auf imgur Links gibt, die nur Großbuchstaben enthalten, aber ich denke, das wäre offensichtlich genug. Vielen Dank!
beary605
@Doorknob: Es wird eine neue Zeile ausgegeben, sofern kein Link gefunden wird. Dann wird ein Link ausgegeben.
Beary605
1
Jede Sequenz der Länge 5 funktioniert für Ihre 5 zufälligen Zeichen, sodass Sie einige Zeichen rasieren können, indem Sie so etwas wie 'XXXXX'anstatt verwenden range(5). Dies hat auch den Vorteil, dass kein Leerzeichen zwischen ihm und dem erforderlich ist in.
Strigoides
2

Einzigartiger Python-Ansatz. 361 355 334 332 322 314 Zeichen - etwas verschleiert, nichts zu schwierig. Kann zu einer ungewöhnlich hohen Dichte an Katzenbildern führen, wurden Sie gewarnt.

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)

Ausgabe:

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.
quelle
3
Alle Bilder ... sind Tiere? Hier gibt es einige Tricks: P +1, weil ich die niedlichen Tiere mag: 3
Türknauf
1

R, 182 Zeichen

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
quelle
1

Python, 153 Zeichen

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

Während dies funktioniert, ist es blutig langsam und kann viele Sekunden dauern, bis eine Ausgabe zurückgegeben wird.

Inspiriert von der Lösung von @ beary605 - er hat mir eine Reihe von Zeichen erspart, als ich vorhatte, anhand des Headers vom Inhaltstyp nach Bildern zu suchen.

Elssar
quelle
random.sample:) Das ist eine viel bessere Art, Charaktere auszuwählen.
beary605
Ja, erstaunlich, welcher Code Golf Sie zu Google zwingen und lernen wird.
Elssar
1

Bash (129, 121) (117, 109)

Ich habe zwei Versionen: eine iterative und eine endlose rekursive (die langsam den gesamten Speicher verschlingen). Beide Versionen prüfen, ob tatsächlich eine PNG-Datei vorhanden ist (JPGs, GIFs und andere Dateitypen werden ignoriert).

Iterativ (alt) (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

Rekursiv (alt) (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;:;};:

Hinweis : Möglicherweise liegt ein Kompatibilitätsproblem mit grep vor. Mein grep-Handbuch besagt, dass die -sAusgabe von grep stummgeschaltet wird, aber nichts tut. Allerdings verwenden --quiet, --silentoder -qstattdessen arbeitet.

BEARBEITEN:

Verwenden Sie jetzt Inhaltsheader, nachdem Sie /codegolf//a/10499/7195 gelesen haben :)

Iterativ (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

Rekursiv (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
quelle
1

Rubin (103 Zeichen)

require"open-uri";loop{u="http://i.imgur.com/#{rand(1e9).to_s(36)[0,5]}.png";open u rescue next;puts u}
anonymer Feigling
quelle
Sie müssen .pngam Ende der URL ein hinzufügen .
Türknauf
@ Doorknob: Whoops, behoben
anonymer Feigling
0

Bash / Kommandozeilen-Tools, 72 Zeichen

Die clevere Technik von @ memowe ausleihen :

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

Dies erreicht eine kontinuierliche Schleife, indem es sich innerhalb desselben Prozessraums erneut ausführt.

Digitales Trauma
quelle