web-dev-qa-db-ja.com

最高Java Twitterライブラリ?

Twitter APIサイトには3 Java Twitterライブラリがリストされています。

他人を知っていますか?サポート、使いやすさ、安定性、コミュニティなどでの経験は何ですか。

63
flybywire

Twitter4jは最新のAPIでいいと思います

25
Rahul Garg

私はちょうどそれらを見ました。

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から始めます。返答がない場合は、それが私にとってとても良かったと思います。

39
William Pietri

エヘン; JTwitter は積極的に維持され、定期的に更新され(今日リリースされたバージョン1.6.2)、ほとんどのTwitter APIをカバーしています。

プロフィール画像を設定する方法と他のいくつかのプロフィール設定だけが欠けています。それ以外は、かなり完成しています。ステータスの更新、タイムライン、友情、リスト、検索、ストリーミングなど。

また、高速で堅牢です。 Twitterは場所によってばらばらになる可能性があり、JTwitterには回避策と有益な例外があり、あなたの生活をより簡単にします。

私はメインのJTwitter開発者として、かなり偏っています!しかし、JTwitterを使用する開発者からのフィードバックも非常に好意的です。

10

私は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.
    }
}

Twitter4j.TwitterのラッパーとしてTwitterCnxクラスを使用しています。 TwitterCnxはmy OAuth消費者向けのものを定義し、Twitterオブジェクトを返します。これは静的メソッドを備えた最後のクラスであるため、アプリインスタンスごとに複数のTwitterオブジェクトを生成しません。

8
Ted Pennings

まだこの質問を検討している人にとって、Twitterの唯一のAPI 現在、そのWebサイトにリストされている Java=の場合はTwitter4Jです。これが使用するべきものであると納得させる、まあ、ここに行きます!

2
AbsentMoniker

TweetStream4Jもあります。これは、Twitter Streaming APIのJavaバインディングです。非常にシンプルで、前回の私がそれを使用したとき、著者はそれを更新してpom.xmlファイルを含め、ビルドできるようにしました(Scalaから)を最後に使用したときは、非常にシンプルで迅速です。

0
Tom Morris

多くの人がTwitter4jに取り組んでいるので、私はTwitter4jを選択しました。そしてそれについてインターネット上のいくつかのコンテンツを見つけるのは簡単です。

0
Tahir Akram