package com.newvideo.sohu; import java.lang.reflect.Type; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.newvideo.sohu.entity.RootCategory; import com.newvideo.sohu.entity.SecondCategory; import com.newvideo.sohu.entity.SoHuAlbum; import com.newvideo.sohu.entity.SoHuVideo; import com.newvideo.sohu.entity.SohuVideoContent; import com.newvideo.util.HttpUtil; import net.sf.json.JSONObject; public class SoHuApi { private static String root_category = "http://open.mb.hd.sohu.com/v4/category/pgc.json"; private static String second_category = "http://open.mb.hd.sohu.com/v4/category/catecode/%s.json"; private static String content_list = "http://open.mb.hd.sohu.com/v4/category/channel/%s.json"; private static String video_detail = "http://open.mb.hd.sohu.com/v4/video/info/%s.json"; private static String album_detail = "http://open.mb.hd.sohu.com/v4/album/info/%s.json"; private static String video_list = "http://open.mb.hd.sohu.com/v4/album/videos/%s.json"; private final static String CHANNLE_ID = "19278"; private final static String KEY = "abdc5ebb0c7ce08c6c56b74d6e492669"; static Gson gson = new GsonBuilder().setVersion(1).create(); public static List rootCategoryList() { String result = get(String.format(root_category + "?partner=%s&api_key=%s", CHANNLE_ID, KEY)); JSONObject obj = JSONObject.fromObject(result); if (obj.optInt("status") == 200) {// 成功 Type listType = new TypeToken>() { }.getType(); return gson.fromJson(obj.optJSONArray("data").toString(), listType); } return null; } public static List secondCategoryList(int rootCategoryId) { String result = get( String.format(second_category + "?partner=%s&api_key=%s", rootCategoryId + "", CHANNLE_ID, KEY)); JSONObject obj = JSONObject.fromObject(result); if (obj.optInt("status") == 200) {// 成功 Type listType = new TypeToken>() { }.getType(); if (obj.optJSONArray("data") != null) return gson.fromJson(obj.optJSONArray("data").toString(), listType); } return null; } public static Map getContentList(int cid, int secondCategory, int page, int pageSize) { Map map = new HashMap(); String result = get(String.format( content_list + "?partner=%s&api_key=%s&cid=%s&o=1&page_size=%s&page=%s&" + (cid == 9004 ? "" : "is_pgc=1&") + "cat=%s", cid + "", CHANNLE_ID, KEY, cid, pageSize + "", page + "", secondCategory > 0 ? secondCategory + "" : "")); JSONObject obj = JSONObject.fromObject(result); if (obj.optInt("status") == 200) {// 成功 map.put("count", obj.optJSONObject("data").optInt("count")); Type listType = new TypeToken>() { }.getType(); map.put("data", gson.fromJson(obj.optJSONObject("data").optJSONArray("videos").toString(), listType)); } return map; } /** * 获取视频详情 * * @param vid */ public static void getVideoDetail(String vid) { String result = get(String.format(video_detail + "?partner=%s&api_key=%s", vid + "", CHANNLE_ID, KEY)); JSONObject obj = JSONObject.fromObject(result); } /** * 获取专辑详情 * * @param id * @return */ public static SoHuAlbum getAlbumDetail(String id) { String result = get( String.format(album_detail + "?partner=%s&api_key=%s&aid=%s", id + "", CHANNLE_ID, KEY, id + "")); JSONObject obj = JSONObject.fromObject(result); if (obj.optInt("status") == 200) { SoHuAlbum album = gson.fromJson(obj.optJSONObject("data").toString(), SoHuAlbum.class); if (album == null) return null; return album; } return null; } /** * 获取专辑里面的视频列表 * * @param aid * @return */ public static Map getVideoList(String aid, int page, int pageSize) { Map map = new HashMap(); String result = get(String.format(video_list + "?partner=%s&api_key=%s&aid=%s&page=%s&page_size=%s", aid + "", CHANNLE_ID, KEY, aid + "", page + "", pageSize + "")); JSONObject obj = JSONObject.fromObject(result); if (obj.optInt("status") == 200) { JSONObject data = obj.optJSONObject("data"); map.put("count", data.optInt("count")); Type listType = new TypeToken>() { }.getType(); if (data.optJSONArray("videos") != null) map.put("data", gson.fromJson(data.optJSONArray("videos").toString(), listType)); } return map; } public static String get(String url) { return HttpUtil.get(url,"ISO-8859-1"); } }