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则不起作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 1、2023 Hackaday大赛胸牌开源 Vectorscope-main.zip (66.83MB) GitHub - Hack-a-Day/Vectorscope: Vectorscope badg…

Baidu Comate 基于百度文心一言的智能编码助手

本心、输入输出、结果 文章目录 Baidu Comate 基于百度文心一言的智能编码助手前言产品能力主要功能特性JetBrains IntelliJ IDEA 插件安装相关链接花有重开日,人无再少年实践是检验真理的唯一标准Baidu Comate 基于百度文心一言的智能编码助手 编辑:简简单单 Online zuozuo …

git commit message 书写规范

在使用 Git 提交时&#xff0c;遵循良好的提交消息规范可以提高代码的可读性和可维护性。以下是一些常见的 Git 提交消息书写规范&#xff1a; 提交消息格式&#xff1a;一个提交消息通常包含三个部分&#xff1a;标题、空行和正文。它们之间使用空行分隔。 复制 <标题>&…

vue3项目中使用富文本编辑器

前言 适配 Vue3 的富文本插件不多&#xff0c;我看了很多插件官网&#xff0c;也有很多写的非常棒的&#xff0c;有UI非常优雅让人耳目一新的&#xff0c;也有功能非常全面的。 如&#xff1a; Quill&#xff0c;简单易用&#xff0c;功能全面。editorjs&#xff0c;UI极其优…

echarts的横向柱状图文字省略,鼠标移入显示内容 vue3

效果图 文字省略 提示 如果是在x轴上的&#xff0c;就在x轴上添加triggerEvent: true,如果是y轴就在y轴添加&#xff0c;我是在y轴上添加的 并且自定义的方法&#xff08;我取名为extension&#xff09; // echarts 横向省略文字 鼠标移入显示内容 export const extension…

AT89S52单片机的最小应用系统

目录 ​一.时钟电路设计 1.内部时钟方式 2.外部时钟方式 3.时钟信号的输出 二.机器周期&#xff0c;指令周期与指令时序 1.时钟周期 2.机器周期 3.指令周期 三.复位操作和复位电路 1.复位操作 2 复位电路设计 四.低功耗节电模式 AT89S52本身片内有8KB闪烁存储器&am…

Redisson分布式锁源码解析

一、使用Redisson步骤 Redisson各个锁基本所用Redisson各个锁基本所用Redisson各个锁基本所用 二、源码解析 lock锁 1&#xff09; 基本思想&#xff1a; lock有两种方法 一种是空参 另一种是带参 * 空参方法&#xff1a;会默认调用看门狗的过期时间30*1000&…

kubernetes|云原生|Deployment does not have minimum availability 的解决方案(资源隐藏的由来)

前言&#xff1a; 最近在部署prometheus的过程中遇到的这个问题&#xff0c;感觉比较的经典&#xff0c;有必要记录一下。 现象是部署prometheus主服务的时候&#xff0c;看不到pod&#xff0c;只能看到deployment&#xff0c;由于慌乱&#xff0c;一度以为是集群有毛病了&am…

c# 基础语法

c# 程序结构 using System.Collections.Generic; namespace demo1; //一个命名空间可以包含多个类 using System.IO; using System.Drawing;class proj {/// <summary>/// c#是微软开发的&#xff0c;基于c和c的一种面象对象编程语言&#xff0c;用于快速开发windows桌…

真实网络中的 bbr

本文包含中心极限定理&#xff0c;大数定律&#xff0c;经济规律等&#xff0c;bbr 倒没多少&#xff0c;不过已经习惯把 bbr 当靶子了。 上周写了 揭秘 bbr 以及 抢带宽的原理&#xff0c;我对自己说&#xff0c;这都是理论上如何&#xff0c;可实际上呢。于是有必要结合更实际…

ubuntu cutecom串口调试工具使用方法(图形界面)

文章目录 Ubuntu下使用CuteCom进行串口调试使用指南什么是CuteCom&#xff1f;主要特点 安装CuteCom使用APT包管理器从源码编译安装 配置串口CuteCom界面解析&#xff08;启动cutecom&#xff09;使用CuteCom进行数据发送和接收配置串口参数数据接收数据发送 高级功能和技巧流控…

Vatee万腾的数字化掌舵:Vatee科技解决方案的全面引领

随着数字化时代的到来&#xff0c;Vatee万腾凭借其卓越的科技实力和全面的解决方案&#xff0c;成功地在数字化探索的航程中掌舵引领。 首先&#xff0c;Vatee万腾以其强大的数字化科技实力成为行业的引领者。vatee万腾不仅在人工智能、大数据分析、云计算等前沿领域取得了显著…

PLC通过Modbus转Profinet网关连接安华变频器通讯控制电机案例

背景&#xff1a;近年来&#xff0c;随着自动化技术的不断进步&#xff0c;Modbus与Profinet之间的转换成为了许多工厂和企业普遍关注的问题。 Modbus转Profinet网关作为两个不同协议设备连接的桥梁&#xff0c;安华变频器作为一种电气设备&#xff0c;能够改变电源的频率和电…

负载均衡lvs

简介 ipvsadm 是 Linux 内核中的 IP 虚拟服务器&#xff08;IPVS&#xff09;管理工具。IPVS是 Linux 内核提供的一种负载均衡解决方案&#xff0c;它允许将入站的网络流量分发到多个后端服务器&#xff0c;以实现负载均衡和高可用性。IPVS通过在内核中维护一个虚拟服务器表&a…

Pytorch中的tensor维度理解

Pytorch中的tensor维度理解 文章目录 Pytorch中的tensor维度理解摘要打消心理恐惧&#xff0c;从三维学起三维tensor参考文献 摘要 面对pytorch编程中的tensor时&#xff0c;我不时会感到恐惧。对里面数据是怎么排布的&#xff0c;一直没有一个直观的理解。今天我想把这个事情…

springboot(ssm中医学习服务管理系统 医学生在线学习平台Java(codeLW)

springboot(ssm中医学习服务管理系统 医学生在线学习平台Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或…

基于VM虚拟机下Ubuntu18.04系统,Hadoop的安装与详细配置

参考博客&#xff1a; https://blog.csdn.net/duchenlong/article/details/114597944 与上面这个博客几乎差不多&#xff0c;就是java环境配置以及后面的hadoop的hdfs-site.xml文件有一些不同的地方。 准备工作 1.更新 # 更新 sudo apt update sudo apt upgrade2.关闭防火…

MS2401隔离Σ-Δ调制器,可替代ADI的AD7401

产品简述 MS2401 是一款二阶 Σ-Δ 调制器&#xff0c;集成片上数字隔离器&#xff0c;能 将模拟输入信号转换为高速 1 位码流。调制器对输入信号连续 采样&#xff0c;无需外部采样保持电路。模拟信号输入满量程为 320 mV &#xff0c;转换后的数字码流的最高数据速率为 2…

C++ Boost Thread 编程总结

1.前言 标准C线程即将到来。CUJ预言它将衍生自Boost线程库&#xff0c;现在就由Bill带领我们探索一下Boost线程库。 就在几年前&#xff0c;用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率&#xff1b;为了达到最…

统计voc格式数据中的xml标签、bndbox到excel表格中

有这么个需求是将xml的内容: 1,filename 2.label 3.bndbox:xmin,xmax,ymin,ymax。 … 将这些东西写入excel表格中,方便我统计标签数量和框的分布! 于是撰写了脚本:xml2csv.py 我的xml文件形式如下。大家的目标检测格式大同小异! <annotation><folder>UAV_d…