我在我的应用程序中使用游戏分析(GameAnalytics.com)。对于那些不熟悉GA的人来说,这是一项免费的移动应用程序分析服务,就像flurry一样。我需要一些GameAnalytics不会做的分析,这就是为什么我下载原始的json事件数据,解析并存储在本地DB中以供进一步处理。首先,我认为每次都可以手动下载数据,但后来我意识到自己很烦人,所以最好自动执行这个操作。
我对webdev、php和js没有很深的理解,尽管我多年来一直使用php,主要用于实用程序和软件后端。
因此,我使用了sniffer,并能够在php上使用cookie再现GET请求:
$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"
)
);但是这个请求使用即将过期的cookie。因此,唯一的方法是复制现有会话的cookie并将其粘贴到php代码中,这是不方便的。
我知道我必须打开curl会话,登录到gameanalytics.com,然后使用这个会话下载我需要的数据。类似的方法成功地应用于:Download flurry event log using curl
但由于某种原因我不能登录。看起来像是某种保护措施。主登录表单生成目标url,其中包含一些我在页面源中找不到的数字。
go.gameanalytics.com/api/v1/public/login/basic?_=0600650333334639
也许有一些已知的计划或解决办法?或者它与第一次加载时生成的cookie页面有某种联系?
当我使用这个号码通过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}]}发布于 2015-02-23 12:02:47
我使用@GameAnalytics并设计/编码了这个系统,这样我就可以帮助您。
请知道:
当使用这种方法进行自动化时,会负责任地执行。
基本上,优化您的脚本,以不强调我们的系统。我们监视使用情况,并保留阻止使用错误实现的帐户的权限。
此外,您还应该删除上面文章中的标记。:)
解决方案
好的..。现在,免责声明已经结束,我们可以获得乐趣的东西!你基本上走在正确的道路上。
获得令牌
就像上面所做的那样,向公共登录路由发出请求。
https://go.gameanalytics.com/api/v1/public/login/basic
然后在JSON数据中检索一个令牌。此令牌将在15分钟左右过期(查看exp时间戳值),也是AngularJS稍后(在进行适当的工具登录时)放置在cookie中的值。
使用令牌
从数据中获取令牌,并通过将它放置在请求的“X授权”头中,使用它访问所有其他web工具路由。为了测试不同的路线,我建议安装有用的“邮递员”Chrome扩展。
获取游戏列表
使用令牌为您的帐户获取数据。
https://go.gameanalytics.com/api/v1/user/data
这将返回带有工作室、游戏等的JSON数据。在数据中找到"studiosGames“字段,并找到您需要的游戏。在游戏字典中,您需要找到存储在"dataApiToken“中的令牌。
下载
"dataApiToken“也是一个令牌,它将过期。使用它来联系我们的度量API来获取特定游戏的数据。这个API使用“授权”头来放置令牌。
打电话给这个网址:
我建议使用Chrome (网络选项卡)检查这个工具,看看游戏中使用了哪些路由/参数。
然后从请求中获得带有urls的JSON数据以供下载。用这些来取文件。这些urls将在几个小时后过期。
如果这有帮助,请告诉我们!
请记住不要在网站上分享您的密钥/令牌(像这样),因为它们允许其他人通过我们的API访问。如前所述-行为负责!
https://stackoverflow.com/questions/28614601
复制相似问题