package tv.dyndns.kishibe.qmaclone.server.sns;
import java.util.logging.Level;
import java.util.logging.Logger;
import tv.dyndns.kishibe.qmaclone.client.packet.PacketProblem;
import tv.dyndns.kishibe.qmaclone.server.QMACloneModule;
import tv.dyndns.kishibe.qmaclone.server.database.Database;
import tv.dyndns.kishibe.qmaclone.server.database.DatabaseException;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;
import com.google.common.base.Preconditions;
import com.google.inject.Guice;
import com.google.inject.Inject;
public class TwitterClient implements SnsClient {
private static final Logger logger = Logger.getLogger(TwitterClient.class.getName());
private final TwitterFactory twitterFactory;
@Inject
public TwitterClient(Database database) {
String consumerKey;
String consumerSecret;
String token;
String tokenSecret;
try {
consumerKey = database.getPassword("twitter_consumer_key");
consumerSecret = database.getPassword("twitter_consumer_secret");
token = database.getPassword("twitter_access_token");
tokenSecret = database.getPassword("twitter_access_token_secret");
} catch (DatabaseException e) {
logger.log(Level.WARNING, "Failed to get tokens for Twitter.", e);
twitterFactory = null;
return;
}
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setOAuthConsumerKey(consumerKey).setOAuthConsumerSecret(consumerSecret)
.setOAuthAccessToken(token).setOAuthAccessTokenSecret(tokenSecret);
twitterFactory = new TwitterFactory(configurationBuilder.build());
}
@Override
public void postProblem(PacketProblem problem) {
String problemReportSentence = problem.getProblemReportSentence();
if (problemReportSentence.length() > 115) {
problemReportSentence = problemReportSentence.substring(0, 115);
}
String status = "問題番号" + problem.id + ":" + problemReportSentence;
post(status);
}
@Override
public void postThemeModeUpdate(String theme) {
String status = "テーマモード 「" + theme + "」 が更新されました";
post(status);
}
@Override
public void followBack() {
throw new UnsupportedOperationException();
}
private void post(String status) {
Preconditions.checkNotNull(twitterFactory);
Twitter twitter = null;
try {
twitter = twitterFactory.getInstance();
twitter.updateStatus(status);
} catch (Exception e) {
logger.log(Level.WARNING, "Twitterへの投稿に失敗しました。", e);
}
}
public static void main(String[] args) {
TwitterClient twitterClient = Guice.createInjector(new QMACloneModule()).getInstance(
TwitterClient.class);
twitterClient.post("このメッセージは開発者によるテスト投稿です。");
}
}