我有一个 .net 控制台应用程序,我想使用 Instasharp 包装器通过 hashtag 搜索获取 Instagram 帖子。
我广泛使用 C# .net web forms,对 MVC 或如何使用 await 关键字不太熟悉。下面的代码示例似乎可以运行,但从未提供任何输出。
此行:
var tagInfo = await tagApi.Get("soccer");
没有任何获取到数据的指示,将我返回到调用方法。
有人可以提供关于我在这里做错了什么的见解吗?
public static async void GetInstagram(String tag, InstagramConfig config)
{
var instagramPosts = await LoadInstagramPosts(tag, config);
dynamic dyn = JsonConvert.DeserializeObject(instagramPosts.ToString());
foreach (var data in dyn.data)
{
Console.WriteLine("{0} - {1}", data.filter, data.images.standard_resolution.url);
}
}
public static async Task<TagResponse> LoadInstagramPosts(String hashTagTerm, InstagramConfig config)
{
var tagApi = new InstaSharp.Endpoints.Tags(config);
var tagInfo = await tagApi.Get("soccer");
}
在第一条评论解决了我的初始问题后,我编辑了代码。
我感觉离成功很近,但还有些东西缺失。具体问题请见下文...
我基于 InstaSharp GitHub 的文档编写了代码(https://github.com/InstaSharp/InstaSharp)。GitHub 的示例基于 MVC 应用程序,而我的项目不是 MVC 项目,而是控制台应用程序。
我感觉我已经接近成功,也许其他人通过帮助我解决问题也能受益。
我的具体问题是... 1)不确定 OAuth 方法中的“code”参数来自何处?? 2)如何使用 Instagram 执行所需的回调?
var config = new InstaSharp.InstagramConfig(location.InstagramClientId, location.InstagramClientSecret, "http://localhost");
string instagramLoginLink = InstagramLogin(config);
GetInstagram("soccer", config, instagramLoginLink);
public static async void GetInstagram(String tag, InstagramConfig config, string code)
{
OAuthResponse oAuthResponse = await OAuth(code, config);
var instagramPosts = await LoadInstagramPosts(tag, config, oAuthResponse);
if(instagramPosts.Data != null)
{
dynamic dyn = JsonConvert.DeserializeObject(instagramPosts.Data.ToString());
foreach (var data in dyn.data)
{
Console.WriteLine("{0} - {1}", data.filter, data.images.standard_resolution.url);
}
}
}
public static string InstagramLogin(InstagramConfig config)
{
var scopes = new List<OAuth.Scope>();
scopes.Add(InstaSharp.OAuth.Scope.Likes);
scopes.Add(InstaSharp.OAuth.Scope.Comments);
string link = InstaSharp.OAuth.AuthLink(config.OAuthUri + "authorize", config.ClientId, config.RedirectUri, scopes, InstaSharp.OAuth.ResponseType.Code);
return link;
}
public static async Task<OAuthResponse> OAuth(string code, InstagramConfig config)
{
// add this code to the auth object
var auth = new OAuth(config);
// now we have to call back to instagram and include the code they gave us
// along with our client secret
return await auth.RequestToken(code);
}
public static async Task<TagResponse> LoadInstagramPosts(String hashTagTerm, InstagramConfig config, OAuthResponse OAuth)
{
var tagApi = new InstaSharp.Endpoints.Tags(config, OAuth);
return await tagApi.Get("soccer");
}
LoadInstagramPosts
被定义为返回Task<TagResponse>
,但你没有返回任何内容。请使用return await tagApi.Get("Soccer");
来返回结果。 - Crowcoderawait
时,你可以像处理普通同步调用一样处理它。 - CrowcoderOAuthResponse
包含了“code”,所以我不认为它需要成为GetInstagram
的参数。 - Crowcoder