Skip to content
This repository was archived by the owner on May 5, 2023. It is now read-only.

Commit 9f3ff39

Browse files
committed
Merge branch 'develop'
2 parents 41b115a + 82a200d commit 9f3ff39

File tree

7 files changed

+375
-23
lines changed

7 files changed

+375
-23
lines changed

ncovapi/admin.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,49 @@ class StatisticsAdmin(BaseAdmin):
3737
list_filter = ('countryType', )
3838

3939

40+
@admin.register(models.Notice)
41+
class NoticeAdmin(BaseAdmin):
42+
43+
list_display = (
44+
'id', 'crawler', 'remarks', 'notes', 'generalRemark'
45+
)
46+
47+
@admin.register(models.WHOArticle)
48+
class WHOArticleAdmin(BaseAdmin):
49+
50+
list_display = ('id', 'title', 'linkUrl', 'imgUrl')
51+
52+
@admin.register(models.Recommend)
53+
class RecommendAdmin(BaseAdmin):
54+
55+
list_display = (
56+
'id', 'title', 'linkUrl', 'imgUrl', 'contentType',
57+
'countryType', 'recordStatus')
58+
59+
@admin.register(models.Timeline)
60+
class TimelineAdmin(BaseAdmin):
61+
62+
list_display = (
63+
'id', 'title', 'summary', 'pubDateStr', 'infoSource', 'sourceUrl')
64+
65+
@admin.register(models.Wiki)
66+
class WikiAdmin(BaseAdmin):
67+
68+
list_display = ('id', 'title', 'linkUrl', 'imgUrl', 'description')
69+
70+
@admin.register(models.GoodsGuide)
71+
class GoodsGuideAdmin(BaseAdmin):
72+
73+
list_display = (
74+
'categoryName', 'title', 'recordStatus', 'contentImgUrls')
75+
76+
@admin.register(models.Rumor)
77+
class RumorAdmin(BaseAdmin):
78+
79+
list_display = (
80+
'title', 'mainSummary', 'summary', 'body',
81+
'sourceUrl', 'score', 'rumorType')
82+
4083
@admin.register(models.City)
4184
class CityAdmin(BaseAdmin):
4285

ncovapi/models.py

Lines changed: 119 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ class Statistics(models.Model):
2020
GLOBAL = 0
2121
DOMESTIC = 1
2222
INTERNATIONAL = 2
23-
24-
countryType = models.IntegerField(choices=(
23+
COUNTRY_TYPES = (
2524
(GLOBAL, '全球'),
2625
(DOMESTIC, '国内'),
2726
(INTERNATIONAL, '国外')
28-
))
27+
)
28+
29+
countryType = models.IntegerField(choices=COUNTRY_TYPES)
2930
currentConfirmedCount = models.IntegerField(default=0)
3031
confirmedCount = models.IntegerField(default=0)
3132
suspectedCount = models.IntegerField(default=0)
@@ -57,6 +58,121 @@ class Meta:
5758
verbose_name = '注意信息'
5859
verbose_name_plural = '注意信息'
5960

61+
class WHOArticle(models.Model):
62+
63+
title = models.CharField(max_length=100)
64+
linkUrl = models.URLField(max_length=200)
65+
imgUrl = models.URLField(max_length=200)
66+
crawler = models.OneToOneField(
67+
"Crawler", on_delete=models.CASCADE, related_name="WHO_article",
68+
db_column="crawlerId"
69+
)
70+
71+
class Meta:
72+
verbose_name = 'WHO 文章'
73+
verbose_name_plural = 'WHO 文章'
74+
75+
class Recommend(models.Model):
76+
77+
CONTENT_TYPES = [
78+
(1, '我要出行'),
79+
(2, '家有小孩'),
80+
(3, '未知'),
81+
(4, '我宅在家'),
82+
(5, '未知'),
83+
(6, '未知'),
84+
(7, '未知')
85+
]
86+
GLOBAL = 0
87+
DOMESTIC = 1
88+
INTERNATIONAL = 2
89+
COUNTRY_TYPES = (
90+
(GLOBAL, '全球'),
91+
(DOMESTIC, '国内'),
92+
(INTERNATIONAL, '国外')
93+
)
94+
95+
title = models.CharField(max_length=100)
96+
linkUrl = models.URLField(max_length=200)
97+
imgUrl = models.URLField(max_length=200)
98+
contentType = models.IntegerField(choices=CONTENT_TYPES)
99+
recordStatus = models.IntegerField()
100+
countryType = models.IntegerField(choices=COUNTRY_TYPES)
101+
sort = models.IntegerField()
102+
crawler = models.ForeignKey(
103+
"Crawler", on_delete=models.CASCADE, related_name="recommends",
104+
db_column="crawlerId"
105+
)
106+
107+
class Meta:
108+
verbose_name = '防护知识'
109+
verbose_name_plural = '防护知识'
110+
111+
class Timeline(models.Model):
112+
113+
pubDate = models.IntegerField()
114+
pubDateStr = models.CharField(max_length=50)
115+
title = models.CharField(max_length=100)
116+
summary = models.TextField()
117+
infoSource = models.CharField(max_length=50)
118+
sourceUrl = models.URLField(max_length=200)
119+
crawler = models.ForeignKey(
120+
"Crawler", on_delete=models.CASCADE, related_name="timelines",
121+
db_column="crawlerId"
122+
)
123+
124+
class Meta:
125+
verbose_name = '时间线事件'
126+
verbose_name_plural = '时间线事件'
127+
128+
class Wiki(models.Model):
129+
130+
title = models.CharField(max_length=100)
131+
linkUrl = models.URLField(max_length=200)
132+
imgUrl = models.URLField(max_length=200)
133+
description = models.TextField()
134+
crawler = models.ForeignKey(
135+
"Crawler", on_delete=models.CASCADE, related_name="wikis",
136+
db_column="crawlerId"
137+
)
138+
139+
class Meta:
140+
verbose_name = 'Wiki'
141+
verbose_name_plural = 'Wiki'
142+
143+
class GoodsGuide(models.Model):
144+
145+
title = models.CharField(max_length=100)
146+
categoryName = models.CharField(max_length=50)
147+
recordStatus = models.IntegerField()
148+
contentImgUrls = ListCharField(
149+
models.CharField(max_length=100), size=10, max_length=100*11)
150+
crawler = models.ForeignKey(
151+
"Crawler", on_delete=models.CASCADE, related_name="goods_guides",
152+
db_column="crawlerId"
153+
)
154+
155+
class Meta:
156+
verbose_name = '购物指南'
157+
verbose_name_plural = '购物指南'
158+
159+
class Rumor(models.Model):
160+
161+
title = models.CharField(max_length=100)
162+
mainSummary = models.TextField()
163+
summary = models.TextField()
164+
body = models.TextField()
165+
sourceUrl = models.URLField(max_length=200)
166+
score = models.IntegerField()
167+
rumorType = models.IntegerField()
168+
crawler = models.ForeignKey(
169+
"Crawler", on_delete=models.CASCADE, related_name="rumors",
170+
db_column="crawlerId"
171+
)
172+
173+
class Meta:
174+
verbose_name = '辟谣与防护'
175+
verbose_name_plural = '辟谣与防护'
60176

61177
class Province(models.Model):
62178

ncovapi/serializers.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,58 @@ class StatisticsGroupSerializer(serializers.Serializer):
1111
curedCount = serializers.IntegerField()
1212
deadCount = serializers.IntegerField()
1313

14+
15+
class WHOArticleSerializer(serializers.Serializer):
16+
17+
title = serializers.CharField(max_length=100)
18+
linkUrl = serializers.URLField()
19+
imgUrl = serializers.URLField()
20+
21+
22+
class RecommendSerializer(serializers.Serializer):
23+
24+
title = serializers.CharField()
25+
linkUrl = serializers.URLField()
26+
imgUrl = serializers.URLField()
27+
contentType = serializers.IntegerField()
28+
recordStatus = serializers.IntegerField()
29+
countryType = serializers.IntegerField()
30+
31+
32+
class TimelineSerializer(serializers.Serializer):
33+
34+
pubDate = serializers.IntegerField()
35+
pubDateStr = serializers.CharField()
36+
title = serializers.CharField()
37+
summary = serializers.CharField()
38+
infoSource = serializers.CharField()
39+
sourceUrl = serializers.URLField()
40+
41+
class WikiSerializer(serializers.Serializer):
42+
43+
title = serializers.CharField()
44+
linkUrl = serializers.URLField()
45+
imgUrl = serializers.URLField()
46+
description = serializers.CharField()
47+
48+
class GoodsGuideSerializer(serializers.Serializer):
49+
50+
title = serializers.CharField()
51+
categoryName = serializers.CharField()
52+
recordStatus = serializers.IntegerField()
53+
contentImgUrls = serializers.ListField(
54+
serializers.URLField(max_length=200), max_length=10)
55+
56+
class RumorSerializer(serializers.Serializer):
57+
58+
title = serializers.CharField()
59+
mainSummary = serializers.CharField()
60+
summary = serializers.CharField()
61+
body = serializers.CharField()
62+
sourceUrl = serializers.URLField()
63+
score = serializers.IntegerField()
64+
rumorType = serializers.IntegerField()
65+
1466
class StatisticsSerializer(serializers.Serializer):
1567

1668
globalStatistics = StatisticsGroupSerializer()
@@ -23,6 +75,12 @@ class StatisticsSerializer(serializers.Serializer):
2375
child=serializers.CharField(max_length=100), max_length=10
2476
)
2577
generalRemark = serializers.CharField()
78+
WHOArticle = WHOArticleSerializer()
79+
recommends = RecommendSerializer(many=True)
80+
timelines = TimelineSerializer(many=True)
81+
wikis = WikiSerializer(many=True)
82+
goodsGuides = GoodsGuideSerializer(many=True)
83+
rumors = RumorSerializer(many=True)
2684
modifyTime = serializers.IntegerField()
2785
createTime = serializers.IntegerField()
2886

ncovapi/views.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
from rest_framework_extensions.cache.decorators import cache_response
1414

1515
from .serializers import StatisticsSerializer, CitySerializer, \
16-
ProvinceSerializer, CountrySerializer
17-
from .models import Crawler, Statistics, City, Province, Country
16+
ProvinceSerializer, CountrySerializer, \
17+
RecommendSerializer, TimelineSerializer
18+
from .models import Crawler, Statistics, WHOArticle, Recommend, \
19+
City, Province, Country
1820
from .filters import CityFilter, ProvinceFilter, CountryFilter
1921

2022

@@ -55,6 +57,21 @@ def get_object(self):
5557
result['remarks'] = notice.remarks
5658
result['notes'] = notice.notes
5759
result['generalRemark'] = notice.generalRemark
60+
try:
61+
article = crawler.WHO_article
62+
except WHOArticle.DoesNotExist:
63+
result['WHOArticle'] = None
64+
else:
65+
result['WHOArticle'] = {
66+
'title': article.title,
67+
'linkUrl': article.linkUrl,
68+
'imgUrl': article.imgUrl
69+
}
70+
result['recommends'] = crawler.recommends.all()
71+
result['timelines'] = crawler.timelines.all()
72+
result['wikis'] = crawler.wikis.all()
73+
result['goodsGuides'] = crawler.goods_guides.all()
74+
result['rumors'] = crawler.rumors.all()
5875
return result
5976

6077
@method_decorator(cache_page(TIMEOUT))

spider/nCoV/items.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,37 @@ class NoticeItem(DjangoItem):
2525

2626
django_model = models.Notice
2727

28+
29+
class WHOArticleItem(DjangoItem):
30+
31+
django_model = models.WHOArticle
32+
33+
34+
class RecommendItem(DjangoItem):
35+
36+
django_model = models.Recommend
37+
38+
39+
class TimelineItem(DjangoItem):
40+
41+
django_model = models.Timeline
42+
43+
44+
class WikiItem(DjangoItem):
45+
46+
django_model = models.Wiki
47+
48+
49+
class GoodsGuideItem(DjangoItem):
50+
51+
django_model = models.GoodsGuide
52+
53+
54+
class RumorItem(DjangoItem):
55+
56+
django_model = models.Rumor
57+
58+
2859
class ProvinceItem(DjangoItem):
2960

3061
django_model = models.Province

0 commit comments

Comments
 (0)