Skip to content

Instantly share code, notes, and snippets.

@trnl
Created May 8, 2013 10:33
Show Gist options
  • Save trnl/5539644 to your computer and use it in GitHub Desktop.
Save trnl/5539644 to your computer and use it in GitHub Desktop.
package org.jenkinsci.plugins.twitter;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Descriptor;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Builder;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;
import org.kohsuke.stapler.DataBoundConstructor;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class TwitterBuilder extends Builder {
@DataBoundConstructor
public TwitterBuilder() {
super();
}
@Override
public TwitterBuilderDescr getDescriptor() {
return (TwitterBuilderDescr)super.getDescriptor();
}
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
Configuration configuration = new ConfigurationBuilder()
.setOAuthConsumerKey(TwitterJobProperty.DESCRIPTOR.getConsumerKey())
.setOAuthConsumerSecret(TwitterJobProperty.DESCRIPTOR.getConsumerSecret())
.setOAuthAccessToken(TwitterJobProperty.DESCRIPTOR.getAccessToken())
.setOAuthAccessTokenSecret(TwitterJobProperty.DESCRIPTOR.getAccessTokenSecret())
.setUseSSL(true)
.build();
Twitter twitter = new TwitterFactory(configuration).getInstance();
try {
List<Status> statuses = twitter.getPublicTimeline();
List<TwitterMessage> messages = new ArrayList<TwitterMessage>();
CollectionUtils.collect(statuses, new Transformer() {
public Object transform(Object input) {
Status s = (Status) input;
return new TwitterMessage(
s.getText(),
s.getUser().getName(),
s.getUser().getProfileImageURL().toString(),
s.getCreatedAt()
);
}
},
messages);
build.addAction(new TwitterBuildAction(build, messages));
} catch (TwitterException e) {
//no-op
}
return true;
}
@Extension
public static class TwitterBuilderDescr extends BuildStepDescriptor<Builder> {
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true; //TODO
}
@Override
public String getDisplayName() {
return "Get Twitter Public Timeline";
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment