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"));
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于Javascript和MySQL的影评网站系统源代码+项目说明(个人毕设).zip
共233个文件
java:96个
js:30个
css:26个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 62 浏览量
2022-12-05
23:52:55
上传
评论 6
收藏 2.26MB ZIP 举报
温馨提示
基于Javascript+Html+mysql影评网站的设计与实现系统源码+项目说明.zip 项目名称【电影评论网站的设计与实现】 用Javascript 、Html、 Jsp等技术实现一个电影评论网站,数据库使用mysql。主要功能与豆瓣电影类似,可以学习借鉴。 系统的主要功能: 一共有两个角色:评论人和管理员 评论人可以在网站中进行账号注册 评论人可以对电影进行简短评论、打分 管理员上传电影的画报、各类简介信息 网站根据某种规则自动统计、计算每部电影的分数情况 网站自动生成电影的排行榜 网站可以根据电影的年份或分数情况对电影进行自动排序 网站的主要功能如上,中间的一些细节根据实际情况自由发挥和处理,使网站具有实用性。 该项目主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、数据库脚本、项目说明等,该项目参考学习 【特别强调】 1、csdn上资源保证是完整最新,会不定期更新优化; 2、如果您不是用自己账号在csdn官方下载,而通过第三方代下,博主不对您下载的资源作任何保证,且不提供任何形式的技术支持和答疑!!!
资源推荐
资源详情
资源评论
收起资源包目录
基于Javascript和MySQL的影评网站系统源代码+项目说明(个人毕设).zip (233个子文件)
bootstrap.css 123KB
bootstrap.css 123KB
bootstrap.min.css 102KB
bootstrap.min.css 102KB
font-awesome-ie7.min.css 46KB
font-awesome-ie7.min.css 46KB
font-awesome.css 26KB
font-awesome.css 26KB
font-awesome.min.css 21KB
font-awesome.min.css 21KB
bootstrap-theme.css 18KB
bootstrap-theme.css 18KB
bootstrap-theme.min.css 16KB
bootstrap-theme.min.css 16KB
app.css 8KB
app.css 8KB
index.css 2KB
index.css 2KB
bootstrap-ie7.css 1KB
bootstrap-ie7.css 1KB
details.css 964B
details.css 964B
category-list.css 489B
category-list.css 489B
user.css 265B
user.css 265B
fontawesome-webfont.eot 59KB
fontawesome-webfont.eot 59KB
midstars.gif 3KB
midstars.gif 3KB
boxsizing.htc 14KB
boxsizing.htc 14KB
favicon.ico 2KB
favicon.ico 2KB
DoubanServiceImpl.java 7KB
DoubanServiceImpl.java 7KB
HomeController.java 5KB
HomeController.java 5KB
SubjectDao.java 4KB
SubjectDao.java 4KB
SubjectController.java 4KB
SubjectController.java 4KB
ValidatorWrapper.java 4KB
ValidatorWrapper.java 4KB
HttpClientUtils.java 3KB
HttpClientUtils.java 3KB
CommentController.java 3KB
CommentController.java 3KB
AuthenticationFilter.java 3KB
AuthenticationFilter.java 3KB
ContextUtils.java 3KB
ContextUtils.java 3KB
UserController.java 2KB
UserController.java 2KB
QiniuUtils.java 2KB
QiniuUtils.java 2KB
WebUtils.java 2KB
WebUtils.java 2KB
StringMaskHandler.java 2KB
StringMaskHandler.java 2KB
ScheduleUtils.java 2KB
ScheduleUtils.java 2KB
BaseController.java 2KB
BaseController.java 2KB
BaseDao.java 2KB
BaseDao.java 2KB
SecurityTagHandler.java 2KB
SecurityTagHandler.java 2KB
InvalidException.java 1KB
InvalidException.java 1KB
CategoryController.java 1KB
CategoryController.java 1KB
CommentDao.java 1KB
CommentDao.java 1KB
Subject.java 1KB
Subject.java 1KB
OrderBySqlFormulaUtils.java 1KB
OrderBySqlFormulaUtils.java 1KB
ServletListener.java 1KB
ServletListener.java 1KB
PageInfo.java 1KB
PageInfo.java 1KB
UserName.java 1KB
UserName.java 1KB
SubjectServiceImpl.java 1020B
SubjectServiceImpl.java 1020B
UserDao.java 851B
UserDao.java 851B
PlayingDaoTest.java 782B
PlayingDaoTest.java 782B
User.java 772B
User.java 772B
ApplicationUtils.java 668B
ApplicationUtils.java 668B
AbstractSpringTest.java 647B
AbstractSpringTest.java 647B
UserServiceImpl.java 634B
UserServiceImpl.java 634B
Comment.java 622B
Comment.java 622B
共 233 条
- 1
- 2
- 3
资源评论
- Thill_2023-05-04终于找到了超赞的宝藏资源,果断冲冲冲,支持!
onnx
- 粉丝: 9443
- 资源: 5594
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- asp.net 原生js代码及HTML实现多文件分片上传功能(自定义上传文件大小、文件上传类型)
- whl@pip install pyaudio ERROR: Failed building wheel for pyaudio
- Constantsfd密钥和权限集合.kt
- 基于Java的财务报销管理系统后端开发源码
- 基于Python核心技术的cola项目设计源码介绍
- 基于Python及多语言集成的TSDT软件过程改进设计源码
- 基于Java语言的歌唱比赛评分系统设计源码
- 基于JavaEE技术的课程项目答辩源码设计——杨晔萌、李知林、岳圣杰、张俊范小组作品
- 基于Java原生安卓开发的蔚蓝档案娱乐应用设计源码
- 基于Java、Vue、JavaScript、CSS、HTML的毕设设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功