本文實例講述了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 = 'testdev@gmail.com';
$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程序設計有一定的借鑒價值。
一般注冊一個@gmail郵箱就可以下載了
可以,下載一個HTTP請求分析器,打開監視以後,你登錄google帳戶,看一下HTTP數據流是什麼樣子。然後用PHP程序開一個socket通道到google的web登錄服務器,模仿你分析到的http數據,直接往通道裡寫數據即可。
當然可能有更簡單的辦法,你看一下登錄頁面的源代碼,試試直接將用戶名和密碼往表單裡寫的地址提交一下能不能成功,如果能成功直接用PHP往那提交用戶名和密碼就可以了。
順便說一下google的登錄好像要通過ssl安全通道,用PHP怎麼使用那ssl你自己再看看吧