zoukankan      html  css  js  c++  java
  • 新浪微博教程(一)

       公司的应用需要一个分享功能,希望能够分享到新浪和腾讯的微博平台上去。要求比较简单,只是允许用户能够发一条我们预制好的微博即可。

        新浪微博和腾讯微博都有各自的开放平台,平台上提供了丰富的api接口和详尽的说明文档。即使从来没有做过,借助这些资料和SDK上的Demo,都可以迅速上手。

        本文将分两部分来各自介绍新浪和腾讯微博分享的流程和操作方法,仅为菜鸟童鞋们参考。其中最多的问题都来自于Oauth认证,而认证这部分最多的问题来自于腾讯微博,这一点我们后边再说。

        由于新浪和腾讯采用的Oauth认证算法的版本不一样,腾讯使用的是Oauth1.0 ,尽管官方提供的SDK说已经支持Oauth2.0,但是我没有试验成功。

        通过了认证,什么问题都会迎刃而解。

        好了,废话不多说,正文开始。

      一:Oauth认证简介

        首先来说Oauth认证到底是个神马东西,简单来说就是一种授权的算法。可以保证第三方应用在不拿到用户微博的账号和密码的前提下,访问用户的微博信息,而这一切都需要用户的授权才可以,从而最大程度的保护用户账号和密码的安全。

        认证步骤简述如下:

    1. 用户要使用第三方应用的微博服务,第三方应用首先向新浪微博请求身份验证。

    2.服务器根据第三应用提供的APP Key和App Secret(密钥) ,核实是否是合法应用。

    如果通过验证,返回第三方应用一个未授权的请求令牌(Request Token)。这个令牌告诉用户,此应用是合法滴。

    3. 第三方应用拿着这个未授权的令牌,重定向到服务端的用户授权页,请求用户授权。这个授权页一定是服务端的,不允许第三方来构造。

    4.用户输入授权账号和密码,提交服务端验证通过后,会向第三方应用返回授权的请求令牌和验证码等。

    5.第三方应用在拿着授权的请求令牌去换取访问令牌(Access Token)。

    6.服务器返回访问令牌

    如下图所示:

        二:新浪微博应用申请及SDK下载

    1. 登录新浪微博开房平台,没有的话就注册一个。

    2.创建一款手机应用,按照向导提示,输入相关信息即可。新浪会为你的应用分配一个独一无二的APP KEY和APP Secret 。将这两个东西保存好。

    当然这只是我们自己申请测试的应用,在访问人数和次数上,会有一定的限制。如果你的应用需要正式上线运行,要提交新浪审核。

    3.准备工作完成,去平台下载android版的SDK。

        三:动手开发测试

    新浪微博的SDK包中含有一个简单的DEMO,可以发布一条微博,这对我们来说已近足够。我们主要使用它封装好的API。

    1.SDK集成

    将SDK包中的android.net.http,android.webket,com.weibo.net包拷贝到自己的项目目录下,这个不用多说。

    2. 在AuthorizeActivity中,将APP KEY和App Secret替换成自己申请应用的APP KEY和App Secret。

    3.按照文档介绍,手机的桌面应用使用隐式验证即可。其中Activity的重要代码按照如下编写即可。参见下载包中的微博SDK说明文档。

    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
     
    import com.weibo.net.AccessToken;
    import com.weibo.net.DialogError;
    import com.weibo.net.Oauth2AccessToken;
    import com.weibo.net.RequestToken;
    import com.weibo.net.Weibo;
    import com.weibo.net.WeiboDialogListener;
    import com.weibo.net.WeiboException;
     
    /**
     * Sample code for testing weibo APIs.
     * 
     * @author ZhangJie (zhangjie2@staff.sina.com.cn)
     */
     
    public class AuthorizeActivity extends Activity {
        /** Called when the activity is first created. */
        private Button mLogin;
        private TextView mToken;
     
        private static final String URL_ACTIVITY_CALLBACK = "weiboandroidsdk://TimeLineActivity";
        private static final String FROM = "xweibo";
     
        // 设置appkey及appsecret,如何获取新浪微博appkey和appsecret请另外查询相关信息,此处不作介绍
        // 替换为开发者的appkey,例"1646212960";
        private static final String CONSUMER_KEY = "3543730096";
        // 替换为开发者的appkey,例"94098772160b6f8ffc1315374d8861f9";
        private static final String CONSUMER_SECRET = "765385b9d52ffd2fe548141d29f6d1af";
     
        private String username = "";
        private String password = "";
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mToken = (TextView) this.findViewById(R.id.tvToken);
            mLogin = (Button) this.findViewById(R.id.btnLogin);
            mLogin.setText("oauth!");
            mLogin.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (v == mLogin) {
                        Weibo weibo = Weibo.getInstance();
                        weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
     
                        // Oauth2.0
                        // 隐式授权认证方式
                        // 此处回调页内容应该替换为与appkey对应的应用回调页
                        weibo.setRedirectUrl("http://www.sina.com");
                        // 对应的应用回调页可在开发者登陆新浪微博开发平台之后,
                        // 进入我的应用--应用详情--应用信息--高级信息--授权设置--应用回调页
                        // 进行设置和查看
                        // 应用回调页不可为空
                        weibo.authorize(AuthorizeActivity.this,
                                new AuthDialogListener());
     
                        // try {
                        // // Oauth2.0 认证方式
                        // Weibo.setSERVER("https://api.weibo.com/2/");
                        // Oauth2AccessToken at =
                        // weibo.getOauth2AccessToken(AuthorizeActivity.this,
                        // Weibo.getAppKey(), Weibo.getAppSecret(), username,
                        // password);
                        // // xauth认证方式
                        // /*
                        // * Weibo.setSERVER("http://api.t.sina.com.cn/");
                        // * AccessToken at =
                        // * weibo.getXauthAccessToken(TextActivity.this,
                        // * Weibo.APP_KEY, Weibo.APP_SECRET, "", "");
                        // * mToken.setText(at.getToken());
                        // */
                        // RequestToken requestToken =
                        // weibo.getRequestToken(AuthorizeActivity.this,
                        // Weibo.getAppKey(), Weibo.getAppSecret(),
                        // AuthorizeActivity.URL_ACTIVITY_CALLBACK);
                        // mToken.setText(requestToken.getToken());
                        // Uri uri =
                        // Uri.parse(AuthorizeActivity.URL_ACTIVITY_CALLBACK);
                        // startActivity(new Intent(Intent.ACTION_VIEW, uri));
                        //
                        // } catch (WeiboException e) {
                        // e.printStackTrace();
                        // } // mToken.setText(at.getToken());
                        //
     
                    }
                }
            });
     
        }
     
        public void onResume() {
            super.onResume();
        }
     
        class AuthDialogListener implements WeiboDialogListener {
     
            @Override
            public void onComplete(Bundle values) {
                String token = values.getString("access_token");
                String expires_in = values.getString("expires_in");
                mToken.setText("access_token : " + token + "  expires_in: "
                        + expires_in);
                AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);
                accessToken.setExpiresIn(expires_in);
                Weibo.getInstance().setAccessToken(accessToken);
                Intent intent = new Intent();
                intent.setClass(AuthorizeActivity.this, TestActivity.class);
                startActivity(intent);
            }
     
            @Override
            public void onError(DialogError e) {
                Toast.makeText(getApplicationContext(),
                        "Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
     
            @Override
            public void onCancel() {
                Toast.makeText(getApplicationContext(), "Auth cancel",
                        Toast.LENGTH_LONG).show();
            }
     
            @Override
            public void onWeiboException(WeiboException e) {
                Toast.makeText(getApplicationContext(),
                        "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
                        .show();
            }
     
        }
     
    }

     

        常见问题:

        新浪微博的使用还是比较顺利的,唯一遇到的下面的问题

        error:redirect_uri_mismatch

        这个是由于没有仔细看说明文档,文档中清楚的说明了使用隐式验证的时候,要设置应用回调页。设置方法在代码中也有。

        登录新浪微博开放平台,新浪微博开放平台->我的应用->应用信息->高级应用->授权设置->应用回调页中的url地址保持一致就可以了,如图所示:

     

        四:发一条微博

        测试一下,运行app,发送一条带图片的微博。如下图

     

        登录新浪微博,查看一下,试验成功!

     

        原文地址:http://www.67tgb.com/?p=483

  • 相关阅读:
    Web服务器的有关概念
    备份微信中大量的公众号,备份其二维码图片
    (转载)使用SecureCRT连接Linux时,alt + .等功能键不能使用的解决办法
    Q查询
    ManyToMany参数(through,db_constraint)
    formset批量处理form表单数据
    modelform动态显示select标签的对象范围
    request对象的常用属性和方法
    Django查询orm的前一天,前一周,一个月的数据
    render的几个应用
  • 原文地址:https://www.cnblogs.com/firecode/p/2677562.html
Copyright © 2011-2022 走看看