/** * Copyright 2014 Daum Kakao Corp. * * Redistribution and modification in source or binary forms are not permitted without specific prior written permission.  * * 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 com.kakao; import java.util.Arrays; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; import com.kakao.KakaoStoryService.StoryType; /** * 내스토리 요청에 대한 결과 객체로 스토리 정보가 담겨 있다. * @author MJ */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class MyStoryInfo { @JsonProperty("id") private String id; @JsonProperty("url") private String url; @JsonProperty("media_type") private String mediaType; @JsonProperty("created_at") private String createdAt; @JsonProperty("comment_count") private Integer commentCount; @JsonProperty("like_count") private Integer likeCount; @JsonProperty("comments") private StoryComment[] comments; @JsonProperty("likes") private StoryLike[] likes; @JsonProperty("content") private String content; @JsonProperty("media") private MyStoryImageInfo[] medias; /** * @return 내스토리 고유 id */ public String getId() { return id; } /** * @return 상세글로 바로 갈 수 있는 web url */ public String getUrl() { return url; } /** * @return 내스토리의 타입. NOTE 또는 PHOTO 또는 NOT_SUPPORTED */ public StoryType getMediaType() { return StoryType.getType(mediaType); } /** * @return 포스팅한 시각. yyyy-mm-ddThh:mm:ss */ public String getCreatedAt() { return createdAt; } /** * @return 댓글수 */ public Integer getCommentCount() { return commentCount; } /** * @return 느낌수 */ public Integer getLikeCount() { return likeCount; } /** * @return 댓글 상세 내용. activities에는 포함되지 않는다. 개별 activity 요청시에만 포함된다. */ public StoryComment[] getComments() { return comments; } /** * @return 느낌 상세 내용. activities에는 포함되지 않는다. 개별 activity 요청시에만 포함된다. */ public StoryLike[] getLikes() { return likes; } /** * @return 내스토리의 텍스트 내용 */ public String getContent() { return content; } /** * @return {@link com.kakao.KakaoStoryService.StoryType#PHOTO} 스토리에 한해 이미지 파일 URL list */ public MyStoryImageInfo[] getMedias() { return medias; } /** * 내스토리의 이미지를 크기별로 얻을 수 있는 객체. */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public static class MyStoryImageInfo { @JsonProperty("original") private String original; @JsonProperty("xlarge") private String xlarge; @JsonProperty("large") private String large; @JsonProperty("medium") private String medium; @JsonProperty("small") private String small; /** * @return 포스팅한 원본 이미지 */ public String getOriginal() { return original; } /** * @return 1280 * 1706 리사이징한 이미지 */ public String getXlarge() { return xlarge; } /** * @return 720 * 960 리사이징한 이미지 */ public String getLarge() { return large; } /** * @return 240 * 320 리사이징한 이미지 */ public String getMedium() { return medium; } /** * @return 160 * 213 리사이징한 이미지 */ public String getSmall() { return small; } @Override public String toString() { final StringBuilder sb = new StringBuilder("KakaoStoryActivityImage{"); sb.append("original='").append(original).append('\''); sb.append(", xlarge='").append(xlarge).append('\''); sb.append(", large='").append(large).append('\''); sb.append(", medium='").append(medium).append('\''); sb.append(", small='").append(small).append('\''); sb.append('}'); return sb.toString(); } } /** * 덧글 또는 느낌 작성자 정보를 얻을 수 있는 객체 */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown=true) public static class StoryActor { @JsonProperty("display_name") private String displayName; @JsonProperty("profile_thumbnail_url") private String profileThumbnailUrl; /** * @return 작성자의 카카오스토리 별명. */ public String getDisplayName() { return displayName; } /** * @return 작성자의 카카오스토리 썸네일 프로필 이미지 URL. 160px * 160px 크기 */ public String getProfileThumbnailUrl() { return profileThumbnailUrl; } @Override public String toString() { final StringBuilder sb = new StringBuilder("StoryActor{"); sb.append("displayName='").append(displayName).append('\''); sb.append(", profileThumbnailUrl='").append(profileThumbnailUrl).append('\''); sb.append('}'); return sb.toString(); } } /** * 내스토리의 덧글 정보를 얻을 수 있는 객체. */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown=true) public static class StoryComment { @JsonProperty("text") private String text; @JsonProperty("writer") private StoryActor writer; /** * @return 댓글 내용 */ public String getText() { return text; } /** * @return 댓글 작성자 정보 */ public StoryActor getWriter() { return writer; } @Override public String toString() { final StringBuilder sb = new StringBuilder("StoryComment{"); sb.append("text='").append(text).append('\''); sb.append(", writer=").append(writer); sb.append('}'); return sb.toString(); } } /** * 내스토리의 느낌 정보를 얻을 수 있는 객체. */ @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown=true) public static class StoryLike { @JsonProperty("emotion") private String emotion; @JsonProperty("actor") private StoryActor actor; /** * 느낌 값 */ public static enum Emotion { /** * 좋아요 */ LIKE("LIKE"), /** * 멋져요 */ COOL("COOL"), /** * 기뻐요 */ HAPPY("HAPPY"), /** * 슬퍼요 */ SAD("SAD"), /** * 힘내요 */ CHEER_UP("CHEER_UP"), /** * 정의되지 않은 느낌 */ NOT_DEFINED("NOT_DEFINED"); final String papiEmotion; Emotion(final String papiEmotion) { this.papiEmotion = papiEmotion; } public static Emotion getEmotion(final String emotionString){ for(Emotion emotion : Emotion.values()){ if(emotion.papiEmotion.equals(emotionString)) return emotion; } return NOT_DEFINED; } } /** * @return 느낌 종류 */ public Emotion getEmotion() { return Emotion.getEmotion(emotion); } /** * @return 느낌 작성자 정보 */ public StoryActor getActor() { return actor; } @Override public String toString() { final StringBuilder sb = new StringBuilder("StoryLike{"); sb.append("emotion='").append(emotion).append('\''); sb.append(", actor=").append(actor); sb.append('}'); return sb.toString(); } } @Override public String toString() { final StringBuilder sb = new StringBuilder("MyStoryInfo{"); sb.append("id='").append(id).append('\''); sb.append(", url='").append(url).append('\''); sb.append(", mediaType='").append(mediaType).append('\''); sb.append(", createdAt='").append(createdAt).append('\''); sb.append(", commentCount=").append(commentCount); sb.append(", likeCount=").append(likeCount); sb.append(", comments=").append(Arrays.toString(comments)); sb.append(", likes=").append(Arrays.toString(likes)); sb.append(", content='").append(content).append('\''); sb.append(", medias=").append(Arrays.toString(medias)); sb.append('}'); return sb.toString(); } }