使用下面的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("");
}但我无法从中提取正确的链接。有没有人知道如何在不使用youtube api的情况下用java做到这一点?任何帮助都将不胜感激。
发布于 2018-09-20 01:00:43
我以前也做过类似的项目。
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项目。请随意查看实际测试的代码:提取reddit帖子的因果报应并将其放入csv文件的KarmaGrapher,以及我的这个非常旧的项目:TagHack,它将youtube标签从源代码中去掉。(代码在Zip文件中。我笑得很开心)
发布于 2018-09-20 02:01:08
我已经找到了一个不好的解决方案,但现在它起作用了。我使用processbuilder调用powershell脚本,并将链接返回给java程序。
https://stackoverflow.com/questions/52410602
复制相似问题