Youtube网址提取

时间:2017-03-10 18:24:16

标签: parsing youtube

我有一个程序将从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似乎不包含我可以使用的任何其他数据。

0 个答案:

没有答案