使用微博SDK工具weibo4j进行java微博自动回复

  • 微博SDK介绍
  • SDK使用方法
    • 申请应用
    • 应用开发
      • 代码导入
      • 代码结构
  • 回复代码
    • 代码构建
    • 整体思路
    • 回复代码

微博SDK介绍

项目需求,需要开发一个新浪微博回复机器人的小工具。通过调研,使用新浪微博开放的公共API接口是最方便的。

使用新浪微博开放平台的API接口,可以轻松实现微博的查询,用户的查询,微博的回复等各项功能。使用官方提供的SDK工具,可以实现代码自动进行微博的模拟操作行为。官方提供了多种语言的SDK工具,包括Python包(由廖雪峰老师提供),本文使用的Java包等。

SDK使用方法

申请应用

  • 申请应用:由于需要进行页面接口的开发,到微博开放平台-微连接申请网站接入。如下图:

  • 开发者资料完善:在创建应用后,需要完善个人身份,填写开发者资料,如下图所示。这里注意,后续的身份认证步骤可以根据自身需要完成,不一定必须认证。

  • 填写回调地址:在应用申请之后,需要到完成的应用里将信息进一步完善才可以使用java SDK工具。具体的,点击“我的应用”-选中创建好的应用-点击“应用信息”-“高级信息”-填写“OAuth2.0 授权设置”,这里可以填写如下。授权回调页会在之后的授权过程中用到,不填写这一项程序无法执行。取消授权回调页功能并不支持,因此可以随意填写。

  • 应用申请结束,将几个关键信息记住,用于代码中参数的设置。包括App Key, App Secret, 回调地址等。如下图:

应用开发

接口的开发可以参考官方wiki,或者在自己的“接口管理”模块中查看目前可以使用的API接口信息。

代码导入

原作者使用eclipse进行开发,使用intelliJ IDEA开发的同学可以直接进行导入,选择eclipse导入即可。

代码中使用的jar包直接放到了lib目录下,我们可以使用maven进行相应jar包的导入,主要包含日志包和一个http包。具体依赖如下:

    <dependencies><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>2.0.0-alpha1</version></dependency></dependencies>

将用于参数设置的properties文件放到resources目录下,并重新设置参数值,将申请到的应用具体参数填入。具体如下:

代码结构


如上图所示,

  • http包下代码主要用于发送和接收请求
  • model包将weibo中用到的实体对象进行了封装。包括Comment、MySSLSocketFactory、Trend等对象
  • oauth包是我自己添加的,其中的代码用于设置accessToken,具体的,在将config.properties文件中参数进行修改后,运行包下面的OAuth4Code.java,会自动跳转到授权页面,在重定向的URL最后会携带code参数,将code参数填入,将会产生最终的accessToken,这个accessToken值将会是我们之后进行查询、回复等接口开发的身份认证信息。
  • org.json包下用于查询、回复等步骤的JSON数据的解析
  • utils包下的代码包含数据的封装类、数据编码转换类等实用类。

回复代码

代码构建

完成上述步骤之后,我们进行工程的编译和构建。使用maven进行install,将编译完成的jar包放到本地的maven仓库中,用于后续接口的调用。

整体思路

在pom文件中,将我们之前编译好的maven项目导入。要想回复别人的微博,主要需要获取目标微博的ID。微博ID无法进行直接查询,我们必须通过目标用户进行间接的查询。想要获取目标用户,我们需要首先将开发用的微博账号对目标账号进行关注,这样我们就可以获取目标用户的时间线。通过将时间线中的微博进行存储,我们就可以完成对目标微博的评论工作。

回复代码

具体代码如下:

package xx.xxx.xxx.service;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import weibo4j.Comments;
import weibo4j.Timeline;
import weibo4j.Users;
import weibo4j.model.Comment;
import weibo4j.model.CommentWapper;
import weibo4j.model.Status;
import weibo4j.model.StatusWapper;
import weibo4j.model.User;
import weibo4j.model.WeiboException;import java.util.ArrayList;
import java.util.List;/*** Created by Administrator on 2020/4/28.* 应用开发者需要对待评论用户进行关注* 获取开发者时间线上的微博,这样就可以获取所有带评论的微博ID* 将所有历史微博的正文信息以及mid保存到数据库中* 通过回复程序进行回复*/@Service
public class WeiboReplyService {private static final Logger LOGGER = LoggerFactory.getLogger(WeiboReplyService.class);@Value("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")private String accessToken;public WeiboReplyService(String accessToken) {this.accessToken = accessToken;}public WeiboReplyService() {}/*** 根据用户昵称获取用户uid* @param accessToken* @param userNickName  用户昵称* @return              用户信息* @throws WeiboException*/public User userSearch(String accessToken, String userNickName) throws WeiboException {Users users = new Users(accessToken);User user = users.showUserByScreenName(userNickName);LOGGER.info(user.toString());return user;}public List<String> getFriendsTimeline() throws WeiboException {
//        String uID = user.getId();Timeline timeline = new Timeline(this.accessToken);StatusWapper friendsTimeline = timeline.getFriendsTimeline();LOGGER.info(friendsTimeline.toString());List<Status> statuses = friendsTimeline.getStatuses();ArrayList<String> StatusIDs = new ArrayList<>();if (!statuses.isEmpty()) {for (Status status : statuses) {LOGGER.info(status.toString());StatusIDs.add(status.getId());}}return StatusIDs;}/*** 对目标微博进行评论* @param commentContent    评论内容* @param targetMessageID   目标微博ID*/public void commentCreate(String commentContent, String targetMessageID) {Comments cm = new Comments(accessToken);try {Comment comment = cm.createComment(commentContent, targetMessageID);LOGGER.info(comment.toString());} catch (WeiboException e) {e.printStackTrace();}}/*** 获取当前登录用户的最新评论包括接收到的与发出的* @param accessToken*/public void getCommentTimeline(String accessToken) {Comments cm = new Comments(accessToken);try {CommentWapper commentTimeline = cm.getCommentTimeline();List<Comment> comments = commentTimeline.getComments();for (Comment comment : comments) {LOGGER.info(comment.toString());}} catch (WeiboException e) {e.printStackTrace();}}
}

测试程序如下:

package xx.xxx.xxx.dao;import xx.xxx.xxx.service.WeiboReplyService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import weibo4j.model.WeiboException;import java.io.UnsupportedEncodingException;
import java.util.List;/*** Created by Administrator on 2020/4/13.*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class ServiceTest {private static Logger LOGGER = LoggerFactory.getLogger(ServiceTest.class);@Autowiredprivate WeiboReplyService weiboReplyService;@Testpublic void autoReplyTest() throws UnsupportedEncodingException {String commentContent = "Hello World!这是一条来自IntelliJ IDEA客户端的JAVA回复...";
//        这里的targetMessageID用你想要回复的微博ID进行替换String targetMessageID = "XXXXXXXXXXXXXXXX";weiboReplyService.commentCreate(commentContent, targetMessageID);}@Testpublic void weiboTest() throws WeiboException {String content = "么么哒!~";List<String> friendsTimelineStatusIDs = weiboReplyService.getFriendsTimeline();for (String statusID : friendsTimelineStatusIDs) {weiboReplyService.commentCreate(content, statusID);}LOGGER.info("回复结束...");}
}

运行测试程序,有以下日志输出:

[DEBUG] 2020-04-30 01:32:49,585 method:org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool.notifyWaitingThread(MultiThreadedHttpConnectionManager.java:961)
Notifying no-one, there are no waiting threads
[DEBUG] 2020-04-30 01:32:49,588 method:weibo4j.http.HttpClient.log(HttpClient.java:155)
...评论对象的JSON串...

最后,到页面上查看一下
大功告成!!!

使用微博SDK工具weibo4j进行java微博自动回复相关推荐

  1. java 微博sdk_使用微博SDK工具weibo4j进行java微博自动回复

    微博SDK介绍 项目需求,需要开发一个新浪微博回复机器人的小工具.通过调研,使用新浪微博开放平台提供的API接口是最方便的.新浪微博开放平台-首页​open.weibo.com 使用新浪微博开放平台的 ...

  2. nlpir 需要用java调用_NLPIR SDK工具使用(java)

    最近毕设要用到NLP相关的接口,比较了一下选择了功能比较丰富的NLPIR,可是网上资料实在太少了,自带的文档只提供了接口的说明和简单的应用,不是很详细,总结一下关键的几点. 预先说明:下载的所有工具包 ...

  3. 几款微博同步工具比较

    微博同步工具也不少,这里比较几款主流的工作 1.Chrome 扩展FaWave(发微) 如果你使用Chrome浏览器,那么你有福了,可以很方便的使用这个FaWave扩展,在网页内轻松收发微博.FaWa ...

  4. java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇

    新浪微博应用开发之Java篇 2012年11月11日星期日 一.开发流程简介: 2.  在以下地址创建一个应用,假设创建一个桌面应用: 3.  进入管理中心,查看并记住应用ID和密码: 4.  在&q ...

  5. Java调用发微博API_编写调用新版浪微博API的Java程序来发送微博

    首先,需要下载新版浪微博的SDK,这里附上地址:http://vdisk.weibo.com/s/z7iFc2gCCwC1b 下载完了之后解压,然后打开myeclipse,新版建项目,再把刚才解压出来 ...

  6. 微信、企业微信、支付窗、微博SDK 四合一,JeeWx-api 1.2.2 版本发布!

    JeeWx-API 1.2.2 版本发布,微信.企业微信.支付窗.微博SDK四合一 JEEWX-API 是第一款JAVA版微信极速SDK,同时集成企业微信SDK,支付窗SDK,微博SDK,可以快速的基 ...

  7. 微博SDK第三方授权登陆

    第三方登陆大致流程 1.注册微博开发者账号 2.进入微博开放平台创建应用获取APP key 和APP Secret 3.给应用签名,获取MD5签名 4.在应用中嵌入代码 前三布直接略过,不懂的去看微博 ...

  8. 解决微博SDK接入全平台支持

    解决方案参考微博开放平台AndroidSDK官方文档https://github.com/sinaweibosdk/weibo_android_sdk 问题描述 问题的主要来源在于下面的说明 3:关于 ...

  9. 基于ssm+mysql的javaee微博博客系统,Java实现类似新浪微博网站、朋友圈分享系统

    基于SSM+mysql的javaee微博博客系统,Java实现类似新浪微博网站.朋友圈分享系统 主要技术 SpringBoot\SSM(两个版本都有) HTML.jQuery.HTML.CSS.JS ...

最新文章

  1. python自动测试g_使用Python进行自动化测试
  2. 你需要了解的 C++ 17 Top 19 新特性(附精彩评论)
  3. 使用Python操作注册表
  4. java gc 触发_Java GC种类和触发时机
  5. Hibernate的generator属性
  6. krpano 场景切换 通知_一个基于Vulkan的异步场景加载设计
  7. SH760二自由度系统解析法求全解-过渡及稳态过程
  8. python print format_Python中的format格式化输出
  9. 《ARM嵌入式Linux系统开发从入门到精通》勘误
  10. python物理模拟.pdf_用Python物理建模的第一本书终于来啦
  11. 教室录播系统方案_校园录播教室搭建方案?
  12. 软件测试需求分析方法
  13. 用 CPU 烤出来的肉,会特别香吗?
  14. geany配置html5,Geany的教程
  15. 2022学Django----基础五之Ajax
  16. 牛客网数据库SQL实战25—— 获取员工其当前的薪水比其manager当前薪水还高的相关信息
  17. 基于K-Means的文本聚类
  18. 关于网卡eth0、eth1以及服务器为什么要把内网和外网卡区分开
  19. 建筑智能信息网络系统计算机网络系统检检测指导书,04智能建筑检验批划分作业指导书.doc...
  20. 手机ppi排行测试软件,国产机最顶级屏幕!一加7 Pro屏幕测试出炉:色准、亮度无敌...

热门文章

  1. Jenkins上配置Robot Framework自动化测试脚本工程
  2. qpython 3h_QPython手机版下载|QPython安卓版3.0.0下载 _当游网
  3. Ubunto的一些快捷键
  4. docker的基础使用
  5. dmol3给定关键字不在字典中_materials studio 学习整理知识点
  6. 2022-2028中国小型核磁共振波谱仪(NMR)市场现状研究分析与发展前景预测报告
  7. 蚂蚁全媒体中心刘鑫炜解答:产品软文推广怎么写,如何写好软文
  8. 有关p2p的两个概念
  9. 【设计模式】-单例模式(Singleton)
  10. 关于python字符串以下描述错误的是_以下关于 Python 字符串的描述中,错误的是