Я использую Game Analytics (GameAnalytics.com) в своем приложении. Для тех, кто не знаком с GA, это бесплатный сервис аналитики мобильных приложений, такой как Flurry.
Мне нужен какой-то анализ, который GameAnalytics не будет делать, поэтому я загружаю необработанные данные о событиях json, анализирую и сохраняю их в локальной БД для дальнейшей обработки. Сначала я думал, что каждый раз можно загружать данные вручную, но потом я понял, что раздражаю, и лучше автоматизировать это действие.
У меня нет глубокого понимания webdev, php и js, хотя я использую php годами в основном для служебных программ и программных бэкэндов.
Поэтому я использовал sniffer и смог воспроизвести запрос GET с файлами cookie на php:
$rollingCurl = new RollingCurl();
$rollingCurl->get("https://query-2.gameanalytics.com/v1/games/$game_id/export?start=$from&end=$to&_=0521345345333644",
array(
"Host: query-2.gameanalytics.com",
"Connection: keep-alive",
"Accept: application/json, text/plain, */*",
"Origin: https://go.gameanalytics.com",
"User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 YaBrowser/14.12.2125.10034 Safari/537.36",
"Authorization: priv-eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJ0bblahblah....",
"Referer: https://go.gameanalytics.com/game/$game_id/settings/export-data",
"Accept-Encoding: gzip,deflate",
"Accept-Language: en;q=0.8")
);
Но этот запрос использует куки, срок действия которых скоро истечет. Таким образом, единственный способ — скопировать куки существующего сеанса и вставить их в код php, что неудобно.
Я знаю, что должен открыть сеанс curl, войти на gameanalytics.com, а затем использовать этот сеанс для загрузки нужных мне данных. Подобный подход успешно используется в:
Загрузите журнал событий Flurry, используя curl
Но я не могу войти по какой-то причине. Это похоже на некоторую защиту.
Основная форма входа генерирует целевой URL с некоторым номером, который я не могу найти в источнике страницы.
go.gameanalytics.com/api/v1/public/login/basic?_=0600650333334639
Может быть, есть какие-то известные схемы или обходные пути? Или это как-то связано с куки-файлами, которые генерирует страница при первой загрузке?
Когда я использую этот номер для входа через curl, он не работает:
$ch = curl_init('go.gameanalytics.com/api/v1/public/login/basic?_=0600650333334639');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 YaBrowser/14.12.2125.10034 Safari/537.36");
curl_setopt($ch, CURLOPT_COOKIEFILE, null);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"email":"$EMAIL","password":"$PASSWORD","remember":false}');
$data = curl_exec($ch);
//returns: {"errors": [{"msg": null, "type": null, "id": "405"}], "results": []}
На всякий случай вот журнал успешного запроса на вход из браузера (все конфиденциальные данные были изменены, конечно):
POST https://go.gameanalytics.com/api/v1/public/login/basic?_=0665297234573059
***Headers***
HTTP/1.1
Host: go.gameanalytics.com
Connection: keep-alive
Content-Length: 74
Accept: application/json, text/plain, */ *
Origin: https://go.gameanalytics.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 YaBrowser/14.12.2125.10034 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: https://go.gameanalytics.com/login
Accept-Encoding: gzip,deflate
Accept-Language: ru,en;q=0.8
Cookie: __utmt=1; AWSELB=F7D56DAB06335D820C6DA102697F76E63C69B5593D8E1CA61696696A520EC8B406E1ACF7E4CBD4284F123BC02162F0E8265430E673426B0EE263D10D29A3D5A; ga_user_id=ga_user_048304342233359914; ga_session_id=ga_session_0967241199979347; gaUserTokenOld={"token":"9.eyJsaW5rZWQiOiBudWxsLCAiaWQiOiAxNTU2OCwgImV4cCI6IDE0MjQzNDI2NTAsICJyZW1lbWJlciI6IGZhbHNlfQ.8ZYJ9yq2xETeAmY6rfiYAtxJybxDbGyaAE","exp":1424342650000}; __utma=153348830.970035277.1424344521.1424345621.1424355621.1; __utmb=153878340.5.10.1424451621; __utmc=156578830; __utmz=153854830.1424354621.1.1.utmcsr=yandex.ru|utmccn=(referral)|utmcmd=referral|utmcct=/; visitor_id20732=101885788
***Body***
{"email":"HERE_IS_MY_EMAIL","password":"HERE_IS_MY_PASSWORD","remember":false}
And response:
***Headers***
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, private, must-revalidate, proxy-revalidate
Content-Type: application/json
Date: Thu, 19 Feb 2015 10:31:22 GMT
Server: nginx/1.6.2
Content-Length: 284
Connection: keep-alive
***Body***
{"errors": [], "results": [{"linked": null, "token": "9.eyJsaW5rZWQiOiBudWxsLCAiaWQiOiAxNTU2OCwgImV4cCI6IDE0MjQzNDI2NTAsICJyZW1lbWJlciI6IGZhbHNlfQ.8ZYJ9yq2xETeAmY6rfiYAtxJybxDbGyaAE", "id": 99568, "exp": 1424342781, "remember": false}]}
Я работаю @GameAnalytics и разработал / закодировал эту систему, чтобы помочь вам.
Пожалуйста, знайте:
При автоматизации с использованием этого подхода делай так ответственно.
В основном оптимизируйте ваш скрипт, чтобы не напрягать наши системы. Мы отслеживаем использование и оставляем за собой право блокировать учетные записи, которые используют неверную реализацию.
Также вы должны удалить токен в посте выше.
🙂
Хорошо … теперь, когда отказ от ответственности закончился, мы можем перейти к забавным вещам! Вы в основном на правильном пути.
получить знак
Как вы делаете выше, сделайте запрос на публичный маршрут входа.
https://go.gameanalytics.com/api/v1/public/login/basic
Затем вы получаете токен в данных JSON. Срок действия этого токена истекает через 15 минут или около того (посмотрите на значение временной метки exp), а также это значение, которое AngularJS помещает в cookie позже (при правильном входе инструмента в систему).
использовать токен
Получите токен из данных и используйте его для доступа ко всем другим маршрутам веб-инструментов, поместив его в заголовок «X-Authorization» запроса.
Чтобы проверить различные маршруты, я бы порекомендовал установить полезное расширение Chrome «почтальон».
получить список игр
Используйте токен, чтобы получить данные для вашей учетной записи.
https://go.gameanalytics.com/api/v1/user/data
Это вернет данные JSON со студиями, играми и т. Д.
Найдите в данных поле «studiosGames» и найдите нужную игру.
Внутри игрового словаря вам нужно найти токен, хранящийся в «dataApiToken».
загрузки
«DataApiToken» также является токеном, и срок его действия истекает. Используйте его, чтобы связаться с нашим API метрик для получения данных для конкретной игры.
Этот API использует заголовок «Авторизация» для размещения токена.
Назовите этот URL:
Я рекомендую проверить инструмент с помощью Chrome (вкладка сеть), чтобы увидеть, какие маршруты / параметры используются для вашей игры.
После запроса вы должны получить данные JSON с URL для загрузки. Используйте их, чтобы получить файлы. Срок действия этих URL истекает через несколько часов.
Дайте нам знать, если это поможет!
Пожалуйста, не забудьте поделиться своими ключами / токенами на веб-сайтах (например, таких), так как они предоставляют другим людям доступ через наши API. И .. как уже упоминалось — ведите себя ответственно!
Других решений пока нет …