package com.yeshi.buwan.videos.youku;
|
|
import com.google.gson.Gson;
|
import com.google.gson.reflect.TypeToken;
|
import com.yeshi.buwan.videos.youku.entity.YouKuShowDetail;
|
import com.yeshi.buwan.videos.youku.entity.YouKuShowSimple;
|
import com.yeshi.buwan.videos.youku.entity.YouKuVideo;
|
import org.json.JSONObject;
|
import org.yeshi.utils.HttpUtil;
|
import org.yeshi.utils.StringUtil;
|
|
import java.io.UnsupportedEncodingException;
|
import java.lang.reflect.Type;
|
import java.net.URLEncoder;
|
import java.util.*;
|
|
public class YouKuApiUtil {
|
|
private final static String APP_ID = "758bef946d0050ef";
|
private final static String APP_SECRET = "e113a131d49e1f837402e2807f2daf58";
|
|
|
private static String request(String action, Map<String, String> ps) {
|
Map<String, String> params = new HashMap<>();
|
params.put("action", action);
|
params.put("client_id", APP_ID);
|
params.put("format", "json");
|
params.put("timestamp", System.currentTimeMillis() / 1000 + "");
|
params.put("version", "3.0");
|
params.put("format", "json");
|
params.putAll(ps);
|
|
|
List<String> list = new ArrayList<>();
|
for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
|
String key = its.next();
|
try {
|
list.add(key + URLEncoder.encode(params.get(key), "UTF-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
|
Collections.sort(list);
|
|
String sign = StringUtil.Md5(StringUtil.concat(list, "") + APP_SECRET);
|
params.put("sign", sign);
|
ps.put("opensysparams", new JSONObject(params).toString());
|
|
return HttpUtil.get("https://openapi.youku.com/router/rest.json", ps, new HashMap<>());
|
}
|
|
public static void getSearchRank(String channel, int count) {
|
Map<String, String> params = new HashMap<>();
|
params.put("limit", count + "");
|
if (channel != null) {
|
params.put("channel", channel);
|
}
|
System.out.println(request("youku.search.keyword.rankinglist", params));
|
}
|
|
/**
|
* 获取节目详情
|
*
|
* @param id
|
* @return
|
*/
|
public static YouKuShowDetail getShowDetail(String id) {
|
String url = String.format("https://openapi.youku.com/v2/shows/show.json?client_id=%s&show_id=%s", APP_ID, id);
|
String result = HttpUtil.get(url);
|
return new Gson().fromJson(result, YouKuShowDetail.class);
|
}
|
|
/**
|
* 根据分类拉取数据
|
*
|
* @param category
|
* @param page
|
*/
|
public static ListResultDTO getShowListByCategory(String category, int page, int pageSize) {
|
|
try {
|
String url = String.format("https://openapi.youku.com/v2/shows/by_category.json?client_id=%s&paid=1&category=%s&page=%s&count=" + pageSize, APP_ID, URLEncoder.encode(category, "UTF-8"), page);
|
String result = HttpUtil.get(url);
|
net.sf.json.JSONObject resultJson = net.sf.json.JSONObject.fromObject(result);
|
int total = resultJson.optInt("total");
|
Type type = new TypeToken<List<YouKuShowSimple>>() {
|
}.getType();
|
List<YouKuShowSimple> list = new Gson().fromJson(resultJson.optJSONArray("shows").toString(), type);
|
return new ListResultDTO(list, total);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
|
return null;
|
}
|
|
public static ListResultDTO getVideoList(String showId, int page, int pageSize) {
|
Map<String, String> params = new HashMap<>();
|
params.put("show_id", showId);
|
params.put("show_videotype", "正片");
|
params.put("page", page + "");
|
params.put("pageLength", pageSize + "");
|
String result = YouKuApiUtil.request("youku.api.video.byprogram.get", params);
|
System.out.println(result);
|
net.sf.json.JSONObject resultJson = net.sf.json.JSONObject.fromObject(result);
|
int total = resultJson.optInt("total");
|
Type type = new TypeToken<List<YouKuVideo>>() {
|
}.getType();
|
|
List<YouKuVideo> videoList = new Gson().fromJson(resultJson.optJSONArray("videos").toString(), type);
|
if (videoList != null)
|
for (YouKuVideo video : videoList) {
|
video.setShowId(showId);
|
}
|
return new ListResultDTO(videoList, total);
|
}
|
|
|
public static void main(String[] args) {
|
|
getSearchRank(null,10);
|
|
// YouKuShowDetail detail = getShowDetail("1e61efbfbdefbfbd04ef");
|
// System.out.println(detail);
|
// getVideoList("0a17e614d7e311e68ce4", 1, 20);
|
|
// ListResultDTO resultDTO = getShowListByCategory("电视剧", 1);
|
|
// System.out.println(resultDTO);
|
}
|
|
|
public static class ListResultDTO {
|
|
private List list;
|
private int total;
|
|
public ListResultDTO(List list, int total) {
|
this.list = list;
|
this.total = total;
|
}
|
|
public List getList() {
|
return list;
|
}
|
|
public void setList(List list) {
|
this.list = list;
|
}
|
|
public int getTotal() {
|
return total;
|
}
|
|
public void setTotal(int total) {
|
this.total = total;
|
}
|
}
|
|
|
}
|