web-dev-qa-db-fra.com

Meilleure bibliothèque Java sur Twitter?

Le site API de Twitter répertorie 3 bibliothèques Java Twitter.

Connaissez-vous les autres? Quelles sont vos expériences en matière de support, de facilité d'utilisation, de stabilité, de communauté, etc.

62
flybywire

Je pense que Twitter4j est un bon c'est l'API le plus à jour

25
Rahul Garg

Je viens de les regarder.

JTwitter ressemble définitivement au plus faible des trois. Elle ne semble pas avoir été mise à jour récemment, ne couvre pas une grande partie de l’API de Twitter et ne semble pas avoir d’autre version que la version initiale. En revanche, sa licence LPGL, fournie avec le peu de code supplémentaire dont elle a besoin, est petite et facile à comprendre.

Les deux autres, Java-Twitter et Twtter4J, ont une qualité beaucoup plus étroite. Les deux couvrent l'API principale et possèdent tous les accessoires de projets open-source normaux: référentiel de code source accessible au public, documents en ligne, listes de diffusion actives et activités de développement récentes.

Cependant, Twitter4J semble être le leader. D'après la documentation, sa couverture d'API semble être plus complète. La liste de diffusion est définitivement plus active. Les docs sont bien meilleurs. Et le plus important pour moi, les communiqués ont été plus fréquents. Java-Twitter a publié une version "0.9-SNAPSHOT" il y a environ 4 mois. Twitter4J a publié plusieurs versions au cours de cette période, y compris la version 2.0.0 et des versions incrémentielles jusqu'à la version 2.0.8, corrigeant des problèmes et ajoutant la prise en charge de nouvelles API Twitter.

Je vais commencer par Twitter4J; si vous ne recevez pas de réponse, supposez que c'était parfait pour moi.

39
William Pietri

Ahem; JTwitter est activement maintenu, mis à jour régulièrement (version 1.6.2 publiée aujourd'hui), et couvre la majeure partie de l'API Twitter. 

Il manque seulement une méthode pour définir votre image de profil et quelques autres paramètres de profil. A part ça, c'est assez complet. Mises à jour de statut, chronologies, amitiés, listes, recherches, diffusion en continu, etc.

C'est aussi rapide et robuste. Twitter peut être instable dans certains endroits et JTwitter propose des solutions de rechange et des exceptions informatives pour vous simplifier la vie.

En tant que développeur principal de JTwitter, je suis plutôt partial! Mais les commentaires des développeurs utilisant JTwitter sont également très positifs.

10

J'utilise Twitter4J et je n'ai pas encore eu de problème avec ça. J'aime vraiment beaucoup.

L'exemple OAuth qu'ils donnent sur leur site Web est la plus grande nuisance - ce n'est pas utile. Voici mon code OAuthServlet si vous êtes intéressé (ou quelqu'un d'autre). Je sais que cette question est plutôt ancienne et je la pose ici davantage pour les résultats de recherche.

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

J'utilise la classe TwitterCnx comme un wrapper pour Twitter4j.Twitter. TwitterCnx définit mon contenu de consommateur OAuth et renvoie un objet Twitter. C'est une classe finale avec des méthodes statiques donc je ne produis pas plus d'un objet Twitter par instance d'application.

8
Ted Pennings

Pour ceux qui consultent encore cette question, il convient de mentionner que la seule API que Twitter répertorie actuellement sur son site Web pour Java est Twitter4J. Donc, si vous aviez besoin de plus de conviction que c'était celui-là, eh bien, voilà!

2
AbsentMoniker

Il y a aussi TweetStream4J qui est une liaison Java pour l'API Streaming de Twitter. C'est assez simple, et contrairement à la dernière fois que je l'ai utilisé, l'auteur l'a mis à jour pour inclure un fichier pom.xml afin que vous puissiez le construire. C'est assez simple et rapide quand je l'ai utilisé pour la dernière fois (de Scala).

0
Tom Morris

J'ai choisi Twitter4j parce que beaucoup de personnes y travaillent. Et il est facile de trouver du contenu sur Internet à ce sujet. 

0
Tahir Akram