我有一个程序将从youtube页面获取HTML,提取编码的MP4播放URL,解构键值对,然后重新组合以创建有效的URL
Pattern p = Pattern.compile("url_encoded_fmt_stream_map\":\".*?([^,]|[^\"]+?type=video%2Fmp4.*?)(?=,)");
Matcher m = p.matcher(html);
m.find();
String encodedMP4URL = URLDecoder.decode(m.group(1), "UTF-8");
//get MP4 encoded URL
HashMap<String, String> pairs = new HashMap<String, String>();
String[] temp = encodedMP4URL.split("&");
for (int i = 0; i < temp.length; i ++)
if (!temp[i].contains("url="))
pairs.put(temp[i].split("=")[0], temp[i].split("=")[1]);
else {
String URLPart = temp[i].split("\\?")[0] + "?";
pairs.put(URLPart.split("=")[0], URLPart.split("=")[1]);
String otherPart = temp[i].split("\\?")[1];
pairs.put(otherPart.split("=")[0], otherPart.split("=")[1]);
}
//decode String into key value pairs
pairs.remove("quality");
pairs.remove("type");
//remove pairs that aren't used
StringBuilder realURL = new StringBuilder(pairs.get("url"));
pairs.remove("url");
//add url base then remove key/value pair from map
for (String s : pairs.keySet())
if (s.equals("s"))
realURL.append("signature=" + pairs.get(s) + "&");
else
realURL.append(s + "=" + pairs.get(s) + "&");
//encode URL properly with required params
这适用于我认为是所有非版权视频(即任何自制视频)。然而,它似乎不适用于我认为具有与之相关的某种版权的视频。对于无法使用的视频,url_encoded_fmt_stream_map似乎不包含我可以使用的任何其他数据。