微博SDK介绍

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

使用新浪微博开放平台的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包。具体依赖如下:

commons-httpclient

commons-httpclient

3.1

log4j

log4j

1.2.17

org.slf4j

slf4j-log4j12

2.0.0-alpha1

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

代码结构代码结构

如上图所示, - 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 getFriendsTimeline() throws WeiboException {

// String uID = user.getId();

Timeline timeline = new Timeline(this.accessToken);

StatusWapper friendsTimeline = timeline.getFriendsTimeline();

LOGGER.info(friendsTimeline.toString());

List statuses = friendsTimeline.getStatuses();

ArrayList 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 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);

@Autowired

private WeiboReplyService weiboReplyService;

@Test

public void autoReplyTest() throws UnsupportedEncodingException {

String commentContent = "Hello World!这是一条来自IntelliJ IDEA客户端的JAVA回复...";

// 这里的targetMessageID用你想要回复的微博ID进行替换

String targetMessageID = "XXXXXXXXXXXXXXXX";

weiboReplyService.commentCreate(commentContent, targetMessageID);

}

@Test

public void weiboTest() throws WeiboException {

String content = "么么哒!~";

List 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串...

最后,到页面上查看一下

大功告成!!!

本文最初发表于本人CSDN博客,欢迎支持!

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

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

    使用微博SDK工具weibo4j进行java微博自动回复 微博SDK介绍 SDK使用方法 申请应用 应用开发 代码导入 代码结构 回复代码 代码构建 整体思路 回复代码 微博SDK介绍 项目需求,需要 ...

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

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

  3. java 微型数据库_Java 9代码工具:使用Java微型基准测试工具的实践会话

    java 微型数据库 用肉眼看,基准测试似乎只是确定执行某些代码需要花费多长时间的简单问题. 但是,通常情况下,这是幼稚的方法. 提供具有准确和可重复结果的有意义的基准并非易事. 在本文中,我们将向您 ...

  4. java读取合并单元格_工具方法:java读取Excel合并单元格(简单实例)

    Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI for ...

  5. java获取客户端的IP地址工具类

    java获取客户端的IP地址工具类 import java.net.InetAddress; import java.net.UnknownHostException;import javax.ser ...

  6. java int to hex_Java字符串转16 进制工具类Hex.java | 学步园

    Java 字符串转 16 进制工具类 Hex.java 实现 16进制 0xfecd .. 和 java 字符串之间的互转换! 如果做开发,通常用户登陆密码都会 mad5(salt + pwd) 然后 ...

  7. aix系统java堆_浅谈AIX环境下的Java性能调优

    1.什么是Java Java 是一种面向对象的编程语言.它以 C++ 为模型,被设计成小的.简单的.在源和二进制级别跨平台的可移植的语言,Java 程序(applets 和应用程序)可以运行于任何已经 ...

  8. android 微博功能实现,Android SDK说明文档

    概述 微博Android平台SDK为第三方微博应用提供了文档易用的微博API调用服务,使第三方客户端无需了解复杂的验证,API调用过程.并可以实现分享到微博的功能,可以分享文字,或者多媒体信息到内置的 ...

  9. qq接入和分享android,Android社交登录授权、分享SDK,支持微信、微博和QQ

    社交登录授权,分享SDK 支持微信.微博.QQ登录授权 微信好友.微信朋友圈.微博.QQ好友.QQ空间分享 Gradlecompile 'com.elbbbird.android:socialsdk: ...

最新文章

  1. Mysql中查询速度的优化
  2. sentinel 限流熔断神器详细介绍
  3. (转)swc与swf的区别
  4. linux系统的层次结构,关于Linux操作系统层次结构分析
  5. OpenWrt 之 MT7628 使用GPIO中断
  6. CVPR 2019 Oral 亮风台提出端到端投影光学补偿算法,代码已开源
  7. mysql 从库开启复制慢日志_Mysql数据库优化之开启慢查询日志
  8. “SAP.Middleware.Connector.RfcDestinationManager”的类型初始值设定项引发异常
  9. Java比较两个实体属性值是否相同,将不同的属性输出
  10. Java基础--多态
  11. 我写的这些opensource项目
  12. (转)知乎:一文读懂比特币私钥、公钥、钱包地址的来历和关系
  13. 换电脑了怎么迁移旧电脑数据?教你一招,轻松搞定!
  14. ThingJS之动态天气效果
  15. python 实现盒滤波boxfilter
  16. 计算机组成原理试题库(含答案),计算机组成原理试题库(含答案) -
  17. Outlook添加新浪邮箱时的配置细节——登录密码
  18. 汇编8086复习——基础知识、指令汇总、上机实验踩坑
  19. 亚马逊云服务(AWS)中国宁夏及北京区域正式上线Amazon SageMaker
  20. java listview用法_ListView的使用(一)

热门文章

  1. Android ActivityManager: Waited long enough for: ServiceRecord
  2. Java实现简单的售货机程序2
  3. 004coursera网站中的VTT字幕的使用
  4. python绘画海贼王_Python爬虫实战之(三)| 一个海贼迷的呐喊
  5. PDA车牌识别/手持机车牌识别SDK—应用处理
  6. php实现一个简单的访客统计功能
  7. 某微型计算机指令格式如图,计算机组成原理期末复习试题2套不含答案
  8. 计算机在it行业的应用,IT行业的前景怎样啊,我是自考本科毕业,计算机应用...
  9. 阿里巴巴社招Java面试题做题记录
  10. 30岁转行做什么好?我的转行四大步骤!