当前位置:  开发笔记 > 编程语言 > 正文

最好的java twitter库?

如何解决《最好的javatwitter库?》经验,为你挑选了4个好方法。

twitter API站点列出了3个java twitter库.

Twitter4j

Java的叽叽喳喳

jtwitter

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



1> William Piet..:

我只是看看他们.

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开始; 如果你没有回复,那么认为它对我来说真的很棒.


经过一个月的刺激,Twitter4J似乎相当膨胀.我完全赞成它.
当然.JTwitter由SoDash Ltd(http://sodash.com)积极维护.它涵盖了几乎所有的Twitter API.当Twitter发生变化时,我们会在一个月内更新并发布.我们已经为稳健性做了大量工作,并为Twitter中的一些错误提供了良好的错误报告和内置的解决方法.该库还为Klout等生态系统服务提供了一些支持.

2> Rahul Garg..:

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



3> Daniel Winte..:

咳咳; JTwitter正在积极维护,定期更新(今天发布的版本1.6.2),涵盖了大多数Twitter API.

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

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

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



4> Ted Pennings..:

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有