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

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

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

如何从 YouTube 用户的句柄中提取 YouTube 用户频道 ID?

youtube youtube-api
3个回答
5
投票

再一次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"
        }
    ]
}

0
投票

浪费了大约 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);
}

0
投票

截至2023年12月,YouTube API仍然没有支持通过句柄拉取频道数据的端点。

使用 PHP,我确实找到了一些解决方法。

use Symfony\Component\BrowserKit\HttpBrowser;
use Symfony\Component\HttpClient\HttpClient;

public function getChannelIDFromUrl($url) {
 $httpClient = new HttpBrowser(HttpClient::create());
            $crawler = $httpClient->request('GET', $url);
            $channelUrl = $crawler->filterXPath('//meta[@property=\'og:url\']')
                ->attr('content');
            return explode('/', $channelUrl)[4];
}

注意:$url 返回一个带有@句柄的字符串。

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