如何将youtube句柄映射到频道ID



Youtube最近推出了handles功能,他们为用户提供Youtube.com/@xxx类型的用户名,当访问时,这些URL显示用户的频道,但我在API存储库中找不到任何文档或参考。

如何从他们的句柄中提取youtube用户频道ID?


再一次YouTube Data API v3没有提供基本功能。

我建议你试用我的开源YouTube操作API。事实上,通过获取https://yt.lemnoslife.com/channels?handle=@HANDLE,您将在item["id"]中获得您正在查找的YouTube频道id。

例如,使用YouTube频道句柄@WHO,您将获得:

{
"kind": "youtube#channelListResponse",
"etag": "NotImplemented",
"items": [
{
"kind": "youtube#channel",
"etag": "NotImplemented",
"id": "UC07-dOwgza1IguKA86jqxNA"
}
]
}

浪费了大约2个小时来派生以下工作代码/修复程序。。。

// Youtube NEW garbage handles to channel IDs
// https://stackoverflow.com/questions/75372496/how-can-i-get-youtube-channel-id-using-channel-name-url/75374713#75374713
// https://youtube.com/@AndreoBee
// https://stackoverflow.com/questions/74323173/how-to-map-youtube-handles-to-channel-ids
// One more time YouTube Data API v3 doesn't provide a basic feature.
// https://yt.lemnoslife.com/  Open Source YouTube API
/* sample JSON returned
{
"kind": "youtube#channelListResponse",
"etag": "NotImplemented",
"items": [
{
"kind": "youtube#channel",
"etag": "NotImplemented",
"id": "UC9rnrMdYzfqdjiuNXV7q8oQ"
}
]
}
*/
/// <summary>
/// Return Videos from ChannelId (derived from new Google garbage handle to channel)
/// 20230415
/// </summary>
/// <param name="UserName"></param>
/// <returns></returns>
public async Task<List<YouTubeInfo>> UserVideosViaNewHandleToChannelId(String UserName)
{
string URI = "https://yt.lemnoslife.com/channels?handle=" + UserName;
//
// https://swimburger.net/blog/dotnet/configure-servicepointmanager-securityprotocol-through-appsettings
// https://stackoverflow.com/questions/28286086/default-securityprotocol-in-net-4-5
// without the following Microsoft garbage now (httpClient.GetStringAsync(URI);)   will crash.
System.Net.ServicePointManager.SecurityProtocol |=
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
//
// https://learn.microsoft.com/en-us/dotnet/csharp/tutorials/console-webapiclient
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json"));
httpClient.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter");
//
// "https://api.github.com/orgs/dotnet/repos"
var JSON_String = await httpClient.GetStringAsync(URI);
Console.Write(JSON_String);
// https://peterdaugaardrasmussen.com/2022/01/18/how-to-get-a-property-from-json-using-selecttoken/
var JSON_Object = JObject.Parse(JSON_String);
//
var ChannelId = JSON_Object["items"][0]["id"].ToString();
return await ChannelVideosInfo(ChannelId);
}

最新更新