Foursquare имеет клиентов для Android и iOS и требует для своей работы GPS.
В результате 4sq скопил огромное количество различных геообъектов, которыми он даже делится с партнерами (тем же Instagram).
Для любителей заниматься ерундой, 4sq придумал бэиджи - особые ачивки, которые вы получаете, например, за посещение всех гей-баров Амстердама.
Один из немногих полезных бейджей - бейдж Мэра (Mayor badge), который выдается пользователю, имеющему максимальное количество регулярных чекинов (check-in, отметка о посещении геообъекта).
Т.к. любому магазину/кафе выгодно иметь постоянных клиентов, они частенько предлагают особые условия для своего Мэра.
Кроме того, ваше "мэрство" видят все посетители этого объекта, что делает вас просто очень крутым в их глазах =8).
Как и в реальной жизни, существует несколько способов стать Мэром, минуя "классические" варианты. Об этом и поговорим дальше...
Что нужно чтобы стать Мэром (кроме членства в ЕР)?
- наибольшее количество чекинов за последние 60 дней;
- засчитывается только 1 чекин в день.
Кроме того 4sq имеет защиту от чекин флуда:
- не более 3 чекинов за 15 минут;
- не более 6 чекинов в час;
- не более 30 разных чекинов за 24 часа;
- "обнуление" дневного счетчика в 16:00 (Москва).
Способ первый. Фальшивые GPS координаты.
Чтобы ваш чекин был "засчитан" для Мэрства, вы должны находится непосредственно с требуемым геобъектом. Сделать это проще всего, запустив на телефоне утилиту, эмулирующую работу GPS.
Плюсы такого способа - 100% гарантия правильного чекина. Минусы - 100% ручная работа =(.
Способ второй. Developer api.
Зачем издеваться над телефоном, если можно отправлять команды напрямую на сервер через 4sq developer api!
К сожалению, в ходе работы с DevAPI всплыло ряд существенных недостатков: Кривой User -Agent в POST запросах, отсутствуют некоторые недокументированные параметры и, самое главное, чекины, переданные таким образом, для мэрства не засчитываются :( (видимо стоит фильтр по тому же User-Agent).
Способ третий и последний. Спуфим девайс.
В отличие от Instagram, 4sq использует защищённое https соединение для работы. А значит весь трафик между устройством и сервером шифрован.
Чтобы перехватить https трафик с телефона нам понадобится:
- Burp suite (хватит и бесплатной версии) на ПК;
- ProxyDroid (Android) на телефоне (или аналог);
- сертификат Burp suite root CA на телефоне.
Добавляем root CA в пользовательское хранилище сертификатов на телефоне (потом не забудьте его оттуда убрать), включаем в Burp Suite на ПК режим прокси, указываем настройки прокси в ProxyDroid на телефоне и заворачиваем весь трафик через наш прокси.
В данной схеме Burp Suite осуществляет MITM атаку на https соединение, а доверенный сертификат Burp CA в хранилище сертификатов не даёт телефону это обнаружить.
В результате мы имеем https трафик между телефоном и сервером 4sq в открытом виде
Что сразу бросается в глаза - это наличие кучи недокументированных в DeveloperAPI параметров: metrics, CheckinComposeActivity, VenueActivity и т.д. Я так и не разобрался для чего они нужны...
С помощью Burp'овского генератора запросов можно самому убедится, что повторный пакет приведет к повторному чекину => Мы в одном шаге от заветной должности!
Запускаем авточекинку
Для автоматизации процесса чекина я решил использовать свой домашний роутер с linux прошивкой и cron'ом.
Итоговый bash-срипт для чекина в Администрации Краснодарского края выглядит так:
#! /bin/bashЗдесь ll - это широта и долгота геообъекта (узнать можно через google maps), Acc - точность GPS в метрах, venueId - идентификатор геообъекта (узнать который можно, посмотрев на адресную строку вебстраницы любого объекта на сайте 4sq), oauth_token - это ваш секретный ключ, узнать который можно либо через дамп пакетов с помощью Burp suite, либо через DeveloperAPI (залогинтесь и отправьте какой-нибудь тестовый запрос с помощью кнопки Try it out!).
curl -k -X POST \
"https://api.foursquare.com/v2/checkins/add" \
-H "Accept-Language: en-US" \
-H "Accept-Encoding: gzip" \
-H "Connection: Keep-Alive" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Host: api.foursquare.com" \
--user-agent "com.foursquare.android:2013040200:20130402:4.2.2:GT-I9100:release" \
--data "ll=45.0247440%2C38.9695560&llAcc=27.0&venueId=4bc4419874a9a593308fd5f6&shout=&broadcast=public&oauth_token=<bla-bla-bla>&v=20130402"
Последний параметр - дата генерации сервером Oauth_token. Как видите, мой апрельский токен до сих пор жив.
После того, как я запустил cron с несколькими bash скриптами, я успел уже и забыть про foursquare. Поэтому особенно приятно было в один прекрасный майский день проснуться Мэром Администрации города и края одновременно :)
Что еще почитать?
- Моя статья про Instagram на Хабре
Какие бонусы за Мэрство дает администрация г. Краснодар? :)
ОтветитьУдалитьскидку 146% на недвижимость в особо охраняемых природных зонах :)
УдалитьМне нравится вариант сети с геопозиционированием от google - ingress
ОтветитьУдалитьhttps://plus.google.com/photos/112380465607239017675/albums/5889269126185288193?authkey=CKuLzOn0kvXhMg
Чекинится на достопримечательностях и других исторических местах. Это поинтереснее чем в кафешках.