package org.springframework.social.instagram.api.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.social.instagram.api.Comment; import org.springframework.social.instagram.api.InstagramProfile; import org.springframework.social.instagram.api.Media; import org.springframework.social.instagram.api.MediaOperations; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; /** * Implementation of {@link MediaOperations}, providing a binding to Instagram's media-oriented REST resources. */ public class MediaTemplate extends AbstractInstagramOperations implements MediaOperations { public MediaTemplate(InstagramTemplate instagram, boolean isAuthorizedForUser) { super(instagram, isAuthorizedForUser); } public void addComment(long mediaId, String text) { requireUserAuthorization(); MultiValueMap<String,String> params = new LinkedMultiValueMap<String, String>(); params.add("text", text); post(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId) + "/comments/"), params, Map.class); } public void addLike(long mediaId) { requireUserAuthorization(); post(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId) + "/likes/"), new LinkedMultiValueMap<String, String>(), Map.class); } public void deleteComment(long mediaId, long commentId) { requireUserAuthorization(); delete(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId) + "/comments/" + Long.toString(commentId) + "/")); } public void deleteLike(long mediaId) { requireUserAuthorization(); delete(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId) + "/likes/")); } public List<Comment> getComments(long mediaId) { return get(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId) + "/comments/"), CommentList.class).getList(); } public List<InstagramProfile> getLikes(long mediaId) { return get(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId) + "/likes/"), InstagramProfileList.class).getList(); } public Media getMedia(long mediaId) { return get(buildUri(MEDIA_ENDPOINT + Long.toString(mediaId)+ "/"), MediaContainer.class).getObject(); } public List<Media> getPopular() { return get(buildUri(MEDIA_ENDPOINT + "popular/"), MediaList.class).getList(); } public List<Media> search(double latitude, double longitude) { return search(latitude, longitude, 0, 0, 0); } public List<Media> search(double latitude, double longitude, int distance) { return search(latitude, longitude, 0, 0, distance); } public List<Media> search(double latitude, double longitude, long maxTimeStamp, long minTimeStamp, int distance) { Map<String,String> params = new HashMap<String, String>(); params.put("lat", Double.toString(latitude)); params.put("lng", Double.toString(longitude)); if(maxTimeStamp > 0) params.put("max_timestamp", Long.toString(maxTimeStamp)); if(minTimeStamp > 0) params.put("min_timestamp", Long.toString(minTimeStamp)); if(distance > 0) params.put("distance", Integer.toString(distance)); return get(buildUri(MEDIA_ENDPOINT + "search/", params), MediaList.class).getList(); } }