c# - 程序关闭而不是从 API 获取信息
问题描述
好的,所以我对编码还是很陌生,而且大多只知道基础知识。我从未使用过 API。我正在尝试制作一个程序,从 PewDiePie 和 Cocomelon 获取潜艇数量并进行比较。
namespace PewdiepieVsCoco
{
class Program
{
static void Main(string[] args)
{
try
{
var len = args?.Length;
if (len == null || len.Value == 0)
{
PrintStart();
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"],
["channelsId"] = "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 PrintStart()
{
Console.WriteLine("The war is on!");
Thread.Sleep(500);
Console.WriteLine("PewDiePie Vs Cocomelon – Nursery Rhymes");
Thread.Sleep(500);
}
}
}
这是代码,我遵循了一个印度家伙在 YT 视频中所做的事情,所以有些事情我不知道该怎么做,但我知道发生了什么。
解决方案
您的程序可能在进行任何 API 调用之前返回,因为您没有使用任何命令行参数执行它。删除此代码块,使其继续运行而不会提前返回。
var len = args?.Length;
if (len == null || len.Value == 0)
{
PrintStart();
return;
}
此外,pdpSubCount
不应是函数参数,也不应传递给 DeserializeObject。您应该反序列化来自 api 调用的响应
return JsonConvert.DeserializeObject(pdpSub)
推荐阅读
- reactjs - 如果当前订阅未完成,则取消新订阅
- javascript - Webpack Encore - Vuejs 测试 Mocha
- python - 如何通过 ssh 访问本地服务器上的端口?
- c# - URL 重写不适用于 clickonce 应用程序的 http 到 https 重定向
- python - 如何在opengl和pygames中使用键盘键移动立方体?
- javascript - 无线电输入在选择时重复(反应)
- ssl - Traefik 的推荐 TLS 密码
- mod-rewrite - RewriteRule : HTTPS 时删除子域上的 WWW
- java - 需要输入完整路径来保存文件?
- maple - Maple 使用 ShowSolution 函数计算不正确