PHP实现自动登入google play下载app report的方法

5年以前  |  阅读数:251 次  |  编程语言:PHP 

本文实例讲述了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程序设计有一定的借鉴价值。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例