从查看源抓取数据:https://www.youtube.com/embed/

Scraping data from view-source:https://www.youtube.com/embed/

提问人:Hanna 提问时间:9/28/2022 更新时间:11/13/2023 访问量:78

问:

我有一大堆嵌入式 Youtube 视频。其中一些不可用。

我正在寻找一种解决方案,如何在大量 URL 中识别它们。

可以通过以下方式手动检查:

例如,嵌入式 Youtube 视频 - https://www.youtube.com/embed/GdGB0cv6i8I

查看源代码:https://www.youtube.com/embed/GdGB0cv6i8I

previewPlayabilityStatus - “视频不可用”

我正在尝试将其与带有公式的 Google 电子表格相结合

以下是该文件的链接:https://docs.google.com/spreadsheets/d/1fHB2UvCVxq4tgNrn_VWlmGyfpXyS-vhbWu57EjUaKsw/edit#gid=0

由于某些原因,它不起作用。

解析 google-sheets-api

评论

2赞 Benjamin Loison 9/28/2022
您似乎刚刚共享了一个 Google 表格 URL,为每个人提供写入访问权限。我不建议你这样做,因为任何人都可以这样破坏你的谷歌表格。
0赞 TheMaster 9/30/2022
如果将输入表和预期输出表添加到问题中,则可以大大改进您的问题。表格是比电子表格更好的选择,可以显示您的数据结构。如果您共享电子表格,请确保同时添加工作表的图像以避免您的问题结束,因为此处的问题必须是独立的当您分享 Google 文件时,公众也可以访问您的电子邮件地址

答:

1赞 Benjamin Loison 9/28/2022 #1

继续您之前的问题,您可以通过使用我的无键服务来解决您的问题,如下所示,带有 Google Apps 脚本(请参阅我修改后的 Google 表格示例):

function fills_embeddable_associated_to_given_youtube_videos() {
  const A = 1, B = 2;
  var sheet = SpreadsheetApp.getActiveSheet();
  for(var row = 2; row <= sheet.getLastRow(); row++)
  {
    const videoId = sheet.getRange(row, A).getValue().toString().replace("https://www.youtube.com/embed/", "").replace("view-source:", "");
    const responseStr = UrlFetchApp.fetch(`https://yt.lemnoslife.com/videos?part=status&id=${videoId}`).getContentText();
    const response = JSON.parse(responseStr);
    sheet.getRange(row, B).setValue(response["items"][0]["status"]["embeddable"]);
  }
}

此 StackOverflow 答案相关。

评论

0赞 Hanna 9/29/2022
本杰明,非常感谢。工作正常!
0赞 Hanna 9/29/2022
我发现了一个奇怪的事情:一个私人嵌入的 youtube 链接(例如 youtube.com/embed/qPNiIeKMHyg)以前是公开的,在博客文章中仍然可见。怎么可能?这是否意味着数据被缓存在某个地方,并且在一段时间内,这个 yourtube url 最终将变得不可见?
0赞 Benjamin Loison 9/29/2022
你指的是什么博文?我看不出任何问题,因为 qPNiIeKMHyg 有:(根据 YouTube Data API v3 Videos: list with ),youtube.com/embed/qPNiIeKMHyg 显示和我的 Videos: list endpoint of YouTube operational API returns : (yt.lemnoslife.com/videos?part=status&id=qPNiIeKMHyg)。AFAIK 公共视频作者可以禁用嵌入,这里似乎就是这种情况。snippet/privacyStatuspublicpart=statusVideo unavailablestatus/embedabblefalse