首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現獲取優酷視頻縮略圖完整代碼解析

     編輯:Java 相關知識

原理概述

優酷視頻頁面 URL 格式為 https://v.youku.com/v_show/id_X{VIDEO_ID}.html。透過解析出 VIDEO_ID,請求優酷播放列表 API https://v.youku.com/player/getPlayList/VideoIDS/{VIDEO_ID}/...,解析返回 JSON 中的 logo 欄位即可獲得縮略圖 URL。

方案一:使用 JSON 庫解析(推薦)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import net.sf.json.JSONObject;
import net.sf.json.JSONArray;

public class YoukuThumbnailJson {
    public static void main(String[] args) throws IOException {
        String url = "https://v.youku.com/v_show/id_XMjU0MjI2NzY0.html";
        // 1. 提取 VIDEO_ID
        int idx = url.indexOf("id_");
        String videoId = url.substring(idx + 3, url.indexOf(".html"));

        // 2. 請求 API
        URL apiUrl = new URL("https://v.youku.com/player/getPlayList/VideoIDS/" + videoId + "/timezone/+08/version/5/source/out?password=&ran=2513&n=3");
        BufferedReader br = new BufferedReader(new InputStreamReader(apiUrl.openStream()));
        String jsonStr = br.readLine();
        br.close();

        // 3. 解析 JSON
        JSONObject json = JSONObject.fromObject(jsonStr);
        JSONArray data = json.getJSONArray("data");
        String logo = JSONObject.fromObject(data.get(0)).getString("logo");
        System.out.println("縮略圖 URL: " + logo);
    }
}

方案二:字串分割解析(無需 JSON 庫)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class YoukuThumbnailSimple {
    public static void main(String[] args) throws IOException {
        String url = "https://v.youku.com/v_show/id_XMjU0MjI2NzY0.html";
        int idx = url.indexOf("id_");
        String videoId = url.substring(idx + 3, url.indexOf(".html"));

        URL apiUrl = new URL("https://v.youku.com/player/getPlayList/VideoIDS/" + videoId + "/timezone/+08/version/5/source/out?password=&ran=2513&n=3");
        BufferedReader br = new BufferedReader(new InputStreamReader(apiUrl.openStream()));
        // 回傳格式固定,以 \/ 分割
        String[] parts = br.readLine().split("\\\\/");
        br.close();

        // 第 4 個元素包含圖片 ID
        String target = parts[3];
        String imgId = target.substring(0, target.indexOf("\""));
        String imgUrl = "https://g2.ykimg.com/" + imgId;
        System.out.println("縮略圖 URL: " + imgUrl);
        // 輸出範例:https://g2.ykimg.com/1100641F464D8FBF5FA3D90209C8DF96B67E2C-567E-AB53-C132-D7787FC966AB
    }
}

關鍵點說明

  1. VIDEO_ID 提取:定位 id_ 到 .html 之間的字串。
  2. API 參數:timezone/+08 為時區,version/5 為 API 版本,source/out 為來源標識。
  3. JSON 結構:回傳 {data:[{logo:"..."}]},logo 即為縮略圖完整 URL。
  4. 字串分割法:利用回傳內容格式固定,以 \/ 分割後第 4 段為圖片路徑,再去除尾部雜訊。

注意事項

  • 優酷 API 可能隨時變更,生產環境建議改用官方開放平台 OAuth 接口。
  • 網路請求需處理超時、異常重試。
  • 若需批量獲取,請加入請求間隔避免被封 IP。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved