博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
“日常研究”之 respage02:共享单车数据接口化
阅读量:7107 次
发布时间:2019-06-28

本文共 3130 字,大约阅读时间需要 10 分钟。

采集部署和入库

由于我们使用了多进程的方式做 spiker,所以就不能直接使用如下方式来入库了

python spiker.py | python xxx | python yyy && python redisToMysql.py复制代码

只能在通过整个主进程结束之后,通过获取主进程的返回结果来决定是否做入库操作:

python spiker.py | python format.py | python writeToRedis.pyif [ "$?" == "0" ]; then    python redisToMysql.pyfi复制代码

入库后的格式尽量简单:

mysql> select * from respage02;+-----+------------+------------+-------------+--------------+-------+------+| id  | bikeid     | day        | lat         | lng          | time  | type |+-----+------------+------------+-------------+--------------+-------+------+|   1 | 8620750656 | 2018-11-07 | 29.04729065 | 119.64855231 | 14:56 | mb   ||   2 | 8620762418 | 2018-11-07 | 29.04842459 | 119.64730693 | 14:56 | mb   ||   3 | 8620663052 | 2018-11-07 | 29.08465714 | 119.66206422 | 16:53 | mb   |复制代码

接口化

还是在 respage01 的 django 项目上直接新增接口便可。

新增 URL

urlpatterns = [      url(r'v1/respage01/$', views.Respage01.as_view(), name='Respage01'),    url(r'v1/respage02/$', views.Respage02.as_view(), name='Respage02'),   ]复制代码

新增 model

class Respage02Info(models.Model):    """    respage 02 相关的数据    """    time = models.CharField(max_length=100)    day = models.CharField(max_length=100)    bikeid = models.CharField(max_length=200)    lat = models.FloatField()    lng = models.FloatField()    type = models.CharField(max_length=100)    class Meta:        db_table = "respage02"复制代码

新增序列化

class Respage02Serializer(serializers.HyperlinkedModelSerializer):    """    序列化Respage02相关的数据    """    class Meta:        model = Respage02Info        fields = ('time', 'lat', 'lng', 'bikeid', 'type', 'day')复制代码

新增业务逻辑 (view)

class Respage02(APIView):    """    获取respage02相关的数据    """    authentication_classes = []    permission_classes = []    def get(self, request, format=None):        req = request.query_params        if 'type' not in req:            return Response({}, status=status.HTTP_400_BAD_REQUEST)			// 获取某一天内最近时间点的最新数据        if req['type'] == 'now':            if 'day' not in req:                return Response({}, status=status.HTTP_400_BAD_REQUEST)            timelist = Respage02Info.objects.distinct().values("time").filter(day=req['day']).order_by('-time').all()            now = timelist[0]['time']            queryset = Respage02Info.objects.filter(day=req['day']).filter(time=now)            serializer = Respage02Serializer(queryset, many=True)        // 获取某一天内的所有时间点列表        if req['type'] == 'timelist':            if 'day' not in req:                return Response({}, status=status.HTTP_400_BAD_REQUEST)            timelist = Respage02Info.objects.distinct().values("time").filter(day=req['day']).order_by('time').all()            return Response(timelist, status=status.HTTP_200_OK)        // 获取某一天内某一时间点的单车分布数据        if req['type'] == 'location':            if 'day' not in req or 'time' not in req:                return Response({}, status=status.HTTP_400_BAD_REQUEST)            queryset = Respage02Info.objects.filter(day=req['day']).filter(time=req['time'])            serializer = Respage02Serializer(queryset, many=True)        return Response(serializer.data, status=status.HTTP_200_OK)复制代码

测试

部署结束

接口相关代码: 采集相关代码:

转载地址:http://hvvhl.baihongyu.com/

你可能感兴趣的文章
解决PXE批量网络安装Linux系统时kickstart自动识别硬盘名称的问题的方案
查看>>
JVM调优实战
查看>>
前端资源(4)
查看>>
开启多台GuestOS提示无loop设备可用
查看>>
PHP编写一些检查项函数
查看>>
笨鸟先飞学编程系列之二 基础代码的编写2(转)
查看>>
samza快速理解
查看>>
spark streaming容错机制
查看>>
空间和数据库存储的区别是什么
查看>>
我的友情链接
查看>>
新站不带www域名显露出来当天快照
查看>>
[图灵程序设计丛书].高效算法:竞赛、应试与提高必修128例.pdf
查看>>
二叉树的实现及其可视化
查看>>
Android流行样式书签
查看>>
Servlet详解
查看>>
Ext 表单与输入控件 下拉框
查看>>
CentOS 6 启动流程
查看>>
第二个python爬虫 多页面抓取美女图片
查看>>
jpa多数据源配置参考链接
查看>>
Linux学习日志之Linux常用命令总结
查看>>