Python写一个自动点餐程序

为什么要写这个

公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有去楼下711买点饭团之类的玩意儿,所以这是促使我写点餐小程序的原因。

点餐的流程

登录 ---> 点餐 ---> 提交

哈哈,是不是很简单,其实这个还好,说白了,就是登录上去,然后拿到cookie,保持一个登录状态,然后再去点餐,点餐就是构造请求,发送到指定的点餐URL上就可以了。

登录

上面要求我们登录,我们这里输入自己的账号密码,登录上去之后可以看见一个请求.

这个请求就是登录的请求,我们看下需要传什么参数,然后我们去完全构造这个请求,也就是参数一致,并且带浏览器头,这里我们也需要去保存cookie,也就是说,我们需要自己的账号时刻保持online状态,所以需要保存cookie,需要时候调用

所以我们需要实现如下功能

登录请求构造

保持登录状态

保存cookies

使得后来的访问都带cookie

代码如下

import json

import requests

import http.cookiejar as HC

session = requests.session()

session.cookies = HC.LWPCookieJar(filename='cookies')

def login_meican():

"""

登录美餐,寻找cookie文件,没cookie文件就重新载入

:return:

"""

# 储存cookie作为日后使用,三天clear一次

try:

session.cookies.load(ignore_discard=True)

except:

print('未找到cookies文件')

save_cookie()

def save_cookie():

"""

如果没cookie,登录逻辑

:return:

"""

login_url = 'https://meican.com/account/directlogin'

# Headers

hearsers = {

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",

"Referer": "https://meican.com/login",

"Origin": "https://meican.com",

"Host": "meican.com",

"Accept": "*/*"

}

# Login need data

data = {

"username": "xxxxxxxxxxx",

"loginType": "username",

"password": "xxxxxxxxxxx",

"remember": "true"

}

try:

r = session.post(login_url, headers=hearsers, data=data)

r.raise_for_status()

session.cookies.save()

except Exception as e:

print("login error!")

return 0

上面的代码实现了登录。

点餐

找到菜单

这里需要找到菜单,因为截图忘了截,这里就直接公布吧,找到菜单需要两个参数,一个是uuid,另一个是addrid,也就是你登陆的凭证+你所在地区的id,没有这两个是无法找出菜单的,并且也无法继续点餐流程。

如何获得这两个参数

def get_for_my_order():

"""

找到usertorken, addrid

:return:

"""

user_dict = {}

Now_date = datetime.date.today()

z = session.get("https://meican.com/preorder/api/v2.1/calendaritems/list?withOrderDetail=false&beginDate={Now}&endDate={Now}".format(Now=Now_date))

x = json.loads(z.text)

user_dict["uuid"] = x["dateList"][0]["calendarItemList"][0]["userTab"]["uniqueId"]

user_dict["addrid"] = x["dateList"][0]["calendarItemList"][0]["userTab"]["corp"]["addressList"][0]["uniqueId"]

return user_dict

构造获取菜单请求

def get_menu():

"""

获取餐单逻辑

:return:

"""

menu_dict = {}

menu_list = []

Now_date = datetime.date.today()

uuid = get_for_my_order()["uuid"]

z = session.get("https://meican.com/preorder/api/v2.1/recommendations/dishes?tabUniqueId={uuid}&targetTime={Now}+09:40".format(uuid = uuid, Now=Now_date))

menu = json.loads(z.text)["myRegularDishList"]

for i in menu:

menu_dict["id"] = i["id"]

menu_dict["name"] = i["name"]

z = copy.deepcopy(menu_dict)

menu_list.append(z)

return menu_list

输出所有的菜单,以一个list作为输出

提交

构造点餐请求

首先先找到点餐的URL

https://meican.com/preorder/api/v2.1/orders/add

查看点餐需要的参数:

data = { "corpAddressUniqueId": addrid, "order": x, "remarks": y, "tabUniqueId": uuid, "targetTime":target_time, "userAddressUniqueId":addrid }

构造点餐请求

def order_action():

"""

点餐逻辑

:return:

"""

addrid = get_for_my_order()["addrid"]

uuid = get_for_my_order()["uuid"]

menu_list = get_menu()

menu_id = choice(menu_list)["id"]

target_time = str(datetime.date.today()) + " " + "09:40"

x = str([{"count":1,"dishId":menu_id}])

y = str([{"dishId":menu_id,"remark":""}])

data = {

"corpAddressUniqueId": addrid,

"order": x,

"remarks": y,

"tabUniqueId": uuid,

"targetTime":target_time,

"userAddressUniqueId":addrid

}

headers = {

"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"

}

try:

z = session.post("https://meican.com/preorder/api/v2.1/orders/add", headers=headers, data=data)

z.raise_for_status()

except:

return "点餐错误!"

所用的知识点一览

Python requetst的post,session

cookie的保存和调用

json的输出和浏览

random.choice 的列表元素随机选择

Python构造请求和登录逻辑

餐馆点菜系统python程序_Python写一个自动点餐程序相关推荐

  1. 用python编写一个点餐程序_Python写一个自动点餐程序

    原博文 2019-08-09 10:45 − # Python写一个自动点餐程序 ## 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘 ...

  2. python文件分发_python 写一个文件分发小程序

    一.概述 该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 二.参数文件说明 1. settings.txt的说明 a. 通过配置settings.txt,填源 ...

  3. python 性能测试_python 写一个性能测试工具(一)

    国庆重新学习了一下go的gin高性能测试框架. 用JMeter来测试gin与flask接口的性能,差别很大. 为什么我自己不尝试写一个性能工具,性能工具的核心就是 并发 和 请求. 请求可以选择Pyt ...

  4. java窗口小程序atm_写一个ATM机小程序(JAVA), 目前老师 讲到了 静态工厂

    /** * 存款 * @param in * @return */ public int deposit(int in){ creditlimit+=in; System.out.println(&q ...

  5. python kivy显示图片_python基于Kivy写一个图形桌面时钟程序代码示例

    本篇文章小编给大家分享一下python基于Kivy写一个图形桌面时钟程序代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Kivy 是一个开源的 ...

  6. python时钟程序的设计总结_python基于Kivy写一个图形桌面时钟程序

    kivy 是一个开源的 python 第三方库,可以用来快速开发应用程序. 它有如下三个特点: 跨平台 kivy 编写的程序可在 linux,windows,os x,android,ios 和 ra ...

  7. python饮料购买_Python实现的一个自动售饮料程序代码分享

    写这个程序的时候,我已学习Python将近有一百个小时,在CSDN上看到有人求助使用Python如何写一个自动售饮料的程序,我一想,试试写一个实用的售货程序.当然,只是实现基本功能,欢迎高手指点,新手 ...

  8. python编写木马攻击_用Python写一个自动木马程序

    电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...

  9. python测试抽奖脚本_使用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  10. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

最新文章

  1. nginx + uwsgi + Django 应用部署
  2. UEditor在线编辑器使用记录
  3. 提高代码性能及并发性的方法浅谈
  4. PL/SQL编程基本概念
  5. linux系统核心已存储,Linux系统 存储
  6. 正则表达式学习笔记005--脱字符和美元符的认识与应用
  7. python一个函数可以有参数也可以没有参数_Python:有和没有关键字参数的lambda函数行为?...
  8. UML建模之时序图(Sequence Diagram)转
  9. 【转】UNICODE编程资料
  10. 单选框_flutter Radio 单选框
  11. Google工程师多图详解Android架构
  12. 飞秋在同一局域网内刷新不到好友
  13. 综述:根际微生物组提高植物耐盐性的研究进展
  14. 声效表达在游戏沉浸方面的影响力
  15. 海外英语杂志社海外英语杂志社海外英语编辑部2022年第14期目录
  16. 计算机各配置性能如何区分,怎么测试电脑性能?判断电脑性能主要看什么?
  17. 较全的国外学术论文网站与常用的学术搜索引擎
  18. 禁忌搜索算法TS(学习笔记_04)
  19. 毕业设计 基于JSP动漫论坛的设计与实现
  20. SpringBoot+WebSocket+Vue整合实现在线聊天

热门文章

  1. STM32WB系列MCU蓝牙协议栈烧录
  2. 幽默故事:1、我喜欢的女神;2、农村淑女(木子家原创)
  3. 仿百度糯米页面 html5,Thinkphp5.0 仿百度糯米 开发多商家 电商平台(完整版)
  4. 春节攻防战即将打响,想要弯道超车的商家们,准备好了吗?
  5. 打印小册子中断了怎么办
  6. 仙人掌树学习1:仙人掌图 洛谷:[SHOI2008]仙人掌图 II
  7. 记录一次被Paypal坑的经过
  8. 《麦肯锡工作法》读书分享
  9. 基于Linux通用GPIO接口的操作函数
  10. 互联网信息服务安全评估报告