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

推特API(Twitter API)V2 查询用户信息

        前面章节已经介绍使用code换取Token的整个流程了,这里不再重复阐述了,下面我们介绍如何使用Token查询用户信息等操作。

1.引入相关依赖Maven

<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>

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

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency><dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>29.0-jre</version>
</dependency>

2.相关的配置类

/*** 推特相关配置*/
public class TwitterConfig {/*** 客户id和客户私钥*/public static final String CLIENT_ID = "c3dqY111tjbnFPNDM6MTpjaQ";public static final String CLIENT_SECRET = "kf1119fmdeXZHpOV-fjv9umx55ZdccCkNONjea";/*** 应用KYE和私钥*/public static final String CONSUMER_KEY = "lhyfiD111MffGeHMR";public static final String CONSUMER_SECRET = "BRNxnV5Lx111jtptduIkcwjB";/*** 应用的TOKEN*/public static final String ACCESS_TOKEN = "14821111633-A8xyN5111FgkbStu";public static final String ACCESS_TOKEN_SECRET = "oZaKBphpoo111SZvzoXPAQ";}

3.查询开发者账号的推特信息

public JSONObject getUserInfo(){//下面需要开发者门户里面的key和私钥,还包括Token和私钥CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(TwitterConfig.CONSUMER_KEY, TwitterConfig.CONSUMER_SECRET);consumer.setTokenWithSecret(TwitterConfig.ACCESS_TOKEN, TwitterConfig.ACCESS_TOKEN_SECRET);// 创建HttpClient对象HttpClient httpClient = this.setProxy();// 创建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);// 创建参数列表HttpResponse response =  httpClient.execute(request);// 处理API响应int statusCode = response.getStatusLine().getStatusCode();String responseBody = EntityUtils.toString(response.getEntity());if (statusCode == 200) {System.out.println(responseBody);return JSONObject.parseObject(responseBody);} else {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;}

4.根据用户Token查询授权用户基本信息

    /*** 根据用户token换取用户信息* @return*/public TwitterUserDto getUserInfoByToken(String token){StringBuilder result = new StringBuilder();BufferedReader in = null;try {// Twitter API endpointString endpoint = "https://api.twitter.com/2/users/me";// 构造带有参数的 URLString urlWithParams = endpoint + "?user.fields=name,pinned_tweet_id,profile_image_url";// 创建 URL 对象URL url = new URL(urlWithParams);URLConnection connection = url.openConnection();connection.setRequestProperty("Authorization", "Bearer " + token);connection.setRequestProperty("Content-Type","application/json");connection.connect();in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null){result.append(line);}TwitterUserDto dto = new TwitterUserDto();JSONObject json = JSONObject.parseObject(result.toString());JSONObject user = (JSONObject)json.get("data");if(user != null){dto.setId(user.get("id").toString());dto.setName(user.get("name").toString());dto.setUsername(user.get("username").toString());}return dto;} catch (Exception e) {e.printStackTrace();}return null;}
@Data
@Accessors(chain = true)
public class TwitterUserDto {/*** 推特名 @xxxx*/private String username;/*** 推特用户名*/private String name;/*** 推特用户ID*/private String id;
}

5.根据用户名查询用户推特信息 

/*** 根据用户名查询用户推特数据* @return*/public TwitterUserDto getTwitterUserByUserName(String userName){//推特应用里面的相关私钥和TokenCommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(TwitterConfig.CONSUMER_KEY, TwitterConfig.CONSUMER_SECRET);consumer.setTokenWithSecret(TwitterConfig.ACCESS_TOKEN, TwitterConfig.ACCESS_TOKEN_SECRET);// 创建HttpClient对象HttpClient httpClient = this.setProxy();// 创建API请求,例如获取用户的时间线try {URIBuilder uriBuilder = new URIBuilder("https://api.twitter.com/2/users/by");ArrayList<NameValuePair> queryParameters;queryParameters = new ArrayList<>();//需要查询的用户名   多个用户名称用逗号隔开(例如:张三,李四,王五   如果不行用:张三%20李四%20王五)queryParameters.add(new BasicNameValuePair("usernames", userName));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);// 创建参数列表HttpResponse response =  httpClient.execute(request);// 处理API响应int statusCode = response.getStatusLine().getStatusCode();String responseBody = EntityUtils.toString(response.getEntity());if (statusCode == 200) {TwitterUserDto dto = new TwitterUserDto();JSONObject json = JSONObject.parseObject(responseBody);JSONArray user = (JSONArray)json.get("data");if(user != null){json = (JSONObject)user.get(0);dto.setId(json.get("id").toString());dto.setName(json.get("name").toString());dto.setUsername(json.get("username").toString());}return dto;} else {return null;}} 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* @return*/private HttpClient setProxy(){// 创建HttpClientBuilder对象HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();HttpClient client = httpClientBuilder.build();;return client;}

 

注意事项:如果推特报401的话请检查Token是否过期,如果报400的话需要好好检查一下参数问题,它不会给你特别明显错误的提示,细节问题只能自己注意一下了。

http://www.lryc.cn/news/311889.html

相关文章:

  • 在Elasticsearch IK分词器中更新、停用某些专有名词
  • 时钟显示 html JavaScript
  • List<Object>集合对象属性拷贝工具类
  • 请说明Vue中的异步组件加载
  • 目标检测5:采用yolov8, RK3568上推理实时视频流
  • 微服务:Feign篇
  • 基于chatgpt的聊天机器人
  • BAT常见的20道Android面试题详解,我的头条面试经历分享
  • python66-Python的循环之常用工具函数
  • Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)
  • MATLAB报错:尝试将 SCRIPT imread 作为函数执行
  • 能源管理师:薪资待遇、技能知识与职业发展路景全解析
  • opencart3 添加速卖通商品脚本
  • 【Linux】USB Functionfs编程:libusb接口详解
  • 网络编程,IO多路复用
  • 【ue5】滑铲系统蓝图笔记
  • linux系统Jenkins工具参数化构建
  • 生活里的英语应该【怎么说】
  • Centos安装Jenkins
  • 软考中级系统集成必备100题(71-80)真题精炼
  • visual studio的使用
  • 对于爬虫的学习
  • 【学习笔记】开源计算机视觉库OPENCV学习方案
  • LVS负载均衡集群基础概念
  • pwn学习笔记(5)--格式化字符串漏洞(未完全完成)
  • HTML标签之表单标签,web开发实例教程
  • 数据库-第四/五章 数据库安全性和完整性【期末复习|考研复习】
  • 网站维护页面404源码
  • CSS的文本样式属性值,web开发难点
  • springboot+jsp汽车配件管理系统idea maven 项目lw