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

Commit a255a3e

Browse files
committed
Merge branch 'develop'
2 parents 975700b + 1dacac1 commit a255a3e

File tree

5 files changed

+108
-20
lines changed

5 files changed

+108
-20
lines changed

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# 接口文档
22

3-
接口文档请查看 [docs/README.md](docs/README.md)
4-
5-
或查看 [在线接口文档](http://111.231.75.86:8000/docs/)
3+
点击查看 [在线接口文档](http://111.231.75.86:8000/docs/)
64

75

86
# 文档预览

docs/README.md

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,18 @@
7575

7676
本系统主要是将从`丁香园`获取的数据重新整合成接口返回出来。
7777

78-
## 全球疫情 :id=statistics
78+
## 最新全球疫情 :id=statistics
7979

80-
获取全球整体疫情统计数据、相关文章、日常建议、推荐信息等;
80+
获取最新获取到的全球整体疫情统计数据、相关文章、日常建议、推荐信息等;
8181

82-
接口地址:/api/statistics/
82+
接口地址:/api/statistics/latest
8383

8484
请求方法:GET
8585

86+
请求示例:
87+
88+
http://111.231.75.86:8000/api/statistics/latest
89+
8690
返回结果:
8791

8892
```
@@ -183,7 +187,52 @@
183187
}
184188
```
185189

186-
## 国家疫情统计
190+
## 全球疫情列表 :id=statistics
191+
192+
获取项目从启动到当前获取到的全部疫情统计数据,分为全球、国内、国际三部分;
193+
194+
接口地址:/api/statistics/
195+
196+
请求方法:GET
197+
198+
请求示例:
199+
200+
http://111.231.75.86:8000/api/statistics/
201+
202+
返回结果:
203+
204+
```
205+
[
206+
{
207+
"globalStatistics": {
208+
"confirmedCount": 2913206,
209+
"curedCount": 826309,
210+
"deadCount": 206245,
211+
"seriousCount": 0,
212+
"currentConfirmedCount": 1880652,
213+
"suspectedCount": 0
214+
},
215+
"domesticStatistics": {
216+
"confirmedCount": 84341,
217+
"curedCount": 78558,
218+
"deadCount": 4643,
219+
"seriousCount": 974,
220+
"currentConfirmedCount": 1140,
221+
"suspectedCount": 1636
222+
},
223+
"internationalStatistics": {
224+
"confirmedCount": 2828865,
225+
"curedCount": 747751,
226+
"deadCount": 201602,
227+
"seriousCount": 0,
228+
"currentConfirmedCount": 1879512,
229+
"suspectedCount": 4
230+
}
231+
}
232+
]
233+
```
234+
235+
## 所有国家疫情
187236

188237
获取各个国家的疫情统计数据;
189238

@@ -221,7 +270,7 @@ http://111.231.75.86:8000/api/countries/?continents=南美洲,北美洲&countryN
221270
]
222271
```
223272

224-
## 某个国家疫情统计
273+
## 某国家疫情
225274

226275
根据国家名称获取某个国家的疫情统计数据;
227276

@@ -252,7 +301,7 @@ http://111.231.75.86:8000/api/countries/巴西/
252301
```
253302

254303

255-
## 中国省份(自治区、直辖市)疫情
304+
## 国内省份(自治区、直辖市)疫情
256305

257306
获取中国各中国省份(自治区、直辖市)的疫情统计数据;
258307

@@ -288,7 +337,7 @@ http://111.231.75.86:8000/api/provinces/?provinceShortNames=四川,香港
288337
]
289338
```
290339

291-
## 某个中国省份(自治区、直辖市)疫情
340+
## 某国内省份(自治区、直辖市)疫情
292341

293342
通过`短省份名`获取某个中国省份(自治区、直辖市)的疫情统计数据;
294343

@@ -320,7 +369,7 @@ http://111.231.75.86:8000/api/provinces/澳门/
320369
}
321370
```
322371

323-
## 中国城市或直辖市某个区疫情
372+
## 国内城市或直辖市某区疫情
324373

325374
获取中国各个城市或直辖市某个区的疫情数据。
326375

@@ -355,7 +404,7 @@ http://111.231.75.86:8000/api/cities/?cityNames=大庆,万州区
355404
]
356405
```
357406

358-
## 某个中国城市或直辖市某个区疫情
407+
## 某国内城市或直辖市某区疫情
359408

360409

361410
接口地址:/api/cities/\<CITY_NAME\>/

ncovapi/serializers.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class RumorSerializer(serializers.Serializer):
6363
score = serializers.IntegerField()
6464
rumorType = serializers.IntegerField()
6565

66-
class StatisticsSerializer(serializers.Serializer):
66+
class LatestStatisticsSerializer(serializers.Serializer):
6767

6868
globalStatistics = StatisticsGroupSerializer()
6969
domesticStatistics = StatisticsGroupSerializer()
@@ -85,6 +85,15 @@ class StatisticsSerializer(serializers.Serializer):
8585
createTime = serializers.DateTimeField()
8686

8787

88+
class StatisticsSerializer(serializers.Serializer):
89+
90+
globalStatistics = StatisticsGroupSerializer()
91+
domesticStatistics = StatisticsGroupSerializer()
92+
internationalStatistics = StatisticsGroupSerializer()
93+
modifyTime = serializers.DateTimeField()
94+
createTime = serializers.DateTimeField()
95+
96+
8897
class ProvinceSerializer(serializers.HyperlinkedModelSerializer):
8998

9099
provinceName = serializers.CharField(read_only=True)

ncovapi/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
app_name = 'ncovapi'
99

1010
urlpatterns = [
11-
path('statistics/', views.StatisticsView.as_view(), name='statistics'),
11+
path('statistics/', views.StatisticsListView.as_view(), name='statistics-list'),
12+
path('statistics/latest', views.LatestStatisticsView.as_view(), name='latest_statistics'),
1213
path('cities/', views.CityListView.as_view(), name='city-list'),
1314
path('cities/<int:pk>/', views.CityRetrieveView.as_view(), name='city-detail'),
1415
path('cities/<str:cityName>/', views.CityRetrieveByNameView.as_view(), name='city-detail-by-name'),

ncovapi/views.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,21 @@
1212
from rest_framework.views import APIView
1313
from rest_framework_extensions.cache.decorators import cache_response
1414

15-
from .serializers import StatisticsSerializer, CitySerializer, \
16-
ProvinceSerializer, CountrySerializer, \
17-
RecommendSerializer, TimelineSerializer
15+
from .serializers import LatestStatisticsSerializer, StatisticsSerializer, \
16+
CitySerializer, ProvinceSerializer, \
17+
CountrySerializer, RecommendSerializer, \
18+
TimelineSerializer
1819
from .models import Crawler, Statistics, WHOArticle, Recommend, \
1920
City, Province, Country
2021
from .filters import CityFilter, ProvinceFilter, CountryFilter
2122

23+
from collections import OrderedDict
2224

2325
TIMEOUT = 60 * 60
2426

25-
class StatisticsView(APIView):
26-
"""统计信息"""
27+
class LatestStatisticsView(APIView):
28+
29+
"""最新统计信息"""
2730

2831
def get_object(self):
2932
try:
@@ -77,9 +80,37 @@ def get_object(self):
7780
@method_decorator(cache_page(TIMEOUT))
7881
def get(self, request):
7982
data = self.get_object()
80-
serializer = StatisticsSerializer(data)
83+
serializer = LatestStatisticsSerializer(data)
8184
return Response(serializer.data)
8285

86+
class StatisticsListView(ListAPIView):
87+
88+
"""统计信息列表"""
89+
90+
serializer_class = StatisticsSerializer
91+
92+
def get_queryset(self):
93+
result = OrderedDict()
94+
for inst in Statistics.objects.all():
95+
crawler_id = inst.crawler_id
96+
country_type = inst.countryType
97+
if country_type == Statistics.GLOBAL:
98+
statistics = result.setdefault(crawler_id, {})
99+
statistics['globalStatistics'] = inst
100+
elif country_type == Statistics.DOMESTIC:
101+
statistics = result.setdefault(crawler_id, {})
102+
statistics['domesticStatistics'] = inst
103+
elif country_type == Statistics.INTERNATIONAL:
104+
statistics = result.setdefault(crawler_id, {})
105+
statistics['internationalStatistics'] = inst
106+
statistics = result.setdefault(crawler_id, {})
107+
statistics['modifyTime'] = inst.crawler.modifyTime
108+
statistics['createTime'] = inst.crawler.createTime
109+
return reversed(result.values())
110+
111+
@method_decorator(cache_page(TIMEOUT))
112+
def dispatch(self, *args, **kwargs):
113+
return super(StatisticsListView, self).dispatch(*args, **kwargs)
83114

84115
class ProvinceListView(ListAPIView):
85116

0 commit comments

Comments
 (0)