最好的java twitter库?

时间:2009-05-12 08:40:31

标签: java twitter

twitter API网站列出了3个java twitter库。

你知道其他人吗?您在支持,易用性,稳定性,社区等方面有哪些经验

7 个答案:

答案 0 :(得分:39)

我刚看了一眼。

JTwitter看起来绝对是三者中最弱的一个。它似乎最近没有更新,没有覆盖很多Twitter API,并且除了最初的API之外似乎没有任何版本。从好的方面来说,它是LPGL许可的,它包含了它需要的额外代码,并且看起来小而且易于理解。

另外两个,java-twitter和Twtter4J在质量上看起来更接近。两者都涵盖核心API,并且都具有普通开源项目的所有功能:公开可用的源代码存储库,在线文档,活动邮件列表和最近的开发活动。

然而,Twitter4J看起来是领导者。从文档中,它的API覆盖范围似乎更加完整。邮件列表肯定更活跃。文档要好得多。对我来说最重要的是,版本更频繁。 java-twitter有一个版本,大约4个月前的“0.9-SNAPSHOT”版本。 Twitter4J在那个时期发布了多个版本,其中包括2.0.0和增量版本,最高可达2.0.8,解决问题并增加对新Twitter API的支持。

我将从Twitter4J开始;如果你没有回复,那就认为这对我来说很棒。

答案 1 :(得分:25)

我认为Twitter4j是最好的,它是最新的API

答案 2 :(得分:10)

咳咳; JTwitter得到了积极维护,定期更新(今天发布的版本1.6.2),涵盖了大部分Twitter API。

它只缺少设置个人资料图片和其他一些个人资料设置的方法。除此之外,它非常完整。状态更新,时间表,友谊,列表,搜索,流媒体等

它也快速而强大。 Twitter可能会出现问题,JTwitter可以提供解决方案和信息异常,让您的生活更轻松。

作为主要的JTwitter开发者,我很偏颇!但是使用JTwitter的开发人员的反馈也是非常积极的。

答案 3 :(得分:8)

我使用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对象。

答案 4 :(得分:2)

对于仍然关注这个问题的人来说,值得一提的是,Twitter currently lists on its website for Java的唯一API就是Twitter4J。所以,如果你需要更加令人信服的话,那就是使用它,好吧,你走了!

答案 5 :(得分:0)

我选择了Twitter4j,因为很多人都在努力。并且很容易在互联网上找到一些关于它的内容。

答案 6 :(得分:0)

还有 TweetStream4J ,它是Twitter Streaming API的Java绑定。它非常简单,与上次使用它不同,作者已将其更新为包含pom.xml文件,以便您可以构建它。我上次使用它时非常简单快捷(来自Scala)。