首页接口解析
This commit is contained in:
parent
9a3baf1261
commit
0b7ec644cd
@ -1,9 +1,5 @@
|
|||||||
package com.hi.music.player.api;
|
package com.hi.music.player.api;
|
||||||
|
|
||||||
import com.hi.music.player.javabean.response.BaseResponse;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public interface RequestListener<T> {
|
public interface RequestListener<T> {
|
||||||
|
|
||||||
void onFail(String errorMsg);
|
void onFail(String errorMsg);
|
||||||
|
|||||||
@ -13,16 +13,41 @@ public class BodyHome implements Serializable {
|
|||||||
|
|
||||||
private Context context = new Context();
|
private Context context = new Context();
|
||||||
|
|
||||||
|
public Context getContext() {
|
||||||
private class Context implements Serializable{
|
return context;
|
||||||
private Client client = new Client();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Client implements Serializable{
|
public void setContext(Context context) {
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Context implements Serializable{
|
||||||
|
private Client client = new Client();
|
||||||
|
|
||||||
|
public Client getClient() {
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClient(Client client) {
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Client implements Serializable{
|
||||||
private String clientName = "WEB_REMIX";
|
private String clientName = "WEB_REMIX";
|
||||||
private String clientVersion = "1.20220918";
|
private String clientVersion = "1.20220918";
|
||||||
private String hl = Locale.getDefault().getLanguage();
|
private String hl = Locale.getDefault().getLanguage();
|
||||||
private String gl = "US";
|
private String gl = "US";
|
||||||
private String platform = "DESKTOP";
|
private String platform = "DESKTOP";
|
||||||
|
|
||||||
|
private String visitorData;
|
||||||
|
|
||||||
|
public String getVisitorData() {
|
||||||
|
return visitorData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVisitorData(String visitorData) {
|
||||||
|
this.visitorData = visitorData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,32 +0,0 @@
|
|||||||
package com.hi.music.player.javabean.response;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import okhttp3.MediaType;
|
|
||||||
|
|
||||||
import okio.BufferedSource;
|
|
||||||
import retrofit2.Response;
|
|
||||||
|
|
||||||
public class BaseResponse {
|
|
||||||
|
|
||||||
// public JSONObject toJsonObject() {
|
|
||||||
// try {
|
|
||||||
// String string = this.string();
|
|
||||||
// return new JSONObject(string);
|
|
||||||
// } catch (IOException | JSONException exception) {
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package com.hi.music.player.javabean.response;
|
||||||
|
|
||||||
|
public class ResponseCategory {
|
||||||
|
|
||||||
|
//类别封面
|
||||||
|
private String covert;
|
||||||
|
//类别标题
|
||||||
|
private String twoTitle;
|
||||||
|
|
||||||
|
//类别描述
|
||||||
|
private String twoSubtitle;
|
||||||
|
|
||||||
|
|
||||||
|
public String getCovert() {
|
||||||
|
return covert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCovert(String covert) {
|
||||||
|
this.covert = covert;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTwoTitle() {
|
||||||
|
return twoTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTwoTitle(String twoTitle) {
|
||||||
|
this.twoTitle = twoTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTwoSubtitle() {
|
||||||
|
return twoSubtitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTwoSubtitle(String twoSubtitle) {
|
||||||
|
this.twoSubtitle = twoSubtitle;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,5 +1,67 @@
|
|||||||
package com.hi.music.player.javabean.response;
|
package com.hi.music.player.javabean.response;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ResponseHome {
|
public class ResponseHome {
|
||||||
|
|
||||||
|
|
||||||
|
//用于更多数据请求的cit
|
||||||
|
private String clickTrackingParams;
|
||||||
|
|
||||||
|
//用于更多数据请求的ctoken
|
||||||
|
private String continuation;
|
||||||
|
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
//用于更多数据请求的visitorData(只有第一个接口会返回该值)
|
||||||
|
private String visitorData;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private String backgroundUrl;
|
private String backgroundUrl;
|
||||||
|
private List<ResponseHomeChild> childList;
|
||||||
|
|
||||||
|
|
||||||
|
public List<ResponseHomeChild> getChildList() {
|
||||||
|
return childList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChildList(List<ResponseHomeChild> childList) {
|
||||||
|
this.childList = childList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClickTrackingParams() {
|
||||||
|
return clickTrackingParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClickTrackingParams(String clickTrackingParams) {
|
||||||
|
this.clickTrackingParams = clickTrackingParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContinuation() {
|
||||||
|
return continuation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContinuation(String continuation) {
|
||||||
|
this.continuation = continuation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVisitorData() {
|
||||||
|
return visitorData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVisitorData(String visitorData) {
|
||||||
|
this.visitorData = visitorData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBackgroundUrl() {
|
||||||
|
return backgroundUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundUrl(String backgroundUrl) {
|
||||||
|
this.backgroundUrl = backgroundUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,36 @@
|
|||||||
|
package com.hi.music.player.javabean.response;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ResponseHomeChild {
|
||||||
|
|
||||||
|
private String HeaderTitle;
|
||||||
|
|
||||||
|
private List<ResponseSingle> singleList;
|
||||||
|
private List<ResponseCategory> categoryList;
|
||||||
|
|
||||||
|
|
||||||
|
public String getHeaderTitle() {
|
||||||
|
return HeaderTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeaderTitle(String headerTitle) {
|
||||||
|
HeaderTitle = headerTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ResponseSingle> getSingleList() {
|
||||||
|
return singleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSingleList(List<ResponseSingle> singleList) {
|
||||||
|
this.singleList = singleList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ResponseCategory> getCategoryList() {
|
||||||
|
return categoryList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategoryList(List<ResponseCategory> categoryList) {
|
||||||
|
this.categoryList = categoryList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
package com.hi.music.player.javabean.response;
|
||||||
|
|
||||||
|
public class ResponseSingle {
|
||||||
|
|
||||||
|
//歌手头像
|
||||||
|
private String SingerHead;
|
||||||
|
//歌曲名字
|
||||||
|
private String SongTitle;
|
||||||
|
|
||||||
|
//歌手名字
|
||||||
|
private String SingerName;
|
||||||
|
//描述
|
||||||
|
private String Description;
|
||||||
|
|
||||||
|
|
||||||
|
public String getSingerHead() {
|
||||||
|
return SingerHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSingerHead(String singerHead) {
|
||||||
|
SingerHead = singerHead;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSongTitle() {
|
||||||
|
return SongTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSongTitle(String songTitle) {
|
||||||
|
SongTitle = songTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSingerName() {
|
||||||
|
return SingerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSingerName(String singerName) {
|
||||||
|
SingerName = singerName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return Description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
Description = description;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,86 +1,46 @@
|
|||||||
package com.hi.music.player.network;
|
package com.hi.music.player.network;
|
||||||
|
|
||||||
import com.hi.music.player.helper.CommonUtils;
|
import com.hi.music.player.helper.CommonUtils;
|
||||||
|
import com.hi.music.player.javabean.response.ResponseCategory;
|
||||||
|
import com.hi.music.player.javabean.response.ResponseHome;
|
||||||
|
import com.hi.music.player.javabean.response.ResponseHomeChild;
|
||||||
|
import com.hi.music.player.javabean.response.ResponseSingle;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class JsonHelper {
|
public class JsonHelper {
|
||||||
|
|
||||||
|
|
||||||
|
public static ResponseHome ResolveHomeJson(JSONObject jsonObject) {
|
||||||
public static void ResolveHomeJson(JSONObject jsonObject){
|
ResponseHome responseHome = new ResponseHome();
|
||||||
try {
|
try {
|
||||||
String bgUrl = jsonObject
|
String bgUrl = getJsonUrl(jsonObject
|
||||||
.getJSONObject("background")
|
.getJSONObject("background"));
|
||||||
.getJSONObject("musicThumbnailRenderer")
|
|
||||||
.getJSONObject("thumbnail")
|
|
||||||
.getJSONArray("thumbnails")
|
|
||||||
.getJSONObject(0)
|
|
||||||
.getString("url");
|
|
||||||
|
|
||||||
JSONArray contents = jsonObject
|
JSONObject sectionListRenderer = jsonObject
|
||||||
.getJSONObject("contents")
|
.getJSONObject("contents")
|
||||||
.getJSONObject("singleColumnBrowseResultsRenderer")
|
.getJSONObject("singleColumnBrowseResultsRenderer")
|
||||||
.getJSONArray("tabs")
|
.getJSONArray("tabs")
|
||||||
.getJSONObject(0)
|
.getJSONObject(0)
|
||||||
.getJSONObject("tabRenderer")
|
.getJSONObject("tabRenderer")
|
||||||
.getJSONObject("content")
|
.getJSONObject("content")
|
||||||
.getJSONObject("sectionListRenderer")
|
.getJSONObject("sectionListRenderer");
|
||||||
.getJSONArray("contents");
|
|
||||||
JSONObject responseContext = jsonObject
|
JSONObject responseContext = jsonObject
|
||||||
.getJSONObject("responseContext");
|
.getJSONObject("responseContext");
|
||||||
JSONArray serviceTrackingParams = responseContext.getJSONArray("serviceTrackingParams");
|
JSONArray serviceTrackingParams = responseContext.getJSONArray("serviceTrackingParams");
|
||||||
String visitorData = responseContext.getString("visitorData");
|
String visitorData = responseContext.getString("visitorData");
|
||||||
|
CommonUtils.LogMsg("----------visitorData=" + visitorData);
|
||||||
|
|
||||||
for (int i = 0; i < contents.length(); i++) {
|
responseHome.setBackgroundUrl(bgUrl);
|
||||||
JSONObject object = contents.getJSONObject(i);
|
responseHome.setVisitorData(visitorData);
|
||||||
|
getCommonHome(sectionListRenderer, responseHome);
|
||||||
|
|
||||||
JSONObject musicCarouselShelfRenderer = object.optJSONObject("musicCarouselShelfRenderer");
|
|
||||||
if(musicCarouselShelfRenderer!= null){
|
|
||||||
String title = musicCarouselShelfRenderer
|
|
||||||
.getJSONObject("header")
|
|
||||||
.getJSONObject("musicCarouselShelfBasicHeaderRenderer")
|
|
||||||
.getJSONObject("title")
|
|
||||||
.getJSONArray("runs")
|
|
||||||
.getJSONObject(0)
|
|
||||||
.getString("text");
|
|
||||||
CommonUtils.LogMsg("----------headertitle=" + title);
|
|
||||||
JSONArray childContents = musicCarouselShelfRenderer
|
|
||||||
.getJSONArray("contents");
|
|
||||||
|
|
||||||
|
|
||||||
for (int j = 0; j < childContents.length(); j++) {
|
|
||||||
JSONObject jsonList = childContents.getJSONObject(j);
|
|
||||||
JSONObject musicResponsiveListItemRenderer = jsonList.optJSONObject("musicResponsiveListItemRenderer");
|
|
||||||
if(musicResponsiveListItemRenderer!= null){
|
|
||||||
String covert = musicResponsiveListItemRenderer
|
|
||||||
.getJSONObject("thumbnail")
|
|
||||||
.getJSONObject("musicThumbnailRenderer")
|
|
||||||
.getJSONObject("thumbnail")
|
|
||||||
.getJSONArray("thumbnails")
|
|
||||||
.getJSONObject(0)
|
|
||||||
.getString("url");
|
|
||||||
|
|
||||||
String text = musicResponsiveListItemRenderer.getJSONArray("flexColumns")
|
|
||||||
.getJSONObject(0)
|
|
||||||
.getJSONObject("musicResponsiveListItemFlexColumnRenderer")
|
|
||||||
.getJSONObject("text")
|
|
||||||
.getJSONArray("runs")
|
|
||||||
.getJSONObject(0)
|
|
||||||
.getString("text");
|
|
||||||
|
|
||||||
CommonUtils.LogMsg(" --------------text=" + text+"-covert="+covert);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} catch (JSONException exception) {
|
} catch (JSONException exception) {
|
||||||
@ -88,5 +48,163 @@ public class JsonHelper {
|
|||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return responseHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static ResponseHome ResolveHomeMoreJson(JSONObject jsonObject) {
|
||||||
|
ResponseHome responseHome = new ResponseHome();
|
||||||
|
try {
|
||||||
|
|
||||||
|
JSONObject sectionListContinuation = jsonObject
|
||||||
|
.getJSONObject("continuationContents")
|
||||||
|
.getJSONObject("sectionListContinuation");
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject responseContext = jsonObject
|
||||||
|
.getJSONObject("responseContext");
|
||||||
|
JSONArray serviceTrackingParams = responseContext.getJSONArray("serviceTrackingParams");
|
||||||
|
|
||||||
|
getCommonHome(sectionListContinuation, responseHome);
|
||||||
|
|
||||||
|
} catch (JSONException exception) {
|
||||||
|
CommonUtils.LogMsg("----------exception=");
|
||||||
|
exception.printStackTrace();
|
||||||
|
|
||||||
|
}
|
||||||
|
return responseHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static void getCommonHome(JSONObject sectionListRenderer, ResponseHome responseHome) throws JSONException {
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject nextContinuationData = sectionListRenderer
|
||||||
|
.getJSONArray("continuations")
|
||||||
|
.getJSONObject(0)
|
||||||
|
.getJSONObject("nextContinuationData");
|
||||||
|
|
||||||
|
//token=continuation,cit= clickTrackingParams
|
||||||
|
|
||||||
|
String clickTrackingParams = nextContinuationData.getString("clickTrackingParams");
|
||||||
|
String continuation = nextContinuationData.getString("continuation");
|
||||||
|
CommonUtils.LogMsg("----------clickTrackingParams=" + clickTrackingParams);
|
||||||
|
CommonUtils.LogMsg("----------continuation=" + continuation);
|
||||||
|
responseHome.setClickTrackingParams(clickTrackingParams);
|
||||||
|
responseHome.setContinuation(continuation);
|
||||||
|
|
||||||
|
JSONArray contents = sectionListRenderer
|
||||||
|
.getJSONArray("contents");
|
||||||
|
|
||||||
|
List<ResponseHomeChild> childList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < contents.length(); i++) {
|
||||||
|
ResponseHomeChild responseHomeChild = new ResponseHomeChild();
|
||||||
|
JSONObject object = contents.getJSONObject(i);
|
||||||
|
|
||||||
|
JSONObject musicCarouselShelfRenderer = object.optJSONObject("musicCarouselShelfRenderer");
|
||||||
|
if (musicCarouselShelfRenderer != null) {
|
||||||
|
|
||||||
|
//模块标题
|
||||||
|
String title = getJsonText(musicCarouselShelfRenderer
|
||||||
|
.getJSONObject("header")
|
||||||
|
.getJSONObject("musicCarouselShelfBasicHeaderRenderer")
|
||||||
|
.getJSONObject("title"));
|
||||||
|
CommonUtils.LogMsg("----------headertitle=" + title);
|
||||||
|
responseHomeChild.setHeaderTitle(title);
|
||||||
|
JSONArray childContents = musicCarouselShelfRenderer
|
||||||
|
.getJSONArray("contents");
|
||||||
|
|
||||||
|
|
||||||
|
List<ResponseCategory> categoryList = new ArrayList<>();
|
||||||
|
List<ResponseSingle> singleList = new ArrayList<>();
|
||||||
|
for (int j = 0; j < childContents.length(); j++) {
|
||||||
|
JSONObject jsonList = childContents.getJSONObject(j);
|
||||||
|
JSONObject musicResponsiveListItemRenderer = jsonList.optJSONObject("musicResponsiveListItemRenderer");
|
||||||
|
if (musicResponsiveListItemRenderer != null) {
|
||||||
|
ResponseSingle responseSingle = new ResponseSingle();
|
||||||
|
|
||||||
|
String SingerHead = getJsonUrl(musicResponsiveListItemRenderer
|
||||||
|
.getJSONObject("thumbnail"));
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray flexColumns = musicResponsiveListItemRenderer.getJSONArray("flexColumns");
|
||||||
|
|
||||||
|
//歌名、歌手名字、描述
|
||||||
|
String SongTitle = "";
|
||||||
|
String SingerName = "";
|
||||||
|
String Description = "";
|
||||||
|
for (int g = 0; g < flexColumns.length(); g++) {
|
||||||
|
String text = getJsonText(musicResponsiveListItemRenderer.getJSONArray("flexColumns")
|
||||||
|
.getJSONObject(g)
|
||||||
|
.getJSONObject("musicResponsiveListItemFlexColumnRenderer")
|
||||||
|
.getJSONObject("text"));
|
||||||
|
if (g == 0) SongTitle = text;
|
||||||
|
if (g == 1) SingerName = text;
|
||||||
|
if (g == 2) Description = text;
|
||||||
|
}
|
||||||
|
responseSingle.setSongTitle(SongTitle);
|
||||||
|
responseSingle.setSingerName(SingerName);
|
||||||
|
responseSingle.setSingerHead(SingerHead);
|
||||||
|
responseSingle.setDescription(Description);
|
||||||
|
singleList.add(responseSingle);
|
||||||
|
CommonUtils.LogMsg(" ----------111111111111----SongTitle=" + SongTitle + "--SingerName=" + SingerName + "---Description=" + Description + "--SingerHead=" + SingerHead);
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject musicTwoRowItemRenderer = jsonList.optJSONObject("musicTwoRowItemRenderer");
|
||||||
|
if (musicTwoRowItemRenderer != null) {
|
||||||
|
ResponseCategory responseCategory = new ResponseCategory();
|
||||||
|
String covert = getJsonUrl(musicTwoRowItemRenderer
|
||||||
|
.getJSONObject("thumbnailRenderer"));
|
||||||
|
|
||||||
|
String twoTitle = getJsonText(musicTwoRowItemRenderer.getJSONObject("title"));
|
||||||
|
String twoSubtitle = getJsonText(musicTwoRowItemRenderer.getJSONObject("subtitle"));
|
||||||
|
responseCategory.setCovert(covert);
|
||||||
|
responseCategory.setTwoTitle(twoTitle);
|
||||||
|
responseCategory.setTwoSubtitle(twoSubtitle);
|
||||||
|
categoryList.add(responseCategory);
|
||||||
|
CommonUtils.LogMsg(" ----------2222222222----twoTitle=" + twoTitle + "-twoSubtitle=" + twoSubtitle + "---封面=" + covert);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
responseHomeChild.setCategoryList(categoryList);
|
||||||
|
responseHomeChild.setSingleList(singleList);
|
||||||
|
}
|
||||||
|
childList.add(responseHomeChild);
|
||||||
|
}
|
||||||
|
responseHome.setChildList(childList);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getJsonUrl(JSONObject jsonObject) {
|
||||||
|
try {
|
||||||
|
JSONArray jsonArray = jsonObject.getJSONObject("musicThumbnailRenderer")
|
||||||
|
.getJSONObject("thumbnail")
|
||||||
|
.getJSONArray("thumbnails");
|
||||||
|
|
||||||
|
int length = jsonArray.length();
|
||||||
|
CommonUtils.LogMsg("----------length=" + (length - 1));
|
||||||
|
String pngUrl = jsonArray.getJSONObject(length - 1)
|
||||||
|
.getString("url");
|
||||||
|
|
||||||
|
return pngUrl;
|
||||||
|
} catch (JSONException exception) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static String getJsonText(JSONObject jsonObject) {
|
||||||
|
try {
|
||||||
|
String text = jsonObject.getJSONArray("runs")
|
||||||
|
.getJSONObject(0)
|
||||||
|
.getString("text");
|
||||||
|
|
||||||
|
return text;
|
||||||
|
} catch (JSONException exception) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,12 @@
|
|||||||
package com.hi.music.player.network;
|
package com.hi.music.player.network;
|
||||||
import com.hi.music.player.javabean.response.BaseResponse;
|
|
||||||
|
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import okhttp3.RequestBody;
|
import okhttp3.RequestBody;
|
||||||
import okhttp3.ResponseBody;
|
import okhttp3.ResponseBody;
|
||||||
import retrofit2.Response;
|
|
||||||
import retrofit2.http.Body;
|
import retrofit2.http.Body;
|
||||||
import retrofit2.http.Headers;
|
import retrofit2.http.Headers;
|
||||||
import retrofit2.http.POST;
|
import retrofit2.http.POST;
|
||||||
|
import retrofit2.http.Query;
|
||||||
|
|
||||||
public interface MusicApi {
|
public interface MusicApi {
|
||||||
|
|
||||||
@ -16,5 +15,20 @@ public interface MusicApi {
|
|||||||
Observable<ResponseBody> getHomeData(@Body RequestBody requestBody);
|
Observable<ResponseBody> getHomeData(@Body RequestBody requestBody);
|
||||||
|
|
||||||
|
|
||||||
|
// "youtubei/v1/browse?ctoken=${baseHomePage.cToken}&continuation=${baseHomePage.continuation}&type=next&itct=${baseHomePage.itct}&prettyPrint=false"
|
||||||
|
|
||||||
|
|
||||||
|
@POST("youtubei/v1/browse")
|
||||||
|
@Headers("X-Goog-Api-Key:AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8")
|
||||||
|
Observable<ResponseBody> getHomeMoreData(@Query("ctoken") String token,
|
||||||
|
@Query("continuation") String continuation,
|
||||||
|
@Query("type") String type,
|
||||||
|
@Query("itct") String itct,
|
||||||
|
@Query("prettyPrint") boolean prettyPrint,@Body RequestBody requestBody);
|
||||||
|
|
||||||
|
|
||||||
|
// @POST("youtubei/v1/browse")
|
||||||
|
// @Headers("X-Goog-Api-Key:AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8")
|
||||||
|
// @FormUrlEncoded
|
||||||
|
// Observable<ResponseBody> getHomeMoreData(@FieldMap Map<String,String> map);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package com.hi.music.player.network;
|
|||||||
|
|
||||||
import com.hi.music.player.api.RequestListener;
|
import com.hi.music.player.api.RequestListener;
|
||||||
import com.hi.music.player.helper.CommonUtils;
|
import com.hi.music.player.helper.CommonUtils;
|
||||||
import com.hi.music.player.javabean.response.BaseResponse;
|
|
||||||
|
|
||||||
import io.reactivex.Observer;
|
import io.reactivex.Observer;
|
||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
|
|||||||
@ -1,17 +1,14 @@
|
|||||||
package com.hi.music.player.network;
|
package com.hi.music.player.network;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonIOException;
|
|
||||||
import com.hi.music.player.api.RequestListener;
|
import com.hi.music.player.api.RequestListener;
|
||||||
import com.hi.music.player.helper.CommonUtils;
|
import com.hi.music.player.helper.CommonUtils;
|
||||||
import com.hi.music.player.javabean.requestbody.BodyHome;
|
import com.hi.music.player.javabean.requestbody.BodyHome;
|
||||||
import com.hi.music.player.javabean.response.BaseResponse;
|
import com.hi.music.player.javabean.response.ResponseHome;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONException;
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.util.HashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
@ -81,7 +78,6 @@ public class RetrofitManager {
|
|||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
String s = gson.toJson(bodyHome);
|
String s = gson.toJson(bodyHome);
|
||||||
RequestBody requestBody = RequestBody.Companion.create(s, JSON);
|
RequestBody requestBody = RequestBody.Companion.create(s, JSON);
|
||||||
// RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), s);
|
|
||||||
musicApi.getHomeData(requestBody)
|
musicApi.getHomeData(requestBody)
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.unsubscribeOn(Schedulers.io())
|
.unsubscribeOn(Schedulers.io())
|
||||||
@ -97,12 +93,47 @@ public class RetrofitManager {
|
|||||||
public void onSuccess(ResponseBody data) {
|
public void onSuccess(ResponseBody data) {
|
||||||
JSONObject jsonObject = CommonUtils.toJsonObject(data);
|
JSONObject jsonObject = CommonUtils.toJsonObject(data);
|
||||||
if (jsonObject != null) {
|
if (jsonObject != null) {
|
||||||
JsonHelper.ResolveHomeJson(jsonObject);
|
ResponseHome responseHome = JsonHelper.ResolveHomeJson(jsonObject);
|
||||||
|
CommonUtils.LogMsg("");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void getHomeMoreData(String continuation,String itct,String visitorData) {
|
||||||
|
BodyHome bodyHome = new BodyHome();
|
||||||
|
bodyHome.getContext().getClient().setVisitorData(visitorData);
|
||||||
|
Gson gson = new Gson();
|
||||||
|
String s = gson.toJson(bodyHome);
|
||||||
|
RequestBody requestBody = RequestBody.Companion.create(s, JSON);
|
||||||
|
|
||||||
|
HashMap<String, String> stringHashMap = new HashMap<>();
|
||||||
|
stringHashMap.put("ctoken",continuation);
|
||||||
|
stringHashMap.put("continuation",continuation);
|
||||||
|
stringHashMap.put("type","next");
|
||||||
|
stringHashMap.put("itct",itct);
|
||||||
|
stringHashMap.put("prettyPrint","false");
|
||||||
|
musicApi.getHomeMoreData(continuation,continuation,"next",itct,false,requestBody)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.unsubscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(new ObserverWrapper<ResponseBody>(new RequestListener<ResponseBody>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFail(String errorMsg) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSuccess(ResponseBody data) {
|
||||||
|
JSONObject jsonObject = CommonUtils.toJsonObject(data);
|
||||||
|
if (jsonObject != null) {
|
||||||
|
ResponseHome responseHome = JsonHelper.ResolveHomeMoreJson(jsonObject);
|
||||||
|
CommonUtils.LogMsg("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import com.hi.music.player.ui.BaseActivity;
|
|||||||
public class MainActivity extends BaseActivity<ActivityMainBinding> {
|
public class MainActivity extends BaseActivity<ActivityMainBinding> {
|
||||||
|
|
||||||
|
|
||||||
// EdgeToEdge.enable(this);
|
// EdgeToEdge.enable(this);
|
||||||
@Override
|
@Override
|
||||||
protected ActivityMainBinding getViewBinding() {
|
protected ActivityMainBinding getViewBinding() {
|
||||||
return ActivityMainBinding.inflate(getLayoutInflater());
|
return ActivityMainBinding.inflate(getLayoutInflater());
|
||||||
@ -20,10 +20,21 @@ public class MainActivity extends BaseActivity<ActivityMainBinding> {
|
|||||||
vb.tv.setOnClickListener(new View.OnClickListener() {
|
vb.tv.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
||||||
RetrofitManager.getInstance().getHomeData();
|
RetrofitManager.getInstance().getHomeData();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
vb.tv1.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
String continuation = "4qmFsgKrAhIMRkVtdXNpY19ob21lGpoCQ0FONnpBRkhVSGswZFMxUVIzazBaMFJYYjFWQ1EyOUpRa05wVWpWa1JqbDNXVmRrYkZnelRuVlpXRUo2WVVjNU1GZ3lNVEZqTW14cVdETkNhRm95Vm1aamJWWnVZVmM1ZFZsWGQxTklNV3Q1V2tSUmRHRldUa2RoTUZKS1ZteEdSR0ZXVG5GbFIzaERWVlZvTVZORlVYUlVXR3hLVVcxellVOVZNVEZqTW14cVVrZHNlbGt5T1RKYVdFbzFWVWRHYmxwV1RteGpibHB3V1RKVmRGSXlWakJUUnpsMFdsWkNhRm95VlVGQlVVSTJZVU14UkZSblFVSldWazFCUVZaV1ZFRkJSVUpCWDNGamVEY3dTa0ZuWjBVJTNE";
|
||||||
|
String clickTrackingParams = "CBAQybcCIhMIw4eu48bLiAMVvoDkBh2lGTJl";
|
||||||
|
String visitorData = "CgtFQThPOThGYzV0OCjDkqm3BjIKCgJVUxIEGgAgGg%3D%3D";
|
||||||
|
RetrofitManager.getInstance().getHomeMoreData(continuation,clickTrackingParams,visitorData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
tools:context=".ui.MainActivity">
|
tools:context=".ui.MainActivity">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@ -16,4 +17,17 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Hello World!"
|
||||||
|
android:id="@+id/tv1"
|
||||||
|
android:layout_marginTop="200dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
Loading…
Reference in New Issue
Block a user