检索instagram访问令牌页面加载
本文关键字:加载 访问令牌 instagram 检索 | 更新日期: 2023-09-27 18:19:02
我想在我的网站上显示我的用户提要,我打算做的是每次用户访问页面时验证我自己的用户帐户,并以这种方式通过用户必须登录他的instagram帐户。
我的问题是,我很难通过HttpWebRequest检索instagram访问令牌..
请参阅以下非工作代码示例:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.instagram.com/oauth/authorize?client_id=xxxxxxxxxxxxxxxxxxxxxx&redirect_uri=http://mywebsite.com&response_type=token");
request.Method = "POST";
request.AllowAutoRedirect = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string redirectUrl = response.ResponseUri.ToString();
HttpContext.Current.Response.Write(redirectUrl);
HttpContext.Current.Response.End();
如果我在浏览器中粘贴url,我得到一个重定向到http://mysite.com/#access_token=xxxxxxxxxxxxxx,一切似乎都很好,但是当我尝试执行上面的代码时,我无法检索到正确的uri,因为在最终url之前有一些重定向。
我建议你使用Instasharp库。InstaSharp是一个c#库,它包装了Instagram API,使使用Instagram数据编写应用程序变得容易。它有一个非常简单的方法来获取用户的访问令牌。查看它的API
不幸的是,Instasharp目前提供的文档有一些错误。例如,当这样的类不存在时,文档说OAuthInfo。这里是一些为我工作的代码。注意,您似乎根本不需要传递用户对象(不确定为什么需要这样做)。还要注意,经过身份验证和未经过身份验证的方法允许传递不同的参数,count是最重要的一个。我注意到,无论您传递的计数是多少,都会返回任意数量的结果,例如,对于相同的搜索项,authenticated为33,authenticated为13。InstagramResult是对象的包装器类,Config保存InstagramAuthorisationModel, InstagramAuthorisationModel保存注册开发人员帐户时创建的静态密钥。
public class InstagramService : IInstagramService
...
public InstagramConfig Config
{
get{return new InstagramConfig("https://api.instagram.com/v1", "https://api.instagram.com/oauth", InstagramAuthorisationModel.ApplicationId, InstagramAuthorisationModel.Secret, InstagramAuthorisationModel.RedirectUri);}
}
private AuthInfo UserAuthInfo()
{
return new AuthInfo()
{
// User =new UserInfo(){},
Access_Token = GetInstagramAccessToken()
};
}
public string GetInstagramAccessToken()
{
return _socialMediaRepository.GetInstagramAccessToken(_userApiKey);
}
public List<InstagramResult> Search(string searchTag, int count)
{
var auth = UserAuthInfo();
var tags = new InstaSharp.Endpoints.Tags.Authenticated(Config, auth);
var searchresult = tags.Recent(searchTag);
return searchresult.Data.Select(media => new InstagramResult()
{
Media = media,
image = media.Images.LowResolution.Url
})
.ToList();
}
.