1、Token生成

接口 : post        https://fabric.io/oauth/token
请求头:Headers     Content-Type : application/json
正文:  body {
        "grant_type":"password",
        "scope":"organizations apps issues features account twitter_client_apps beta software answers",
        "username":"mimimimimi@qq.com", //登录名
        "password":"123456789", //登录密码
        "client_id":"2c18f8a77609ee6bbac9e53f3768fedc45fb96be0dbcb41defa706dc57d9c931",
        "client_secret":"092ed1cdde336647b13d44178932cba10911577faf0eda894896188a7d900cc9"    
     }

  

 

2、返回值

{
    "access_token": "ccccccccccccccccccccccc",
    "token_type": "bearer",
    "expires_in": 86400,
    "refresh_token": "refresh_tokenqqqqqqqqqqqqq", 
   "scope": "organizations apps issues features account twitter_client_apps beta software answers"
}

  利用  access_token  可以进行后续接口访问。

 

3、利用 refresh_token 刷新新的token(讲得到的refresh_token<无过期时间>保存下来,刷新token)

  

接口 : post        https://fabric.io/oauth/token
请求头:Headers     Content-Type : application/json
正文:  body    {
            "grant_type":"refresh_token",
            "refresh_token":"refresh_tokenqqqqqqqqqqqqq"
         }

  返回值

{
    "access_token": "ccccccccccccccccccccccc",
    "refresh_token": "refresh_tokenqqqqqqqqqqqqq"
}

  

4、请求接口   接口文档出处    https://github.com/strongself/fabricio/blob/develop/docs/api_reference.md 

 举例两个接口

  (1)、GET –  https://fabric.io/api/v2/apps

get     https://fabric.io/api/v2/apps
Headers   Authorization: Bearer {access_token}

  返回值

[
    {
        "id": "11111111",
        "name": "8888888888",
        "bundle_identifier": "包名",
        "base_identifier": "8888888888",
        "collect_analytics": true,
        "created_at": "2016-08-01T09:03:47Z",
        "analytics_app_has_received_data": true,
        "analytics_forward_to_google_analytics": false,
        "analytics_include_purchase_events_in_forwarded_events": false,
        "platform": "android",
        "status": "activated",
        "latest_build": null,
        "icon_url": "https://s3.amazonaws.com555555555icon.png",
        "icon_hash": null,
        "kit_versions": null,
        "sdk_kits": null,
        "map_of_available_products": null,
        "firebase_crashlytics": false,
        "icon32_url": "https://s3.amazonaws.com/assets.crashlytics.com//icon.png",
        "icon64_url": "https://s3.amazonaws.com/assets.crashlytics.com/production//icon.png",
        "icon128_url": "https://s3.amazonaws.com/assets.crashlytics.com/production//icon.png",
        "accounts_count": 23,
        "organization_id": "1111111111111",
        "watched": null,
        "importance_level": null,
        "app_link": null,
        "dashboard_url": "https://www.fabric.io/333333333333",
        "impacted_devices_count": 0,
        "unresolved_issues_count": 0,
        "crashes_count": 0
    }
]

     ***  将红色的记录下来  organization_id  和  app_id  ***

 

   (2)获取日活

  

接口  get  https://fabric.io/api/v2/organizations/organization_id/apps/app_id/growth_analytics/daily_active.json?start=1478736000&end=1478736000
头设置  Headers   Authorization: Bearer {access_token}

 

  

 

  返回值,解析需要的值:

{
    "build": "all",
    "series": [
        [
            1478736000,   //日期
            0    //日活
        ],
        [
            1478822400,
            0
        ],
        [
            1481328000,
            0
        ]
    ],
    "start": 1478736000,
    "end": 1481328000,
    "app_id": "appid--------",
    "deltas": {
        "week_over_week": {
            "delta_fraction": null,
            "last_week_value": null
        }
    }
}

  

完整代码  PHP

<?php

class ScriptUserDaily 
{
  //保存第一次获取的 refresh_token ,用于下次刷新token用 private $filePath = '/files/fabricToken.json'; public function fire() { $access_token = $this->getRefreshToken(); if(empty($access_token)) $access_token = $this->getToken(); $edata = time(); $sdata = $edata - 24 * 3600 * 5; $header = [ "Authorization: Bearer ".$access_token ];

     //数据库获取应用,主要获取 organization_id 和 app_id
$appinfo = FanAppInfo::byFabric()->get();
        foreach ($appinfo as $appItem){
            $fabricid = $appItem->fabricid;
            if(empty($fabricid))
                continue;

       $organization_id = $appItem->organization_id;
            $url = "https://fabric.io/api/v2/organizations/$organization_id/apps/$fabricid/growth_analytics/daily_active.json?start=$sdata&end=$edata";

            $this->getDatas($url,$header,1);

            $url2 = "https://fabric.io/api/v2/organizations/$organization_id/apps/$fabricid/growth_analytics/daily_new.json?start=$sdata&end=$edata";

            $this->getDatas($url2,$header,2);
        }
    }

    private function getRefreshToken(){
        //获取 refresh_token 从文件中读取保存的refresh_token
        $path = $this->filePath;

        $JsonData = file_get_contents($path);

        $rejson = json_decode($JsonData, true);
        $refresh_token = $rejson['refresh_token'];

        //刷新 token
        $url = 'https://fabric.io/oauth/token';
        $header = [
            "content-type: application/json"
        ];
        $body = [
            'grant_type' => 'refresh_token',
            'refresh_token' => trim($refresh_token)
        ];

        $data = $this->curl_post($url,$header,json_encode($body));
        $rejson = json_decode($data, true);

        $access_token_new = '';
        $refresh_token_new = '';
        if(isset($rejson['refresh_token']))
            $refresh_token_new = $rejson['refresh_token'];
        if(isset($rejson['access_token']))
            $access_token_new = $rejson['access_token'];

        if(!empty($refresh_token_new)){
            $txt = [
                'access_token' => $access_token_new,
                'refresh_token' => $refresh_token_new
            ];

            //重新写入新的 refresh_token
           $this->writeRefreshToken($txt);
        }

        return $access_token_new;
    }

    private function getToken(){
        $url = 'https://fabric.io/oauth/token';
        $header = [
            "content-type: application/json"
        ];
        $body = [
            'grant_type' => 'password',
            'scope' => 'organizations apps issues features account twitter_client_apps beta software answers',
            'username' => '14141414@qq.com',
            'password' => '123456789',
            'client_id' => '2c18f8a77609ee6bbac9e53f3768fedc45fb96be0dbcb41defa706dc57d9c931',
            'client_secret' => '092ed1cdde336647b13d44178932cba10911577faf0eda894896188a7d900cc9'
        ];

        $data = $this->curl_post($url,$header,json_encode($body));
        $rejson = json_decode($data, true);

        $access_token_new = '';
        $refresh_token_new = '';
        if(isset($rejson['refresh_token']))
            $refresh_token_new = $rejson['refresh_token'];
        if(isset($rejson['access_token']))
            $access_token_new = $rejson['access_token'];

        if(!empty($refresh_token_new)){
            $txt = [
                'access_token' => $access_token_new,
                'refresh_token' => $refresh_token_new
            ];

            //重新写入新的 refresh_token
            $this->writeRefreshToken($txt);
        }

        return $access_token_new;
    }

    private function writeRefreshToken($txt){
        $path = $this->filePath;

        $myfile = fopen($path, "w");
        $txt = json_encode($txt);
        fwrite($myfile,$txt);
        fclose($myfile);
    }

    private function getDatas($url,$header,,$type){
        $resData = $this->curl_get($url,$header);
        $datas = json_decode($resData, true);

        if(!isset($datas['series']))
            return '';

        $active = 0;
        $news = 0;
        foreach ($datas['series'] as $item){
            $date = date('Y-m-d',$item[0]);

            if($type == 1){
                $active = intval($item[1]);
            }elseif($type == 2){
                $news = intval($item[1]);
            }

           //处理数据

        }
    }

    private function curl_get($url, $header = [], $time = 5){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      if (!empty($header)) {
          curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
      }
      curl_setopt($ch, CURLOPT_TIMEOUT, $time);
      $result = curl_exec($ch);
      curl_close($ch);
      return $result;
  }

  private function curl_post($url, $header = [], $body = [], $time = 5){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      if (!empty($body)) {
          curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
      }
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      if (!empty($header)) {
          curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
      }
      curl_setopt($ch, CURLOPT_TIMEOUT, $time);
      $result = curl_exec($ch);
      curl_close($ch);
      return $result;
  }
}

  

 

***  参考文档    https://github.com/strongself/fabricio/blob/develop/docs/api_reference.md  ***

 

版权声明:本文为cj8988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cj8988/p/9455457.html