PHP實(shí)現(xiàn)自動(dòng)登入google play下載app report的方法
本文實(shí)例講述了PHP實(shí)現(xiàn)自動(dòng)登入google play下載app report的方法,有不錯(cuò)的實(shí)用價(jià)值。分享給大家供大家參考。具體實(shí)現(xiàn)步驟如下:
一、流程:
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
二、實(shí)現(xiàn)代碼如下:
<?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 開(kāi)始日期 * @param String $ed 結(jié)束日期 * @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); } ?>
相信本文所述對(duì)大家的PHP程序設(shè)計(jì)有一定的借鑒價(jià)值。
相關(guān)文章
PHP實(shí)現(xiàn)將漢字轉(zhuǎn)換為拼音及獲取詞語(yǔ)首字母的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將漢字轉(zhuǎn)換為拼音及獲取詞語(yǔ)首字母的方法,涉及php字符串、數(shù)組的遍歷及編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-08-08PHP計(jì)劃任務(wù)、定時(shí)執(zhí)行任務(wù)的實(shí)現(xiàn)代碼
PHP計(jì)劃任務(wù)、定時(shí)執(zhí)行任務(wù)的實(shí)現(xiàn)用到的函數(shù) ignore_user_abort(),set_time_limit(0),sleep($interval) 此代碼只要運(yùn)行一次后關(guān)閉瀏覽器即可。2011-04-04深入PHP empty(),isset(),is_null()的實(shí)例測(cè)試詳解
本篇文章是對(duì)PHP empty(),isset(),is_null()的實(shí)例測(cè)試進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06dir()、readdir()、scandir()和glob()四種遍歷目錄方法及性能分析
php遍歷目錄和文件的場(chǎng)景在很多時(shí)候都能用到,遍歷目錄方法的方法有好幾種,那么應(yīng)該使用哪種方法呢?下面介紹dir()、readdir()、scandir()和glob()四種遍歷目錄方法及性能分析。2022-12-12批量獲取memcache值并按key的順序返回的實(shí)現(xiàn)代碼
一臺(tái)memcache時(shí)返回是正確的,在有多臺(tái)memcache時(shí)就無(wú)法一一對(duì)應(yīng)的按順序返回。2011-06-06