/*
* Copyright (C) 2007 Yusuke Yamamoto
* Copyright (C) 2011 Twitter, Inc.
*
* Licensed 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 twitter4j;
import twitter4j.api.*;
import twitter4j.auth.Authorization;
import twitter4j.conf.Configuration;
import twitter4j.internal.http.HttpParameter;
import twitter4j.internal.http.HttpResponse;
import twitter4j.internal.org.json.JSONException;
import twitter4j.internal.util.z_T4JInternalStringUtil;
import java.io.*;
import java.net.URLEncoder;
import java.util.*;
import static twitter4j.internal.http.HttpParameter.getParameterArray;
/**
* A java representation of the <a href="https://dev.twitter.com/docs/api">Twitter REST API</a><br>
* This class is thread safe and can be cached/re-used and used concurrently.<br>
* Currently this class is not carefully designed to be extended. It is suggested to extend this class only for mock testing purpose.<br>
*
* @author Yusuke Yamamoto - yusuke at mac.com
*/
class TwitterImpl extends TwitterBaseImpl implements Twitter {
private static final long serialVersionUID = -1486360080128882436L;
private final String IMPLICIT_PARAMS_STR;
private final HttpParameter[] IMPLICIT_PARAMS;
private final HttpParameter INCLUDE_MY_RETWEET;
private static final Map<Configuration, HttpParameter[]> implicitParamsMap = new HashMap<Configuration, HttpParameter[]>();
private static final Map<Configuration, String> implicitParamsStrMap = new HashMap<Configuration, String>();
/*package*/
TwitterImpl(Configuration conf, Authorization auth) {
super(conf, auth);
INCLUDE_MY_RETWEET = new HttpParameter("include_my_retweet", conf.isIncludeMyRetweetEnabled());
HttpParameter[] implicitParams = implicitParamsMap.get(conf);
String implicitParamsStr = implicitParamsStrMap.get(conf);
if (implicitParams == null) {
String includeEntities = conf.isIncludeEntitiesEnabled() ? "1" : "0";
String includeRTs = conf.isIncludeRTsEnabled() ? "1" : "0";
boolean contributorsEnabled = conf.getContributingTo() != -1L;
implicitParamsStr = "include_entities=" + includeEntities + "&include_rts=" + includeRTs
+ (contributorsEnabled ? "&contributingto=" + conf.getContributingTo() : "");
implicitParamsStrMap.put(conf, implicitParamsStr);
List<HttpParameter> params = new ArrayList<HttpParameter>(4);
params.add(new HttpParameter("include_entities", includeEntities));
params.add(new HttpParameter("include_rts", includeRTs));
if (contributorsEnabled) {
params.add(new HttpParameter("contributingto", conf.getContributingTo()));
}
if (conf.isTrimUserEnabled()) {
params.add(new HttpParameter("trim_user", "1"));
}
implicitParams = params.toArray(new HttpParameter[params.size()]);
implicitParamsMap.put(conf, implicitParams);
}
IMPLICIT_PARAMS = implicitParams;
IMPLICIT_PARAMS_STR = implicitParamsStr;
}
/* Timelines Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getMentions() throws TwitterException {
return getMentionsTimeline();
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getMentionsTimeline() throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "statuses/mentions_timeline.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getMentions(Paging paging) throws TwitterException {
return getMentionsTimeline(paging);
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getMentionsTimeline(Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/mentions_timeline.json", paging.asPostParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getHomeTimeline() throws
TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/home_timeline.json", new HttpParameter[]{INCLUDE_MY_RETWEET}));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getHomeTimeline(Paging paging) throws
TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/home_timeline.json", mergeParameters(paging.asPostParameterArray(), new HttpParameter[]{INCLUDE_MY_RETWEET})));
}
/**
* {@inheritDoc}
*/
public ResponseList<Status> getRetweetsOfMe() throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/retweets_of_me.json"));
}
/**
* {@inheritDoc}
*/
public ResponseList<Status> getRetweetsOfMe(Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/retweets_of_me.json", paging.asPostParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserTimeline(String screenName, Paging paging)
throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/user_timeline.json",
mergeParameters(new HttpParameter[]{new HttpParameter("screen_name", screenName)
, INCLUDE_MY_RETWEET}
, paging.asPostParameterArray())));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserTimeline(long userId, Paging paging)
throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL()
+ "statuses/user_timeline.json",
mergeParameters(new HttpParameter[]{new HttpParameter("user_id", userId)
, INCLUDE_MY_RETWEET}
, paging.asPostParameterArray())));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserTimeline(String screenName) throws TwitterException {
return getUserTimeline(screenName, new Paging());
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserTimeline(long userId) throws TwitterException {
return getUserTimeline(userId, new Paging());
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserTimeline() throws
TwitterException {
return getUserTimeline(new Paging());
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserTimeline(Paging paging) throws
TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() +
"statuses/user_timeline.json",
mergeParameters(new HttpParameter[]{INCLUDE_MY_RETWEET}
, paging.asPostParameterArray())));
}
/* Tweets Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getRetweets(long statusId) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "statuses/retweets/" + statusId
+ ".json?count=100"));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getRetweeterIds(long statusId, long cursor) throws TwitterException {
return getRetweeterIds(statusId, 100, cursor);
}
/**
* {@inheritDoc}
*/
@Override
public IDs getRetweeterIds(long statusId, int count, long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "statuses/retweeters/ids.json?id=" + statusId
+ "&cursor="+cursor+"&count="+count));
}
/**
* {@inheritDoc}
*/
@Override
public Status showStatus(long id) throws TwitterException {
return factory.createStatus(get(conf.getRestBaseURL() + "statuses/show/" + id + ".json", new HttpParameter[]{INCLUDE_MY_RETWEET}));
}
/**
* {@inheritDoc}
*/
@Override
public Status destroyStatus(long statusId) throws TwitterException {
return factory.createStatus(post(conf.getRestBaseURL() + "statuses/destroy/" + statusId + ".json"));
}
/**
* {@inheritDoc}
*/
@Override
public Status updateStatus(String status) throws TwitterException {
return factory.createStatus(post(conf.getRestBaseURL() + "statuses/update.json",
new HttpParameter[]{new HttpParameter("status", status)}));
}
/**
* {@inheritDoc}
*/
@Override
public Status updateStatus(StatusUpdate status) throws TwitterException {
String url = conf.getRestBaseURL() + (status.isWithMedia() ?
"statuses/update_with_media.json" : "statuses/update.json");
return factory.createStatus(post(url, status.asHttpParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public Status retweetStatus(long statusId) throws TwitterException {
return factory.createStatus(post(conf.getRestBaseURL() + "statuses/retweet/" + statusId + ".json"));
}
/**
* {@inheritDoc}
*/
@Override
public OEmbed getOEmbed(OEmbedRequest req) throws TwitterException {
return factory.createOEmbed(get(conf.getRestBaseURL()
+ "statuses/oembed.json", req.asHttpParameterArray()));
}
/* Search Resources */
/**
* {@inheritDoc}
*/
@Override
public QueryResult search(Query query) throws TwitterException {
if (query.nextPage() != null) {
return factory.createQueryResult(get(conf.getRestBaseURL()
+ "search/tweets.json" + query.nextPage()), query);
} else {
return factory.createQueryResult(get(conf.getRestBaseURL()
+ "search/tweets.json", query.asHttpParameterArray()), query);
}
}
/* Direct Messages Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<DirectMessage> getDirectMessages() throws TwitterException {
return factory.createDirectMessageList(get(conf.getRestBaseURL() + "direct_messages.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<DirectMessage> getDirectMessages(Paging paging) throws TwitterException {
return factory.createDirectMessageList(get(conf.getRestBaseURL() + "direct_messages.json"
, paging.asPostParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<DirectMessage> getSentDirectMessages() throws
TwitterException {
return factory.createDirectMessageList(get(conf.getRestBaseURL() + "direct_messages/sent.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<DirectMessage> getSentDirectMessages(Paging paging) throws
TwitterException {
return factory.createDirectMessageList(get(conf.getRestBaseURL() +
"direct_messages/sent.json", paging.asPostParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public DirectMessage showDirectMessage(long id) throws TwitterException {
return factory.createDirectMessage(get(conf.getRestBaseURL() + "direct_messages/show.json?id=" + id));
}
/**
* {@inheritDoc}
*/
@Override
public DirectMessage destroyDirectMessage(long id) throws
TwitterException {
return factory.createDirectMessage(post(conf.getRestBaseURL() + "direct_messages/destroy.json?id=" + id));
}
/**
* {@inheritDoc}
*/
@Override
public DirectMessage sendDirectMessage(long userId, String text)
throws TwitterException {
return factory.createDirectMessage(post(conf.getRestBaseURL() + "direct_messages/new.json",
new HttpParameter[]{new HttpParameter("user_id", userId), new HttpParameter("text", text)}));
}
/**
* {@inheritDoc}
*/
@Override
public DirectMessage sendDirectMessage(String screenName, String text) throws TwitterException {
return factory.createDirectMessage(post(conf.getRestBaseURL() + "direct_messages/new.json",
new HttpParameter[]{new HttpParameter("screen_name", screenName), new HttpParameter("text", text)}));
}
/* Friends & Followers Resources */
/**
* {@inheritDoc}
*/
@Override
public IDs getFriendsIDs(long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "friends/ids.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getFriendsIDs(long userId, long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "friends/ids.json?user_id=" + userId +
"&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getFriendsIDs(String screenName, long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "friends/ids.json?screen_name=" + screenName
+ "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getFollowersIDs(long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "followers/ids.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getFollowersIDs(long userId, long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "followers/ids.json?user_id=" + userId
+ "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getFollowersIDs(String screenName, long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "followers/ids.json?screen_name="
+ screenName + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Friendship> lookupFriendships(long[] ids) throws TwitterException {
return factory.createFriendshipList(get(conf.getRestBaseURL() + "friendships/lookup.json?user_id=" + z_T4JInternalStringUtil.join(ids)));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Friendship> lookupFriendships(String[] screenNames) throws TwitterException {
return factory.createFriendshipList(get(conf.getRestBaseURL()
+ "friendships/lookup.json?screen_name=" + z_T4JInternalStringUtil.join(screenNames)));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getIncomingFriendships(long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "friendships/incoming.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getOutgoingFriendships(long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "friendships/outgoing.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public User createFriendship(long userId) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "friendships/create.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User createFriendship(String screenName) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "friendships/create.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public User createFriendship(long userId, boolean follow) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "friendships/create.json?user_id=" + userId + "&follow="
+ follow));
}
/**
* {@inheritDoc}
*/
@Override
public User createFriendship(String screenName, boolean follow) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "friendships/create.json?screen_name="
+ screenName + "&follow=" + follow));
}
/**
* {@inheritDoc}
*/
@Override
public User destroyFriendship(long userId) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "friendships/destroy.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User destroyFriendship(String screenName) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "friendships/destroy.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public Relationship updateFriendship(long userId, boolean enableDeviceNotification
, boolean retweets) throws TwitterException {
return factory.createRelationship((post(conf.getRestBaseURL() + "friendships/update.json",
new HttpParameter[]{
new HttpParameter("user_id", userId),
new HttpParameter("device", enableDeviceNotification),
new HttpParameter("retweets", retweets)
})));
}
/**
* {@inheritDoc}
*/
@Override
public Relationship updateFriendship(String screenName, boolean enableDeviceNotification
, boolean retweets) throws TwitterException {
return factory.createRelationship(post(conf.getRestBaseURL() + "friendships/update.json",
new HttpParameter[]{
new HttpParameter("screen_name", screenName),
new HttpParameter("device", enableDeviceNotification),
new HttpParameter("retweets", enableDeviceNotification)
}));
}
/**
* {@inheritDoc}
*/
@Override
public Relationship showFriendship(long sourceId, long targetId) throws TwitterException {
return factory.createRelationship(get(conf.getRestBaseURL() + "friendships/show.json"
, new HttpParameter[]{new HttpParameter("source_id", sourceId), new HttpParameter("target_id", targetId)}));
}
/**
* {@inheritDoc}
*/
@Override
public Relationship showFriendship(String sourceScreenName, String targetScreenName) throws TwitterException {
return factory.createRelationship(get(conf.getRestBaseURL() + "friendships/show.json",
getParameterArray("source_screen_name", sourceScreenName, "target_screen_name", targetScreenName)));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getFriendsList(long userId, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "friends/list.json?user_id=" + userId
+ "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getFriendsList(String screenName, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "friends/list.json?screen_name=" + screenName
+ "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getFollowersList(long userId, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "followers/list.json?user_id=" + userId
+ "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getFollowersList(String screenName, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "followers/list.json?screen_name=" + screenName
+ "&cursor=" + cursor));
}
/* Users Resources */
/**
* {@inheritDoc}
*/
@Override
public AccountSettings getAccountSettings() throws TwitterException {
return factory.createAccountSettings(get(conf.getRestBaseURL() + "account/settings.json"));
}
/**
* {@inheritDoc}
*/
@Override
public User verifyCredentials() throws TwitterException {
return super.fillInIDAndScreenName();
}
/**
* {@inheritDoc}
*/
@Override
public AccountSettings updateAccountSettings(Integer trend_locationWoeid,
Boolean sleep_timeEnabled, String start_sleepTime,
String end_sleepTime, String time_zone, String lang)
throws TwitterException {
List<HttpParameter> profile = new ArrayList<HttpParameter>(6);
if (trend_locationWoeid != null) {
profile.add(new HttpParameter("trend_location_woeid", trend_locationWoeid));
}
if (sleep_timeEnabled != null) {
profile.add(new HttpParameter("sleep_time_enabled", sleep_timeEnabled.toString()));
}
if (start_sleepTime != null) {
profile.add(new HttpParameter("start_sleep_time", start_sleepTime));
}
if (end_sleepTime != null) {
profile.add(new HttpParameter("end_sleep_time", end_sleepTime));
}
if (time_zone != null) {
profile.add(new HttpParameter("time_zone", time_zone));
}
if (lang != null) {
profile.add(new HttpParameter("lang", lang));
}
return factory.createAccountSettings(post(conf.getRestBaseURL() + "account/settings.json"
, profile.toArray(new HttpParameter[profile.size()])));
}
/**
* {@inheritDoc}
*/
@Override
public User updateProfile(String name, String url
, String location, String description) throws TwitterException {
List<HttpParameter> profile = new ArrayList<HttpParameter>(4);
addParameterToList(profile, "name", name);
addParameterToList(profile, "url", url);
addParameterToList(profile, "location", location);
addParameterToList(profile, "description", description);
return factory.createUser(post(conf.getRestBaseURL() + "account/update_profile.json"
, profile.toArray(new HttpParameter[profile.size()])));
}
/**
* {@inheritDoc}
*/
@Override
public User updateProfileBackgroundImage(File image, boolean tile)
throws TwitterException {
checkFileValidity(image);
return factory.createUser(post(conf.getRestBaseURL() + "account/update_profile_background_image.json",
new HttpParameter[]{new HttpParameter("image", image), new HttpParameter("tile", tile)}));
}
/**
* {@inheritDoc}
*/
@Override
public User updateProfileBackgroundImage(InputStream image, boolean tile)
throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "account/update_profile_background_image.json"
, new HttpParameter[]{new HttpParameter("image", "image", image), new HttpParameter("tile", tile)}));
}
/**
* {@inheritDoc}
*/
@Override
public User updateProfileColors(
String profileBackgroundColor,
String profileTextColor,
String profileLinkColor,
String profileSidebarFillColor,
String profileSidebarBorderColor)
throws TwitterException {
List<HttpParameter> colors = new ArrayList<HttpParameter>(6);
addParameterToList(colors, "profile_background_color"
, profileBackgroundColor);
addParameterToList(colors, "profile_text_color"
, profileTextColor);
addParameterToList(colors, "profile_link_color"
, profileLinkColor);
addParameterToList(colors, "profile_sidebar_fill_color"
, profileSidebarFillColor);
addParameterToList(colors, "profile_sidebar_border_color"
, profileSidebarBorderColor);
return factory.createUser(post(conf.getRestBaseURL() +
"account/update_profile_colors.json",
colors.toArray(new HttpParameter[colors.size()])));
}
private void addParameterToList(List<HttpParameter> colors,
String paramName, String color) {
if (color != null) {
colors.add(new HttpParameter(paramName, color));
}
}
/**
* {@inheritDoc}
*/
@Override
public User updateProfileImage(File image) throws TwitterException {
checkFileValidity(image);
return factory.createUser(post(conf.getRestBaseURL()
+ "account/update_profile_image.json"
, new HttpParameter[]{new HttpParameter("image", image)}));
}
/**
* {@inheritDoc}
*/
@Override
public User updateProfileImage(InputStream image) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL()
+ "account/update_profile_image.json"
, new HttpParameter[]{new HttpParameter("image", "image", image)}));
}
/**
* Check the existence, and the type of the specified file.
*
* @param image image to be uploaded
* @throws TwitterException when the specified file is not found (FileNotFoundException will be nested)
* , or when the specified file object is not representing a file(IOException will be nested).
*/
private void checkFileValidity(File image) throws TwitterException {
if (!image.exists()) {
//noinspection ThrowableInstanceNeverThrown
throw new TwitterException(new FileNotFoundException(image + " is not found."));
}
if (!image.isFile()) {
//noinspection ThrowableInstanceNeverThrown
throw new TwitterException(new IOException(image + " is not a file."));
}
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getBlocksList() throws
TwitterException {
return getBlocksList(-1L);
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getBlocksList(long cursor) throws
TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "blocks/list.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getBlocksIDs() throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "blocks/ids.json"));
}
/**
* {@inheritDoc}
*/
@Override
public IDs getBlocksIDs(long cursor) throws TwitterException {
return factory.createIDs(get(conf.getRestBaseURL() + "blocks/ids.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public User createBlock(long userId) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "blocks/create.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User createBlock(String screenName) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "blocks/create.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public User destroyBlock(long userId) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "blocks/destroy.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User destroyBlock(String screen_name) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "blocks/destroy.json?screen_name=" + screen_name));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> lookupUsers(long[] ids) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/lookup.json"
, new HttpParameter[]{new HttpParameter("user_id", z_T4JInternalStringUtil.join(ids))}));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> lookupUsers(String[] screenNames) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/lookup.json"
, new HttpParameter[]{new HttpParameter("screen_name", z_T4JInternalStringUtil.join(screenNames))}));
}
/**
* {@inheritDoc}
*/
@Override
public User showUser(long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() + "users/show.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User showUser(String screenName) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() + "users/show.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> searchUsers(String query, int page) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/search.json"
, new HttpParameter[]{new HttpParameter("q", query), new HttpParameter("per_page", 20)
, new HttpParameter("page", page)}));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> getContributees(long userId) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/contributees.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> getContributees(String screenName) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/contributees.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> getContributors(long userId) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/contributors.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> getContributors(String screenName) throws TwitterException {
return factory.createUserList(get(conf.getRestBaseURL() + "users/contributors.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public void removeProfileBanner() throws TwitterException {
post(conf.getRestBaseURL()
+ "account/remove_profile_banner.json");
}
/**
* {@inheritDoc}
*/
@Override
public void updateProfileBanner(File image) throws TwitterException {
checkFileValidity(image);
post(conf.getRestBaseURL()
+ "account/update_profile_banner.json"
, new HttpParameter[]{new HttpParameter("banner", image)});
}
/**
* {@inheritDoc}
*/
@Override
public void updateProfileBanner(InputStream image) throws TwitterException {
post(conf.getRestBaseURL()
+ "account/update_profile_banner.json"
, new HttpParameter[]{new HttpParameter("banner", "banner", image)});
}
/* Suggested Users Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> getUserSuggestions(String categorySlug) throws TwitterException {
HttpResponse res = null;
try {
res = get(conf.getRestBaseURL() + "users/suggestions/" + URLEncoder.encode(categorySlug, "UTF-8") + ".json");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return factory.createUserListFromJSONArray_Users(res);
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Category> getSuggestedUserCategories() throws TwitterException {
return factory.createCategoryList(get(conf.getRestBaseURL() + "users/suggestions.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<User> getMemberSuggestions(String categorySlug) throws TwitterException {
HttpResponse res = null;
try {
res = get(conf.getRestBaseURL() + "users/suggestions/" + URLEncoder.encode(categorySlug, "UTF-8") + "/members.json");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return factory.createUserListFromJSONArray(res);
}
/* Favorites Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getFavorites() throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "favorites/list.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getFavorites(long userId) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "favorites/list.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getFavorites(String screenName) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "favorites/list.json?screen_name=" + screenName));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getFavorites(Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "favorites/list.json", paging.asPostParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getFavorites(long userId, Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "favorites/list.json",
mergeParameters(new HttpParameter[]{new HttpParameter("user_id", userId)}
, paging.asPostParameterArray())));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getFavorites(String screenName, Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "favorites/list.json",
mergeParameters(new HttpParameter[]{new HttpParameter("screen_name", screenName)}
, paging.asPostParameterArray())));
}
/**
* {@inheritDoc}
*/
@Override
public Status destroyFavorite(long id) throws TwitterException {
return factory.createStatus(post(conf.getRestBaseURL() + "favorites/destroy.json?id=" + id));
}
/**
* {@inheritDoc}
*/
@Override
public Status createFavorite(long id) throws TwitterException {
return factory.createStatus(post(conf.getRestBaseURL() + "favorites/create.json?id=" + id));
}
/* Lists Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<UserList> getUserLists(String listOwnerScreenName) throws TwitterException {
return factory.createUserListList(get(conf.getRestBaseURL() + "lists/list.json?screen_name=" + listOwnerScreenName));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<UserList> getUserLists(long listOwnerUserId) throws TwitterException {
return factory.createUserListList(get(conf.getRestBaseURL() + "lists/list.json?user_id=" + listOwnerUserId));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserListStatuses(int listId, Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "lists/statuses.json"
, mergeParameters(paging.asPostParameterArray(Paging.SMCP, Paging.COUNT)
, new HttpParameter("list_id", listId))));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserListStatuses(long ownerId, String slug, Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "lists/statuses.json"
, mergeParameters(paging.asPostParameterArray(Paging.SMCP, Paging.COUNT)
, new HttpParameter[]{new HttpParameter("owner_id", ownerId)
, new HttpParameter("slug", slug)})));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Status> getUserListStatuses(String ownerScreenName,
String slug, Paging paging) throws TwitterException {
return factory.createStatusList(get(conf.getRestBaseURL() + "lists/statuses.json"
, mergeParameters(paging.asPostParameterArray(Paging.SMCP, Paging.COUNT)
, new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName)
, new HttpParameter("slug", slug)})));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserListMember(int listId, long userId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/destroy.json",
new HttpParameter[]{new HttpParameter("list_id", listId), new HttpParameter("user_id", userId)}));
}
@Override
public UserList deleteUserListMember(int listId, long userId) throws TwitterException {
return destroyUserListMember(listId, userId);
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserListMember(long ownerId, String slug, long userId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/destroy.json", new HttpParameter[]{new HttpParameter("owner_id", ownerId)
, new HttpParameter("slug", slug), new HttpParameter("user_id", userId)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserListMember(String ownerScreenName, String slug,
long userId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/destroy.json", new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName)
, new HttpParameter("slug", slug), new HttpParameter("user_id", userId)}));
}
@Override
public UserList deleteUserListMember(long ownerId, String slug, long userId) throws TwitterException {
return destroyUserListMember(ownerId, slug, userId);
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<UserList> getUserListMemberships(long cursor) throws TwitterException {
return factory.createPagableUserListList(get(conf.getRestBaseURL() + "lists/memberships.json?cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<UserList> getUserListMemberships(String listMemberScreenName, long cursor) throws TwitterException {
return getUserListMemberships(listMemberScreenName, cursor, false);
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<UserList> getUserListMemberships(long listMemberId, long cursor) throws TwitterException {
return getUserListMemberships(listMemberId, cursor, false);
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<UserList> getUserListMemberships(long listMemberId, long cursor, boolean filterToOwnedLists) throws TwitterException {
return factory.createPagableUserListList(get(conf.getRestBaseURL()
+ "lists/memberships.json?user_id=" + listMemberId + "&cursor=" + cursor + "&filter_to_owned_lists="
+ filterToOwnedLists));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<UserList> getUserListMemberships(String listMemberScreenName, long cursor, boolean filterToOwnedLists) throws TwitterException {
return factory.createPagableUserListList(get(conf.getRestBaseURL()
+ "lists/memberships.json?screen_name=" + listMemberScreenName + "&cursor=" + cursor
+ "&filter_to_owned_lists=" + filterToOwnedLists));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getUserListSubscribers(int listId, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "lists/subscribers.json?list_id=" + listId + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getUserListSubscribers(long ownerId, String slug, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "lists/subscribers.json?owner_id=" + ownerId
+ "&slug=" + slug + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getUserListSubscribers(
String ownerScreenName, String slug, long cursor)
throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() + "lists/subscribers.json?owner_screen_name=" + ownerScreenName
+ "&slug=" + slug + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListSubscription(int listId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/subscribers/create.json", new HttpParameter[]{new HttpParameter("list_id", listId)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListSubscription(long ownerId, String slug) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/subscribers/create.json", new HttpParameter[]{new HttpParameter("owner_id", ownerId)
, new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListSubscription(String ownerScreenName,
String slug) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/subscribers/create.json", new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName)
, new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public User showUserListSubscription(int listId, long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() +
"lists/subscribers/show.json?list_id=" + listId + "&user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User showUserListSubscription(long ownerId, String slug, long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() +
"lists/subscribers/show.json?owner_id=" + ownerId + "&slug=" + slug + "&user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User showUserListSubscription(String ownerScreenName, String slug,
long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() +
"lists/subscribers/show.json?owner_screen_name=" + ownerScreenName + "&slug=" + slug + "&user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserListSubscription(int listId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/subscribers/destroy.json", new HttpParameter[]{new HttpParameter("list_id", listId)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserListSubscription(long ownerId, String slug) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/subscribers/destroy.json"
, new HttpParameter[]{new HttpParameter("owner_id", ownerId), new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserListSubscription(String ownerScreenName,
String slug) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/subscribers/destroy.json"
, new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName), new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMembers(int listId, long[] userIds) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/members/create_all.json",
new HttpParameter[]{new HttpParameter("list_id", listId), new HttpParameter("user_id"
, z_T4JInternalStringUtil.join(userIds))}));
}
@Override
public UserList addUserListMembers(int listId, long[] userIds) throws TwitterException {
return createUserListMembers(listId, userIds);
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMembers(long ownerId, String slug, long[] userIds) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/members/create_all.json",
new HttpParameter[]{new HttpParameter("owner_id", ownerId), new HttpParameter("slug", slug)
, new HttpParameter("user_id", z_T4JInternalStringUtil.join(userIds))}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMembers(String ownerScreenName, String slug,
long[] userIds) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/members/create_all.json",
new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName), new HttpParameter("slug", slug)
, new HttpParameter("user_id", z_T4JInternalStringUtil.join(userIds))}));
}
@Override
public UserList addUserListMembers(long ownerId, String slug, long[] userIds) throws TwitterException {
return createUserListMembers(ownerId, slug, userIds);
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMembers(int listId, String[] screenNames) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/create_all.json",
new HttpParameter[]{
new HttpParameter("list_id", listId),
new HttpParameter("screen_name", z_T4JInternalStringUtil.join(screenNames))}));
}
@Override
public UserList addUserListMembers(int listId, String[] screenNames) throws TwitterException {
return createUserListMembers(listId, screenNames);
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMembers(long ownerId, String slug, String[] screenNames) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/create_all.json",
new HttpParameter[]{new HttpParameter("owner_id", ownerId), new HttpParameter("slug", slug)
, new HttpParameter("screen_name", z_T4JInternalStringUtil.join(screenNames))}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMembers(String ownerScreenName, String slug,
String[] screenNames) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/create_all.json",
new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName), new HttpParameter("slug", slug)
, new HttpParameter("screen_name", z_T4JInternalStringUtil.join(screenNames))}));
}
@Override
public UserList addUserListMembers(long ownerId, String slug, String[] screenNames) throws TwitterException {
return createUserListMembers(ownerId, slug, screenNames);
}
/**
* {@inheritDoc}
*/
@Override
public User showUserListMembership(int listId, long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() +
"lists/members/show.json?list_id=" + listId + "&user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User showUserListMembership(long ownerId, String slug, long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() +
"lists/members/show.json?owner_id=" + ownerId + "&slug=" + slug + "&user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User showUserListMembership(String ownerScreenName, String slug,
long userId) throws TwitterException {
return factory.createUser(get(conf.getRestBaseURL() +
"lists/members/show.json?owner_screen_name=" + ownerScreenName + "&slug=" + slug + "&user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getUserListMembers(int listId
, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() +
"lists/members.json?list_id=" + listId + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getUserListMembers(long ownerId, String slug, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() +
"lists/members.json?owner_id=" + ownerId + "&slug=" + slug + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<User> getUserListMembers(String ownerScreenName,
String slug, long cursor) throws TwitterException {
return factory.createPagableUserList(get(conf.getRestBaseURL() +
"lists/members.json?owner_screen_name=" + ownerScreenName + "&slug=" + slug + "&cursor=" + cursor));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMember(int listId, long userId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/create.json", new HttpParameter[]{new HttpParameter("user_id", userId)
, new HttpParameter("list_id", listId)}));
}
@Override
public UserList addUserListMember(int listId, long userId) throws TwitterException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMember(long ownerId, String slug, long userId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/create.json", new HttpParameter[]{new HttpParameter("user_id", userId)
, new HttpParameter("owner_id", ownerId), new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserListMember(String ownerScreenName, String slug,
long userId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() +
"lists/members/create.json", new HttpParameter[]{new HttpParameter("user_id", userId)
, new HttpParameter("owner_screen_name", ownerScreenName), new HttpParameter("slug", slug)}));
}
@Override
public UserList addUserListMember(long ownerId, String slug, long userId) throws TwitterException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserList(int listId) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/destroy.json",
new HttpParameter[]{new HttpParameter("list_id", listId)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserList(long ownerId, String slug) throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/destroy.json",
new HttpParameter[]{new HttpParameter("owner_id", ownerId)
, new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList destroyUserList(String ownerScreenName, String slug)
throws TwitterException {
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/destroy.json",
new HttpParameter[]{new HttpParameter("owner_screen_name", ownerScreenName)
, new HttpParameter("slug", slug)}));
}
/**
* {@inheritDoc}
*/
@Override
public UserList updateUserList(int listId, String newListName, boolean isPublicList, String newDescription) throws TwitterException {
return updateUserList(newListName, isPublicList, newDescription, new HttpParameter("list_id", listId));
}
/**
* {@inheritDoc}
*/
@Override
public UserList updateUserList(long ownerId, String slug, String newListName, boolean isPublicList, String newDescription) throws TwitterException {
return updateUserList(newListName, isPublicList, newDescription, new HttpParameter("owner_id", ownerId)
, new HttpParameter("slug", slug));
}
/**
* {@inheritDoc}
*/
@Override
public UserList updateUserList(String ownerScreenName, String slug,
String newListName, boolean isPublicList, String newDescription)
throws TwitterException {
return updateUserList(newListName, isPublicList, newDescription, new HttpParameter("owner_screen_name", ownerScreenName)
, new HttpParameter("slug", slug));
}
private UserList updateUserList(String newListName, boolean isPublicList, String newDescription, HttpParameter... params) throws TwitterException {
List<HttpParameter> httpParams = new ArrayList<HttpParameter>();
Collections.addAll(httpParams, params);
if (newListName != null) {
httpParams.add(new HttpParameter("name", newListName));
}
httpParams.add(new HttpParameter("mode", isPublicList ? "public" : "private"));
if (newDescription != null) {
httpParams.add(new HttpParameter("description", newDescription));
}
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/update.json", httpParams.toArray(new HttpParameter[httpParams.size()])));
}
/**
* {@inheritDoc}
*/
@Override
public UserList createUserList(String listName, boolean isPublicList, String description) throws TwitterException {
List<HttpParameter> httpParams = new ArrayList<HttpParameter>();
httpParams.add(new HttpParameter("name", listName));
httpParams.add(new HttpParameter("mode", isPublicList ? "public" : "private"));
if (description != null) {
httpParams.add(new HttpParameter("description", description));
}
return factory.createAUserList(post(conf.getRestBaseURL() + "lists/create.json",
httpParams.toArray(new HttpParameter[httpParams.size()])));
}
/**
* {@inheritDoc}
*/
@Override
public UserList showUserList(int listId) throws TwitterException {
return factory.createAUserList(get(conf.getRestBaseURL() + "lists/show.json?list_id=" + listId));
}
/**
* {@inheritDoc}
*/
@Override
public UserList showUserList(long ownerId, String slug) throws TwitterException {
return factory.createAUserList(get(conf.getRestBaseURL() + "lists/show.json?owner_id=" + ownerId + "&slug="
+ slug));
}
/**
* {@inheritDoc}
*/
@Override
public UserList showUserList(String ownerScreenName, String slug)
throws TwitterException {
return factory.createAUserList(get(conf.getRestBaseURL() + "lists/show.json?owner_screen_name=" + ownerScreenName + "&slug="
+ slug));
}
/**
* {@inheritDoc}
*/
@Override
public PagableResponseList<UserList> getUserListSubscriptions(String listOwnerScreenName, long cursor) throws TwitterException {
return factory.createPagableUserListList(get(conf.getRestBaseURL() + "lists/subscriptions.json?screen_name="
+ listOwnerScreenName + "&cursor=" + cursor));
}
/* Saved Searches Resources */
/**
* {@inheritDoc}
*/
@Override
public ResponseList<SavedSearch> getSavedSearches() throws TwitterException {
return factory.createSavedSearchList(get(conf.getRestBaseURL() + "saved_searches/list.json"));
}
/**
* {@inheritDoc}
*/
@Override
public SavedSearch showSavedSearch(int id) throws TwitterException {
return factory.createSavedSearch(get(conf.getRestBaseURL() + "saved_searches/show/" + id
+ ".json"));
}
/**
* {@inheritDoc}
*/
@Override
public SavedSearch createSavedSearch(String query) throws TwitterException {
return factory.createSavedSearch(post(conf.getRestBaseURL() + "saved_searches/create.json"
, new HttpParameter[]{new HttpParameter("query", query)}));
}
/**
* {@inheritDoc}
*/
@Override
public SavedSearch destroySavedSearch(int id) throws TwitterException {
return factory.createSavedSearch(post(conf.getRestBaseURL()
+ "saved_searches/destroy/" + id + ".json"));
}
/* Places & Geo Resources */
/**
* {@inheritDoc}
*/
@Override
public Place getGeoDetails(String placeId) throws TwitterException {
return factory.createPlace(get(conf.getRestBaseURL() + "geo/id/" + placeId
+ ".json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Place> reverseGeoCode(GeoQuery query) throws TwitterException {
try {
return factory.createPlaceList(get(conf.getRestBaseURL()
+ "geo/reverse_geocode.json", query.asHttpParameterArray()));
} catch (TwitterException te) {
if (te.getStatusCode() == 404) {
return factory.createEmptyResponseList();
} else {
throw te;
}
}
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Place> searchPlaces(GeoQuery query) throws TwitterException {
return factory.createPlaceList(get(conf.getRestBaseURL()
+ "geo/search.json", query.asHttpParameterArray()));
}
/**
* {@inheritDoc}
*/
@Override
public SimilarPlaces getSimilarPlaces(GeoLocation location, String name, String containedWithin, String streetAddress) throws TwitterException {
List<HttpParameter> params = new ArrayList<HttpParameter>(3);
params.add(new HttpParameter("lat", location.getLatitude()));
params.add(new HttpParameter("long", location.getLongitude()));
params.add(new HttpParameter("name", name));
if (containedWithin != null) {
params.add(new HttpParameter("contained_within", containedWithin));
}
if (streetAddress != null) {
params.add(new HttpParameter("attribute:street_address", streetAddress));
}
return factory.createSimilarPlaces(get(conf.getRestBaseURL()
+ "geo/similar_places.json", params.toArray(new HttpParameter[params.size()])));
}
/**
* {@inheritDoc}
*/
@Override
public Place createPlace(String name, String containedWithin, String token, GeoLocation location, String streetAddress) throws TwitterException {
List<HttpParameter> params = new ArrayList<HttpParameter>(3);
params.add(new HttpParameter("name", name));
params.add(new HttpParameter("contained_within", containedWithin));
params.add(new HttpParameter("token", token));
params.add(new HttpParameter("lat", location.getLatitude()));
params.add(new HttpParameter("long", location.getLongitude()));
if (streetAddress != null) {
params.add(new HttpParameter("attribute:street_address", streetAddress));
}
return factory.createPlace(post(conf.getRestBaseURL() + "geo/place.json"
, params.toArray(new HttpParameter[params.size()])));
}
/* Trends Resources */
/**
* {@inheritDoc}
*/
@Override
public Trends getLocationTrends(int woeid) throws TwitterException {
return getPlaceTrends(woeid);
}
/**
* {@inheritDoc}
*/
@Override
public Trends getPlaceTrends(int woeid) throws TwitterException {
return factory.createTrends(get(conf.getRestBaseURL()
+ "trends/place.json?id=" + woeid));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Location> getAvailableTrends() throws TwitterException {
return factory.createLocationList(get(conf.getRestBaseURL()
+ "trends/available.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Location> getAvailableTrends(GeoLocation location) throws TwitterException {
return getClosestTrends(location);
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Location> getClosestTrends(GeoLocation location) throws TwitterException {
return factory.createLocationList(get(conf.getRestBaseURL()
+ "trends/closest.json",
new HttpParameter[]{new HttpParameter("lat", location.getLatitude())
, new HttpParameter("long", location.getLongitude())
}));
}
/* Spam Reporting Resources */
/**
* {@inheritDoc}
*/
@Override
public User reportSpam(long userId) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "users/report_spam.json?user_id=" + userId));
}
/**
* {@inheritDoc}
*/
@Override
public User reportSpam(String screenName) throws TwitterException {
return factory.createUser(post(conf.getRestBaseURL() + "users/report_spam.json?screen_name=" + screenName));
}
/* Help Resources */
/**
* {@inheritDoc}
*/
@Override
public TwitterAPIConfiguration getAPIConfiguration() throws TwitterException {
return factory.createTwitterAPIConfiguration(get(conf.getRestBaseURL() + "help/configuration.json"));
}
/**
* {@inheritDoc}
*/
@Override
public ResponseList<Language> getLanguages() throws TwitterException {
return factory.createLanguageList(get(conf.getRestBaseURL() + "help/languages.json"));
}
/**
* {@inheritDoc}
*/
@Override
public String getPrivacyPolicy() throws TwitterException {
try {
return get(conf.getRestBaseURL() + "help/privacy.json").asJSONObject().getString("privacy");
} catch (JSONException e) {
throw new TwitterException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public String getTermsOfService() throws TwitterException {
try {
return get(conf.getRestBaseURL() + "help/tos.json").asJSONObject().getString("tos");
} catch (JSONException e) {
throw new TwitterException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, RateLimitStatus> getRateLimitStatus() throws TwitterException {
return factory.createRateLimitStatuses(get(conf.getRestBaseURL() + "application/rate_limit_status.json"));
}
@Override
public Map<String, RateLimitStatus> getRateLimitStatus(String... resources) throws TwitterException {
return factory.createRateLimitStatuses(get(conf.getRestBaseURL() + "application/rate_limit_status.json?resources=" + z_T4JInternalStringUtil.join(resources)));
}
@Override
public TimelinesResources timelines() {
return this;
}
@Override
public TweetsResources tweets() {
return this;
}
@Override
public SearchResource search() {
return this;
}
@Override
public DirectMessagesResources directMessages() {
return this;
}
@Override
public FriendsFollowersResources friendsFollowers() {
return this;
}
@Override
public UsersResources users() {
return this;
}
@Override
public SuggestedUsersResources suggestedUsers() {
return this;
}
@Override
public FavoritesResources favorites() {
return this;
}
@Override
public ListsResources list() {
return this;
}
@Override
public SavedSearchesResources savedSearches() {
return this;
}
@Override
public PlacesGeoResources placesGeo() {
return this;
}
@Override
public TrendsResources trends() {
return this;
}
@Override
public SpamReportingResource spamReporting() {
return this;
}
@Override
public HelpResources help() {
return this;
}
private HttpResponse get(String url) throws TwitterException {
ensureAuthorizationEnabled();
if (url.contains("?")) {
url = url + "&" + IMPLICIT_PARAMS_STR;
} else {
url = url + "?" + IMPLICIT_PARAMS_STR;
}
if (!conf.isMBeanEnabled()) {
return http.get(url, auth);
} else {
// intercept HTTP call for monitoring purposes
HttpResponse response = null;
long start = System.currentTimeMillis();
try {
response = http.get(url, auth);
} finally {
long elapsedTime = System.currentTimeMillis() - start;
TwitterAPIMonitor.getInstance().methodCalled(url, elapsedTime, isOk(response));
}
return response;
}
}
private HttpResponse get(String url, HttpParameter[] params) throws TwitterException {
ensureAuthorizationEnabled();
if (!conf.isMBeanEnabled()) {
return http.get(url, mergeImplicitParams(params), auth);
} else {
// intercept HTTP call for monitoring purposes
HttpResponse response = null;
long start = System.currentTimeMillis();
try {
response = http.get(url, mergeImplicitParams(params), auth);
} finally {
long elapsedTime = System.currentTimeMillis() - start;
TwitterAPIMonitor.getInstance().methodCalled(url, elapsedTime, isOk(response));
}
return response;
}
}
private HttpResponse post(String url) throws TwitterException {
ensureAuthorizationEnabled();
if (!conf.isMBeanEnabled()) {
return http.post(url, IMPLICIT_PARAMS, auth);
} else {
// intercept HTTP call for monitoring purposes
HttpResponse response = null;
long start = System.currentTimeMillis();
try {
response = http.post(url, IMPLICIT_PARAMS, auth);
} finally {
long elapsedTime = System.currentTimeMillis() - start;
TwitterAPIMonitor.getInstance().methodCalled(url, elapsedTime, isOk(response));
}
return response;
}
}
private HttpResponse post(String url, HttpParameter[] params) throws TwitterException {
ensureAuthorizationEnabled();
if (!conf.isMBeanEnabled()) {
return http.post(url, mergeImplicitParams(params), auth);
} else {
// intercept HTTP call for monitoring purposes
HttpResponse response = null;
long start = System.currentTimeMillis();
try {
response = http.post(url, mergeImplicitParams(params), auth);
} finally {
long elapsedTime = System.currentTimeMillis() - start;
TwitterAPIMonitor.getInstance().methodCalled(url, elapsedTime, isOk(response));
}
return response;
}
}
private HttpParameter[] mergeParameters(HttpParameter[] params1, HttpParameter[] params2) {
if (params1 != null && params2 != null) {
HttpParameter[] params = new HttpParameter[params1.length + params2.length];
System.arraycopy(params1, 0, params, 0, params1.length);
System.arraycopy(params2, 0, params, params1.length, params2.length);
return params;
}
if (null == params1 && null == params2) {
return new HttpParameter[0];
}
if (params1 != null) {
return params1;
} else {
return params2;
}
}
private HttpParameter[] mergeParameters(HttpParameter[] params1, HttpParameter params2) {
if (params1 != null && params2 != null) {
HttpParameter[] params = new HttpParameter[params1.length + 1];
System.arraycopy(params1, 0, params, 0, params1.length);
params[params.length - 1] = params2;
return params;
}
if (null == params1 && null == params2) {
return new HttpParameter[0];
}
if (params1 != null) {
return params1;
} else {
return new HttpParameter[]{params2};
}
}
private HttpParameter[] mergeImplicitParams(HttpParameter[] params) {
return mergeParameters(params, IMPLICIT_PARAMS);
}
private boolean isOk(HttpResponse response) {
return response != null && response.getStatusCode() < 300;
}
@Override
public String toString() {
return "TwitterImpl{" +
"INCLUDE_MY_RETWEET=" + INCLUDE_MY_RETWEET +
'}';
}
}