blob: 74cb29b28141b61c617ce476075b23f4b06071d3 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.twitter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
@UriParams
public class TwitterConfiguration {
/**
* OAuth
*/
@UriParam
private String consumerKey;
@UriParam
private String consumerSecret;
@UriParam
private String accessToken;
@UriParam
private String accessTokenSecret;
/**
* Defines the Twitter API endpoint.
*/
@UriParam
private String type;
/**
* Polling delay.
*/
@UriParam
private int delay = 60;
/**
* Username -- used for searching, etc.
*/
@UriParam
private String user;
/**
* Keywords used for search and filters.
*/
@UriParam
private String keywords;
/**
* Lon/Lat bounding boxes used for filtering.
*/
@UriParam
private String locations;
/**
* List of userIds used for searching, etc.
*/
@UriParam
private String userIds;
/**
* Filter out old tweets that have been previously polled.
*/
@UriParam
private boolean filterOld = true;
/**
* Used for time-based endpoints (trends, etc.)
*/
@UriParam
private String date;
/**
* Used to set the sinceId from pulling
*/
@UriParam
private long sinceId = 1;
/**
* Used to set the preferred language on which to search
*/
@UriParam
private String lang;
/**
* Used to set the maximum tweets per page (max = 100)
*/
@UriParam
private Integer count;
@UriParam
private Date parsedDate;
/**
* Number of page to iterate before stop (default is 1)
*/
@UriParam
private Integer numberOfPages = 1;
@UriParam
private String httpProxyHost;
@UriParam
private String httpProxyUser;
@UriParam
private String httpProxyPassword;
@UriParam
private Integer httpProxyPort;
/**
* Singleton, on demand instances of Twitter4J's Twitter & TwitterStream.
* This should not be created by an endpoint's doStart(), etc., since
* instances of twitter and/or twitterStream can be supplied by the route
* itself. Further, as an example, we don't want to initialize twitter
* if we only need twitterStream.
*/
private Twitter twitter;
private TwitterStream twitterStream;
/**
* Ensures required fields are available.
*/
public void checkComplete() {
if (twitter == null && twitterStream == null
&& (consumerKey.isEmpty() || consumerSecret.isEmpty() || accessToken.isEmpty() || accessTokenSecret.isEmpty())) {
throw new IllegalArgumentException("twitter or twitterStream or all of consumerKey, consumerSecret, accessToken, and accessTokenSecret must be set!");
}
}
/**
* Builds a Twitter4J Configuration using the OAuth params.
*
* @return Configuration
*/
public Configuration getConfiguration() {
checkComplete();
ConfigurationBuilder confBuilder = new ConfigurationBuilder();
confBuilder.setOAuthConsumerKey(consumerKey);
confBuilder.setOAuthConsumerSecret(consumerSecret);
confBuilder.setOAuthAccessToken(accessToken);
confBuilder.setOAuthAccessTokenSecret(accessTokenSecret);
if (getHttpProxyHost() != null) {
confBuilder.setHttpProxyHost(getHttpProxyHost());
}
if (getHttpProxyUser() != null) {
confBuilder.setHttpProxyHost(getHttpProxyUser());
}
if (getHttpProxyPassword() != null) {
confBuilder.setHttpProxyHost(getHttpProxyPassword());
}
if (httpProxyPort != null) {
confBuilder.setHttpProxyPort(httpProxyPort);
}
return confBuilder.build();
}
public String getConsumerKey() {
return consumerKey;
}
public void setConsumerKey(String consumerKey) {
this.consumerKey = consumerKey;
}
public String getConsumerSecret() {
return consumerSecret;
}
public void setConsumerSecret(String consumerSecret) {
this.consumerSecret = consumerSecret;
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getAccessTokenSecret() {
return accessTokenSecret;
}
public void setAccessTokenSecret(String accessTokenSecret) {
this.accessTokenSecret = accessTokenSecret;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
public int getDelay() {
return delay;
}
public void setDelay(int delay) {
this.delay = delay;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getLocations() {
return locations;
}
public void setLocations(String locations) {
this.locations = locations;
}
public String getUserIds() {
return userIds;
}
public void setUserIds(String userIds) {
this.userIds = userIds;
}
public boolean isFilterOld() {
return filterOld;
}
public void setFilterOld(boolean filterOld) {
this.filterOld = filterOld;
}
public Twitter getTwitter() {
if (twitter == null) {
twitter = new TwitterFactory(getConfiguration()).getInstance();
}
return twitter;
}
public void setTwitter(Twitter twitter) {
this.twitter = twitter;
}
public TwitterStream getTwitterStream() {
return twitterStream;
}
public void setTwitterStream(TwitterStream twitterStream) {
this.twitterStream = twitterStream;
}
public String getDate() {
return date;
}
public Date parseDate() {
return parsedDate;
}
public void setDate(String date) {
this.date = date;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
parsedDate = sdf.parse(date);
} catch (ParseException e) {
throw new IllegalArgumentException("date must be in yyyy-mm-dd format!");
}
}
public TwitterStream createTwitterStream() {
if (twitterStream == null) {
twitterStream = new TwitterStreamFactory(getConfiguration()).getInstance();
}
return twitterStream;
}
public long getSinceId() {
return sinceId;
}
public void setSinceId(long sinceId) {
this.sinceId = sinceId;
}
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public Integer getNumberOfPages() {
return numberOfPages;
}
public void setNumberOfPages(Integer numberOfPages) {
this.numberOfPages = numberOfPages;
}
public void setHttpProxyHost(String httpProxyHost) {
this.httpProxyHost = httpProxyHost;
}
public String getHttpProxyHost() {
return httpProxyHost;
}
public void setHttpProxyUser(String httpProxyUser) {
this.httpProxyUser = httpProxyUser;
}
public String getHttpProxyUser() {
return httpProxyUser;
}
public void setHttpProxyPassword(String httpProxyPassword) {
this.httpProxyPassword = httpProxyPassword;
}
public String getHttpProxyPassword() {
return httpProxyPassword;
}
public void setHttpProxyPort(int httpProxyPort) {
this.httpProxyPort = httpProxyPort;
}
public int getHttpProxyPort() {
return httpProxyPort;
}
}