Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

node-weibov2

基于node-weibo-v2改进的node平台微博v2接口sdk

#安装

npm install weibov2

#特性

市面上的weibo nodejs sdk 不少,但是有些是1.0,有些2.0的大部分功能不够完善,用的人少,所以有问题也很少改进。

这个模块是根据weibo-v2.js([[https://github.com/vzhishu/node-weibo-v2]])改进而来。有以下改进。

  • 支持从本地发图片,也就是upload,目前看到的2.0的nodejs sdk,发现这个功能都没有实现的。我参考一个1.0的框架实现了此功能。
  • 支持url缩短,url缩短需要向sdk传入多个索引名相同的配置属性,js不支持,在此模块中,多个相同索引名的属性,只需要这样传入:
    var prefix=""
      var option={
          access_token:token
      }
      for(var i=0;i
    

在模块内发出请求之前会把所有的__multi__替换成空,以此实现传入多个相同名字的参数。

  • 原来的weibo-v2.js里面有很多特殊的空字符,导致js完全执行不了,会一直报错,而且很多json的最后都写着逗号,编辑器会一直报错。所以我觉得这个模块挺坑爹的,对这些问题都做了改进,可以正常运行。
  • 错误处理,weibo-v2.js里面不光没有做统一的错误处理,还把返回的json格式打乱了,做了统一处理,每次callback,如果第二个参数存在,就说明api返回了错误,error即为返回的错误json生成的对象。

#使用示例-上传图片和错误处理

var wb = require('./lib/weibo-v2.js').WeiboApi;
 var opts = {
   app_key       :  config.weibo_key ,
   app_secret    :  config.weibo_secret 
};
var api = new wb(opts);
//上传图片
api.statuses.upload({
    access_token:token,
    status:data.content
},data.pic,function(_d,error){
if(error){console.log(" upload error :"+error);return;}
console.log("upload success")
})

#授权示例 以express和weibov2结合来示例:

var weibo2 = require('weibov2');
var express = require('express')

var app = express();
//省略express初始化配置若干句

auth = function(req, res) {
    var opts = {
        app_key       :  APP_KEY ,
        app_secret    :  APP_SECRET ,
        redirect_uri : 'http://'+req.host+':'+PORT+'/sina_auth_cb'
    };
    console.log('http://'+req.host+':'+PORT+'/sina_auth_cb')
    var api = new weibo2.WeiboApi(opts);
    var auth_url = api.getAuthorizeUrl({
        redirect_uri : 'http://'+req.host+':'+PORT+'/sina_auth_cb'
    });
    console.log(auth_url);
    res.writeHead(
        302, 
        {
            'Location': auth_url
        }
        );
    res.end();    
};

sina_auth_cb = function(req, res, query_info) {
    var code = req.query.code;
    if(!code) {
        req.session.index_error="授权失败,请重试!(code获取失败)"
        res.redirect('/');
        return;
    };
    console.log(code)
    var opts = {
        app_key       :  APP_KEY ,
        app_secret    :  APP_SECRET ,
        'redirect_uri' : 'http://'+req.host+':'+PORT+'/sina_auth_cb'
    };
    var api = new weibo2.WeiboApi(opts);
    api.accessToken(
    {
        code : code
    },
    function(data) {
       
        var access_token=data.access_token
        api.users.show({
            uid:data.uid,
            access_token:data.access_token
        },function(d){
            var user=d;
           
            console.log("oauth success! userid:"+user.id)
            //将用户id和用户名存储到cookie,下次无需认证直接可以使用。
            res.cookie("userid", user.id,{
                expires: new Date(Date.now() + 604800000), 
                httpOnly: true
            });
            res.cookie("username", user.name,{
                expires: new Date(Date.now() + 604800000), 
                httpOnly: true
            });
            //将用户的accesstoken存储到数据库,在后台可以直接用这两个信息发送微博,无需用户参与。
            //。。。。
            //认证成功跳转到oauth页面
            res.redirect('oauth');
        })   
    }
    );

};

app.get("/auth",auth)
app.get("/sina_auth_cb",sina_auth_cb)