You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:30:28