Java从Youtube播放列表中获取所有链接

时间:2018-09-19 16:42:16

标签: java powershell networking jsoup

使用以下Powershell脚本,我可以从Youtube中提取播放列表的所有链接:

$Playlist = ((Invoke-WebRequest -Uri "https://www.youtube.com/watch? 
v=dyJdLalc7TA&list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs").Links | Where {$_.class -match "playlist-video"}).href

ForEach ($Video in $Playlist) {
 $s ="https://www.youtube.com" + $Video
 $s =$s.Substring(0, $s.IndexOf('&'))
  Write-Output ($s)
 }

对于Java Youtubeplayer我需要它,所以我用jsoup尝试了它:

Document document = Jsoup.connect("https://www.youtube.com/watch? 
v=dyJdLalc7TA&list=PLNmsVeXQZj7q0ao69AIogD94oBgp3E9Zs").get();

        //Get links from document object. 
        Elements links = document.select("a[href]");


        for (Element link : links) {
            System.out.println("Link: " + link.attr("href"));               
            System.out.println("");
        }

但是我无法提取正确的链接。有没有人知道如何使用Java而不使用youtube api? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我过去也做过类似的项目。

youtube播放列表中的每个链接都位于名为ytd-playlist-video-renderer的元素中。 建议您先查找此元素,然后再查找<a>元素,然后再使用substring("").

查找href标签。
String source = getSource();
ArrayList<String> links = new ArrayList<String>();

while(source.contains("ytd-playlist-video-renderer")){

    source = source.substring(source.indexOf("ytd-playlist-video-renderer"));
    source = source.substring(source.indexOf("<a"));
    source = source.substring(source.indexOf("href="));
    links.add(1, source.indexOf);

}

这将调用函数getSource()以获取html源代码,然后从中提取链接。 (因此没有测试,我只是祈祷它能起作用)

这是我完成的一些相关的GitHub项目。随时查看实际测试过的代码:KarmaGrapher,该代码提取了reddit Post的业力,并将其放入csv文件中,而我的这个非常老的项目:TagHack提取了youtube标签从源代码。 (代码位于Zip文件中。我非常苦恼)

答案 1 :(得分:0)

我发现解决方案不好,但是现在可以使用。我使用processbuilder调用powershell脚本,并将链接返回到Java程序。