如何使用 YouTube API 编码 forHandle 参数?

问题描述 投票:0回答:1

我正在尝试从名称中包含特殊字符的 Youtube 频道请求统计数据,例如 FisicaUniversitáriaUSP。

当我使用下面的代码时,响应中没有结果,但通道存在:https://www.youtube.com/c/FisicaUniversit%C3%A1riaUSP

Python 3 中的代码:

from googleapiclient.discovery import build

c = 'FisicaUniversitáriaUSP'
yt = build('youtube', 'v3', developerKey=api_key)
req = yt.channels().list(part='statistics', forHandle=c.encode())
resp = req.execute()
print(resp)

我感谢一些帮助!

youtube-api youtube-data-api
1个回答
0
投票

尝试使用channelId来避免这些编码不匹配。

如果您只有频道句柄名称,请首先尝试搜索频道以获取频道ID:

c = 'channelHandleName'
r = yt.search().list(
    part='snippet',
    q=c,
    type='channel',
    maxResults=1
).execute()

yt.search().list 的相关文档:https://developers.google.com/youtube/v3/docs/search/list

然后,如果返回结果,则获取第一个结果的channelId属性来构建对channels().list的请求:

if req_search_shannels.get('items'):
    channel_id = req_search_shannels['items'][0]['snippet']['channelId']
    response = yt.channels().list(
        part='statistics',
        id=channel_id
    ).execute()

    print(json.dumps(response, indent=4))
else:
  print('couldnt find channel', c)

yt.channels().list 参数的文档:https://developers.google.com/youtube/v3/docs/channels/list

如果您搜索提供频道句柄名称的频道,它始终会在列表中首先返回正确的频道。

© www.soinside.com 2019 - 2024. All rights reserved.