API данных YouTube (поиск канала) - PullRequest
       7

API данных YouTube (поиск канала)

0 голосов
/ 09 сентября 2018

Используя API данных YouTube, я могу найти канал с поисковым API:

https://www.googleapis.com/youtube/v3/search?part=snippet&q=Alexander+condrashov&type=channel&key=YOUR_API_KEY

Это дает мне один объект в моем массиве элементов.

Но это API "поиска", а не API "канала".

Я думаю, что правильный способ найти канал - использовать API "Каналы: список".

Попытка найти канал по имени пользователя дает мне нулевые объекты в моем массиве элементов:

https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&forUsername=Alexander+kondrashov&key=YOUR_API_KEY

Кому-нибудь удалось использовать "Channels: list" с "forUsername" для поиска канала?

1 Ответ

0 голосов
/ 08 октября 2018

Я знаю, что это старая версия, и вы, возможно, уже кое-что поняли, но, к сожалению, API каналов YouTube не подходит для надежного поиска каналов для чего-либо, кроме идентификатора канала. В качестве обходного пути я комбинирую два подхода, чтобы получить реальный результат (хотя он требует двух запросов и стоит больше квоты, что является слабым соусом).

Например (в C # с использованием Google SDK):

public async Task<Channel> GetChannelByUsername(string username)
{
    try
    {
        var channel = default(Channel);
        var searchRequest = this.youtubeService.Search.List("snippet");
        searchRequest.Q = username;
        searchRequest.Type = "channel";

        var searchResults = await searchRequest.ExecuteAsync();
        if (searchResults != null && searchResults.Items.Count > 0)
        {
            var searchResult = searchResults.Items.FirstOrDefault(i => i.Snippet.ChannelTitle.ToLower() == username);
            if (searchResult != null && searchResult.Snippet != null)
            {
                var channelSearchResult = searchResult.Snippet;
                var channelListRequest = this.youtubeService.Channels.List("snippet");
                channelListRequest.Id = channelSearchResult.ChannelId;

                var channelListResult = await channelListRequest.ExecuteAsync();
                if(channelListResult != null)
                {
                    channel = channelListResult.Items.FirstOrDefault();
                }
            }
        }

        return channel;
    }

    catch (Exception ex)
    {
        // Handle Exception
    }
}
...