吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8058|回复: 49
上一主题 下一主题
收起左侧

[原创工具] 定时推送超星学习通内未完成的作业到微信

  [复制链接]
跳转到指定楼层
楼主
ultraMan666 发表于 2021-11-29 11:17 回帖奖励
本帖最后由 ultraMan666 于 2021-11-29 17:16 编辑

有些时候总是忘记作业截止时间,刚好最近学了python的爬虫,写了一个定时推送未完成作业的代码,编程功底比较差,代码有点儿乱,大佬们有什么建议可以提出来我看看怎么改
需要抓学习通的Cookie和User-Agent,之后代码直接粘贴到腾讯的云函数内即可,需要安装bs4的库,可以选择使用方糖或者wxpusher推送,默认使用wxpusher
之后又做了个简单的安卓app,根据代码改了下写了个后端给app调用,点一下就可以看所有未完成的作业了,只需要填写Cookie就可以了,需要的可以自取
下面介绍一下腾讯云函数的详细使用方法


1.先进去创建一个空白函数,代码粘贴到下面的编辑框内即可



2.接下来到终端内安装需要导入的包,安装在当前目录下
先cd src
pip3 install bs4 -t .
pip3 install lxml -t .


2.进入函数配置,配置一下时间的环境变量,设置为上海时间


3.进入触发管理,设置触发器,我这里设置的是每天7:30,12:30,18:30推送一次,可以根据自己的需要使用cron表达式更改推送时间


3.在代码内填入Cookie,User-Agent,推送的id就可以了,使用方糖的话把代码的注释打开,下面的body和request.post注释上或者删掉就行。改完代码记得点一下编辑框右上角的部署,这样代码才能生效。



推送展示


app展示:


app下载地址:
https://wwc.lanzoui.com/i420mx0f5wf
密码:3ah1

下面是代码:
# -*- coding: utf8 -*-
import requests
from bs4 import BeautifulSoup
import json
import re
import datetime

# 方糖推送(需要输入方糖推送的sckeysckey = ''
ftqqUrl = "https://sc.ftqq.com/%s.send" % (sckey)

# wxpusher推送(需要输入wxpusher的apptokenappToken = ""
wxurl = "http://wxpusher.zjiecode.com/api/send/message"

getAllCourseDataUrl = 'http://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&rss=1'

headers = {
    'Host': 'mooc1-api.chaoxing.com',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Cookie': '在这里输入你的学习通cookie',
    'User-Agent': '在这里输入你的user-Agent',
    'Accept-Language': 'zh-cn',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive'
}
wx_header = {
    "Content-Type": "application/json",
}


def checkHomework():
    status = "未完成作业概览:\n"
    courses = getDataUrl()
    allTodoWork = []
    for name in courses:
        url = courses[name]
        homework = requests.get(url, headers=headers).text
        soup = BeautifulSoup(homework, 'lxml')
        work = soup.find_all('li')
        for i in range(len(work)):
            if work.div.span.string == "未交" and work.find('span', class_='fr') is not None:
                # status = status + '\n' + name + '\n'
                restTime = work.find('span', class_='fr').string
                # 剩余具体小时数
                restHour = re.findall(r"剩余(.+?)小时", restTime)
                # 剩余多出来的分钟数
                restMinute = re.findall(r"小时(.+?)分钟", restTime)
                # 当前时间加上剩余小时
                endTime1 = datetime.datetime.now() + datetime.timedelta(hours=int(restHour[0]))
                # 最后加上分钟数即可算出具体的截止时间
                endTime2 = endTime1 + datetime.timedelta(minutes=int(restMinute[0]))
                # 当前作业状态
                workStatus = '\n' + name + '\n' + work[
                    i].div.p.string + '\n' + restTime + '\n' + '截止时间:' + endTime2.strftime(
                    "%Y-%m-%d %H:%M:%S") + '\n'
                allTodoWork.append(workStatus)
    # 重新排序,时间截止日期近的排在前面
    allTodoWork.sort(key=lambda t: int(re.findall(r"剩余(.+?)小时", t)[0]))
    for i in range(len(allTodoWork)):
        status = status + allTodoWork
    print(status)
    # payload = {'text': '作业未完成通知', 'desp': status}
    # requests.post(ftqqUrl, params=payload)
    body = {
        "appToken": appToken,
        "content": status,
        "summary": "",
        "contentType": 1,
        "topicIds": [],
        "uids": ["在这里需要输入你的wxpusher的UID"],
    }
    requests.post(wxurl, headers=wx_header, data=json.dumps(body))


# 获取所有本学期内的课程名及对应url
def getDataUrl():
    allCourse = requests.get(getAllCourseDataUrl, headers=headers).text
    allCourseJson = json.loads(allCourse)
    channelList = allCourseJson['channelList']
    cpi = ''
    for c in range(len(channelList)):
        # 获取最近添加的课程的cpi,使用该cpi来判断其它课程是否为本学期的
        if 'cpi' in channelList[c]:
            cpi = channelList[c]['cpi']
            break
    realCourse = []
    finalCourseData = {}
    for i in range(len(channelList)):
        if 'cpi' in channelList and channelList['cpi'] == cpi:
            realCourse.append(channelList['content']['course']['data'][0])

    for t in range(len(realCourse)):
        courseName = realCourse[t]['name']
        courseSquareUrl = realCourse[t]['courseSquareUrl']
        courseId = re.findall(r'courseId=(.+?)&', courseSquareUrl)[0]
        classId = re.findall(r'classId=(.+?)&', courseSquareUrl)[0]
        courseWorkUrl = 'https://mooc1-api.chaoxing.com/work/task-list?courseId=' + courseId + '&classId=' + classId + '&cpi=' + str(
            cpi)
        tmpDict = {courseName: courseWorkUrl}
        finalCourseData.update(tmpDict)
    return finalCourseData


def main_handler(event, context):
    return checkHomework()


if __name__ == '__main__':
    checkHomework()

免费评分

参与人数 11吾爱币 +14 热心值 +8 收起 理由
xiangbaba + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
LanTianA + 1 热心回复!
Metest + 1 超星学习通 裤子被脱了 1亿7273条
lantianA + 1 我很赞同!
solar南城 + 1 我很赞同!
qq42773175 + 1 谢谢@Thanks!
monstar7zyh + 1 + 1 谢谢@Thanks!
Bryce12 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fengyiyi + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xiaobai + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| ultraMan666 发表于 2021-12-5 00:40 |楼主
leting130 发表于 2021-12-4 23:13
楼主 学习通的cookie跟user-Agent在哪儿抓啊

软件的话安卓推荐用小黄鸟,论坛里应该能搜到,不用root,苹果用stream。开启抓包后打开学习通随便点进去一个课程都可以看到cookie和user-agent
推荐
leting130 发表于 2021-12-5 19:16
包抓到了,但是测试后出现错误,头疼。
"errorCode":1,"errorMessage":"Traceback (most recent call last):\n  File \"/var/runtime/python3/bootstrap.py\", line 133, in init_handler\n    func_handler = get_func_handler(file.rsplit(\".\", 1)[0], func)\n  File \"/var/runtime/python3/bootstrap.py\", line 159, in get_func_handler\n    mod = imp.load_module(mname, *imp.find_module(mname))\n  File \"/var/lang/python3/lib/python3.6/imp.py\", line 234, in load_module\n    return load_source(name, filename, file)\n  File \"/var/lang/python3/lib/python3.6/imp.py\", line 172, in load_source\n    module = _load(spec)\n  File \"Ϗrozen; importlib._bootstrap>\", line 675, in _load\n  File \"Ϗrozen; importlib._bootstrap>\", line 655, in _load_unlocked\n  File \"Ϗrozen; importlib._bootstrap_external>\", line 678, in exec_module\n  File \"Ϗrozen; importlib._bootstrap>\", line 205, in _call_with_frames_removed\n  File \"/var/user/index.py\", line 9, in <module;>\n    ftqqUrl = \"https://sc.ftqq.com/%s.send\" % (sckey)\nNameError: name 'sckey' is not defined","requestId":"4c1bf620-4cd3-4537-80cc-d8a10cb3f8f1","statusCode":443}
沙发
LHCAILGT 发表于 2021-12-1 00:02
3#
huangxu 发表于 2021-12-1 10:31
感觉不错,来学习下
4#
chumi 发表于 2021-12-1 14:56
本来就不想写作业
5#
ptmaliang 发表于 2021-12-1 18:39
感谢分享
6#
chaosjr 发表于 2021-12-2 10:03
我真的谢谢你。。。。。。
7#
wuai0507 发表于 2021-12-2 15:28
厉害 很有实用性呀
头像被屏蔽
8#
hwxq43 发表于 2021-12-3 05:29
提示: 作者被禁止或删除 内容自动屏蔽
9#
价值投机 发表于 2021-12-3 08:22
感谢分享了
10#
yang1 发表于 2021-12-3 10:04
挺不错的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 18:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表