CAU-Library-Assistant通过ServerLess云函数实现自动预定座位代码

Python技术:CAU-Library-Assistant通过ServerLess云函数实现自动预定座位代码片段。

Python技术:CAU-Library-Assistant通过ServerLess云函数实现自动预定座位代码片段。

代码演示

# -*- coding: utf8 -*-
import json
import os
import smtplib
import sys
import time
from email.header import Header
from email.mime.text import MIMEText

import requests

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + "/..")

__author__ = "Xinyu Yang"
__email__ = "8@cau.edu.cn"
__copyright__ = "Copyright (C) 2021 Xinyu Yang"
__license__ = "CC 4.0"
__version__ = "1.0"


# Custom variable\
# For Login
openid = "YOUR OPENID"
account = "YOUR ACCOUNT"
upass = "YOUR UPASS"

# For Book
book_info = {
    "SeatID": 00000,
    "date": time.strftime("%Y-%m-%d", time.localtime(time.time())),
    "start": 1200,  # Start time hour * 60
    "end": 1320  # End time hour * 60
}

# SMTP service for sending emails
mail_host = "smtp.qq.com"  # SMTP server
mail_user = "YOUR User"
mail_pass = "YOUR Pass"
mail_port = 465
mail_receiver = "YOUR Receiver"


def get_jsession_id():
    CookieBridge = f"http://libwx.cau.edu.cn/libseat-ibeacon/" \
                   f"wechatIndex?type=currentBook&openid={openid}&account={account}&upass={upass}"
    CBRes = requests.get(CookieBridge, allow_redirects=False)
    return CBRes.headers.get("Set-Cookie")[11:43]


Cookie = {
    "JSESSIONID": get_jsession_id()
}


def sendEmail(fromAddr, toAddr, subject, content):
    sender = fromAddr
    receivers = [toAddr]
    message = MIMEText(content, 'plain', 'utf-8')
    message['From'] = Header("CAU Library Assistant", 'utf-8')
    message['To'] = Header(toAddr, 'utf-8')
    message['Subject'] = Header(subject, 'utf-8')
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
        smtpObj.login(mail_user, mail_pass)
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("send email success")
        return True
    except smtplib.SMTPException as e:
        print(e)
        print("Error: send email fail")
        return False


def send_by_qq_mail(subject, content):
    sendEmail(mail_user, mail_receiver, subject, content)


def book(STARTRequestID, EventRequestID):
    SaveBook = f"http://libwx.cau.edu.cn/libseat-ibeacon/saveBook?" \
               f"seatId={book_info['SeatID']}&date={book_info['date']}" \
               f"&start={book_info['start']}&end={book_info['end']}&type=1"

    BookRes = requests.get(SaveBook, cookies={
        "JSESSIONID": get_jsession_id()
    }).text

    book_response = json.loads(eval(BookRes))

    print(book_response)
    if book_response['status'] == "success":
        send_by_qq_mail("Reservation success",
                        f"座位: {book_response['data']['location']} 已为您保留.\n"
                        f"保留时间为: {book_response['data']['onDate']} {book_response['data']['begin']} ~ {book_response['data']['end']}\n"
                        f"请尽快进馆签到,祝您学习愉快!加油冲冲冲!(。・ω・。)ノ")
    else:
        send_by_qq_mail("Reservation Failed",
                        f"预定失败,具体信息如下所示:\n{book_response['message']}")


# Useless Code, Unsafe, Not recommended
def get_last_book_info():
    getHistory = "http://libwx.cau.edu.cn/libseat-ibeacon/getUserBookHistory"

    history = requests.get(getHistory, cookies=Cookie).text
    history_dic = json.loads(history)
    return history_dic["params"]["history"][0]


def cancel_reserved_book(bookid):
    URL_Cancel = f"http://libwx.cau.edu.cn/libseat-ibeacon/cancleBook?bookId={bookid}"

    requests.get(URL_Cancel, cookies=Cookie)


def check_book(STARTRequestID, EventRequestID):
    last_book_info = get_last_book_info()

    # If the seat is reserved but is about to expire, cancel and re-book
    if last_book_info["stat"] == "RESERVE":
        book_time = time.mktime(time.strptime(f"{last_book_info['date']}-{last_book_info['begin']}", "%Y-%m-%d-%H:%M"))

        if book_time - time.time() < 600:
            cancel_reserved_book(last_book_info["id"])

        book(None, None)
温馨提示:
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明

给TA赞赏
共{{data.count}}人
人已赞赏
编程技巧

PbootCMS模板网站如何实现产品置顶?

2021-9-29 9:00:00

编程技巧

PbootCMS模板网站如何设置网站xml地图

2021-10-1 9:00:00

0 条回复 A文章作者 M管理员
----《》
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索