Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解

article/2025/10/19 19:37:10

参考自:http://www.myexception.cn/program/1930025.html

https://blog.csdn.net/qq_36580777/article/details/77532760?locationNum=3&fps=1

https://blog.csdn.net/fly_du_/article/details/43562033

最近做了一个活动,要用到微博分享,就捉急忙慌的去研究,因为我们公司域名的问题还有项目的问题白白浪费我一天时间。。。

1、js微博组件分享

首先,你如果只是想单单做一个微博分享功能,我建议你直接使用微博提供的分享组件,只需要前端加几行代码,很容易的就完成了,http://open.weibo.com/sharebutton,请参考微博的文档,在下面完善必要的信息。

当然你再配置信息的时候你肯定要先去申请成为开发者,申请应用,具体如下:

申请成为开发者
http://open.weibo.com/到这里申请。点击“我的应用”就能看到 身份认证:未认证,自己把该做的做了,这里不详细讲。审核很快的,不到一天就通过。
之后应该是这样的(哈哈,欢迎互粉哈):

重点提示:微博官方早在2017年3月份就调整了相关接口,取消了网上现有教程中的发送微博的接口(updateStatus),导致如果再调用此接口都会提示权限不足

一,登录开放平台创建应用

首先需要去微博开放平台申请开发者账号创建新应用。可直接用用微博账号登录,登录后点击微连接选择其他根据自己需要(客户端,网页应用和浏览器插件)选择创建新应用。

二,应用相关设置

首先在应用信息中编辑应用的基本信息包括应用介绍用途什么的,一定要填写安全域名,自己做测试可随便填,企业应用时应填写企业的相关域名。

还需要在应用高级信息中设置OAuth2.0的授权回调页面,这个测试时也可以随便填写,当应用发起用户授权时成功或则取消跳转的页面地址。

记下:APP Key和App Secret,后面有用。

然后提交申请,去配置前端分享组件,引用到项目中你的微博分享功能就完成了。

2、Java调用 新浪微博API 接口发微博

下载微博Java SDK
来这里https://github.com/sunxiaowei2014/weibo4j-oauth2-beta3.1.1/

下载zip压缩包:weibo4j-oauth2-beta3.1.1.zip

将SDK导入Eclipse
什么?你一直用文本编辑器写Java?好吧,听我一句劝,写这玩意儿时还是换成Eclipse吧,不然会累死的。
打开Eclipse,“File”——“Import”——“General下面Existing Projects into Workspace”——“Select archive File”——选择刚才的SDK压缩包——“Finish”。
至此导入完成。
修改配置信息

最重要的一步:打开图中这个config.properties文件,修改config.properties文件中的字段值。“redirect_URI”的值改为https://api.weibo.com/oauth2/default.html,值的来源都是应用信息中。

运行实例获取授权码

配置文件修改完毕后,首先打开examples包下的oauth2.0下的OAuth4Code.java文件,直接用运行main方法即可。此刻默认浏览器会打开用户授权页面,授权后浏览器地址最后会多出一个code=******,复制该code粘贴到编辑器的控制台,然后回车,就会返回授权信息。

复制返回的授权信息中的accessToken的值,该值为授权码。

AccessToken [accessToken=2.00******, expireIn=11255**, refreshToken=,uid=****]有了该授权码,接着我们就可以正式操作微博了。

注:在微博api中所有的操作都是需要经过OAuth2.0授权的,调用每个方法都需要一个授权码,未经审核的应用授权码只有一天的有效期,通过后有30天的有效期,而如果是应用所属的开发者授权时是5年。所以开发者需要在调用时应判断授权码有效期,过期应引导用户重新授权。
 

api应用之发微博

在examples包下全是微博官方api实例,之前的发送微博接口在weibo4j.examples.timeline下。其中UpdateStatus.java和Upload.java一个是发送微博文字一个是发送带图片的微博实例。打开后发现微博发送都是调用的weibo4j.Timeline.java的类。

但是微博官方已经取消了updateStatus等相关发送微博接口,这些接口都不能再调用了,但是java的sdk由于是2014的版本,所以里面还是存在这些方法。随之替代以前updateStatus接口的是statuses/share(第三方分享链接到微博)

我们使用该接口发送一条微博,由于java sdk是2014的版本所以该版本中并没有该接口方法,所以我们需要自己按照他的调用方式写一个新的接口。由于该接口只有个两个是必须的参数一个微博文字和授权码,和updateStatus的类似。所以我们可以打开weibo4j.Timeline.java中找到updateStatus的方法,复制一份改掉方法名,将json替换掉即可。这样一个不带图片的微博发送就方法就完成了。

public Status updateStatus(String status) throws WeiboException {
    return new Status(client.post(WeiboConfig.getValue("baseURL")
            + "statuses/update.json",
            new PostParameter[] { new PostParameter("status", status) },
            access_token));
}
/**
 * 第三方分享微博
 * @param status
 * @return
 * @throws WeiboException
 */
public Status share(String status) throws WeiboException {
    return new Status(client.post(WeiboConfig.getValue("baseURL")
            + "statuses/share.json",
            new PostParameter[] { new PostParameter("status", status) },
            access_token));
}

接着我们调用一下该方法,由于该接口是第三方分享到微博,所以内容中必须带一个第三方地址详见该接口参数说明,地址必须是应用设置中的安全域名下的URL。(重点,要不然会报错10017 : 错误:参数值非法,希望得到 (%s),实际得到 (%s),请参考API文档

public static void main(String[] args) {
String access_token = "2.00**********";
String statuses = "该条微博由JAVA程序发送,目的测试其微博相关api,并无实际用途。https://baike.baidu.com/item/Java/85979?fr=aladdin";
Timeline tm = new Timeline(access_token);
try {
    Status share = tm.share(statuses);
    System.out.println(share);
} catch (WeiboException e) {
    e.printStackTrace();
}}

到这里就可以发微博了,说一下常遇到的问题

重定向错误:不匹配主要是因为你的config里面配置的回调地址和我的应用高级应用中的回调地址不匹配造成的

还有分享时出现了10004错误,分享失败,应用信息栏高级信息里的ip填写的不对,现在和以前不一样   在安全设置中应用的服务IP地址不需要填写了

3、SpringMVC 整合新浪微博登录 Java SDK

 现在很多网站都整合了便捷的第三方登录,如QQ登录、新浪微博、搜狐、网易等,为用户提供不少方便和节约时间。我们可以选择使用JS或SDK实现第三方提供用户授权API,本文主要讲解 JAVA SDK 新浪微博登录授权以及获取用户资料。

注:本例子使用的是 SpringMVC,所以若想拷贝代码直接使用则需自己提前搭建好环境。

编辑config.properties配置文件,改成成自己的资料。第一个填写你申请的App Key值,第二个填写App Secret值。
client_ID =     
client_SERCRET =
redirect_URI =

第三个redirect_URI,是你的重定向后的网址。对应一个控制器(Spring Controller)或 Servlet。在这里我们需要两个网址,第一个网址即用户在页面上点击的网址,能跳转到新浪微博账号登录界面,当用户点击账号登陆界面的登录按钮时,新浪微博会去校验资料正确性,一旦资料正确将会以 get 方式请求并且携带参数code重定向到你填写的redirect_URI,此时就能获取用户的资料了。这也是和前面两个不一样的地方,如果你做过微信相关的分享或者用户信息的软件,那么这个对于你来说也是小意思的,流程一模一样。

以小明博客为例,首先用户点击 http://www.bugxm.com/user/login-sian-weibo.html,我们接收请求后主要工作是重定向到新浪微博登录页面。代码片段如下:

/**
*
* 新浪微博登录界面
*
* @param session
*  @return
* @throws WeiboException
*/
@RequestMapping(value = "/user/login-sian-weibo.html", method = RequestMethod.GET)
public String loginSinaWeibo(HttpServletRequest request, HttpSession session)
    throws WeiboException {
session.setAttribute("login_current_url", request.getHeader("Referer"));
weibo4j.Oauth oauth = new weibo4j.Oauth();
String url = oauth.authorize("code", "");
return "redirect:" + url;
}

代码片段中的session是为了获取用户登录前所在页面URL,方便登录完后重定向到登录之前的页面。其中url是新浪微博登录界面网址,我们只需要重定向过去就行了。

当用户在新浪微博登录成功后,会重定向到我们刚才填写的redirect_URI中,如我填写的 http://www.bugxm.com/user/login-sina-weibo.do,对应逻辑代码片段如下:
    
/**
*
* 新浪微博登录操作
*
* @param session
*  @return
* @throws WeiboException
*/
@RequestMapping(value = "/user/login-sina-weibo.do", method = RequestMethod.GET)
public String loginSinaWeiboAction(HttpSession session,
    @RequestParam String code) throws WeiboException {
String url = (String) session.getAttribute("login_current_url");
session.removeAttribute("login_current_url");
User user = userService.sinaWeiboLoginAction(code,
    (User) session.getAttribute("user"));
if (null != user) {
    session.setAttribute("user", user);
}
return "redirect:" + url;
}

重定向过来会携带code参数我们把值取到用来获取用户的资料。本段代码中的除code、sinaWeiboLoginAction()外都是次要,对本文主题而言可有可无。我们来看看sinaWeiboLoginAction()代码片段:
/**
     * 新浪微博操作
     *
     * @param code
     * @param currentLoginUser
     *            当前登录用户,可为 null
     *  @return
     * @throws WeiboException
     */
    public User sinaWeiboLoginAction(String code, User currentLoginUser)
            throws WeiboException {
        weibo4j.Oauth oauth = new weibo4j.Oauth();
        weibo4j.http.AccessToken accessToken = oauth.getAccessTokenByCode(code);
        String uid = accessToken.getUserUid();
 
        weibo4j.Users users = new weibo4j.Users();
        users.client.setToken(accessToken.getAccessToken());
        weibo4j.model.User user = users.showUserById(uid);
 
        String userDomain = user.getUserDomain(); // 用户登录名
        String username = user.getScreenName(); // 用户呢称
        String avatar = user.getAvatarLarge(); // 用户头像
        String gender = null; // 性别
        if ("m".equals(user.getGender())) {
            gender = "男";
        } else if ("f".equals(user.getGender())) {
            gender = "女";
        } else {
            gender = "未知";
        }
 
        // …… 业务逻辑操作,代码略
        return currentLoginUser;
    }

其中String uid = accessToken.getUserUid();的getUserUid()方法本身是没有的,我们需要修改新浪微博的源代码,不然取uid非常麻烦。

编辑/src/weibo4j.http/AccessToken.java,在:
public String getRefreshToken() {
    return refreshToken;
}

下面添加:
public String getUserUid() {
    return uid;
}

到此就搞定了。用户的其它资料已经很详细的注释在/src/weibo4j/model/User.java中了。

这个根据自己的需要,你只要拿到用户的信息了,那怎么把用户信息拆解,获取,入库就很简单了


http://chatgpt.dhexx.cn/article/RU6U1L4f.shtml

相关文章

使用新浪微博-微博API的方法

使用“新浪微博-微博API”的方法 1、注册新浪微博账号,如果已有微博账号请跳过此步。 注册地址:https://weibo.com/signup/signup.php 2、登录新浪微博开放平台。微博开放平台地址:https://open.weibo.com 3、创建应用。 点击“微链接”&…

python3 微博API code获取解决方案 长期保存access_token

把token和过期时间打印出来,可以得知微博给的token过期时间是5年。 故不需要每次重新获取。手动存入一次即可。第一次执行代码后,可注释掉调用oauth2验证环节。 我还给代码加了个获得的结果写入json文件的功能,用于预览。 魔改大佬的代码变…

新浪微博API应用程序接口_什么是API? 应用程序编程接口说明

新浪微博API应用程序接口 API代表应用程序编程接口,该概念广泛应用于从命令行工具到企业Java代码再到Ruby on Rails Web应用程序。 API是一种通过编程方式与单独的软件组件或资源进行交互的方式。 除非您从头开始编写每一行代码&…

Python3调用新浪微博API抓取数据

本文介绍基于Python3通过调用新浪微博API方式采集用户信息的案例。 1.前期准备 编程语言:Python3.0下载库:sinaweibopy3编辑软件:Spyder 2.获取微博授权 进入http://open.weibo.com/apps/new?sortweb获取App Key以及App Secret。具体方法…

社交媒体爬虫------调用微博API获取微博内容

一.创建应用 创建应用的目的是获取app-key和app-secret,并设置授权回调页。 (1)获取app-key和app-secret 登陆微博开放平台创建应用http://open.weibo.com/apps/new?sortweb 应用名称以及后续的信息随便填,填写完毕后&#xff…

python抓取微博数据_技术入门 | python利用微博api获取数据

技术入门 | python利用微博api获取数据 文 | thewords 这也是跳票许久的分享。在写之前发现目前比较少公开的第三方api,有些还停止维护,所以在一轮筛选后选择了微博api进行实践。 01 申请开发者权限 1) 进入微博开放平台,完成开发者认证 …

调用微博API获取微博内容

调用微博API获取微博内容 在采集微博数据的时候,可以利用微博的API来进行调用。在调用微博APi的时候需要做两项工作,第一步是创建应用,第二步是安装微博SDK. 一.创建应用 创建应用的目的是获取app-key和app-secret,并设置授权回…

java 微博 api_Java使用新浪微博API开发微博应用的基本方法

新浪微博API现在运用比较广泛,做一个完整的开发流程Demo 1、第一步注册,就不多说了,注册帐号以及成为开发者帐号,这步操作不会的话请你马上砸掉电脑拔掉网线回家种田。 2、第二步创建应用,开发者帐号创建好了&#xff…

新浪微博api的使用

在采集微博数据的时候,可以利用微博的API来进行调用。在调用微博APi的时候需要做两项工作,第一步是创建应用,第二步是安装微博SDK. 创建应用 创建应用的目的是获取app-key和app-secret,并设置授权回调页。 登陆微博开放平台创…

微博开放平台api使用

前言:微博开放平台提供了微博数据的api接口,不仅可以直接通过api调用微博服务发布微博查询微博,更重要的是,可以在自己的网站上获得新浪微博api的授权,调用微博的某些内容,就好像我们再网站中看到好文章要分…

【转载】使用微博API接口获取数据

巧妇难为无米之炊。 数据获取是数据分析的前提。许多网站会通过API接口向第三方开放网站的部分数据。新浪微博也不例外。你可以查看微博API列表。 商业数据API为(如place/nearby_timeline/biz)为收费接口,若想要调用这一类接口,…

微博官方API使用方法【全流程教学】

微博官方API使用方法【全流程教学】 微博开发者身份认证创建自己的应用新应用的相关配置基本信息高级信息 微博认证流程OAuth2.0认证(核心步骤)Access Token授权有效期接口调用Demo(以评论接口为例) 微博开发者身份认证 访问微博开放平台,登录自己微博账…

一文教会你JDK8的函数式编程

JDK8的1个新特性就是支持函数式接口(Functional Interface)。 函数式接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为Lambda表达式。 我们也可以自行定义函数式接口,如: FunctionalInterface interf…

Modern C++ 学习笔记——C++函数式编程

往期精彩: Modern C 学习笔记——易用性改进篇Modern C 学习笔记 —— 右值、移动篇Modern C 学习笔记 —— 智能指针篇Modern C 学习笔记 —— lambda表达式篇Modern C 学习笔记 —— C面向对象编程Modern C 学习笔记 —— C函数式编程 Modern C 学习笔记——C函数…

java8函数式编程实例

什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法。别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”。 Stream 说到函数式编程,就不得不提及Stream,Stre…

Scala函数式编程

一、函数式编程定义: Scala是一门既面向对象,又面向过程的语言。在Scala中,函数与类、对象地位是一样,所以说scala的面向过程其实就重在针对函数的编程 了,所以称之为函数式编程 在Scala中定义函数需要使用 def 关键…

什么是函数式编程?

当我们说起函数式编程来说,我们会看到如下函数式编程的长相: 函数式编程的三大特性: immutable data 不可变数据:像Clojure一样,默认上变量是不可变的,如果你要改变变量,你需要把变量copy出去修…

python函数式编程

大家好 这里还还还是长弓 今天我们来讲讲python中的函数式编程 目录 函数式编程 高阶函数 map reduce filter sorted 返回函数 闭包 nonlocal使用 匿名函数lambda 装饰器 偏函数 函数式编程 有些同学疑惑了,我们已经学了函数,为什么还要学这…

函数式编程

Functional Programming 什么是函数式编程 函数式编程的思维方式:把显示世界的事务和事物之间的联系抽象到程序世界(对运算过程进行抽象) 函数式编程中的函数指的数学中的函数即映射关系,输入的值对应一个输出的值,…

appium环境搭建python_appium环境搭建python

1,appium是开源的移动端自动化测试框架;2,appium可以测试原生的、混合的、以及移动端的web项目;3,appium可以测试ios,android应用(当然了,还有firefox os);4,appium是跨平…