获取新浪微博用户头像


在之前的在微信H5网页中获取用户基本信息一文中, 我们提到了如何在微信中获取用户信息,这一篇小文主要分析如何在新浪微博中获取用户信息,尤其是个人头像。

前期准备

和微信类似,微博也提供了JSSDK方便开发者使用。要想使用新浪微博的JSSDK,需要先注册一个微连接应用,创建好后,输入应用的安全域名地址就可以使用了。在使用JSSDK时, 微博会校验SDK是否在特定的安全域名下运行,否则会拒绝返回执行结果。

创建微博应用

设置好安全域名

引入JSSDK

根据官方文档, 需要在页面的HTML标签中增加XML命名空间,如下代码所示:

<html xmlns:wb="http://open.weibo.com/wb">

如果不使用微博组件,只是单纯的使用JSSDK,可以不用增加XML命名空间

同时引入对应的JSSDK

<script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=523439410" type="text/javascript" charset="utf-8"></script>

523439410改为创建应用的appKey即可。

使用JSSDK

JSSDK的使用可以参考官方的JSSDK API文档, 接口都比较简单,主要调用新浪微博OAuth API。为了方便调试,新浪微博还提供了一个在线调试工具,大家感兴趣也可以试试。具体来说,主要提供了下面的几个接口,我们一一简单说明下。

登入接口

只需要调用WB2.login即可,例如:

WB2.login(() => {
    // 已经登入
})

退出接口

只需要调用WB2.logout即可,例如:

WB2.logout(() => {
    // 已经退出
})

检测是否登入接口

只需要调用WB2.checkLogin()即可,例如

const loginStatus = WB2.checkLogin()



查询信息接口

此步主要用于调用微博的OAuth API,需要先调用WB2.anyWhere,然后在其回调里面调用parseCMD接口。例如:

WB2.anyWhere(W => {
    // 获取用户的uid
    const url = '/account/get_uid.json'
    const params = {}
    const options = {
        method: 'get',
        cache: 60
    }
    W.parseCMD(url, (sResult, bStatus) =>{
        // bStauts用于标识是否正常返回结果
        if(bStatus) {
            // 输出结果:{uid: 1093567195}
            console.log(sResult)
        }
    }, params, options)
})

上面的代码主要用于获取用户的uid,比如我们拿到了uid为1093567195的用户,现在我们查询该用户的基本信息

WB2.anyWhere(W => {
    // 查询用户的基本信息
    const url = '/users/show.json'
    const params = {uid: '1093567195'}
    const options = {
        method: 'get',
        cache: 60
    }
    W.parseCMD(url, (sResult, bStatus) =>{
        // bStauts用于标识是否正常返回结果
        if(bStatus) {
            // 输出结果:{93567195, idstr: "1093567195", class: 1, screen_name: "flyingzl", name: "flyingzl", …}
            console.log(sResult)
        }
    }, params, options)
})

/users/show.json这个接口主要用于查询用户的基本信息,具体可以参考https://open.weibo.com/wiki/2/users/show接口。里面有一个avatar_large字段,可以获取到用户的高清头像。

获取用户头像

每次调用WB2.anyWhereW.parseCMD比较麻烦,我们简单封装下,然后代码如下:


((WB2) => {

    const parseCMD = (url, params = {}) => {
        return new Promise((resolve, reject) => {
            WB2.anyWhere(function (W) {
                W.parseCMD(url, function (sResult, bStatus) {
                    try {
                        bStatus ? resolve(sResult) : reject(sResult)
                    } catch (e) { }
                }, params, {
                    method: 'get',
                    cache: 60
                })
            })
        })
    }

    const isLoginPromise = new Promise(resolve => {
        const status = WB2.checkLogin()
        status ? resolve() : WB2.login(resolve)
    })

    isLoginPromise.then(() => {
        const queryUIDPromise = parseCMD('/account/get_uid.json').then(res => res.uid)
        const queryAvatarPromise = queryUIDPromise.then(uid => {
            return parseCMD('/users/show.json', { uid }).then(o => o.avatar_large)
        })
        queryAvatarPromise.then(url => {
            // url 为用户的头像
            var image = new Image()
            image.src = url
            document.body.appendChild(image)
        })
    })
})(window.WB2)

效果


文章作者: Asyncoder
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Asyncoder !
  目录