Twitter API サイトには、4 つの Java Twitter ライブラリがリストされています。
あなたは他の人を知っていますか?サポート、使いやすさ、安定性、コミュニティなどでの経験を教えてください。
私はちょうどそれらを見ました。
JTwitterは間違いなく3つの中で最も弱いようです. 最近更新されていないようで、Twitter API の多くをカバーしておらず、最初のリリース以外にはリリースされていないようです。良い面としては、LPGL ライセンスを取得しており、必要な追加コードがほとんどないパッケージで提供され、小さくて簡単に理解できるように見えます。
他の 2 つの java-twitter と Twtter4J は、品質がかなり似ています。どちらもコア API をカバーし、通常のオープンソース プロジェクトのすべての付属品 (公開されているソース コード リポジトリ、オンライン ドキュメント、アクティブなメーリング リスト、最近の開発活動) を備えています。
ただし、Twitter4J がリーダーのようです。ドキュメントから、その API カバレッジはより完全であるように見えます。メーリングリストは間違いなくより活発です。ドキュメントははるかに優れています。そして、私にとって最も重要なことは、リリースがより頻繁になったことです。java-twitter には、約 4 か月前の「0.9-SNAPSHOT」リリースという 1 つのリリースがあります。Twitter4J は、その間に 2.0.0 および 2.0.8 までの増分リリースを含むいくつかのリリースを行い、問題を修正し、新しい Twitter API のサポートを追加しました。
Twitter4J から始めます。返事がない場合は、それが私にとって素晴らしかったと思ってください。
最新の API である Twitter4j は良いものだと思います
アヘム; JTwitterは積極的に保守され、定期的に更新され(バージョン1.6.2は本日リリースされました)、TwitterAPIのほとんどをカバーしています。
プロフィール画像と他のいくつかのプロフィール設定を設定する方法だけが欠けています。それ以外は、かなり完成しています。ステータスの更新、タイムライン、友情、リスト、検索、ストリーミングなど。
また、高速で堅牢です。Twitterは場所によっては不安定になる可能性があり、JTwitterには、あなたの生活を楽にするための回避策と有益な例外があります。
JTwitterのメイン開発者として、私はかなり偏見があります。しかし、JTwitterを使用している開発者からのフィードバックも非常に好意的です。
私は Twitter4J を使用していますが、まだ問題はありません。私は実際にそれがとても好きです。
彼らの Web サイトで提供されている 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 オブジェクトを返します。これは静的メソッドを持つ final クラスであるため、アプリ インスタンスごとに複数の Twitter オブジェクトを生成することはありません。
この質問をまだ見ている人にとっては、Twitter が現在 Java の Web サイトにリストしている唯一の APIは Twitter4J であることに言及する価値があります。したがって、これが使用するものであることをさらに納得させる必要がある場合は、まあ、どうぞ!
多くの人が取り組んでいるので、私はTwitter4jを選択しました。そして、それについてインターネット上でいくつかのコンテンツを見つけるのは簡単です。
Twitter Streaming API の Java バインディングであるTweetStream4Jもあります。これは非常に単純で、前回使用したときとは異なり、作成者が pom.xml ファイルを組み込むように更新したので、ビルドできるようになりました。私が最後に使用したとき(Scalaから)は、非常にシンプルで迅速です。