如何在 C# 中从 Instagram API Sharp 返回当前趋势标签

Posted

技术标签:

【中文标题】如何在 C# 中从 Instagram API Sharp 返回当前趋势标签【英文标题】:How to return current trending hashtags from Instagram API Sharp in C# 【发布时间】:2021-05-17 16:19:10 【问题描述】:

我正在尝试使用 Instagram API Sharp C# API 来尝试返回当前流行的主题标签列表。我找到了添加该功能的页面,但我认为我不了解如何实现它。

这里是开发人员所说的实现方式的链接:https://github.com/ramtinak/InstagramApiSharp/issues/227

这是我将其添加到项目时遇到的错误

public static async Task<List<String>> GetPopularTags()

     var test = InstaApi.HashtagProcessor.GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1)).Wait();

我一般是编程新手,所以它可能是一个简单的修复。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

问题似乎出在您调用GetTopHashtagMediaListAsync 的方式上。这与这个特定的API无关,而是对如何在C#中使用Tasks的误解。

先提醒一下:在 SO 上发布与代码相关的问题时,请尽可能以文本而不是图像的形式提供代码和错误/异常。如果能以文本格式查看您的代码,那就太好了。

无论如何...以下返回Task&lt;IResult&lt;InstaSectionMedia&gt;&gt;

InstaApi.HashtagProcessor
     .GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));

但是,您在其上调用Wait(),它不会返回值(返回类型void),而是阻止当前线程等待Task 完成。这样做你也会失去对任务的引用。一种解决方案(虽然不是正确的解决方案,但仅用于说明目的)是将其拆分为三个步骤:

// Get/start the task
var task = InstaApi.HashtagProcessor
     .GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));
// Wait for it to complete
task.Wait();
// Use the result
var result = task.Result;
// ...

如前所述,这不是一个很好的解决方案,因为您通过调用Wait() 实质上阻塞了当前线程,它占用了您的应用程序中的一个线程,除了等待之外什么都不做。使用Tasks 时,您通常希望await 它利用C# 中内置的异步功能(实际上您已经使用async 关键字为它准备了方法)。因此,处理代码的更好方法是将上述所有三个步骤合并到一个 await 语句中:

var result = await InstaApi.HashtagProcessor
     .GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));

这样,您可以让应用程序在等待任务完成时将线程用于其他事情。完成后,结果将分配给result,代码将从中断处继续。

【讨论】:

好的,谢谢让我知道代码块,我用代码编辑了问题。但是,我仍然收到错误消息。然而,错误不是因为.Wait() 部分。我刚刚创建了一个“InstaApi”实例,然后在下面引用它。我会用更好的解释来回答我自己的问题【参考方案2】:

原来我需要创建一个 InstaApi 的实例并使用它来获取 Hashtags 列表

public static IInstaApi api = InstaApiBuilder.CreateBuilder().SetUser(userSession)
                                                                     .UseLogger(new DebugLogger(InstagramApiSharp.Logger.LogLevel.All))
                                                                     .Build();


public static async Task<List<String>> GetPopularTags()

      var test = await api.HashtagProcessor.GetTopHashtagMediaListAsync("plant", PaginationParameters.MaxPagesToLoad(1));       


我也错误地使用了.Wait() 方法。我必须在前面添加“等待”才能正确接收结果。

【讨论】:

以上是关于如何在 C# 中从 Instagram API Sharp 返回当前趋势标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中从 Instagram 注销?

如何在颤动中从 api url 加载图像?

如何在 C# 中从 IMDB 获取信息

通过 C# 在 Unity 中从 API URL 解析 JSON

如何在 C# 中从二维矩形字符数组的一行创建字符串?

如何使用 Instagram 的 API 显示我自己的照片库?