使用以下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? 任何帮助将不胜感激。
答案 0 :(得分:0)
我过去也做过类似的项目。
youtube播放列表中的每个链接都位于名为ytd-playlist-video-renderer
的元素中。
建议您先查找此元素,然后再查找<a>
元素,然后再使用substring("").
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程序。