Package com.dongxuexidu.douban4j.service

Source Code of com.dongxuexidu.douban4j.service.DoubanReviewService

package com.dongxuexidu.douban4j.service;

import com.dongxuexidu.douban4j.constants.RequestUrls;
import com.dongxuexidu.douban4j.constants.StatusCode;
import com.dongxuexidu.douban4j.model.UnTested;
import com.dongxuexidu.douban4j.model.app.DoubanException;
import com.dongxuexidu.douban4j.model.collection.DoubanCollectionFeedObj;
import com.dongxuexidu.douban4j.model.common.DoubanRatingObj;
import com.dongxuexidu.douban4j.model.review.DoubanReviewEntryObj;
import com.dongxuexidu.douban4j.model.review.DoubanReviewFeedObj;
import com.dongxuexidu.douban4j.model.subject.DoubanSubjectObj;
import com.dongxuexidu.douban4j.utils.ErrorHandler;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

/**
*
* @author Zhibo Wei <uglytroll@dongxuexidu.com>
*/
public class DoubanReviewService extends DoubanService {
 
  Logger logger = Logger.getLogger(DoubanReviewService.class.getName());
 
  public enum ReviewOrderBy {
    Time {
      @Override
      public String getValue() {
        return "time";
      }
    },
    Score {
      @Override
      public String getValue() {
        return "score";
      }
    };
    public abstract String getValue();
  }
 
  public DoubanReviewService () {
    super();
  }
 
  public DoubanReviewService (String accessToken) {
    super(accessToken);
  }
 
  public DoubanReviewEntryObj getReviewById (long reviewId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_REVIEW_PREFIX + "/" + reviewId;
    DoubanReviewEntryObj result = this.client.getResponse(url, null, DoubanReviewEntryObj.class, false);
    return result;
  }
 
  public DoubanReviewFeedObj getUsersReview (String userId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_USER_PREFIX + "/" + userId + "/reviews";
    DoubanReviewFeedObj result = this.client.getResponse(url, null, DoubanReviewFeedObj.class, false);
    return result;
  }
 
  /**
   * Book
   */
 
  public DoubanReviewFeedObj getBookReviewsBySubjectId (long subjectId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_BOOK_SUBJECT_PREFIX + "/" + subjectId + "/reviews";
    return getReviewList(url, null, null, null);
  }
 
  public DoubanReviewFeedObj getBookReviewsBySubjectId (long subjectId, int startIndex, int maxResult, ReviewOrderBy orderBy) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_BOOK_SUBJECT_PREFIX + "/" + subjectId + "/reviews";
    return getReviewList(url, startIndex, maxResult, orderBy);
  }
 
  public DoubanReviewFeedObj getBookReviewsByISBNId (String isbnId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_BOOK_SUBJECT_PREFIX + "/isbn/" + isbnId + "/reviews";
    return getReviewList(url, null, null, null);
  }
 
  public DoubanReviewFeedObj getBookReviewsByISBNId (String isbnId, int startIndex, int maxResult, ReviewOrderBy orderBy) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_BOOK_SUBJECT_PREFIX + "/isbn/" + isbnId + "/reviews";
    return getReviewList(url, startIndex, maxResult, orderBy);
  }
 
  /**
   * Movie
   */
 
  public DoubanReviewFeedObj getMovieReviewsBySubjectId (long subjectId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MOVIE_SUBJECT_PREFIX + "/" + subjectId + "/reviews";
    return getReviewList(url, null, null, null);
  }
 
  public DoubanReviewFeedObj getMovieReviewsBySubjectId (long subjectId, int startIndex, int maxResult, ReviewOrderBy orderBy) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MOVIE_SUBJECT_PREFIX + "/" + subjectId + "/reviews";
    return getReviewList(url, startIndex, maxResult, orderBy);
  }
 
  public DoubanReviewFeedObj getMovieReviewsByIMDBId (String imdbId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MOVIE_SUBJECT_PREFIX + "/imdb/" + imdbId + "/reviews";
    return getReviewList(url, null, null, null);
  }
 
  public DoubanReviewFeedObj getMovieReviewsByIMDBId (String imdbId, int startIndex, int maxResult, ReviewOrderBy orderBy) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MOVIE_SUBJECT_PREFIX + "/imdb/" + imdbId + "/reviews";
    return getReviewList(url, startIndex, maxResult, orderBy);
  }
 
  /**
   * Music
   */
 
  public DoubanReviewFeedObj getMusicReviewsBySubjectId (long subjectId) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MUSIC_SUBJECT_PREFIX + "/" + subjectId + "/reviews";
    return getReviewList(url, null, null, null);
  }
 
  public DoubanReviewFeedObj getMusicReviewsBySubjectId (long subjectId, int startIndex, int maxResult, ReviewOrderBy orderBy) throws DoubanException, IOException {
    String url = RequestUrls.DOUBAN_MUSIC_SUBJECT_PREFIX + "/" + subjectId + "/reviews";
    return getReviewList(url, startIndex, maxResult, orderBy);
  }

  private DoubanReviewFeedObj getReviewList (String url, Integer startIndex, Integer maxResult, ReviewOrderBy orderBy) throws DoubanException, IOException {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    if (startIndex != null) {
      params.add(new BasicNameValuePair("start-index", startIndex.toString()));
    }
    if (maxResult != null) {
      params.add(new BasicNameValuePair("max-results", maxResult.toString()));
    }
    if (orderBy != null) {
      params.add(new BasicNameValuePair("orderby", orderBy.getValue()));
    }
    DoubanReviewFeedObj result = this.client.getResponse(url, params, DoubanReviewFeedObj.class, false);
    return result;
  }

  public boolean addNewReview (long subjectId, String content, int rating, String title, String accessToken) throws DoubanException, IOException {
    setAccessToken(accessToken);
    DoubanReviewEntryObj obj = generateReviewObj(subjectId, content, rating, title, null);
    if (obj == null) {
      throw ErrorHandler.getCustomDoubanException(100, "Review data is not correct, please double check");
    }
    try {
      int responseCode = this.client.postResponseCodeOnly(RequestUrls.DOUBAN_REVIEW_PREFIX + "s", obj, true);
      if (responseCode != StatusCode.HTTP_STATUS_CREATED) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  public boolean updateReview (long reviewId, long subjectId, String content, String title, int rating, String accessToken) throws DoubanException, IOException {
    setAccessToken(accessToken);
    DoubanReviewEntryObj obj = generateReviewObj(subjectId, content, rating, title, reviewId);
    if (obj == null) {
      throw ErrorHandler.getCustomDoubanException(100, "Review data is not correct, please double check");
    }
    try {
      int responseCode = this.client.putResponseCodeOnly(RequestUrls.DOUBAN_REVIEW_PREFIX + "/" + reviewId, obj, true);
      if (responseCode != StatusCode.HTTP_STATUS_ACCEPTED) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }

  public boolean deleteReview (long reviewId, String accessToken) throws DoubanException, IOException {
    setAccessToken(accessToken);
    try {
      int responseCode = this.client.deleteResponse(RequestUrls.DOUBAN_REVIEW_PREFIX + "/" + reviewId, true);
      if (responseCode != StatusCode.HTTP_STATUS_OK) {
        return false;
      }
      return true;
    } catch (DoubanException ex) {
      if (ex.getErrorCode() == ErrorHandler.HTTP_RESPONSE_ERROR_STATUS_CODE) {
        logger.warning(ex.getErrorMsg());
        return false;
      } else {
        throw ex;
      }
    }
  }
 
  private DoubanReviewEntryObj generateReviewObj (long subjectId, String content, int rating, String title, Long reviewUrl) {
    DoubanReviewEntryObj obj = new DoubanReviewEntryObj();
    if (reviewUrl != null) {
      obj.setId(RequestUrls.DOUBAN_REVIEW_PREFIX + "/" + reviewUrl);
    }
    DoubanSubjectObj sub = new DoubanSubjectObj();
    sub.setId("" + subjectId);
    obj.setSubject(sub);
    if (content != null && content.length() > 0) {
      obj.setContent(content);
    } else {
      obj.setContent("");
    }
    if (title != null && title.length() > 0) {
      obj.setTitle(title);
    } else {
      obj.setTitle("");
    }
    DoubanRatingObj rat = new DoubanRatingObj();
    if (rating > 5) {
      rating = 5;
    } else if (rating < 1) {
      rating = 1;
    }
    rat.setValue(rating);
    obj.setRating(rat);
    return obj;
  }
 
}
TOP

Related Classes of com.dongxuexidu.douban4j.service.DoubanReviewService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.