H Как искал Дашу в Вконтакте. И нашел в черновиках Из песочницы
Как иногда бывает у многих стартаперов, я погрузился в изучение очередного сервиса в поисках идей и вдохновения для своего проекта. Жертвой стал сервис знакомств (мобильное приложение), который привлек меня механикой процесса взаимодействия между пользователями. Чтобы лучше понять и прочувствовать суть, изучить глубже соционику — надо побывать в шкуре обычного пользователя, ведь потыкать кнопки для этого недостаточно, да и совместить приятное с полезным никто не запрещал. Поэтому я начал знакомиться.
Внезапно у меня появилась навязчивая идея найти одну девушку, с которой я познакомился в этом приложении. Так или иначе, это желание было связано как с ней, так и ради спортивного интереса: «реально ли найти при таком раскладе?» Я продолжал общение, но не «выведывая» какие-то подробности, чтобы не упрощать себе поставленную задачу.
Чисто гипотетически.20к аватарок, но об этом ниже.
Шаг 1. Распознавание дубликатов фотографийОригинальные фотографии из приложения я вытащил то ли из кэша ios приложения (через программу iExplorer), то ли перехватив ответ с json объектом от сервера на запрос из приложения (используя Charles, о котором в контексте взлома iOS приложений писали на Хабре).
Как сравнить тысячи фотографий с имеющимися? Либо искать алгоритм и писать самому, либо искать готовый софт. Пару часов поисков и было найдено приложение PhotoSweeper (альтернатива для Windows AntiDupl.NET), которое ищет дубликаты среди файлов картинок по заданным параметрам (допустимая погрешность, алгоритм и т.п.).
Я боялся, что фотографии с сервиса могут быть обрезанными или с фильтром, которого не будет на оригинальных фотографиях, выгруженных из ВК. Поэтому сначала я проверил насколько хорошо работает программа (машинный поиск). Несколько танцев с настройками приложения и наиболее вменяемый результат был достигнут. А вот и нет, но обо всем по порядку.
Довольно любопытный результат поиска дубликатов через программу, который весьма отличается своей «человечностью» от остальных результатов:
Но чаще, к сожалению, результаты были такие (очевидно, что картинки отличаются):
Шаг 2. Жадные запросы к ВКонтактеИтак, теперь можно было приступать к следующему шагу, но я решил сначала пробежать «глазом» по поиску ВКонтакте прежде, чем приступать к коду. ВКонтакте по любому поисковому запросу отдает только 1000 результатов, а по факту Даш 20-ти лет из Москвы было 6950. Пробежав по первой доступной 1000 фотографий, я не нашел нужную.
Тыжпрограммисты не сдаются!
У меня уже было написано мобильное приложение работающее с API ВКонтакте, поэтому я сразу приступил к самому интересному: запросы. Надо было придумать как получить ссылки на аватарки
7 000 Даш 20-ти лет, которые учатся в Москве.
Очень понравилось работать с API Вконтакте. Очень удобно можно поиграть с запросами прямо на сайте:
Поиграл и решил ограничение обойти таким запросом: Дарья, 20 лет, *unversityId. Но это была не лучшая идея: ВК отдал
1000 идентификаторов Московских университетов, и как бы я не пытался «умерено» делать запросы по университетам, система меня блочила. Утром я проснулся и был доволен полученным кол-вом фотографий. Однако, оказалось, что в какой-то момент ВКонтакте перестал выдавать какие-либо результаты по запросам, а отдавал 0. Не проблема! Есть же и другие аккаунты, с которых можно догрузить оставшуюся часть. Сначала я быстренько сверил, не нашлось ли уже Той Самой через PhotoSweeper. Но нет. Поэтому спустя пару часов, через аккаунты друзей я получил оставшуюся часть фотографий и… Нет.
Шаг 3. А что если машины ошибаются? А что если люди тоже?Да, я еще раз взглянул на несколько её фотографий и приступил к просмотру тысяч Даш 20 лет. Нет, я не извращенец. Несколько часов и — УРА! Машина не ошиблась, там действительно нет заветной фотографии. С мыслью «надеюсь, что я не не узнал ее» предположил такой вариант: возраст был неверный. Возраст!? А что если город указан верно? Решено отвязаться от университетов и понадеяться, что надо просто сделать 12 запросов по каждому месяцу в году и добавить параметр «город»: «Москва». Я снова закинул удочку в поисках Дарьи, но уже 19-ти и 21-ти лет. Кстати, удивительно, что на запрос «Даша» ВК отдает меньше людей, чем на запрос «Дарья», хотя в результате видны оба варианта написания имени в обоих запросах. Задумался. Загрузил еще несколько тысяч фотографий. Затем повторяю процесс поиска через софтинку, и… нет?! Неужели снова придется смотреть тонну фотографий? Придется. Еще несколько часов с печеньками и… Ура! Машина не ошиблась снова! Что же теперь?
Шаг 4. Теперь уже сдаваться просто глупо30% это посторонние картинки или вопросики (их я сразу отсек еще до стадии загрузки). Выводы, которые я мог сделать после долгих дней поиска: 1) На её аватарке не её фото, или я лопух не узнал её. Тогда остается грузить больше 20 000+ аккаунтов и все фотографии из их альбома «Фотографии со страницы». Да, такую наглость мне точно не простит ВКонтакте. 2) Глядя на исходные фото предположил, что фильтры на них явно из Instagram. Тогда что? Может попробовать найти Даш в Instagram и выгрузить аватарки/фотографии оттуда (те, что, само собой, в открытом доступе)?
Собираюсь с мыслями. Это не трудно: всего 36 запросов. И никто меня не наругает. Открываю документацию по API Instagram. Кстати, ВКонтакте легко отдает аккаунты Instagram (и не только), если такой указан в анкете.
Грандиозный финал. ОтгадкаПо ходу действия рассказываю своему другу о своем приключении: исходные данные и то, что я уже попробовал. Не знаю как так случилось, но я даже и подумать не мог, что ему будет интереснее чуть больше, чем «хм, ну удачи». Через минуты две-три получаю от него сообщение «Я нашел ее!». Перечитал. Побледнел. Несколько суток мучений, а тут 2 минуты?
Смотрю ссылку. Да, это была она. Я сразу же взял id и тут же нашел его среди скачанных мною тысяч фотографий. Среди исходных фотографий этой фотографии не было. Да, люди ошибаются — на фото она, а я её просто не узнал (а ведь больше всего этого боялся).
Меня уже ничего не удивляло в тот момент, но обратил внимание вот еще на что: к этому времени аватарка в ВК стояла другая, не та, что выгрузилась у меня прошлой ночью. А это значит… а впрочем уже неважно.
— Как. — спросил я, добавив эмоций десятком смайликов. — Я просто ввел в гугле «как найти человека по фотографии»…
Уверен многие догадываются, какие ощущения после этой фразы у меня были. Но не всё так просто.
Решение оказалось не очевидное. Он посмотрел одно видео и на его основе вот что решил проделать — и это сработало:
1) Качаем расширение для Chrome «StopFake»; 2) Загружаем оригинальную фотографию к себе на стену (другое типа лички не срабатывает, но я особо не тестил)ж 3) Нажимаем на кнопочку расширения с желтой уточкой и — «вуаля»!
Как так вышло — для меня остается загадкой. Может кто-то и расскажет в комментариях. На видео же рассказывалось о том, как можно найти дубликаты в Вконтакте среди уже имевшихся на сайте. Вполне понятно, как это могло работать в результате репостов, а не после обычной закачки картинки на сайт.
ПослесловиеКогда я уже практически сдался и рассказал о затее девушке, она написала: «я думаю не найдешь». Вполне понятно, ведь она знала, что на аватарке не она. И практически в эту же минуту нашел, но всё же не я. Возможно, многому в этой истории поспособствовала судьба.
К плюсам своего путешествия отнесу то, что это было увлекательно и интересно. Не каждый день тебя так затягивает какая-то задача/цель. Немного прокачал навыки разработки, познакомился ближе с API ВКонтакте, Instagram. Наконец, смог узнать, на что способны доступные программы по поиску дубликатов.