pythoncamp0

Let's do it together:智能购书订单生成

plan beta1

终极任务内容设想

将开智推荐书籍整理的豆瓣豆列,一键生成可购买且价格最优的购书订单组合。

注:本主题灵感来自 pythoncamp0 上海小组第一次线下聚会头脑风暴(2015/04/25)。感谢当时参与讨论的 @大猫Felix、@阡陌(cici1989)、@cp4、@石子佳。

解决了什么问题?

  1. 节省了从书籍推荐到购书之间的时间。
  2. 不同平台同一书籍的价格往往不同,需要生成价格最优的购物车组合。
  3. 当书籍缺货时,不能在同一平台买齐所有书籍,需要拆分订单。

基础信息及限制条件

  1. 每本书都对应唯一书籍 ISBN 值。
  2. 暂时考虑亚马逊、当当、京东三家。三家对应的起送价格和不满起送价的邮费分别为 99元|5元、79元|5元、49元|5元。
  3. 只考虑平台自营书籍,即限制每本书在同一时刻同一平台只有唯一价格。
  4. 不考虑电子书。
  5. 讨论价格最优时,暂不考虑满减等计算困难的活动。(如提前完成,可以作为进阶任务。)
  6. 豆瓣本身使用 python 写的,一定有可以调用的包。

难点及解决方案预判

  1. 输入书籍 list,输出购书组合,实际上是一个很长的任务链,应当进行拆分。
  2. 部分平台同时提供书籍的纸质版和电子版,但使用的是一个 ISBN,要给予区分。
  3. 可能出现部分书籍在所有平台都缺货的情况。此时应尽可能购买更多书籍。
  4. 每个平台都有起始运费,应当考虑。
  5. 不同平台缺货书籍不同,这是个大坑。以购买更多的书为前提。

任务梳理及拆分

  • IMPORT: 书籍及对应在 3 个不同平台的价格
  • PROCESS:
    • 有 m 本书,每本书 3 种价格,总价格有 3^m 个组合。
      • 每种平台都有付邮费和不付邮费两种情况,所以考虑邮费的话,共 8*(3^m)个价格组合,取最低的一种。
        • 因为最后选价格最低的组合,所以可以定义缺货书籍的价格为一个较大值(比如10000),这样就可以价格的方式淘汰缺货的组合。
  • EXPORT: 购物车转跳链接

step1:获取欲购买书籍列表

  • INPUT: 网站地址(豆瓣豆列链接)
  • PROCESS:
    • 搜索抓取豆瓣豆列的数据的 py 模块
      • 实际上从豆列链接到 ISBN 要经过两层:豆列--》书籍 ITEM--》对应的 ISBN
    • 无法抓取:可以先手动输入 ISBN 的 list
  • OUTPUT: 含有 m 个 ISBN 值的 list(假设豆列中有 m 本书)

step2:获取对应书籍的在不同网站的价格

  • INPUT: 含有 m 个 ISBN 值的 list
  • PROCESS:
    • 根据 list 生成书籍的 price list
    • list 中书籍为缺货状态时,定义该书籍价格为较大值(10000)
  • OUTPUT: 书籍 list

step3:生成价格最优的组合

  • INPUT: 书籍 list
  • PROCESS:
    • 搜索算法模块
    • 自己想
  • OUTPUT:3个不同平台的图书购买组合(list, ISBN),亚马逊(A1+A2+...+An)+京东(J1+J2+..+JN)+当当(D1+D2+...+Dn)

step4:转跳到对应的网站购物车(此步骤没想明白,可能有坑)

  • INPUT: 不同平台的图书购买组合,亚马逊(A1+A2+...+An)+京东(J1+J2+..+JN)+当当(D1+D2+...+Dn)
  • PROCESS:
    • 搜索模块
    • 没有模块
      • 通过 ISBN 反向链接网站的书籍 ITEM?
  • OUTPUT:转跳链接

进阶任务

  • 扩展比价的平台数量
  • 增加考虑满减活动
    • 要增加书籍是否在满减范围的判断
    • 满减活动的具体形式和金额可以手动输入

队友招募

  • 可能需要 3 个队友,每人负责一个 step。
  • 由于我的进度较慢(目前只到点彩画板),对代码和模块不够熟悉,需要 1 个完成之前所有进度的伙伴,来写前后的接口。
  • 由于经验有限,应该还没有遍历所有的可能性。希望有队友可以补充。
  • 上海的小伙伴优先。

.

QED