这是我的问题。我正在工作的网站上有许多不同的产品,它们可能具有指向YouTube视频或播放列表的链接。我被要求在页面上嵌入该链接,而不是将最终用户从页面上移开以查看视频/播放列表。很简单。
我正在使用JSTL fn.substring和fn.substringAfter隔离导入到页面中的每个URL的VideoID和PlaylistID
<c:if test="${hyperlink.type.name eq 'YouTubeLinking'}">
<c:set var="videoSub" value="${fn:substringAfter(hyperlink.link, 'watch?v=')}"/>
<c:set var="videoID" value="${fn:substring(videoSub, 0, 11)}"/>
<c:set var="playlistSub" value="${fn:substringAfter(hyperlink.link, 'list=')}"/>
<c:set var="playlistID" value="${fn:substring(playlistSub, 0, 34)}"/>
然后,我使用一个简单的IF条件查看PlaylistID,如果它为空,则仅使用嵌入的单个视频。
<c:if test="${empty playlistID}">
<iframe width="540" height="304" src="https://www.youtube.com/embed/<c:out value="${videoID}"/>?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</c:if>
<c:if test="${not empty playlistID}">
<iframe width="540" height="304" src="https://www.youtube.com/embed/videoseries?list=<c:out value="${playlistID}"/>" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</c:if>
问题是...这些播放列表中的许多不再有效,这意味着该播放列表已被删除。我们说的是成千上万种可能链接到数百个播放列表的产品。
无论如何,我是否可以使用YouTube API来检查PlayListID是否有效(不会返回400错误),如果无效,则仅使用单个视频嵌入标记?
答案 0 :(得分:0)
调用Youtube Data API的Playlists: list,该API返回频道的所有播放列表。将snippet
作为part
参数传递,因为它返回诸如title
和id
之类的信息。将响应与您的响应进行比较。这样,您就会知道播放列表是否仍然存在。
答案 1 :(得分:0)
我是Video Link Checker插件的作者。这是我建议您执行的操作:
1)使用播放列表ID对playlistItems进行API调用。
2)如果API返回空结果,则播放列表已被删除。否则,
3)播放列表->状态->隐私状态是否已更改且不再公开? (不少见)
4)播放列表-> contentDetails-> itemCount> 0吗?有时,播放列表所有者会删除所有视频,但仍使播放列表处于活动状态。
5)是否有播放列表-> contentDetails-> regionRestrictions?检查目标区域,看嵌入式视频是否还能播放。