新浪微博登陆,获取微博用的信息

一.登陆微博公众平台,创建网站应用

地址:点击打开链接

1.获取appid和appkey

2.设置测试账号,审核通过之后其他用户方可使用


二、参考微博OAuth2.0,分三步获取用户信息

详细:点击打开链接

  • 第一步 根据appid 获取 Authorization Code
详细: 点击打开链接,请求方式:get/post
  • 第二步 根据Authorization Code 获取Access Token 和 uid
详细: 点击打开链接,请求方式post
  • 第三步 根据uid 调用微博API 获取用户信息
详细: 点击打开链接,请求方式get


注:

1.其他可用接口列表:点击打开链接

2.在调用的时候需要注意请求方法

scope是OAuth2.0新版授权页提供的一个功能,通过scope,平台将开放更多的微博核心功能给开发者,同时也加强用户隐私保护,提升了用户体验,用户在新OAuth2.0授权页中有权利选择赋予应用的功能。



三、WebForm代码示例

1.回调地址处理

    /// <summary>
    /// SinaLogin 的摘要说明
    /// </summary>
    public class SinaLogin : IHttpHandler,IRequiresSessionState
    {
        RequestHelper _Request = new RequestHelper();
        LogHelper.LogHelper _log = new LogHelper.LogHelper();

        //测试使用
        private string appid = "1956553634";
        private string appkey = "d9d486d84a559e3e3e9df40aa5352a9a";
        public void ProcessRequest(HttpContext context)
        {
            HttpResponse resp = context.Response;
            HttpRequest req = context.Request;
            HttpServerUtility server = context.Server;
            HttpSessionState session = context.Session;

            string thisUrl = req.Url.AbsoluteUri;
            string code = _Request.GetStringQuery("code");
            //第一次访问
            if (code == "")
            {
                #region 第一步 根据appid 获取 Authorization Code
                StringBuilder builder = new StringBuilder(500);
                builder.Append("https://api.weibo.com/oauth2/authorize?");
                builder.AppendFormat("response_type={0}", "code");
                builder.AppendFormat("&client_id={0}", appid);
                builder.AppendFormat("&redirect_uri={0}", server.UrlDecode(thisUrl));
                builder.AppendFormat("&state={0}", "weilanliuxue");//用于自身验证
                builder.AppendFormat("&scope={0}", "all");
                resp.Redirect(builder.ToString(), false);
                return;
                #endregion
            }
            string state = _Request.GetStringQuery("state");
            //第二次访问
            if (code != "" && state == "weilanliuxue")
            {
                #region 第二步 根据Authorization Code 获取Access Token 和 uid
                StringBuilder builder = new StringBuilder(500);
                builder.Append("https://api.weibo.com/oauth2/access_token?");
                builder.AppendFormat("grant_type={0}", "authorization_code");
                builder.AppendFormat("&client_id={0}", appid);
                builder.AppendFormat("&client_secret={0}", appkey);
                builder.AppendFormat("&code={0}", code);
                builder.AppendFormat("&redirect_uri={0}", server.UrlDecode(thisUrl));
                //1.获取并解析 access_token 例如:
                string access_token = "";
                string uid = "";
                try
                {
                    string result = NetHelper.Post(builder.ToString()); //此处微博拒绝get请求
                    result = RegexHelper.Replace(result, "{|}|\"", "");
                    string[] temp = result.Split(',');
                    access_token = temp[0].Split(':')[1];
                    uid = temp[3].Split(':')[1];
                }
                catch (Exception ex)
                {
                    _log.WriteLine("解析 access_token 是出错:" + ex.Message);
                    throw new Exception("解析 access_token 是出错:" + ex.Message);
                }
                #endregion

                _log.WriteLine("uid:"+uid);
                _log.WriteLine("access_token:" + access_token);

                #region 第三步 根据uid 调用微博API 获取用户信息
                //第四步 获取用户信息
                builder.Clear();
                builder.Append("https://api.weibo.com/2/users/show.json?");
                builder.AppendFormat("access_token={0}", access_token);
                builder.AppendFormat("&uid={0}", uid);
                builder.AppendFormat("&source={0}", appkey);
                #endregion
                try
                {
                    string userinfo = NetHelper.Get(builder.ToString()); //微博次数拒绝 post请求
                    _log.WriteLine("webo-userinfo:" + userinfo);
                    SinaInfo info = userinfo.JsonDeserialezer<SinaInfo>();
                    if (info == null)
                    {
                        throw new Exception("内部错误:反序列化获取SinaInfo对象时失败!");
                    }
                    //获取数据成功,进行其他逻辑处理
                    _log.WriteLine(userinfo);
                    //保存session
                    session["access_token"] = access_token;
                    session["uid"] = uid;
                    session["sinainfo"] = info;

                    //返回数据或跳转
                    resp.Redirect("~/view/SinaInfoShow.aspx", false);
                }
                catch (Exception ex)
                {
                    string msg = "获取用户信息失败,--------出错原因:" + ex.Message;
                    _log.WriteLine(msg);
                }
            }
        }


        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }

2.获取的用户信息对象(部分信息)

   //微博用户信息对象
    public class SinaInfo
    {
        //用户 uid   [Int(64)]
        public double id { get; set; }
        //用户uid 的字符串
        public string idstr { get; set; }
        //用户昵称
        public string screen_name { get; set; }
        //友好显示名称
        public string name { get; set; }
        //用户的性别:m:男、f:女、n:未知
        public string gender { get; set; }
        //用户所在省ID
        public int province { get; set; }
        //用户所在城市ID 
        public int city { get; set; }
        //用户所在地
        public string location { get; set; }
        //用户个人描述
        public string description { get; set; }
        //用户博客地址
        public string url { get; set; }
        //用户头像 中(50*50)
        public string profile_image_url { get; set; }
        //用户头像 大 (180*180)
        public string avatar_large { get; set; }
        //用户头像 (原图)
        public string avatar_hd { get; set; }
        //用户的微博统一地址
        public string profile_url { get; set; }
        //用户的个性化域名
        public string domain { get; set; }
        //用户的微号
        public string weihao { get; set; }
        //用户的粉丝数
        public int followers_count { get; set; }
        //用户的关注数
        public int friends_count { get; set; }
        //用户逇微博数
        public int statuses_count { get; set; }
        //用户的收藏数
        public int favourites_count { get; set; }
        //用户的注册时间
        public string created_at { get; set; }
        //用户的备注信息
        public string remark { get; set; }
        //是否在线 0:不在线、1:在线
        public int online_status { get; set; }
    }









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值