twitter API 站点列出了 4 个 java twitter 库。
你认识其他人吗?您在支持、易用性、稳定性、社区等方面的经验如何?
我只是看了看他们。
JTwitter 绝对看起来是三者中最弱的。它最近似乎没有更新,没有涵盖 Twitter API 的大部分内容,并且除了最初的版本之外似乎没有任何版本。从好的方面来说,它是 LPGL 许可的,附带了它需要的少量额外代码,并且看起来小而易于理解。
另外两个,java-twitter 和 Twtter4J 在质量上看起来更接近。两者都涵盖了核心 API,并且都具有正常开源项目的所有配置:公开可用的源代码存储库、在线文档、活动邮件列表和最近的开发活动。
然而,Twitter4J 看起来是领导者。从文档来看,它的 API 覆盖范围似乎更完整。邮件列表肯定更活跃。文档要好得多。对我来说最重要的是,发布更加频繁。java-twitter 发布了一个版本,大约 4 个月前发布了“0.9-SNAPSHOT”版本。Twitter4J 在此期间发布了多个版本,包括 2.0.0 和 2.0.8 之前的增量版本,修复了问题并添加了对新 Twitter API 的支持。
我将从 Twitter4J 开始;如果您没有收到回复,请假设这对我来说很棒。
我认为 Twitter4j 很好,它是最新的 API
咳咳;JTwitter得到积极维护,定期更新(今天发布 1.6.2 版),并涵盖了大部分 Twitter API。
它只缺少一种设置您的个人资料图片和其他一些个人资料设置的方法。除此之外,它非常完整。状态更新、时间线、友谊、列表、搜索、流媒体等。
它也快速而强大。Twitter 在某些地方可能会出现问题,而 JTwitter 有变通方法和信息丰富的例外,可以让您的生活更轻松。
作为主要的 JTwitter 开发者,我是比较有偏见的!但使用 JTwitter 的开发者的反馈也非常积极。
我使用 Twitter4J 并且还没有遇到问题。我其实非常喜欢它。
他们在他们的网站上提供的 OAuth 示例是最大的麻烦——它没有帮助。如果您有兴趣(或其他任何人),这是我的 OAuthServlet 代码。我知道这个问题已经很老了,所以我把它放在这里更多是为了搜索结果。
package com.example.oauth;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import twitter4j.*;
import twitter4j.http.*;
@SuppressWarnings("serial")
public class OAuthServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
HttpSession sess = req.getSession(true);
RequestToken requestToken = (RequestToken) sess.getAttribute("requestToken");
if (sess.getAttribute("twitter_user_id") != null) {
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
if (req.getRequestURI().indexOf("logout") > 3) {
sess.removeAttribute("twitter_user_id");
out.println("You're now logged out.");
} else {
out.println("You're already logged in!");
}
} else if (req.getRequestURI().indexOf("callback") > 3 && req.getParameter("oauth_token").length() > 0 && requestToken != null) {
handleCallback(req, resp, sess);
if (sess.getAttribute("oauth_previous") != null) {
resp.sendRedirect((String) sess.getAttribute("oauth_previous"));
sess.removeAttribute("oauth_previous");
}
} else {
sendToTwitter(resp, sess);
sess.setAttribute("oauth_previous", req.getHeader("Referer"));
}
}
private void sendToTwitter(HttpServletResponse resp, HttpSession sess) throws IOException {
RequestToken requestToken = (RequestToken) sess.getAttribute("requestToken");
try {
Twitter twitter = new TwitterCnx().registerOAuth().get();
requestToken = twitter.getOAuthRequestToken();
sess.setAttribute("requestToken", requestToken);
resp.sendRedirect(requestToken.getAuthorizationURL());
} catch (TwitterException e) {
PrintWriter out = resp.getWriter();
out.println(e.getStackTrace());
}
}
private void handleCallback(HttpServletRequest req, HttpServletResponse resp, HttpSession sess) throws IOException {
RequestToken requestToken = (RequestToken) sess.getAttribute("requestToken");
sess.removeAttribute("requestToken");
String secret = req.getParameter("oauth_token");
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
try {
Twitter t = new TwitterCnx().registerOAuth().get();
AccessToken accessToken = t.getOAuthAccessToken(requestToken.getToken(), secret);
long id = (long) t.verifyCredentials().getId();
storeAccessToken(id, accessToken,sess);
sess.setAttribute("twitter_user_id", id);
out.println("You're now logged in!");
} catch (TwitterException e) {
out.println("Something went wrong. Sorry about that. Please try again.");
}
}
private void storeAccessToken(Long id, AccessToken at, HttpSession sess) {
//you probably want to persist this somewhere other than in sessions.
sess.setAttribute("secret", at.getTokenSecret() );
sess.setAttribute("token", at.getToken());
//also, don't forget to persist the user id alongside the token.
}
}
我使用类 TwitterCnx 作为 twitter4j.Twitter 的包装器。TwitterCnx 定义了我的 OAuth 消费者资料并返回一个 Twitter 对象。它是具有静态方法的最终类,因此我不会为每个应用实例生成多个 Twitter 对象。
对于仍在关注这个问题的任何人,值得一提的是,Twitter目前在其网站上列出的唯一适用于 Java 的 API 是 Twitter4J。所以,如果你需要更多的说服力来证明这是可以使用的,那么,给你!
我选择 Twitter4j 是因为很多人都在研究它。并且很容易在互联网上找到一些关于它的内容。
还有TweetStream4J,它是 Twitter 流 API 的 Java 绑定。它非常简单,并且与我上次使用它不同,作者对其进行了更新以包含一个 pom.xml 文件,以便您可以构建它。当我上次使用它时(来自 Scala),它非常简单快捷。