twitter API站点列出了3个java twitter库.
Twitter4j
Java的叽叽喳喳
jtwitter
你认识其他人吗?您在支持,易用性,稳定性,社区等方面有哪些经验?
我只是看看他们.
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是最好的,它是最新的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对象.