PHP实现自动登入google play下载app report的方法
2015-01-24信息快讯网
这篇文章主要介绍了PHP实现自动登入google play下载app report的方法,较为详细的讲述了登陆下载APP及对应的实现代码,具有不错的实用价值,需要的朋友可以参考下
本文实例讲述了PHP实现自动登入google play下载app report的方法,有不错的实用价值。分享给大家供大家参考。具体实现步骤如下:
一、流程:
1.登入google play
登入google play需要三步:
https://play.google.com/apps/publish/
https://accounts.google.com/ServiceLogin?hl=en&continue=https://play.google.com/apps/publish/
https://accounts.google.com/ServiceLoginAuth
2.下载app report zip
3.unzip report
二、实现代码如下:
<?php
define('ROOT_PATH', dirname(__FILE__));
define('GOOGLE_PLAY_COOKIE_FILE', 'google_play_cookie.txt');
/**
* Login google play, download report, unzip
* Date: 2013-04-17
* Author: fdipzone
* Version: 1.0
*/
class AndroidReportDownLoader{
private $username;
private $password;
private $dev_acc;
/* init
* @param String $username google play account
* @param String $password google play password
* @param String $dev_acc google play dev account
*/
public function __construct($username='', $password='', $dev_acc=''){
$this->username = $username;
$this->password = $password;
$this->dev_acc = $dev_acc;
}
/*
* @param String $appname
* @param String $sd 开始日期
* @param String $ed 结束日期
* @param String $downloadFile 保存的zip名称
*/
public function run($appname='', $sd='', $ed='', $downloadFile=''){
$package = $appname;
$dim = 'overall,country,language,os_version,device,app_version,carrier';
//$met = 'daily_device_installs,active_device_installs,daily_user_installs,total_user_installs,active_user_installs,daily_device_uninstalls,daily_user_uninstalls,daily_device_upgrades';
$met = "daily_device_installs,current_device_installs,daily_user_installs,total_user_installs,current_user_installs,daily_device_uninstalls,daily_user_uninstalls,daily_device_upgrades"; // google modify 2013-08-06
// login google play
$this->loginAuth($this->username, $this->password);
// download report zip
return $this->downloadReport($package, $sd, $ed, $dim, $met, $this->dev_acc, $downloadFile);
}
/* login google play,create cookies
* @param String $username
* @param String $password
* @return boolean
*/
private function loginAuth($username, $password){
// step1
$mainUrl = "https://play.google.com/apps/publish/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $mainUrl);
curl_setopt($ch, CURLOPT_COOKIEJAR, GOOGLE_PLAY_COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEFILE, GOOGLE_PLAY_COOKIE_FILE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_close($ch);
// step 2
$serviceLoginUrl = "https://accounts.google.com/ServiceLogin?hl=en&continue=".$mainUrl;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $serviceLoginUrl);
curl_setopt($ch, CURLOPT_COOKIEJAR, GOOGLE_PLAY_COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEFILE, GOOGLE_PLAY_COOKIE_FILE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$serviceLoginRespHtml = curl_exec($ch);
curl_close($ch);
preg_match('/name="dsh"\s*id="dsh"\s*value="(.*?)"\s*/i', $serviceLoginRespHtml, $matches); // get dsh
$dsh = $matches[1];
preg_match('/name="GALX"\s*value="(.*?)"\s*/i', $serviceLoginRespHtml, $matches); // get GALX
$galx = $matches[1];
// step 3
$loginGoogleUrl = "https://accounts.google.com/ServiceLoginAuth";
$postFields = "Referer=".$serviceLoginUrl;
$postFields .= "&AllowAutoRedirect=false";
$postFields .= "&continue=".$mainUrl;
$postFields .= "&dsh=".$dsh;
$postFields .= "&h1=en";
$postFields .= "&GALX=".$galx;
$postFields .= "&Email=".$username;
$postFields .= "&Passwd=".$password;
$postFields .= "&signIn=Sign+in";
$postFields .= "&PersistentCookie=yes";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $loginGoogleUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($ch, CURLOPT_COOKIEJAR, GOOGLE_PLAY_COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEFILE, GOOGLE_PLAY_COOKIE_FILE);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_close($ch);
// login cookies create success
return true;
}
// download Report zip file
private function downloadReport($package, $sd, $ed, $dim, $met, $dev_acc, $downloadFile) {
$url = "https://play.google.com/apps/publish/statistics/download?package={$package}&sd={$sd}&ed={$ed}&dim={$dim}&met={$met}&dev_acc={$dev_acc}";
$fp = fopen($downloadFile,"w");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_COOKIEFILE, GOOGLE_PLAY_COOKIE_FILE);
curl_exec($ch);
curl_close($ch);
fclose($fp);
if (file_exists($downloadFile)){
return true;
}
return false;
}
/* unzip report
* @param String $path 解压的路径
* @param String $downloadFile zip file
*/
public function unzipReport($path, $downloadFile){
$exec = "unzip ".$downloadFile. " -d ".$path;
shell_exec($exec);
unlink($downloadFile); // delete zip file
}
}
// demo
$username = '[email protected]';
$password = 'abcd1234';
$dev_acc = '12345678901234567890';
$appname = 'com.testdev';
$sd = '20130417';
$ed = '20130417';
$downloadFile = 'testdev.zip';
$unzipPath = ROOT_PATH.'/testdev/';
$obj = new AndroidReportDownLoader($username, $password, $dev_acc);
if($obj->run($appname, $sd, $ed, $downloadFile)){
$obj->unzipReport($unzipPath, $downloadFile);
}
?>
相信本文所述对大家的PHP程序设计有一定的借鉴价值。
php实现redis数据库指定库号迁移的方法
php计划任务之ignore_user_abort函数实现方法
CI框架中通过hook的方式实现简单的权限控制
PHP中使用CURL获取页面title例子
PHP中使用SimpleXML检查XML文件结构实例
php使用google地图应用实例
php连接oracle数据库及查询数据的方法
PHP中使用xmlreader读取xml数据示例
VPS中使用LNMP安装WordPress教程
PHP中require和include路径问题详解
thinkphp中session和cookie无效的解决方法
php提示Failed to write session data错误的解决方法
php第一次无法获取cookie问题处理
CI框架中cookie的操作方法分析
彻底删除thinkphp3.1案例blog标签的方法
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
php实现的click captcha点击验证码类实例
PHP遍历文件夹与文件类及处理类用法实例
PHP邮件发送类PHPMailer用法实例详解
PHP中auto_prepend_file与auto_append_file用法实例分析
PHP提示Cannot modify header information - headers already sent by解决方法
PHP正则替换函数preg_replace和preg_replace_callback使用总结
php中file_get_content 和curl以及fopen 效率分析
PHP return语句另类用法不止是在函数中
PHP下的Oracle客户端扩展(OCI8)安装教程
字符串长度函数strlen和mb_strlen的区别示例介绍
CodeIgniter错误mysql_connect(): No such file or directory解决方法
PHP中cookie和session的区别实例分析
destoon出现验证码不显示时的紧急处理方法
destoon供应信息title调用出公司名称的方法
destoon实现不同会员组公司名称显示不同的颜色的方法
destoon文章模块调用企业会员资料的方法
destoon切换城市后实现logo旁边显示地区名称的方法
PHP下通过QRCode类库创建中间带网站LOGO的二维码
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
PHP把JPEG图片转换成Progressive JPEG的方法