我正在使用 twitter4j 来访问 twitter API v1。正如你们中有些人所知,v1 将于 2023 年 4 月 29 日被删除/弃用。
对于 v2 twitter API,我发现我需要将 v2 twitter4j 包装器添加到我的项目中才能使用 v2 API。 https://github.com/takke/twitter4j-v2
我以为这只是简单地将 dedecency 添加到我的 pom 中,但事实并非如此。它是用 Kotlin 编写的。我添加了依赖项,它编译得很好,我可以看到 lib 的 .class 文件,但是当我尝试导入时,找不到它。
当我进行全新安装时,我确实看到了这条消息:
[WARNING] No sources found skipping Kotlin compile
我正在使用intellij。有我需要更改的设置吗?
这是我的 pom 的片段:
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>4.0.7</version>
</dependency>
<dependency>
<groupId>io.github.takke</groupId>
<artifactId>jp.takke.twitter4j-v2</artifactId>
<version>1.4.1</version>
</dependency>
这可能是我犯的菜鸟错误,因为我以前从未使用过 Kotlin。
最佳答案
我遇到了同样的问题,然后切换到新的 Twitter API。
<dependency>
<groupId>com.twitter</groupId>
<artifactId>twitter-api-java-sdk</artifactId>
<version>2.0.3</version>
</dependency>
这是一个例子
public TwitterService(@Value(value = "${is.local.dev}") final boolean localDevelopment,
@Value(value = "${twitter.bearerToken}") final String bearerToken) {
this.localDevelopment = localDevelopment;
TwitterCredentialsBearer credentials = new TwitterCredentialsBearer(bearerToken);
this.twitterApi = new TwitterApi(credentials);
}
由于 Spring bean 是一个单例,因此在构造函数内构建它应该足够了(发生一次)
try {
TweetsApi.APIcreateTweetRequest tweet = getTwitterApi().tweets().createTweet(new TweetCreateRequest().text(what));
ApiResponse<TweetCreateResponse> response = tweet.executeWithHttpInfo();
if (response.getStatusCode() != 200) {
log.error("Could not tweet. Error code: {}, reason: {}", response.getStatusCode(), response.getData());
}
log.debug("Tweet created");
} catch (ApiException e) {
log.error("Failed to create a tweet", e);
}
编辑:
如果您只想发布推文并且不需要 Twitter SDK 的便利,那么使用 OAuth1 有一种更简单的方法 - 因为承载 token 不能用于所有端点,而且 OAuth2 有点令人沮丧。特别是因为 Twitter V2 文档实际上很糟糕。恕我直言,解释得很糟糕,实现起来也很奇怪。因此,如果您只想自动发推文,您可以使用此类来生成身份验证:
然后像这样使用它:
public void tweet(String what) {
TwitterOAuthGenerator authGenerator = new TwitterOAuthGenerator(apiKey, apiKeySecret, accessToken, accessTokenSecret);
String header = authGenerator.generateHeader("POST", TWEET_URL, Collections.emptyMap());
HttpResponse<String> response = Unirest.post(TWEET_URL)
.header("Authorization", header)
.header("Content-Type", "application/json")
.body("{\"text\":\"" + what + "\"}")
.asString();
}
关于java - 如何将 twitter v2 Kotlin 库添加到我的 Maven Java 代码中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76065882/