跳转到主要内容

介绍

软件开发工具包(SDK)是一组为特定平台或 API 定制的软件工具与程序。SDK 的目标是通过提供库或代码基,让开发者在其应用中以更高效率、以最少编码来构建或扩展功能,从而显著加速开发流程,节省时间、成本与精力。
X Developer Platform 现已为使用 TypeScript/JavaScript 和 Java 开发的用户提供 2 个官方 SDK。这些 SDK 通过提供针对所有可用 v2 端点的预构建函数,并简化认证流程,免去开发者手动处理 X API v2 复杂性的负担,从而更高效地构建。由于这些 SDK 由 Developer Platform 团队构建并维护,将始终与 X API v2 的未来更新保持同步。
由于这些 SDK 封装了 X API,你必须拥有一个开发者账号,并使用位于项目中的开发者应用的凭据来对请求进行认证。

安装

  • Java
  • TypeScript
有多种方式可以安装此 Java 软件包(需要 Java 1.8 及以上版本)
  • Maven 用户:将以下依赖添加到你的项目 POM 文件中:
<dependency>
  <groupId>com.twitter</groupId>
  <artifactId>twitter-api-java-sdk</artifactId>
  <version>1.1.4</version>
</dependency>
  • Gradle 用户:将以下依赖添加到你的项目构建文件中: implementation "com.twitter:twitter-api-java-sdk:1.1.4"
  • 其他方式:先运行以下命令生成 JAR mvn clean package 然后手动安装以下 JAR:
target/twitter-api-java-sdk-1.1.4.jartarget/lib/*.jar

客户端基础

在工作文件的顶部导入类(Java)或包(TypeScript),以便使用认证和库客户端。要调用库客户端的方法,必须传入认证凭据:可以使用 Bearer Token(仅应用)或在使用 OAuth 2.0 用户上下文进行认证时提供 client id/client secret。 以下是示例:
  • Java
  • TypeScript
// Import classes:
import com.twitter.clientlib.ApiClient;
import com.twitter.clientlib.ApiException;
import com.twitter.clientlib.Configuration;
import com.twitter.clientlib.auth.*;
import com.twitter.clientlib.model.*;
import com.twitter.clientlib.TwitterCredentialsBearer;
import com.twitter.clientlib.api.TwitterApi;

// Instantiate library client
TwitterApi apiInstance = new TwitterApi();

// Instantiate auth credentials (App-only example)
TwitterCredentialsBearer credentials = new TwitterCredentialsBearer(System.getenv("APP-ONLY-ACCESS-TOKEN"));

// Pass credentials to library client
apiInstance.setTwitterCredentials(credentials);

认证流程

如果你使用“仅应用”方式为 SDK 进行认证,只需提供令牌,库客户端即可立即调用各端点方法。请注意,“仅应用”令牌不能用于需要用户上下文认证的端点。 OAuth 2.0 用户上下文认证在创建认证客户端后还需要执行几个额外步骤:
  • 生成授权 URL
  • 通过授权 URL 授权应用
  • 重定向至回调(该地址应与开发者门户中认证设置页面配置的回调 URL 一致)
  • 解析 code verifier 并交换获取访问令牌
SDK 在认证客户端上提供了相应方法,可简化上述步骤。有关使用 OAuth 2.0 用户上下文进行认证并发起请求的完整示例,请查看 GitHub 仓库。

端点方法

库客户端中提供的方法命名清晰,与各个端点一一对应,所有参数均以函数参数形式传入。 下面是根据 ID 查找 Post 的示例:
  • Java
  • TypeScript
String id = "1511757922354663425"; // String | 单个 Tweet 的 ID。
Set<String> expansions = new HashSet<>(Arrays.asList("author_id")); // Set<String> | 以逗号分隔的待展开字段列表。
Set<String> tweetFields = new HashSet<>(Arrays.asList("created_at", "lang", "context_annotations")); // Set<String> | 以逗号分隔的待返回 Tweet 字段列表。
Set<String> userFields = new HashSet<>(Arrays.asList("created_at", "description", "name")); // Set<String> | 以逗号分隔的待返回 User 字段列表。

try {
 SingleTweetLookupResponse result = apiInstance.tweets().findTweetById(id, expansions, tweetFields, userFields, null, null, null);
 System.out.println(result);
} catch (ApiException e) {
 System.err.println("调用 TweetsApi#findTweetById 时发生异常");
 System.err.println("状态码: " + e.getCode());
 System.err.println("原因: " + e.getResponseBody());
 System.err.println("响应头: " + e.getResponseHeaders());
 e.printStackTrace();
}