Member 14854943 Ответов: 2

Программа закрывается вместо получения информации из API


Ладно, я все еще довольно новичок в программировании и в основном знаю только основы. Я никогда не работал с API. Я пытаюсь сделать программу, которая получает количество субмарин от PewDiePie и Cocomelon и сравнивает их.

using System;
using Google.Apis.YouTube.v3;
using Google.Apis.Services;
using System.Threading;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net.Http;
using Newtonsoft.Json;
using System.Threading.Tasks;

namespace PewdiepieVsCoco
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var len = args?.Length;

                if (len == null || len.Value == 0)
                {
                    PrintHelp();
                    return;
                }

                var pdpSubCount = args[0];
                var pdpSub = GetPDPSubcount(pdpSubCount).Result;

                PrintPDPResult(pdpSub);

            }

            catch (AggregateException agg)
            {
                foreach (var e in agg.Flatten().InnerExceptions)
                    Console.WriteLine(e.Message);
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }

        private static async Task<dynamic> GetPDPSubcount(string pdpSubCount)
        {
            var parameters = new Dictionary<String, String>
            {
                ["key"] = ConfigurationManager.AppSettings["APIKey"],
                ["channelId"] = "UC-lHJZR3Gqxm24_Vd_AJ5Yw",
                ["part"] = "statistics",
                ["forUsername"] = "PewDiePie",
                ["fields"] = "items/statistics(subscriberCount)"
            };

            var baseUrl = "https://www.googleapis.com/youtube/v3/channels";
            var fullUrl = MakeUrlWithQuery(baseUrl, parameters);

            var pdpSub =  await new HttpClient().GetStringAsync(fullUrl);
            if (pdpSub != null)
            {
                //Does the thing
                return JsonConvert.DeserializeObject(pdpSubCount);
            }

            return default(dynamic);
        }

        private static string MakeUrlWithQuery(string baseUrl, 
            IEnumerable<KeyValuePair<string, string>> parameters)
        {
            if (string.IsNullOrEmpty(baseUrl))
                throw new ArgumentException(nameof(baseUrl));

            if (parameters == null || parameters.Count() == 0)
                return baseUrl;

            return parameters.Aggregate(baseUrl,
                (accumulated, kvp) => string.Format($"{accumulated}{kvp.Value}&"));

        }

        private static void PrintPDPResult(dynamic pdpSub)
        {
            Console.WriteLine($"PewDiePie currently have: {pdpSub} subscribers");//insert subs
        }


        private static void PrintHelp()
        {
            Console.WriteLine("The war is on!");
            Thread.Sleep(500);
            Console.WriteLine("PewDiePie Vs Cocomelon – Nursery Rhymes");
            Thread.Sleep(500);
        }
    }
}


Вот код, я следил за тем, что сделал Индийский чувак в видео YT, так что некоторые вещи я не знаю, что делать, но у меня есть представление о том, что происходит.

Что я уже пробовал:

Я понятия не имею, что случилось, поэтому не знаю, с чего начать

Richard MacCutchan

- Я понятия не имею, что случилось, поэтому не знаю, с чего начать"
Перестаньте тратить свое время на код, который вы не понимаете. Возьмите книгу или найдите хороший онлайн-учебник и потратьте время на изучение C# и basic .Чистые классы.

2 Ответов

Рейтинг:
1

Garth J Lancaster

Ну, это сводится к тому, чтобы научиться отлаживать - шагать по программе часто строка за строкой, видеть, где происходит ошибка, а затем смотреть на содержимое переменных, чтобы увидеть, соответствуют ли они тому, что вы ожидали

Итак, установите точку останова на этой линии

var baseUrl = "https://www.googleapis.com/youtube/v3/channels";
затем начните одноступенчатый шаг, используя F10 "Step Over" и F11 "Step Into" (функции и т. д.), пока не найдете, где что - то идет не так - как вы находите область(области) беспокойства, вам может потребоваться добавить ведение журнала/диагностику, чтобы помочь вам "увидеть" состояние/то, что происходит-часто консоль.WriteLine и т.д. с некоторым текстом & переменная даст вам указатель

кстати, я предложил установить точку останова на этой линии, потому что на каком-то этапе выполнение будет "перескакивать" к этой процедуре и проходить через нее, если вы не установите точку останова, то, скорее всего, пропустите самое интересное

Это то, что мы можем дать вам рекомендации, но в конечном счете мы не можем сделать для вас, так как это ваш код на вашей машине. По большому счету, мы здесь пишем функции и тесты для них по ходу дела, чтобы нас не "застали врасплох" неприятные сюрпризы


Patrice T

+5

Рейтинг:
1

Patrice T

Цитата:
Я следил за тем, что сделал Индийский чувак в видео YT, так что некоторые вещи я не знаю, что делать, но у меня есть представление о том, что происходит.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Отладка кода C# в Visual Studio - YouTube[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.