- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Youtube 似乎已经去掉了他们页面上的/channel/XXXX url,现在是/c/username?用户名并不是真正的“用户名”。例如
https://www.youtube.com/c/lukemiani
通过
运行查找https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername=lukemiani&key=...
不返回任何结果。
我有一群非技术用户,他们经过培训可以查找/channel/x 或/user/x 并将正确的内容输入到我的应用程序中。现在/channel 已经不存在了,我(或他们)如何将/c/x 转换为 channel ID?
我正在寻找 API 解决方案,而不是查看源代码和逆向工程代码解决方案。
最佳答案
根据official support staff ,给定 channel 可能关联了以下形式的 URL:
https://www.youtube.com/c/CUSTOM_NAME
.
在这种情况下,相应 channel 的 customUrl
属性是 CUSTOM_NAME
.
现在,您的问题可以重新表述如下:
Given a
CUSTOM_NAME
for which the URL above points to an existing channel, is there a procedure that is able to produce -- by making use of YouTube Data API -- that channel's ID, such that the respective procedure to be DTOS-compliant (i.e. the procedure works by not scraping the HTML text obtained from the respective custom URL)?
对上述问题的简短回答是不,没有。 (请查看我最近针对类似问题给出的 my answer and the attached comments)。
较长的答案如下:是的,可以想象一个解决问题的算法,但只是部分解决(因为不能保证它会总是给出积极的结果)。
算法如下:
Search.list
具有以下参数的 API 端点:
q=CUSTOM_NAME
,type=channel
, 和maxResults=10
.items[].id.channelId
);Channels.list
获取 channel 关联的API端点 customUrl
属性(property)(如果有的话);customUrl
等于CUSTOM_NAME
,然后停止生成当前 channel ID 的算法;否则,继续执行当前循环;由于 Search.list
提供的结果集的模糊性质端点,不能排除这样一种可能性,即实际上可能存在自定义 URL(即上述形式的指向现有 channel 的 URL),对此算法无法生成相关 channel 的 ID。
最后一点:Channels.list
端点接受其 id
参数是以逗号分隔的 channel ID 列表。因此,可以很容易地修改上面的算法,而不是 N
。 N <= 10
的调用( Channels.list
)端点只有一个。
上述算法在 Python 语言中的实现,使用 Google 的 APIs Client Library for Python:
def find_channel_by_custom_url(
youtube, custom_url, max_results = 10):
resp = youtube.search().list(
q = custom_url,
part = 'id',
type = 'channel',
fields = 'items(id(kind,channelId))',
maxResults = max_results
).execute()
assert len(resp['items']) <= max_results
ch = []
for item in resp['items']:
assert item['id']['kind'] == 'youtube#channel'
ch.append(item['id']['channelId'])
if not len(ch):
return None
resp = youtube.channels().list(
id = ','.join(ch),
part = 'id,snippet',
fields = 'items(id,snippet(customUrl))',
maxResults = len(ch)
).execute()
assert len(resp['items']) <= len(ch)
for item in resp['items']:
url = item['snippet'].get('customUrl')
if url is not None and \
caseless_equal(url, custom_url):
assert item['id'] is not None
return item['id']
return None
其中函数 caseless_equal
上面使用的是由于 this SO answer .
我发布了 here包含函数 find_channel_by_custom_url
的简单 Python3 脚本以上为独立程序。应用于此脚本的自定义 URL 会产生预期的结果:
$ python3 youtube-search.py \
--custom-url lukemiani \
--app-key ...
UC3c8H4Tlnm5M6pXsVMGnmNg
$ python3 youtube-search.py \
--user-name lukemiani \
--app-key ...
youtube-search.py: error: user name "lukemiani": no associated channel found
请注意,您必须将您的应用程序 key 作为命令行选项 --app-key
的参数传递给此脚本(使用 --help
获取简短的帮助信息)。
关于youtube-api - 从 youtube.com/c/xxxx 链接获取 channel ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63046669/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!