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

本文实例讲述了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

二、实现代码如下:

rush:PHP;"> /**

  • 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,current_user_installs,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,$serviceLoginUrl);
      curl_setopt($ch,1);
      $serviceLoginRespHtml = curl_exec($ch);
      curl_close($ch);

      preg_match('/name="dsh"\sid="dsh"\svalue="(.?)"\s/i',$serviceLoginRespHtml,$matches); // get dsh
      $dsh = $matches[1];

      preg_match('/name="galX"\svalue="(.?)"\s*/i',$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,$loginGoogleUrl);
      curl_setopt($ch,CURLOPT_POST,1);
      curl_setopt($ch,CURLOPT_POSTFIELDS,$postFields);
      curl_setopt($ch,CURLOPT_HEADER,true);
      curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
      curl_exec($ch);
      curl_close($ch);

      // login cookies create success
      return true;
      }

    // download Report zip file
    private function downloadReport($package,$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,$url);
    curl_setopt($ch,1);
    curl_setopt($ch,CURLOPT_FILE,$fp);
    curl_setopt($ch,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,$downloadFile)){
$obj->unzipReport($unzipPath,$downloadFile);
}
?>

相信本文所述对大家的PHP程序设计有一定的借鉴价值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中NATIVE的支付实现流程与PC端实现扫码支付流程
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中APP的支付的配置与实现流程
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。 配置 1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一款开源且免费商用的后台开发框架,它基于ThinkPHP和Bootstrap两大主流技术构建的极速后台开发框架,它有着非常完善且强大的功能和便捷的开发体验,使我逐渐喜欢上了它。
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口。下面介绍的是其中JSAPI的支付实现流程
服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?