poornerd

my thoughts on programming and other nerdy stuff

Using twitter4j with Play! Framework and Secure Social is this easy

| 1 Comment

Screen Shot 2013-02-01 at 14.54.45Dur­ing yesterday’s per­sonal Hackathon, I started a project which I might intro­duce here some­time.  But the coolest rev­e­la­tion was (again) how easy it was to get up and running.

  1. Cre­ate a new Play Project
  2. Add Secure Social and con­fig­ure it for Twit­ter, and use the InMem­o­ryUserSer­vice from the exam­ples.  (all this is described here http://​secure​so​cial​.ws/​g​u​i​d​e​/​g​e​t​t​i​n​g​-​s​t​a​r​t​e​d​.​h​tml and only takes a minute)
  3. Add the depen­decy to twitter4j to your Build.scala like this:
    "org.twitter4j"% "twitter4j-core"% "3.0.3"
  4. Secure your con­troller action method to force the (Login) Authen­ti­ca­tion with Twit­ter.  Remem­ber — because you are using the InMem­o­ryUserSer­vice none of the Authen­ti­ca­tion data is stored — you will have to recon­nect each time.
    @SecureSocial.SecuredAction
  5. I then added these stan­dard meth­ods to get the Authen­ti­cated Twit­ter User, Token, Secret and the twitter4J Con­nec­tion: (The tokenSe­cret, token and cur­rent User are com­ing from the Secure Social Oauth1 Con­nec­tion, and are used to authen­ti­cate the Twit­ter Con­nec­tion.
    public static Twitter getTwitterInstance() {
    // The factory instance is re-useable and thread safe.
    TwitterFactory factory = new TwitterFactory();
    Twitter twitter = new TwitterFactory().getInstance();twitter.setOAuthConsumer(Play.application().configuration().getString("securesocial.twitter.consumerKey"), Play.application().configuration().getString("securesocial.twitter.consumerSecret"));
    twitter4j.auth.AccessToken accessToken = new twitter4j.auth.AccessToken(token(), tokenSecret());
    twitter.setOAuthAccessToken(accessToken);
    return twitter;
    }
    public static String tokenSecret() {
    String retval = "";
    scala.collection.Iterator iterator = Application.getCurrentUser().oAuth1Info().iterator();
    while (iterator.hasNext()) {
    OAuth1Info oAuth1Info = iterator.next();
    retval = oAuth1Info.secret();
    }
    return retval;
    }
    public static String token() {
    String retval = "";
    scala.collection.Iterator iterator = Application.getCurrentUser().oAuth1Info().iterator();
    while (iterator.hasNext()) {
    OAuth1Info oAuth1Info = iterator.next();
    retval = oAuth1Info.token();
    }
    return retval;
    }
    public static Identity getCurrentUser() {
    return (Identity) ctx().args.get(SecureSocial.USER_KEY);
    }
  6. Then I added some code in my Con­troller to list (for exam­ple) my Fol­low­ers

    long cursor = -1;
    IDs ids;
    System.out.println("Listing following ids.");
    do {
    ids = twitter.getFriendsIDs(cursor);
    for (long id : ids.getIDs()) {
    twitter4j.User twitterUser = twitter.showUser(id);
    twitterUsers.put(twitterUser.getScreenName(), new TwitterUser(id,twitterUser));
    System.out.println(id);
    }
    } while ((cursor = ids.getNextCursor()) != 0);

Yes, that is it…

If you have read this far, you may as well fol­low me on Twit­ter:

Author: poornerd

Tech­nol­o­gist, Entre­pre­neur, Vision­ary, Pro­gram­mer :: Grad­u­ated from USC (Uni­ver­sity of South­ern Cal­i­for­nia) with a degree in Com­puter Sci­ence. After 10+ years of free­lance con­sult­ing and pro­gram­ming, he co-founded Site­Force AG eBusi­ness Solu­tions in 1999 in Munich (München), Ger­many.

One Comment

  1. Thank you, this was really helpful

Leave a Reply

Required fields are marked *.