Ali工程师怎样叫外卖

摘要: 为了缓解订餐的沉闷,来自高德的Ali工程师勤硕,用技术做了一个极度幽默的业务,希望能给你带来一些启发,让我们一起头睹为快工作、认真生活。

现象再现

“啪啪啪…”,在一阵急促的键盘敲击声中,时间不知不觉已经到了4点五十八分,作者早就坐在显示屏前超过一个钟头了,办公室又热又闷,可以一目了解发现到空气是不流通的,电脑的风扇散热指示本人应该调整一下架子。

于是本身主宰起来走一走,站出发,突然觉得肉体有些特殊,饿了…

一看表,已经是4点六十几分。完蛋,又周全地失去了5点的订餐时间…
看来明日的晚饭注定又要汇集挨饿了。哎,假若有二个唤起自个儿立时订饭的劳动就好了,闹钟?不不,那么low的事物怎么能显示作者的geek精神呢。

对,做一个钉钉机器人吧,不不,只做一个机器人怎么够,既然要做就做个全体的,再探讨一下美餐的订餐数据,找到最可口的最受欢迎的套餐,恩,听起来不错,就这么,下手!

背景介绍

在起来今日的“传说”从前,先跟大家普遍一下:美餐App。

必发bifa88手机客服端,其一外卖App的紧要性职能,是每一日可以定时定点投喂外卖给加班的程序猿,而美餐的订餐最终竣事时间在每一天的深夜5点如期截至。所以一旦你痴心妄想工作努力而错过了投食的报名时间,那么抱歉,对于尚猪时间出去吃一顿的加班汪来说,你就要饿肚子了…

何以抓取数据?

美餐的多少是个很胃疼的难题,因为美餐并不是七个2C的拔取,它是集团一向连接美餐,员工才有权力去浏览餐厅的音讯,所以在网上一向爬数据的古板艺术就不行了。

后来本身透过App抓包的法门,发现拔取本身的单身账号可以抓到全数高德员工有权力订餐的公然餐厅数据,整理了眨眼间直接口之后计算出了从饭堂采用到订餐流程的相继接口的含义(中间还意想不到的意识了原来美餐还提供了2个web端入口…)。很好,那样就可以直接拿官方公开的多寡起头做多少收集工作了。

订餐的第3步,也等于选择可选订餐地点,那些跟员工的部门有关,我也只可以看看高德员工可选的地方,拿到的数量格式是这么(去掉了部分非亲非故的数码):

拔取地方之后随即要挑选订餐时间点,每一种时间点的餐厅会有两样,并且带着眼下岁月是还是不是可订的场所(那几个处境也是我们做订餐机器人判断是还是不是可订餐的主要依照,字段status),接口数据如下(去掉了某些毫不相干数据):

从接口数据还足以领略订餐截至的小运,那么就可以根据这一个做出最晚订餐时间的配置陈设,比如自个儿梦想能在得了时间前26分钟提示小编。

随之采用大家想要的日子地方组合,例如地点的 “18:30
高德地图(首开外卖)晚餐1”,就会博得全部可选店铺的列表:

归来数据里不仅有合作社音讯和地理地方,居然还有可以总订餐量(dishLimit)和当下可订量(availableDishCount),那就可怜形影不离了,这一个数量就可以用来分析餐厅受欢迎的场地。

什么样统筹3个发公告的机器人?

咱俩早就赢得了数额,那么就必要形成陈设的率先步,做贰个钉钉机器人来报告作者“该订餐了”。步骤如图所示:

1.打开钉钉的聊天窗口,找到机器人

2.直接抬高机器人,然后采取自定义机器人

3.然后下一步,最终会给你3个webhook,那贰个就是用来发送推送的hook

4.然后只必要在代码里适宜的空子post这么些webhook
就足以触发机器人在脚下聊天群里的动作了

推送有个很好的功力就是永葆markdown,那样就能够很有利的协会内容。

我采取Node.JS来做推送服务,首先是抓取数据,做过滤,格式转换,然后当
”status“值为“AVAILABLE”且当前几日子比得了时间早贰个钟头的时候公告自个儿,代码会隔一分钟访问一次接口,那样就不会在一如既往分钟内通报本人一遍,那样推送的代码就旗开得胜了(代码小编会放在文章截止)。

除此以外作者还在推送内容里增进一张来自互联网的肆意美图来拉动我的食欲。

终极把工程放入Docker里,天天在后台跑着,通过机器人定时推送给我音信,就再也不用担心错过订餐啦~

终端难点——吃什么样?

吾日三省吾身,早中晚餐该吃啥。

对此有取舍恐惧症的自家来说,每一日在考虑吃什么这些极限法学难题上浪费了大气的日子,而且在App上并从未图示和评价,所以那大概是两次基于个人经历和口口相传的盲选…

为了缓解那一个难题,大家抓到的多少不正好派上用场嘛,于是自身把持有时间点的装有集团的数据都抓下来看看。

看望数据\

但是真实景况是数据量并不大,小编尝试过抓取多少个月前7个月以前的多寡,不过发现具有的数据差不多只会保留八个月左右的。

全总并发过的商行数量

高德望京周围商户地理地方图

可以看出店铺大约都以分布在集团的方圆,终究太远的也不会承接这么普遍的送餐。有三个比较有意思的是有多个很奇葩的铺面开在海上,恩…
这一定是个脏数据…

拿到数码以往,大家先来计算每天总订餐率,取了60天的数量,去除了有个别骚扰数据之后,用当天颇具实际餐厅订餐数除以餐厅可订总数,得到每一天总订餐数(r为出现餐厅数量,order为该餐厅订餐数,dish为该餐厅可订总量):

如此能够反映出当天的总体订餐景况,可以看看起多少或许有让人惊讶起伏的。然后作者反省了他们相应的时间,其中10-11日完结了百分百订餐,约等于享有商店的餐全体订光了,检查了一晃数额,发现那一天唯有一家合作社在提供晚饭,所以被订光也是足以领悟的。

从此总计餐厅的平均订餐率(尽管餐厅数据量级比较小,但订餐率也能在某种程度上反映餐厅的订餐实际意况,也正是一种判断标准),具体来说就是将饭店出现天数中的订餐量之和除以可订餐总量之和,餐厅订餐率如下:(days为出现天数,order为订餐数,dish为可订总量):

那也就侧面反映了餐厅的受欢迎程度。总计后发现近60天的订餐率最高的是金百万,有87.7%的订餐率,成为最受大家欢迎的店堂,其次是丽华快餐,订餐率达到87.1%,第二名是小芝麻。而最不受欢迎的信用社果然是福州牛肉拉面,订餐率唯有12.3%,那也挺适合大家平时的评说…

通过那样就找到商店附近这段时日最优质的外卖,对于自个儿那种拔取恐惧症来说,大大收缩了增选的年月,还足以定期看一看如今的信用社情形,会第1时间发现有新的铺面参预,那样就在订餐的时候,精晓越多更好的新闻。相比较遗憾的是,美餐并不提供每种餐厅里菜品的订餐数据,不然大家就足以根据那一个选项最受欢迎的菜品。

写在最终

因为其实须要的关联,所以只做了美餐的数量爬取和分析,希望本文可以一得之见,有趣味的同窗也得以对其余外卖平台做一些数据的掘进分析,拯救每日思考吃什么的终端艺术学难题。

正文小编:勤硕

相关文章