package org.springframework.social.instagram.api.impl; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.social.instagram.api.InstagramProfile; import org.springframework.social.instagram.api.PagedMediaList; import org.springframework.social.instagram.api.Relationship; import org.springframework.social.instagram.api.UserOperations; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; /** * Implementation of {@link UserOperations}, providing a binding to Instagram's user-oriented REST resources. */ public class UserTemplate extends AbstractInstagramOperations implements UserOperations { public UserTemplate(InstagramTemplate instagram, boolean isAuthorizedForUser) { super(instagram, isAuthorizedForUser); } public InstagramProfile getUser() { requireUserAuthorization(); return get(buildUri(USERS_ENDPOINT + "self/"), InstagramProfileContainer.class).getObject(); } public InstagramProfile getUser(long userId) { return get(buildUri(USERS_ENDPOINT + Long.toString(userId) + "/"), InstagramProfileContainer.class).getObject(); } public PagedMediaList getFeed() { return getFeed(0, 0); } public PagedMediaList getFeed(long maxId, long minId) { requireUserAuthorization(); Map<String,String> params = new HashMap<String, String>(); if(maxId > 0) params.put("max_id", Long.toString(maxId)); if(minId > 0) params.put("min_id", Long.toString(minId)); return get(buildUri(USERS_ENDPOINT + "self/feed/", params), PagedMediaList.class); } public PagedMediaList getRecentMedia(long userId) { return getRecentMedia(userId, 0, 0, 0, 0); } public PagedMediaList getRecentMedia(long userId, long maxId, long minId, long minTimestamp, long maxTimestamp) { Map<String,String> params = new HashMap<String, String>(); if(maxId > 0) params.put("max_id", Long.toString(maxId)); if(maxId > 0) params.put("max_id", Long.toString(maxId)); if(minTimestamp > 0) params.put("min_timestamp", Long.toString(minTimestamp)); if(maxTimestamp > 0) params.put("max_timestamp", Long.toString(maxTimestamp)); return get(buildUri(USERS_ENDPOINT + Long.toString(userId) + "/media/recent/", params), PagedMediaList.class); } public List<InstagramProfile> search(String query) { return get(buildUri(USERS_ENDPOINT + "search/", Collections.singletonMap("q", query)), InstagramProfileList.class).getList(); } public List<InstagramProfile> getFollows(long userId) { return get(buildUri(USERS_ENDPOINT + Long.toString(userId) + "/follows/"), InstagramProfileList.class).getList(); } public List<InstagramProfile> getFollowedBy(long userId) { return get(buildUri(USERS_ENDPOINT + Long.toString(userId) + "/followed-by/"), InstagramProfileList.class).getList(); } public List<InstagramProfile> getRequestedBy() { requireUserAuthorization(); return get(buildUri(USERS_ENDPOINT + "self/requested-by/"), InstagramProfileList.class).getList(); } public Relationship getRelationship(long userId) { requireUserAuthorization(); return get(buildUri(USERS_ENDPOINT + Long.toString(userId) + "/relationship/"), RelationshipContainer.class).getObject(); } public void followUser(long userId) { modifyRelationship(userId, "follow"); } public void unfollowUser(long userId) { modifyRelationship(userId, "unfollow"); } public void blockUser(long userId) { modifyRelationship(userId, "block"); } public void unblockUser(long userId) { modifyRelationship(userId, "unblock"); } public void approveUser(long userId) { modifyRelationship(userId, "approve"); } public void denyUser(long userId) { modifyRelationship(userId, "deny"); } private void modifyRelationship(long userId, String action) { requireUserAuthorization(); MultiValueMap<String,String> params = new LinkedMultiValueMap<String, String>(); params.add("action", action); post(buildUri(USERS_ENDPOINT + Long.toString(userId) + "/relationship/"), params, Map.class); } }