Кто не знает, вот ресурс, о котором я говорю:
chan.sankakucomplex.com/?tags=rating:safeНесколько дней назад они запретили показ изображений по прямым ссылкам.
(читать дальше)
То есть, вам присылают, допустим, какое-нибудь:
chan.sankakustatic.com/data/9a/b6/9ab6330330995...
( http://chan.sankakustatic.com/data/9a/b6/9ab63303309957dd06be2462e1df846f.jpg )
А вы открываете... и видите, собственно, то, что видите. Баннер с рекламой ресурса.
Видимо, они борются с хотлинкингом. Меня такое положение дел не устраивает, но не потому, что я фанат хотлинкинга, а потому что я хочу, (вырезано), видеть картинку по её адресу, а ещё у меня в асечке бот, который автоматом картинки закачивает, и я хочу их получать по мере присылания, а не вручную ходить по ссылкам и собирать.
Итак, сегодня мы поговорим о том, что делать лицам, которым прислали (сейчас или пять лет назад) такой адрес, а теперь они не могут его больше открыть, потому что там тот баннер или по другим причинам (в ряде других случаев эти знания тоже могут быть полезны). Делать, в смысле, для того, чтобы всё-таки получить доступ к картинке тем или иным способом.
Способ первый. Как это банально не звучит, это гугл.
Но не на всех картинках этот способ сработает, потому что они могут быть не проиндексированы. Вставлять надо только само имя файла, то есть, в нашем примере, 9ab63303309957dd06be2462e1df846f.jpg . Результатов на момент написания нет.
www.google.ru/search?q=9ab63303309957dd06be2462...
Ну, они могут появиться позже. Если вас удивило, почему следует искать по такому странному имени, похожему на случайный набор цифр и букв, переходите в следующую секцию, там об'яснено.
Способ второй. Поиск по хешу.
Что такое хеш? Это определённая не очень длинная последовательность символов, которая математически вычисляется на основе файла. У одинаковых файлов хеш одинаковый (всегда), а у разных -- разный (почти всегда). Близким к термину "хеш" является термин "контрольная сумма", о которой знают некоторые лица, работающие с архивами.
Где же этот хеш взять? А прямо в имени файла. На Санкаку и многих таких данбоору-подобных сайтах вместо имени файла пишется хеш, вычисленный по алгоритму MD5. Хэш считается у файла в целом. То есть, хеш изображения -- 9ab63303309957dd06be2462e1df846f . Открываем Санкаку Комплекс, и пишем в строке поиска:
md5:9ab63303309957dd06be2462e1df846f
(ссылка сразу для просмотра результатов:
chan.sankakucomplex.com/?tags=md5%3A9ab63303309...
)
Voila! У нас есть картинка. Дальше её можно открывать и делать с ней что захотите.
Если на том хостинге, с которого вам кидали, картинки уже нет, или сам хостинг почил в бозе или отчалил в неизвестном направлении, не отчаивайтесь, та же картинка может быть на другом. Вот, например, на данбоору:
danbooru.donmai.us/post?tags=md5%3A9ab633033099...
тот же хеш, та же картинка.
А вот, например, на кона-тян нету:
konachan.com/post?tags=md5%3A9ab63303309957dd06...
Теперь понятно, почему в гугле следует искать по этому имени, ведь это имя -- не случайный набор, и у всех, кто качал с подобных сайтов, скорее всего, имя файла будет такое. А если даже и нет, других имён у нас всё равно нет.
Способ третий. Читерский, он же самый правильный. Подмена реферера.
Реферер -- это строка, которая "сдаёт" загружаемой странице, откуда мы пришли. Отсюда всякие статистики посещений и узнают подобную информацию. Любой браузер, если не настроен специальным образом, будет передавать эту строку. Если вы зашли на баш-орг-ру и щёлкнули по цитате, открывшаяся страница будет знать, что вы пришли с главной страницы сайта. А если вам прислали цитату по асе, она получит пустую строку, потому что ася -- это не веб-страница (=. С онлайн-ася-клиентами не знаю, что.
Вот Санкаку Комплекс и проверяет поле "реферер", чтобы узнать, вы пришли сами или со странички с постом. Если сами, показывается тот баннер. А если пришли с самого сайта Санкаку, показывается картинка. Осталось выяснить, как заставить Санкаку думать, что мы пришли с него, а не сами по себе. Для этого существуют специальные браузерные плагины. Например, для Firefox есть RefControl.
Итак, задаём ему для сайта chan.sankakustatic.com в качестве реферера --
"http://chan.sankakucomplex.com/post/show/*" (без кавычек).
Вместо звёздочки может быть что угодно. Если переходить по честному, там, где звёздочка, будет номер поста с картинкой. Номер, к счастью, они пока не проверяют, но если паранойя усилится, могут начать проверять (о боже, сколько это лишних запросов к БД).
UPD. 2013/02/28 Похоже, теперь номер проверяют, но я не разобрался, действительно ли они сверяют номера или просто смотрят, чтобы было какое-то число.
То же (не точно то же, а по аналогии сделанное) будет работать и для idol.sankakucomplex.com .
Способ третий с половиной
(то же, что и третий, но на PHP)
if(strpos($url,"chan.sankaku")!==FALSE)
{
$opts = array('http'=>array(
'method'=>"GET",
'header'=>"Referer: http://chan.sankakucomplex.com/post/show/\r\n"));
$context = stream_context_create($opts);
}
else
$context=stream_context_create();
if ($fd = fopen ($url, "rb",FALSE,$context))
...
Или вместо последнего:
$data = file_get_contents ($url,FALSE,$context));
@темы:
Программирование,
Борьба с техникой,
Статьи,
Очевидное-невероятное
02.11.2013 в 18:21
02.11.2013 в 18:34