Я пытаюсь создать веб-браузер в CefSharp. Я также пытаюсь сделать так, чтобы у него был веб-блокировщик контента YouTube, в основном в целях изучения того, как работает API YouTube. Поскольку документации по API для C # очень мало, я не понимаю, как я должен это делать. Мой код находится на GitHub. Мой код для API находится в Video.cs и Form1.cs. Вот код для Video.cs:

using Google.Apis.Auth.OAuth2;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using Google.Apis.YouTube.v3;
using Google.Apis.YouTube.v3.Data;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace Tools
{
    public class YouTubeServiceClient
    {
        private static YouTubeServiceClient instance;
        private Video video;

        public static YouTubeServiceClient Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new YouTubeServiceClient();
                }
                return instance;
            }
        }

        public Video Video { get => video; set => video = value; }

        public async Task Run(string videoId)
        {
            UserCredential credential;
            using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    // This OAuth 2.0 access scope allows for read-only access to the authenticated 
                    // user's account, but not other types of account access.
                    new[] { YouTubeService.Scope.YoutubeReadonly },
                    "user",
                    CancellationToken.None,
                    new FileDataStore(this.GetType().ToString())
                );
            }

            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = this.GetType().ToString()
            });

            var request = youtubeService.Videos.List("snippet");
            request.Id = videoId;

            // Retrieve the contentDetails part of the channel resource for the authenticated user's channel.
            var response = await request.ExecuteAsync();
            if (response.Items.Count == 1)
            {
                Video = response.Items[0];
            }
        }
    }
}

Я использовал его и получил ответ, отправивший меня в Chrome для ввода моих учетных данных. После этого я использовал свой Form1.cs, вот фрагмент, который с ним справляется:

private async void OnBrowserAddressChanged(object sender, AddressChangedEventArgs e)
        {
            this.InvokeOnUiThreadIfRequired(() => searchBar.Text = e.Address);
            if (youtubeBlocker && Regex.IsMatch(e.Address, StringTools.WildCardToRegular("https://www.youtube.com/watch*")))
            {
                Uri addressUrl = new Uri(e.Address);
                string videoId = HttpUtility.ParseQueryString(addressUrl.Query).Get("v");

                MessageBox.Show(videoId);
                YouTubeServiceClient videoClient = new YouTubeServiceClient();

                try
                {
                    await videoClient.Run(videoId);
                }
                catch
                {
                    MessageBox.Show("FAILED");
                }

                foreach (string word in blacklistedWords)
                {
                    if (Regex.IsMatch(videoClient.Video.Snippet.Description.ToLower(), StringTools.WildCardToRegular(word)))
                    {
                        MessageBox.Show("BLACKLISTED");
                        break;
                    }
                }

            }
        }

Хотя я перехожу на нужные страницы YouTube, мое сообщение из ЧЕРНОГО СПИСКА не появляется. Я действительно не понимаю, почему это может быть, и работал над этим 2 дня. Что-то не так с моим кодом? Мне нужно что-то еще использовать? Есть ли способ лучше? Спасибо.

РЕДАКТИРОВАТЬ: Я продолжаю получать эти ошибки:

[0227/083150.786:INFO:CONSOLE(0)] "The resource https://r8---sn-a8au-hp5l.googlevideo.com/generate_204 was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it wasn't preloaded for nothing.", source: https://www.youtube.com/watch?v=Ebp8T1HfiLk (0)

[0227/083150.789:INFO:CONSOLE(0)] "The resource https://r8---sn-a8au-hp5l.googlevideo.com/generate_204?conn2 was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it wasn't preloaded for nothing.", source: https://www.youtube.com/watch?v=Ebp8T1HfiLk (0)
0
J. Henriksson 27 Фев 2018 в 01:57

1 ответ

Лучший ответ

Оказывается, я искал не в том месте. Код для обработки значений описания был неправильным. Если вы хотите увидеть, как я вместо этого использовал YouTube Explode и как я его исправил, просто взгляните на страницу GitHub выше. Извините, если это был глупый вопрос, я просто не понимал, как использовать метод contains. Извини спасибо

0
J. Henriksson 28 Фев 2018 в 03:53