如何在Java中获取特定用户的推文总数(仅返回数量)
获取特定用户推文总数的Java实现方案
当然没问题!要获取特定用户的推文总数,完全不用拉取所有推文内容——直接调用X(原Twitter)的官方API就能拿到这个数据,效率很高。下面是用Java实现的具体方案:
1. 前期准备
- 首先得注册一个X Developer账号,创建项目和应用,拿到API密钥(API Key)、API密钥秘钥(API Secret)、访问令牌(Access Token)和访问令牌秘钥(Access Token Secret)。这些是调用API的必备凭证,没有它们连API的门都进不去哦。
- 在Java项目里添加HTTP客户端依赖,我这里推荐用
OkHttp,轻量又好用。如果是Maven项目,直接在pom.xml里加依赖就行。
2. Maven依赖配置
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.11.0</version> </dependency>
3. 核心代码实现
我们会调用X的users/by/username接口,通过用户名查询用户的公开指标,其中就包含我们要的推文总数tweet_count。代码里已经做好了OAuth认证和JSON解析,直接替换凭证就能用:
import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.json.JSONObject; import java.io.IOException; public class XTweetCountFetcher { // 记得把这里的占位符换成你自己的API凭证! private static final String API_KEY = "YOUR_API_KEY"; private static final String API_SECRET = "YOUR_API_SECRET"; private static final String ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"; private static final String ACCESS_TOKEN_SECRET = "YOUR_ACCESS_TOKEN_SECRET"; public static void main(String[] args) throws IOException { String targetUsername = "X"; // 替换成你要查询的用户名 long tweetCount = getTweetCountByUsername(targetUsername); System.out.println("用户 @" + targetUsername + " 的推文总数:" + tweetCount); } public static long getTweetCountByUsername(String username) throws IOException { OkHttpClient client = new OkHttpClient(); // 构造请求URL,指定只获取用户的公开指标字段 String url = "https://api.x.com/2/users/by/username/" + username + "?user.fields=public_metrics"; Request request = new Request.Builder() .url(url) .header("Authorization", "Bearer " + getBearerToken()) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("请求失败,状态码:" + response.code()); String responseBody = response.body().string(); JSONObject userData = new JSONObject(responseBody).getJSONObject("data"); // 从公开指标里提取推文总数 return userData.getJSONObject("public_metrics").getLong("tweet_count"); } } // 获取Bearer Token,用于API认证 private static String getBearerToken() throws IOException { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url("https://api.x.com/oauth2/token") .addHeader("Content-Type", "application/x-www-form-urlencoded") .post(okhttp3.RequestBody.create( "grant_type=client_credentials", okhttp3.MediaType.parse("application/x-www-form-urlencoded"))) .header("Authorization", "Basic " + getBasicAuthString()) .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) throw new IOException("获取Token失败,状态码:" + response.code()); return new JSONObject(response.body().string()).getString("access_token"); } } // 生成Basic认证字符串,用于获取Token private static String getBasicAuthString() { String credentials = API_KEY + ":" + API_SECRET; return java.util.Base64.getEncoder().encodeToString(credentials.getBytes()); } }
4. 一些要注意的点
- 一定要把代码里的凭证占位符换成你自己的,不然肯定调用失败。
- X的API有调用配额限制,免费版的额度有限,别瞎刷哦。
- 返回的
tweet_count是用户的公开推文总数,已删除的推文和私密账号的推文(如果没权限访问)是不算在内的。 - 可以自己加一些异常处理逻辑,比如用户名不存在、网络超时的情况,让代码更健壮。
内容的提问来源于stack exchange,提问作者Rashid
相关产品推荐
相关产品推荐

