Package net.ex337.scriptus.transport.twitter

Source Code of net.ex337.scriptus.transport.twitter.TwitterClientImpl

package net.ex337.scriptus.transport.twitter;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.annotation.Resource;

import net.ex337.scriptus.config.ScriptusConfig;
import net.ex337.scriptus.exceptions.ScriptusRuntimeException;
import net.ex337.scriptus.model.TransportAccessToken;
import twitter4j.Status;
import twitter4j.StatusUpdate;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;

public class TwitterClientImpl implements TwitterClient {

    private Twitter twitter;
   
    @Resource
    private ScriptusConfig config;
   
    private String screenName;

    public void setCredentials(TransportAccessToken token) {
       
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
    .setOAuthConsumerKey(config.getTwitterConsumerKey())
    .setOAuthConsumerSecret(config.getTwitterConsumerSecret())
    .setOAuthAccessToken(token.getAccessToken())
    .setOAuthAccessTokenSecret(token.getAccessSecret())
    .setIncludeEntitiesEnabled(true);

    twitter = new TwitterFactory(cb.build()).getInstance();
    try {
            screenName = twitter.verifyCredentials().getScreenName();
        } catch (TwitterException e) {
            throw new ScriptusRuntimeException(e);
        }
    }
   
  @Override
  public List<Tweet> getMentions() {
   
    /*
     * to avoid duplicates (we have to search and get mentions,
     * because mentions by themselves are broken  / sometimes
     * don't update on a timely basis.
     */
   
    Set<Tweet> result = new TreeSet<Tweet>();
    //FIXME or 200 mentions = DOS
    try {
      List<Status> mentions = twitter.getMentions();
     
      for(Status s : mentions) {
          Tweet t = new Tweet(s.getId(), s.getText(), s.getUser().getScreenName());
          t.setInReplyToId(s.getInReplyToStatusId());
          t.setCreation(s.getCreatedAt().getTime());
        result.add(t);
      }
      //mentions should be fixed now?
//            Query q = new Query("@"+screenName);
//           
//            QueryResult r = twitter.search(q);
//           
//      for(twitter4j.Tweet t : r.getTweets()) {
//        //compute hashcodes like in mockimpl
//          Tweet tt = new Tweet(t.getId(), t.getText(), t.getFromUser());
//          if(t.get){
//              tt.setInReplyToId(t.getInReplyToStatusId()))
//          }
//          t.
//        result.add(tt);
//      }
     
    } catch (TwitterException e) {
      throw new ScriptusRuntimeException(e);
    }
   
    return new ArrayList<Tweet>(result);
  }

  @Override
  public long tweet(String txt) {
   
    if(txt.length() > 140) {
      throw new ScriptusRuntimeException("tweet > 140 characters: "+txt);
    }
   
    Status s;
    try {
      s = twitter.updateStatus(new StatusUpdate(txt));
    } catch (TwitterException e) {
      throw new ScriptusRuntimeException(e);
    }
    return s.getId();
  }

    @Override
    public String getScreenName() {
        return screenName;
    }

}
TOP

Related Classes of net.ex337.scriptus.transport.twitter.TwitterClientImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.