当前位置: 首页 > news >正文

java代码调用twitter-api用例实战

一、申请twitter开发者账号

首先先申请twitter开发者免费的API,要填写申请的内容,放心大胆地写,申请完,会提供免费的API接口。
以下是我申请到的三个免费API
在这里插入图片描述
申请完开始进行测试调用。
读官方文档账户认证那块:https://developer.twitter.com/en/docs/authentication/overview 四种鉴权方式读的我很懵逼,不知道如何去测试我的接口。
研究了很久才了解清楚正确的请求方式。

二、postman测试接口

以下是用postman请求示例:

1.先确定你开发者账户允许的请求方式

(网页进行了自动翻译)
在这里插入图片描述

2.查看自己的consumer key和 consumer secret、access token和token secret

在这里插入图片描述

3.在postman里进行配置,把对应的key和密钥填到指定的内容里。

在这里插入图片描述

4.填写请求地址和请求参数,进行Get请求。

在这里插入图片描述
postman请求完成,开始进行java代码编写。

三、java代码编写

官方提供了sdk,你可以引用官方提供的包。

<dependency><groupId>com.twitter</groupId><artifactId>twitter-api-java-sdk</artifactId><version>1.1.4</version></dependency>

但是我没有用到这个包,我引用进来发现包内部出现错误,虽然能编译但是错误提示很难受。
在这里插入图片描述
有大神知道这个问题怎么解决可以评论告诉我。
在不引用官方提供的SDK的情况下,需要引用到其他鉴权的包。

1.引用鉴权的SDK包。

在pom.xml里配置

	<dependency><groupId>oauth.signpost</groupId><artifactId>signpost-core</artifactId><version>1.2.1.2</version></dependency><dependency><groupId>oauth.signpost</groupId><artifactId>signpost-commonshttp4</artifactId><version>1.2.1.2</version></dependency>

配置完成,开始写测试代码。

2. 编写测试代码

 public static JSONObject getUserInfo(String token,String token_secret, String active){CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);consumer.setTokenWithSecret(token, token_secret);// 创建HttpClient对象HttpClient httpClient = setProxy(active);// 创建API请求,例如获取用户的时间线try {URIBuilder uriBuilder = new URIBuilder("https://api.twitter.com/2/users/me");ArrayList<NameValuePair> queryParameters;queryParameters = new ArrayList<>();queryParameters.add(new BasicNameValuePair("user.fields", "id,name,username,profile_image_url,public_metrics"));queryParameters.add(new BasicNameValuePair("expansions", "pinned_tweet_id"));uriBuilder.addParameters(queryParameters);HttpGet request = new HttpGet(uriBuilder.build());request.setHeader("Content-Type","application/json");consumer.sign(request);// 创建参数列表
//            List<NameValuePair> bodypara = new ArrayList<>();
//            bodypara.add(new BasicNameValuePair("oauth_verifier", verifier));// 将参数转换为UrlEncodedFormEntity
//            StringEntity entity = new UrlEncodedFormEntity(bodypara,StandardCharsets.UTF_8);
//            // 设置HttpPost的实体
//            request.setEntity(entity);// 发起API请求HttpResponse response =  httpClient.execute(request);// 处理API响应int statusCode = response.getStatusLine().getStatusCode();String responseBody = EntityUtils.toString(response.getEntity());if (statusCode == 200) {System.out.println("API调用成功!");System.out.println("响应内容:");System.out.println(responseBody);return JSONObject.parseObject(responseBody);} else {System.out.println("API调用失败,状态码:" + statusCode);System.out.println("错误信息:");System.out.println(responseBody);return JSONObject.parseObject(responseBody);}} catch (OAuthMessageSignerException e) {e.printStackTrace();} catch (OAuthExpectationFailedException e) {e.printStackTrace();} catch (OAuthCommunicationException e) {e.printStackTrace();} catch (URISyntaxException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}return null;}/*** 设置请求代理* @param active* @return*/private static HttpClient  setProxy(String active){HttpClient client =null;// 创建HttpClientBuilder对象HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();if (null==active ||"dev".equals(active)){// 设置代理主机和端口HttpHost proxy = new HttpHost("127.0.0.1", 1080); // 替换为您的代理主机和端口httpClientBuilder.setProxy(proxy);client = httpClientBuilder.build();}if ("prod".equals(active)||"test".equals(active)){client = httpClientBuilder.build();;}return client;}

进行接口测试,测试成功。

  public static void main(String[] args) {String accessToken="1517001992861716480-xVY7MpIqQrH1XeFv5l6rOLxxxxxx";String accessSecret="A52yWlrFd1MDIrYU0IcnmlnmimMOw0UXRJNxxxxxxx";JSONObject jsonObject = getUserInfo(accessToken,accessSecret,"dev");System.out.println(jsonObject);}

接口参数解析

在测试的接口:https://api.twitter.com/2/users/me 中没有必传的参数,但是有些选项参数。
user.fields、expansions、tweet.fields三个。
在xx.fields参数传值时,是要你指定返回集合List里含有哪些返回字段。
比如在user.fields里传值id,name,username,profile_image_url,public_metrics这五个字段,分别代表用户的ID、用户昵称、用户名、头像Url、和公开的信息数。
在这里插入图片描述
而expansions值默认都是传pinned_tweet_id。显示扩展的twitterID。
在这里插入图片描述
设置这个值之后,可以设置tweet.fields字段值。
如果不设置expansions的值,设置tweet.fields则不起作用。

相关文章:

  • 工业级 S25HS01GTDPBHV030 NOR闪存,L9305EP汽车级驱动器IC,LMK03318RHSR时钟发生器,PLL(中文资料)
  • Ajax入门-Express框架介绍和基本使用
  • 安卓用SQLite数据库存储数据
  • 浅谈现代化城市建设中智慧消防的研究与应用
  • 5.1每日一题(无穷级数敛散性的判断:莱布尼兹准则、p级数、绝对收敛、条件收敛、比较法/比较法的极限形式)
  • React16中打印事件对象取不到值的现象及其原因分析
  • itext - PDF模板套打
  • 文心一言 VS 讯飞星火 VS chatgpt (140)-- 算法导论11.4 5题
  • 5.3每日一题(不确定正负号的级数敛散性:和一个正项级数比较判定)
  • 力扣114. 二叉树展开为链表(java,用树模拟链表)
  • wagtail-安装配置
  • NextJS开发:Image组件的使用及缺陷
  • SQL 中的运算符与别名:使用示例和语法详解
  • java/Android:将字符串按数量分割
  • 「torch.cosine_smilarity() = 0」引发的关于cpu与gpu精度问题的探讨
  • C++11: atomic 头文件
  • ES6核心特性
  • leetcode386. Lexicographical Numbers
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • python_bomb----数据类型总结
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python十分钟制作属于你自己的个性logo
  • SpringCloud集成分布式事务LCN (一)
  • vue-router的history模式发布配置
  • 成为一名优秀的Developer的书单
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 记录一下第一次使用npm
  • 离散点最小(凸)包围边界查找
  • 利用DataURL技术在网页上显示图片
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 学习ES6 变量的解构赋值
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • # 透过事物看本质的能力怎么培养?
  • #NOIP 2014# day.2 T2 寻找道路
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot教学评价 毕业设计 641310
  • (一)Java算法:二分查找
  • (转)Sublime Text3配置Lua运行环境
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net Redis的秒杀Dome和异步执行
  • .Net 高效开发之不可错过的实用工具
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net的DataSet直接与SQL2005交互
  • .NET和.COM和.CN域名区别
  • [100天算法】-目标和(day 79)
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [android] 请求码和结果码的作用
  • [BZOJ1008][HNOI2008]越狱
  • [c++] 自写 MyString 类
  • [C++]高精度 bign (重载运算符版本)