-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathmodels.py
263 lines (190 loc) · 9.96 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# coding=utf-8
from datetime import datetime
from mongoengine import * # noqa
from conf import HOST, PORT, DATABASE
connect(DATABASE, host=HOST, port=PORT)
COLORS = ((0, u'黑白'), (1, '彩色'))
class MtimeMixin(object):
'''大部分模型都有movieid'''
movieid = IntField(required=True) # 基础类
class AliasName(Document):
'''数据库中存在的名字和别名(英文名等)'''
name = StringField(max_length=60, required=True) # 数据库中存在的名字
alias = ListField(StringField(max_length=60, required=True)) # 这个人的别名
class Actor(EmbeddedDocument):
'''演员信息'''
mid = IntField(default=0, required=True) # 演员链接的唯一ID
poster = StringField(max_length=100) # 海报缩略图
name = StringField(max_length=60, required=True) # 演员名字
play = StringField(max_length=60, required=True) # 剧中人物
class Director(EmbeddedDocument):
'''导演信息'''
mid = IntField(default=0) # 演员链接的唯一ID
name = StringField(max_length=60) # 导演名字
cnname = StringField(max_length=60) # 可能有中文翻译过来的名字
poster = StringField(max_length=100) # 海报缩略图
class Fullcredits(Document, MtimeMixin):
'''演职员表'''
director = ListField(EmbeddedDocumentField(Director)) # 导演
writer = ListField(StringField(max_length=30, required=True)) # 编剧
actor = ListField(EmbeddedDocumentField(Actor)) # 演员
produced = ListField(StringField(max_length=60, required=True)) # 制作人
originalmusic = ListField(
StringField(max_length=60, required=True)) # 原创音乐
cinematography = ListField(StringField(max_length=60, required=True)) # 摄影
filmediting = ListField(StringField(max_length=60, required=True)) # 剪辑
# casting = ListField(StringField(max_length=60, required=True)) # 选角导演
# productiondesigner = ListField(StringField(max_length=60,
# required=True)) # 艺术指导
artdirection = ListField(StringField(max_length=60, required=True)) # 美术设计
# setdecoration = ListField(StringField(max_length=60, required=True)) #
# 布景师
costumedesign = ListField(
StringField(max_length=60, required=True)) # 服装设计
# visualeffects = ListField(StringField(max_length=60, required=True)) #
# 视觉特效
assistantdirector = ListField(
StringField(max_length=60, required=True)) # 副导演/助理导演
class EmbeddedReleaseInfo(EmbeddedDocument):
encountry = StringField(max_length=30, required=True) # 英文国家名
cncountry = StringField(max_length=30, required=True) # 中文国家名
releasetime = DateTimeField(default=datetime.now(), required=True) # 上映时间
# 电影信息
class Movie(Document, MtimeMixin):
# name = StringField(max_length=30, required=True) # 电影名
rating = FloatField(required=True) # 评分
#evaluate = StringField(max_length=30, required=True) # 评价
ratingcount = IntField(default=0, required=True) # 评分人数
want = IntField(default=0, required=True) # 想看
favorited = IntField(default=0, required=True) # 收藏数
# poster = ListField(EmbeddedDocumentField(Poster)) # 海报缩略图
#fullcredits = ReferenceField(Fullcredits)
#details = ReferenceField(Details)
#plot = ListField(EmbeddedDocumentField(Plot))
#awards = ListField(EmbeddedDocumentField(Awards))
#scenes = ReferenceField(Scenes)
#company = ReferenceField(Company)
class EmbeddedContent(EmbeddedDocument):
type = StringField(max_length=10, required=True) # 比如文本,视频,图片, 内嵌
content = StringField() # 内容
class EmbeddedComment(EmbeddedDocument):
name = StringField(max_length=30, required=True) # 发评论人
commenter_url = StringField(max_length=100) # 评论人的url
ac = IntField(default=0, required=True) # 点赞数
rc = IntField(default=0, required=True) # 转发数
cc = IntField(default=0, required=True) # 评论数
url = StringField(max_length=100, required=True) # 原文url
poster = StringField(max_length=100) # 原文的海报图
image = StringField(max_length=120, required=True) # 评论人图片url
title = StringField(max_length=60) # 标题
score = FloatField() # 评分, 只是看过的人会评分,但不评分
content = ListField(EmbeddedDocumentField(EmbeddedContent)) # 评论内容
shortcontent = StringField(default='') # 评论内容的简略, 也就是mtime直接显示的那部分
publishdate = DateTimeField(default=datetime.now()) # 发表时间
meta = {'allow_inheritance': True}
class EmbeddedMicroComment(EmbeddedComment):
content = StringField() # 评论内容格式不同
class Comment(Document, MtimeMixin):
comments = ListField(EmbeddedDocumentField(EmbeddedComment)) # 长评
class MicroComment(Document, MtimeMixin):
microcomments = ListField(
EmbeddedDocumentField(EmbeddedMicroComment)) # 微评
class Company(EmbeddedDocument):
'''制作/发行信息'''
# release = ListField(StringField()) # 发行
# make = ListField(StringField()) # 制作
# stunt = ListField(StringField()) # 特技制作
# other = ListField(StringField()) # 其他公司
name = StringField(max_length=60, required=True) # 公司名字
country = StringField(max_length=30) # 公司所在国家
# Delete in next version
class ScenesComment(EmbeddedDocument):
content = StringField(required=True) # 评论内容
who = StringField(max_length=30, required=True) # 评论者
class Dialogue(EmbeddedDocument):
endialogue = StringField(required=True) # 英文对白
cndialogue = StringField(required=True) # 中文对白翻译
# END
# 幕后花絮
class EmbeddedScenes(EmbeddedDocument):
title = StringField(max_length=30, required=True) # 主题
content = ListField(StringField())
class Scenes(Document, MtimeMixin):
'''幕后揭秘 update:新版本很多字段都没有了'''
#comment = ListField(EmbeddedDocumentField(ScenesComment))
# make = ListField(StringField()) # 幕后制作
scene = ListField(EmbeddedDocumentField(EmbeddedScenes)) # 花絮
#dialogue = ListField(EmbeddedDocumentField(Dialogue))
# goofs = ListField(StringField()) # 穿帮镜头
# 获奖记录
class Awardspeople(EmbeddedDocument):
'''s实现起来比较麻烦, 展示没用'''
name = ListField(StringField(max_length=60, required=True)) # 获奖或者提名人
awardtype = StringField(max_length=30, required=True) # 具体奖项名字 比如最佳影片
class Awardsinfo(EmbeddedDocument):
type = StringField(max_length=30, required=True) # 提名或者获奖
#peoples = ListField(StringField(max_length=30))
# Hacks: 内嵌的列表第一样式上面Awardspeople的name, 第二项是awardtype
peoples = ListField(ListField(required=True)) # 获奖的人, 但不是必选,有些奖项是整个电影的成就
class Oneawards(EmbeddedDocument):
name = StringField(max_length=30, required=True) # 奖项名, 比如 奥斯卡金像奖
period = IntField(required=True) # 届
year = IntField(required=True) # 年份
# nominatecount = IntField(required=True) # 提名的次数 这个其实可以根据具体情况计算
# awardcount = IntField(required=True) # 获奖次数
awards = ListField(EmbeddedDocumentField(Awardsinfo)) # 获奖的具体情况: 奖项-人物
# nominate = ListField(EmbeddedDocumentField(Awardinfo)) # 提名的具体情况
class Awards(Document, MtimeMixin):
'''获奖记录'''
awards = ListField(EmbeddedDocumentField(Oneawards))
# end
class Plot(Document, MtimeMixin):
'''剧情'''
content = ListField(StringField()) # 剧情片段
# publisher = StringField() # 发布者, 新版已经不存在
# publishdate = DateTimeField(default=datetime.now(), required=True) #
# 发布时间, 新版已经不存在
class Details(Document, MtimeMixin):
'''详细信息'''
enalias = ListField(StringField()) # 中文片名
cnalias = ListField(StringField()) # 外文片名
# type = ListField(StringField()) # 电影类型
time = StringField(max_length=60) # 片长
# country = StringField(max_length=60, required=True) # 国家/地区
language = ListField(StringField(max_length=10)) # 对白语言
# color = StringField(required=True, choices=COLORS) # 色彩
# format = StringField(max_length=30, required=True) # 幅面
# mixin = ListField(StringField(max_length=20)) # 混音
# mpaa = StringField() # MPAA评级
# level = ListField(StringField(max_length=30)) # 级别
cost = StringField() # 制作成本
date = ListField(DateTimeField()) # 拍摄日期
# camera = StringField() # 摄影机
# filmformat = StringField() # 摄制格式
# printformat = StringField() # 洗印格式
release = ListField(EmbeddedDocumentField(EmbeddedReleaseInfo)) # 新增的发布情况
publish = ListField(EmbeddedDocumentField(Company)) # 发行公司
make = ListField(EmbeddedDocumentField(Company)) # 制作公司
site = ListField(StringField(max_length=60, required=True)) # 官方网址
# 关联电影?
class IdFinished(Document, MtimeMixin):
'''完成的电影ids, 防各种原因重新抓取'''
year = IntField(required=True) # 分配的电影的年份
ids = ListField(required=True) # 电影唯一id
meta = {
'indexes': ['-year']
}
class YearFinished(Document):
'''完成的电影的年份'''
year = IntField(required=True) # 完成的年份
meta = {
'indexes': ['-year'],
'ordering': ['-year']
}
class EmbeddedCharacter(EmbeddedDocument):
'''角色介绍, 新版增加'''
bigposter = StringField(max_length=100) # 角色大图, 小图在演职员表里面会记录
name = StringField(max_length=30, required=True) # 角色
introduction = StringField() # 角色介绍
class Character(Document, MtimeMixin):
character = ListField(EmbeddedDocumentField(EmbeddedCharacter))