加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

使用Redis和Python构建一个共享单车的应用程序

发布时间:2018-11-15 18:24:37 所属栏目:编程 来源:Tague Griffith
导读:进修怎样行使 Redis 和 Python 构建一个位置感知的应用措施。 我常常出差。但不是一个汽车狂热分子,以是当我有空闲时,我更喜畛刳都市中散步可能骑单车。我旅行过的很多都市都有共享单车体系,你可以租个单车用几个小时。大大都体系都有一个应用措施来帮
副问题[/!--empirenews.page--]

/uploads/allimg/c181115/1542221004K10-131F.jpg

进修怎样行使 Redis 和 Python 构建一个位置感知的应用措施。

我常常出差。但不是一个汽车狂热分子,以是当我有空闲时,我更喜畛刳都市中散步可能骑单车。我旅行过的很多都市都有共享单车体系,你可以租个单车用几个小时。大大都体系都有一个应用措施来辅佐用户定位和租用他们的单车,但对付像我这样的用户来说,在一个处所可以得到可租赁的都市中全部单车的信息会更有辅佐。

为了办理这个题目而且展示开源的强盛尚有为 Web 应用措施添加位置感知的成果,我组合了可用的果真的共享单车数据、Python 编程说话以及开源的 Redis 内存数据布局处事,用来索引和查询地理空间数据。

由此降生的共享单车应用措施包括来自许多差异的共享体系的数据,包罗纽约市的 Citi Bike 共享单车体系(LCTT 译注:Citi Bike 是纽约市的一个私营民众单车体系。在 2013 年 5 月 27 日正式营运,是美国最大的民众单车体系。Citi Bike 的名称有两层意思。Citi 是打算赞助商花旗银行(CitiBank)的名字。同时,Citi 和英文中“都市(city)”一词的读音沟通)。它操作了花旗单车体系提供的 通用共享单车数据流General Bikeshare Feed,并操作其数据演示了一些行使 Redis 地理空间数据索引的成果。 花旗单车数据可凭证 花旗单车数据容许协议 提供。

通用共享单车数据流类型

通用共享单车数据流类型General Bikeshare Feed Specification(GBFS)是由 北美共享单车协会 开拓的 开放数据类型,旨在使舆图措施和运输措施更轻易的将共享单车体系添加到对应平台中。 今朝天下上有 60 多个差异的共享体系行使该类型。

Feed 流由几个简朴的 JSON 数据文件构成,个中包括体系状态的信息。 Feed 流以一个顶级 JSON 文件开头,其引用了子数据流的 URL:

  1. {
  2. "data": {
  3. "en": {
  4. "feeds": [
  5. {
  6. "name": "system_information",
  7. "url": "https://gbfs.citibikenyc.com/gbfs/en/system_information.json"
  8. },
  9. {
  10. "name": "station_information",
  11. "url": "https://gbfs.citibikenyc.com/gbfs/en/station_information.json"
  12. },
  13. . . .
  14. ]
  15. }
  16. },
  17. "last_updated": 1506370010,
  18. "ttl": 10
  19. }

第一步是行使 system_informationstation_information 的数据将共享单趁魅站的信息加载到 Redis 中。

system_information 提供体系 ID,体系 ID 是一个简短编码,可用于为 Redis 键名建设定名空间。 GBFS 类型没有指定体系 ID 的名目,但确保它是全局独一的。很多共享单车数据流行使诸如“coastbikeshare”,“boisegreenbike” 可能 “topekametro_bikes” 这样的短名称作为体系 ID。其他的行使常见的有地理缩写,譬喻 NYC 可能 BA,而且行使通用独一标识符(UUID)。 这个共享单车应用措施行使该标识符作为前缀来为指定体系结构独一键。

station_information 数据流提供构成整个体系的共享单趁魅站的静态信息。趁魅站由具有多个字段的 JSON 工具暗示。趁魅站工具中有几个必填字段,用于提供物理单趁魅站的 ID、名称和位置。尚有几个可选字段提供有效的信息,譬喻最近的十字路口、可接管的付款方法。这是共享单车应用措施这一部门的首要信息来历。

成立数据库

我编写了一个示例应用措施 loadstationdata.py,它仿照后端历程中从外部源加载数据时会产生什么。

查找共享单趁魅站

从 GitHub 上 GBFS 客栈中的 systems.csv 文件开始加载共享单车数据。

客栈中的 systems.csv 文件提供已注册的共享单车体系及可用的 GBFS 数据流的发明 URLdiscovery URL。 这个发明 URL 是处理赏罚共享单车信息的出发点。

load_station_data 措施获取体系文件中找到的每个发明 URL,并行使它来查找两个子数据流的 URL:体系信息和趁魅站信息。 体系信息提供提供了一条要害信息:体系的独一 ID。 (留意:体系 ID 也在 systems.csv 文件中提供,但文件中的某些标识符与数据流中的标识符不匹配,因此我老是从数据流中获取标识符。)体系上的具体信息,好比共享单车 URL、电话号码和电子邮件, 可以在措施的后续版本中添加,因此行使 ${system_id}:system_info 这个键名将数据存储在 Redis 中。

载入趁魅站数据

趁魅站信息提供体系中每个趁魅站的数据,包罗该体系的位置。load_station_data 措施遍历趁魅站数据流中的每个趁魅站,并行使 ${system_id}:station:${station_id} 情势的键名将每个趁魅站的数据存储到 Redis 中。 行使 GEOADD 呼吁将每个趁魅站的位置添加到共享单车的地理空间索引中。

更新数据

在后续运行中,我不但愿代码从 Redis 中删除全部 Feed 数据并将其从头加载到空的 Redis 数据库中,因此我细心思量了如那里理赏罚数据的原地更新。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读