Найти случайные изображения с http://i.imgur.com/

11

Логотип Imgur

Imgur - это бесплатный хостинг изображений. Многие люди используют это. Вот пример ссылки на imgur: http://i.imgur.com/T55muMD.png . Напишите программу, которая постоянно выводит случайные (действительные) imgur ссылки. Например, вот пример выходных данных моей программы (не показан, потому что она содержит некоторые трюки, которые вам придется выяснить самостоятельно):

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

Полезные подсказки:

  • Когда imgur был новым, использовались 5-буквенные ссылки.
  • Когда imgur был новым, числа не использовались.
  • Вы можете использовать это в своих интересах: найдите только 5-буквенные изображения ссылок только с буквами. Это то, что делает моя программа.
  • Также все изображения сохраняются как .png.

Требования:

  • Постоянно выводить случайные ссылки imgur
  • Ссылки считаются достаточно «случайными», если 50 выводятся без повторов
  • При посещении ссылки должны быть изображением
  • Ссылки должны начинаться с http://i.imgur.com/и заканчиваться.png
  • Оценка - это количество символов

Я сделал это на Яве (УЖАСНО для игры в гольф) за 452 символа. Здесь не показано, потому что он содержит некоторые хитрости, которые вам придется выяснить самостоятельно!)

Дверная ручка
источник
5
Подождите, ваше определение случайного, что вывод не должен содержать повторов?
Мистер Листер
7
Предупреждение: порнографические изображения могут присутствовать на Imgur! =: o
Mr.Wizard
Все ли 5-буквенные изображения действительны?
м2 19

Ответы:

3

PHP 5.4, 76 символов

URL генерируются в последовательном порядке, используя только заглавные буквы и никогда не повторяются, в соответствии с буквой спецификации.

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

Perl (93 + 4 = 97)

Использование собственного случайного механизма imgur для получения URL-адресов их изображений, которые в большинстве случаев не являются URL-адресами png:

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

(Вам нужен Mojolicious для этого.)

memowe
источник
1
Это блестяще, и так нечестно!
Elssar
@elssar Правильно, по крайней мере, ваше второе замечание. ;)
memowe
О, это умно :)
Дверная ручка
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()>

Это регистрирует все найденные изображения на консоли JavaScript, используя console.log(). Работает во всех протестированных браузерах (Firefox, Chrome, IE9, Safari и Opera).

Самое интересное, что всевозможные забавные картинки вспыхивают на мгновение ока :).

Попробуй! (jsFiddle превращает это в более полную HTML-страницу, но браузеры также принимают один элемент.)

Опора на удивительный метод случайных строк по Doubletap !

Где я могу увидеть консоль JavaScript и зарегистрированные изображения?

  • Firefox: нажмите Control-Shift-K (Command-Option-K на Mac). Отмените выбор кнопок Net, CSS и JS, выберите только кнопку Logging.
  • Opera: нажмите Control + Shift + i, выберите вкладку Console.
  • Chrome: нажмите Control + Shift + i, выберите вкладку Console. Внизу выберите Журналы.
  • Safari: в основном как Chrome, но сначала убедитесь, что инструменты разработчика Safari активированы . Затем нажмите Control + Alt + C (в Windows, не обязательно на Mac) вместо Control + Shift + i, выберите вкладку Консоль. Внизу выберите Журналы.
  • IE: нажмите F12, выберите вкладку консоли.
Томас В.
источник
Это не соответствует требованиям. Многие из всплывающих изображений недействительны.
Дверная ручка
Что вы подразумеваете под "не действительным"? В консоли регистрируются только те изображения, которые могут быть успешно отображены (см. Мое обновленное описание).
Томас В.
Ох, ну ладно. Повторная попытка сейчас. Редактировать: Chrome также регистрирует недействительные изображения.
Ручка двери
Chrome по умолчанию смешивает сообщения об ошибках и журналы. В нижней части вкладки консоли у вас есть Все, Ошибки, Предупреждения, Журналы. Если изображение не может быть загружено, оно отображает ошибку 404 с URL-адресом изображения. Если вы выберете Журналы, то должен отображаться только вывод, сгенерированный моим кодом.
Томас В.
3
Многие URL-адреса зарегистрированных изображений просто возвращают стандартное изображение ошибки imgur, которое говорит: «Запрашиваемое изображение не существует или больше не доступно». Я полагаю, можно утверждать, что это все еще действительные результаты в соответствии с заданными правилами, поскольку возвращаемый документ является изображением.
Ильмари Каронен
3

Perl (87)

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

Поиск изображений с прописными, строчными буквами и цифрами от 0 до любых символов, когда-нибудь.

Даниил
источник
Hehehe, urandom
beary605
3

Математика , 108

Пробел добавлен.

While[True,
 Import@# /. _Image :> Print@# &[
  "http://i.imgur.com/" <> "a" ~CharacterRange~ "z" ~RandomChoice~ 5 <> ".png"
 ]
]
Mr.Wizard
источник
2

Питон ( 174 158 156)

Я хочу более короткие имена модулей в Python. Также более простой способ получения случайных букв. :)

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

Объяснение:

Оператор модуля в строке - это команда форматирования, в этом случае он заменяет «% s» в строке на 5 случайных заглавных букв
a, если имя (тип str) веб-сайта
('File'not in urllib.urlopen(a).read())равно True, когда «Файл» (из «Файл не найден!») это не находится в HTML , в URL. (тип bool)
bool* str= strif bool= True, поэтому он будет выводиться только в том aслучае, если «Файл» не найден в коде HTML.

beary605
источник
Какая часть спецификации говорит, что вы должны использовать как прописные, так и строчные буквы? chr(random.randint(65,90))
Питер Тейлор
Я запустил его, и ничего не вышло. Хороший трюк с 'File'тем, чтобы :)
Дверная ручка
@PeterTaylor: :) Я не знал, что на imgur есть ссылки только с заглавными буквами, но я думаю, это будет достаточно очевидно. Благодаря!
beary605
@Doorknob: выводит новую строку, если ссылка не найдена, а затем дает ссылку.
beary605
1
Любая последовательность длиной 5 будет работать для ваших 5 случайных символов, так что вы можете сбрить несколько символов, используя что-то вроде, 'XXXXX'а не range(5). Это также имеет то преимущество, что не требует пробелов между ним и in.
Стригоидес
2

Уникальный подход Python. 361 355 334 332 322 314 символов - немного запутано, ничего сложного. Вас могут предупредить необычно высокая плотность изображений кошек.

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)

Выход:

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
Томас О
источник
3
Все изображения ... животные? Здесь происходит некоторая хитрость: P +1, потому что мне нравятся милые животные: 3
Ручка двери
1

R, 182 символа

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
источник
1

Питон, 153 символа

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

Хотя это работает, это чертовски медленно и может занять много секунд, прежде чем вернуть какой-либо вывод.

Вдохновленный решением @ beary605 - он спас мне кучу символов, так как я планировал проверить изображение по заголовку типа контента.

elssar
источник
random.sample:) Это гораздо лучший способ выбора персонажей.
beary605
Да, удивительно, что Code Golf заставит вас зайти в Google и узнать.
Elssar
1

Баш (129, 121) (117, 109)

У меня есть две версии: итеративная и бесконечная рекурсивная (которая медленно пожирает всю память). Обе версии проверяют, присутствует ли файл PNG (файлы jpg, gif и другие типы файлов игнорируются).

Итеративный (старый) (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

Рекурсивный (старый) (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;:;};:

Примечание : может быть проблема совместимости с grep. В моем руководстве по grep говорится, что -sвывод grep отключает, но ничего не делает. Однако, используя --quiet, --silentили -qвместо этого работает.

РЕДАКТИРОВАТЬ:

Использование заголовков контента теперь после прочтения /codegolf//a/10499/7195 :)

Итеративный (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

Рекурсивный (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
источник
1

Рубин (103 символа)

require"open-uri";loop{u="http://i.imgur.com/#{rand(1e9).to_s(36)[0,5]}.png";open u rescue next;puts u}
анонимный трус
источник
Вы должны добавить .pngв конце URL.
Дверная ручка
@ Doorknob: Упс, исправлено
анонимный трус
0

Bash / инструменты командной строки, 72 символа

Заимствование умной техники @ memowe :

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

Это обеспечивает непрерывный цикл путем повторного выделения себя в том же пространстве процесса.

Цифровая травма
источник