package com.xj.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class AppleStoreGrab {
public static String login_url = "https://appstoreconnect.apple.com/login";
public static String login_user = "https://idmsa.apple.com/appleauth/auth/federate?isRememberMeEnabled=true";
public static String login_pass = "https://idmsa.apple.com/appleauth/auth/signin";
public static String times = "https://reportingitc2.apple.com/gsf/salesTrendsApp/businessareas/InternetServices/subjectareas/iTunes/vcubes/778/timeseries/";
public static String rmb = "https://reportingitc2.apple.com/gsf/salesTrendsApp/businessareas/InternetServices/subjectareas/iTunes/vcubes/700/timeseries/";
public static String accountName = "xxxx";//账号
public static String password = "xxxxx";//密码
/**
* 模拟登录
*/
public static Map<String,String> login(){
try{
Map<String, String> headerMap = new HashMap<String, String>();
String accept = "application/json, text/javascript, */*; q=0.01";
String accept_encoding = "gzip, deflate, br";
String accept_language = "zh-CN,zh;q=0.9";
String user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
String conection = "keep-alive";
String origin = "https://idmsa.apple.com";
String pragma = "no-cache";
String referer = "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=e0b80c3bf78523bfe80974d320935bfa30add02e1bff88ec2166c6bd5a706c42&font=sf";
headerMap.put("Accept", accept);
headerMap.put("Accept-Encoding", accept_encoding);
headerMap.put("Accept-Language", accept_language);
headerMap.put("Content-Type", "application/json");
headerMap.put("Connection", conection);
headerMap.put("Host", "idmsa.apple.com");
headerMap.put("origin", origin);
headerMap.put("pragma", pragma);
headerMap.put("Referer", referer);
headerMap.put("User-Agent", user_agent);
headerMap.put("X-Apple-Domain-Id", "3");
headerMap.put("X-Apple-Widget-Key", "e0b80c3bf78523bfe80974d320935bfa30add02e1bff88ec2166c6bd5a706c42");
headerMap.put("X-Requested-With", "XMLHttpRequest");
JSONObject queryJson = new JSONObject();
queryJson.put("accountName", accountName);
queryJson.put("password", password);
queryJson.put("rememberMe", true);
Connection installsCon = Jsoup.connect(login_pass);
//installsCon.timeout(60000);
installsCon.ignoreContentType(true);
installsCon.headers(headerMap);
installsCon.method(Method.POST);
//installsCon.cookies(cooke);
installsCon.requestBody(queryJson.toString());
//installsCon.data(arg0);
Response installsReqponse = installsCon.execute();
//System.out.println(installsReqponse.body());
return installsReqponse.cookies();
}catch(Exception e){
e.printStackTrace();
}
return null;
}
/**
* 设置账号id
*/
public static Map<String,String> setSessison(Map<String,String> cookie, String providerid){
BufferedReader in = null;
try{
Map<String, String> headerMap = new HashMap<String, String>();
headerMap.put("Accept", "*/*");
headerMap.put("Accept-Encoding", "gzip, deflate, br");
headerMap.put("Accept-Language", "zh-CN,zh;q=0.9");
headerMap.put("Cache-Control", "no-cache");
headerMap.put("Content-Type", "application/json");
headerMap.put("Connection", "keep-alive");
headerMap.put("Host", "reportingitc2.apple.com");
headerMap.put("Pragma", "no-cache");
headerMap.put("Referer", "https://reportingitc2.apple.com/insights.html");
headerMap.put("Upgrade-Insecure-Requests", "1");
headerMap.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
JSONObject queryJson = new JSONObject();
queryJson.put("provider", "{\"providerId\": \""+providerid+"\"}");
Connection installsCon = Jsoup.connect("https://appstoreconnect.apple.com/olympus/v1/session");
installsCon.headers(headerMap);
installsCon.method(Method.POST);
installsCon.cookies(cookie);
installsCon.requestBody(queryJson.toString());
Response installsReqponse = installsCon.execute();
//System.out.println("Session状态:"+installsReqponse.statusCode());
//System.out.println(installsReqponse.cookies());
//System.out.println(installsReqponse.body());
return installsReqponse.cookies();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if(in != null){
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
/**
* 获取数据
*/
public static String getTimeOrRmb(Map<String,String> cooke,String date, int type, String keys){
BufferedReader in = null;
try{
Map<String, String> headerMap = new HashMap<String, String>();
//String accept = "application/json, text/javascript, */*; q=0.01";
String accept = "application/json, text/plain, */*";
String accept_encoding = "gzip, deflate, br";
String accept_language = "zh-CN,zh;q=0.9";
String user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
String conection = "keep-alive";
String origin = "https://reportingitc2.apple.com";
String referer = "https://reportingitc2.apple.com/sales.html?measure=total_tax_usd_utc&startDate="+date+"&endDate="+date+"&group=piano_location&filter_piano_location=143563,143481,143562,143568,143516,143564,143559,143576,143525,143578,143580,143584,143582,143585,143573,143605,143498,143493,143529,143497,143588,143531,143589,143532,143533,143590,143593,143594,143472,143534,143561,143600,143535,143599,143479,143598,143602,143572,143536,143537,143524,143571,143491,143467,143528,143581,143505,143538,143540,143541,143539,143513,143485,143503,143542,143556,143555,143508,143545,143509,143501,143495,143546,143553,143510,143544,143547,143507,143468,143512,143506,143548,143549,143550,143554,143552,143551,143504,143502,143514,143511,143543,143483,143455,143441,143575,143449,143518,143445,143565,143526,143446,143558,143478,143458,143443,143469,143442,143447,143452,143489,143494,143519,143520,143451,143487,143521,143530,143523,143457,143453,143456,143459,143557,143496,143499,143480,143492,143454,143448,143482,143450,143444,143460,143515,143597,143477,143577,143474,143583,143517,143466,143586,143579,143587,143473,143592,143591,143484,143595,143462,143486,143601,143603,143470,143475,143604,143560,143566,143463,143464,143461,143476,143471,143465&filter_transaction_type=101,1003&group_piano_location="+System.currentTimeMillis();
//String referer = "https://analytics.itunes.apple.com/";
headerMap.put("Accept", accept);
headerMap.put("Accept-Encoding", accept_encoding);
headerMap.put("Accept-Language", accept_language);
headerMap.put("Content-Type", "application/json");
headerMap.put("Connection", conection);
headerMap.put("Host", "reportingitc2.apple.com");
headerMap.put("Origin", origin);
headerMap.put("Referer", referer);
headerMap.put("User-Agent", user_agent);
headerMap.put("X-Requested-With", "XMLHttpRequest, gsf");
JSONObject queryJson = new JSONObject();
JSONArray filters = new JSONArray();
/*JSONObject filters3 = new JSONObject();
filters3.put("dimensionKey", "gross_adam_id_piano");
filters3.put("optionKeys", "[\"1443689976\"]");
filters.add(filters3.toString());*/
JSONObject filters1 = new JSONObject();
//这个为国家编号
String filter_piano_location = "143563,143481,143562,143568,143516,143564,143559,143576,143525,143578,143580,143584,143582,143585,143573,143605,143498,143493,143529,143497,143588,143531,143589,143532,143533,143590,143593,143594,143472,143534,143561,143600,143535,143599,143479,143598,143602,143572,143536,143537,143524,143571,143491,143467,143528,143581,143505,143538,143540,143541,143539,143513,143485,143503,143542,143556,143555,143508,143545,143509,143501,143495,143546,143553,143510,143544,143547,143507,143468,143512,143506,143548,143549,143550,143554,143552,143551,143504,143502,143514,143511,143543,143483,143455,143441,143575,143449,143518,143445,143565,143526,143446,143558,143478,143458,143443,143469,143442,143447,143452,143489,143494,143519,143520,143451,143487,143521,143530,143523,143457,143453,143456,143459,143557,143496,143499,143480,143492,143454,143448,143482,143450,143444,143460,143515,143597,143477,143577,143474,143583,143517,143466,143586,143579,143587,143473,143592,143591,143484,143595,143462,143486,143601,143603,143470,143475,143604,143560,143566,143463,143464,143461,143476,143471,143465";
filters1.put("dimensionKey", "piano_location");
String [] countrys = filter_piano_location.split(",");
StringBuilder sb = new StringBuilder();
for(String country: countrys){
sb.append("\""+country+"\",");
}
sb = sb.deleteCharAt(sb.length() - 1);
filters1.put("optionKeys", "["+sb.toString()+"]");
filters.add(filters1.toString());
JSONObject filters2 = new JSONObject();
filters2.put("dimensionKey", "transaction_type");
filters2.put("optionKeys", "[\"101\", \"1003\"]");
filters.add(filters2.toString());
queryJson.put("filters", filters.toString());
//queryJson.put("group", "[\"piano_location\"]"); //以国家分组
queryJson.put("group", "[\"content\",\"piano_location\"]"); //以国家分组
queryJson.put("interval", "{\"key\": \"day\", \"startDate\": \""+date+"T00:00:00.000Z\", \"endDate\": \""+date+"T00:00:00.000Z\"}");
queryJson.put("limit", 200);
if(type == 1){
queryJson.put("cubeApiType", "RANK");
queryJson.put("measures", "[{\"key\": \"units_utc\"}]");//销售量
times = "https://reportingitc2.apple.com/gsf/salesTrendsApp/businessareas/InternetServices/subjectareas/iTunes/vcubes/"+keys+"/rank/";
}else{
queryJson.put("cubeApiType", "TIMESERIES");
queryJson.put("measures", "[{key: \"Royalty_utc\"}]");//收入
times = "https://reportingitc2.apple.com/gsf/salesTrendsApp/businessareas/InternetServices/subjectareas/iTunes/vcubes/"+keys+"/timeseries/";
}
queryJson.put("optionalParams", "{\"pageId\": [\"snt_"+System.currentTimeMillis()+"-54717.70000000015\"]}");
queryJson.put("order", "[]");
queryJson.put("sorting", "DESC");
//System.out.println(queryJson.toString());
Connection installsCon = Jsoup.connect(times);
installsCon.timeout(60000);
installsCon.ignoreContentType(true);
installsCon.headers(headerMap);
installsCon.method(Method.POST);
installsCon.cookies(cooke);
installsCon.requestBody(queryJson.toString());
Response installsReqponse = installsCon.execute();
//System.out.println("请求状态:"+installsReqponse.statusCode());
return installsReqponse.body();
}catch(Exception e){
e.printStackTrace();
}finally{
if(in != null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return "";
}
public static void main(String [] args){
Map<String,String> cookes = login();
System.out.println("获取3:"+cookes);
System.out.println();
Map<String,Internal_purchase_income> map = new HashMap<String,Internal_purchase_income>();
/*
* 117795231 --> 该数据需要登录进去在页面源码去找 ,对应还有个 700 之类的编号,
*/
cookes.putAll(setSessison(cookes,"117795231"));//117795231 700 119364788 778
String rank = getTimeOrRmb(cookes,"2019-03-20", 1, "700");
String timeseries = getTimeOrRmb(cookes,"2019-03-20", 2, "700");
System.out.println(rank);
System.out.println(timeseries);
}
}