package me.veryyoung.movie.service.impl;
import me.veryyoung.movie.dao.PlayingDao;
import me.veryyoung.movie.dao.SubjectDao;
import me.veryyoung.movie.entity.Playing;
import me.veryyoung.movie.entity.Subject;
import me.veryyoung.movie.qiniu.QiniuUtils;
import me.veryyoung.movie.service.BaseService;
import me.veryyoung.movie.service.DoubanService;
import me.veryyoung.movie.utils.HttpClientUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by veryyoung on 2015/3/18.
*/
@Service
public class DoubanServiceImpl extends BaseService implements DoubanService {
@Autowired
private SubjectDao subjectDao;
@Autowired
private PlayingDao playingDao;
private static final String DOUBAN_API_URL = "https://api.douban.com/v2/movie";
private static final String DOUBAN_APIKEY = "apikey=0df993c66c0c636e29ecbb5344252a4a";
private static final String DOUBAN_SUBJECT_URL = DOUBAN_API_URL + "/subject/%s?" + DOUBAN_APIKEY;
public static final String DOUBAN_PLAYING_URL = DOUBAN_API_URL + "/nowplaying?" + DOUBAN_APIKEY;
private static final String DOUBAN_SEARCH_URL = DOUBAN_API_URL + "/search?q=%s";
private JSONObject jsonObject;
private JSONArray jsonArray;
private int length;
@Override
public Subject find(String id) {
Subject subject = subjectDao.find(id);
if (null != subject) {
return subject;
}
String responseBody = HttpClientUtils.get(String.format(DOUBAN_SUBJECT_URL, id));
if (StringUtils.isEmpty(responseBody)) {
return null;
}
jsonObject = new JSONObject(responseBody);
subject = new Subject();
subject.setId(jsonObject.getString("id"));
subject.setTitle(jsonObject.getString("title"));
subject.setOriginalTitle(jsonObject.getString("original_title"));
subject.setRatingCount(jsonObject.getInt("ratings_count"));
subject.setTotalRating(subject.getRatingCount() * jsonObject.getJSONObject("rating").getDouble("average"));
QiniuUtils.uploadToQiniu(jsonObject.getJSONObject("images").getString("large"), id);
jsonArray = jsonObject.getJSONArray("directors");
length = jsonArray.length();
StringBuilder sb;
if (length > 0) {
sb = new StringBuilder(jsonArray.getJSONObject(0).getString("name"));
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.getJSONObject(i).getString("name"));
}
subject.setDirectors(sb.toString());
}
jsonArray = jsonObject.getJSONArray("casts");
length = jsonArray.length();
if (length > 0) {
sb = new StringBuilder(jsonArray.getJSONObject(0).getString("name"));
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.getJSONObject(i).getString("name"));
}
subject.setCasts(sb.toString());
}
jsonArray = jsonObject.getJSONArray("writers");
length = jsonArray.length();
if (length > 0) {
sb = new StringBuilder(jsonArray.getJSONObject(0).getString("name"));
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.getJSONObject(i).getString("name"));
}
subject.setWriters(sb.toString());
}
String mainland_pubdate = jsonObject.getString("mainland_pubdate");
if (StringUtils.isNotEmpty(mainland_pubdate)) {
try {
subject.setPubDate(DateUtils.parseDate(mainland_pubdate, "yyyy-mm-dd"));
} catch (ParseException e) {
e.printStackTrace();
}
}
if (StringUtils.isNotEmpty(jsonObject.getString("year"))) {
subject.setYear((short) jsonObject.getInt("year"));
}
jsonArray = jsonObject.getJSONArray("languages");
length = jsonArray.length();
if (length > 0) {
sb = new StringBuilder(jsonArray.get(0).toString());
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.get(i));
}
subject.setLanguages(sb.toString());
}
jsonArray = jsonObject.getJSONArray("durations");
length = jsonArray.length();
if (length > 0) {
sb = new StringBuilder(jsonArray.get(0).toString());
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.get(i));
}
subject.setDurations(sb.toString());
}
jsonArray = jsonObject.getJSONArray("genres");
length = jsonArray.length();
if (length > 0) {
sb = new StringBuilder(jsonArray.get(0).toString());
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.get(i));
}
subject.setGenres(sb.toString());
}
jsonArray = jsonObject.getJSONArray("countries");
length = jsonArray.length();
if (length > 0) {
sb = new StringBuilder(jsonArray.get(0).toString());
for (int i = 1; i < length; i++) {
sb.append("/").append(jsonArray.get(i));
}
subject.setCountries(sb.toString());
}
subject.setSummary(jsonObject.getString("summary"));
subjectDao.create(subject);
logger.debug("add subject [{}] from douban", subject);
return subject;
}
@Override
public List<Subject> findPlaying() {
List<Subject> result = subjectDao.getPlaying();
if (result.isEmpty()) {
Subject subject;
result = new ArrayList<>();
String id;
List<Playing> playingList;
String responseBody = HttpClientUtils.get(DOUBAN_PLAYING_URL);
jsonObject = new JSONObject(responseBody);
jsonArray = jsonObject.getJSONArray("entries");
length = jsonArray.length();
logger.debug("{} movies are playing", length);
playingList = new ArrayList<>(length);
for (int i = 0; i < length; i++) {
id = jsonArray.getJSONObject(i).getString("id");
subject = find(id);
result.add(subject);
playingList.add(new Playing(id));
}
playingDao.renew(playingList);
}
return result;
}
@Override
public void saveBySearch(String q) {
String responseBody = HttpClientUtils.get(String.format(DOUBAN_SEARCH_URL, q));
jsonObject = new JSONObject(responseBody);
jsonArray = jsonObject.getJSONArray("subjects");
length = jsonArray.length();
JSONObject jo;
if (length > 0) {
for (int i = 0; i < length; i++) {
jo = jsonArray.optJSONObject(i);
if (null != jo) {
find(jo.getString("id"));
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计-基于java的电影评论网站的设计与实现 (113个子文件)
bootstrap.css 123KB
bootstrap.min.css 102KB
font-awesome-ie7.min.css 46KB
font-awesome.css 26KB
font-awesome.min.css 21KB
bootstrap-theme.css 18KB
bootstrap-theme.min.css 16KB
app.css 8KB
index.css 2KB
bootstrap-ie7.css 1KB
details.css 964B
category-list.css 489B
user.css 265B
fontawesome-webfont.eot 59KB
midstars.gif 3KB
.gitignore 20B
boxsizing.htc 14KB
favicon.ico 2KB
DoubanServiceImpl.java 7KB
HomeController.java 5KB
SubjectDao.java 4KB
SubjectController.java 4KB
ValidatorWrapper.java 4KB
HttpClientUtils.java 3KB
CommentController.java 3KB
AuthenticationFilter.java 3KB
ContextUtils.java 3KB
UserController.java 2KB
QiniuUtils.java 2KB
WebUtils.java 2KB
StringMaskHandler.java 2KB
ScheduleUtils.java 2KB
BaseController.java 2KB
BaseDao.java 2KB
SecurityTagHandler.java 2KB
InvalidException.java 1KB
CategoryController.java 1KB
CommentDao.java 1KB
Subject.java 1KB
OrderBySqlFormulaUtils.java 1KB
ServletListener.java 1KB
PageInfo.java 1KB
UserName.java 1KB
SubjectServiceImpl.java 1020B
UserDao.java 851B
PlayingDaoTest.java 782B
User.java 772B
ApplicationUtils.java 668B
AbstractSpringTest.java 647B
UserServiceImpl.java 634B
Comment.java 622B
PlayingDao.java 518B
Playing.java 507B
ScheduleTest.java 467B
RestData.java 435B
QiniuTest.java 402B
AdminRequired.java 372B
LoginRequired.java 372B
DoubanService.java 366B
SubjectService.java 338B
FreeAccess.java 327B
BaseService.java 314B
Violation.java 291B
SessionUtils.java 250B
UserService.java 249B
AuthenticationFilterTest.java 244B
jquery-1.11.1.min.js 94KB
jquery-2.1.1.min.js 82KB
bootstrap.js 64KB
bootstrap.min.js 34KB
bootstrap-paginator.js 20KB
json2.js 11KB
sea.js 6KB
validation.js 4KB
category-list.js 4KB
register.js 4KB
password.js 3KB
login.js 2KB
comments.js 1KB
ui-helper.js 1KB
delete-comment.js 974B
details.jsp 9KB
list.jsp 7KB
user.jsp 6KB
comments.jsp 5KB
edit.jsp 4KB
password.jsp 3KB
register.jsp 3KB
index.jsp 3KB
login.jsp 3KB
500.jsp 912B
403.jsp 899B
404.jsp 320B
topNav.jspf 3KB
comment.jspf 2KB
footer.jspf 2KB
head.jspf 2KB
jquery-1.11.1.min.map 138KB
jquery-2.1.1.min.map 124KB
FontAwesome.otf 92KB
共 113 条
- 1
- 2
资源评论
- 2301_761887892023-01-13资源很赞,希望多一些这类资源。
爱吃苹果的Jemmy
- 粉丝: 76
- 资源: 1148
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 520马上到了两款动态爱心表白HTML代码(附源码)李峋同款爱心,快送给你爱的她或(他)吧12 情侣纪念日代码.zip
- 电子设计竞赛的单相不间断电源设计
- cutcamera1715961370938.png
- 基于MATLAB的图像处理课程设计报告.doc
- tensorflow-gpu-2.6.0-cp38-cp38-manylinux2010-x86-64.whl
- mmexport1715960553858.png
- tensorflow-gpu-2.6.0-cp37-cp37m-manylinux2010-x86-64.whl
- 通过 .NET 应用程序中的源代码查找 SQL 注入
- 电子设计竞赛2007年B题 无线识别装置.doc
- Wox全局搜索工具,一款win下的全局搜索软件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功