如何通过手机向电脑端Python作业管理程序输入数据并实现手机通知?
手机与电脑Python脚本交互方案
1. 本地HTTP服务(同一局域网)
用Flask快速搭建轻量接口,手机通过浏览器或HTTP工具提交任务数据,电脑脚本实时接收并存储。
示例代码:
from flask import Flask, request, jsonify import json app = Flask(__name__) TASKS_FILE = "tasks.json" # 加载已有任务 def load_tasks(): try: with open(TASKS_FILE, "r") as f: return json.load(f) except FileNotFoundError: return [] # 保存任务 def save_tasks(tasks): with open(TASKS_FILE, "w") as f: json.dump(tasks, f, indent=2) @app.route("/add_task", methods=["POST"]) def add_task(): task_data = request.get_json() if not task_data or "title" not in task_data or "deadline" not in task_data: return jsonify({"status": "error", "msg": "缺少必要字段:title/deadline"}), 400 tasks = load_tasks() tasks.append(task_data) save_tasks(tasks) return jsonify({"status": "success", "msg": "任务添加成功"}) if __name__ == "__main__": # 允许局域网访问,替换为电脑的局域网IP app.run(host="0.0.0.0", port=5000, debug=True)
电脑运行后,手机在同一WiFi下,用HTTP工具发送JSON数据到http://你的电脑局域网IP:5000/add_task即可提交任务。
2. 云存储同步
将任务存在云端表格(如飞书表格、Google Sheets),手机直接编辑表格,电脑脚本定时读取同步。以Google Sheets为例,用gspread库实现:
import gspread from oauth2client.service_account import ServiceAccountCredentials import time import json # 授权配置(需提前创建Google服务账号) scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope) client = gspread.authorize(creds) # 打开目标表格 sheet = client.open("作业任务表").sheet1 def sync_tasks(): # 读取表格数据(假设第一行是表头,从第二行开始为任务) rows = sheet.get_all_values()[1:] tasks = [{"title": row[0], "deadline": row[1], "desc": row[2]} for row in rows] # 保存到本地文件 with open("tasks.json", "w") as f: json.dump(tasks, f, indent=2) print("任务同步完成") # 每30分钟同步一次 while True: sync_tasks() time.sleep(1800)
手机在云端表格添加任务行后,电脑脚本会定时拉取最新数据。
3. MQTT消息队列
用MQTT协议实现跨设备消息传递,电脑作为订阅者,手机用MQTT客户端发布任务消息。用paho-mqtt库实现:
电脑端订阅代码:
import paho.mqtt.client as mqtt import json TASKS_FILE = "tasks.json" def load_tasks(): try: with open(TASKS_FILE, "r") as f: return json.load(f) except FileNotFoundError: return [] def save_tasks(tasks): with open(TASKS_FILE, "w") as f: json.dump(tasks, f, indent=2) def on_connect(client, userdata, flags, rc): print("Connected with result code "+str(rc)) client.subscribe("home/homework/tasks") def on_message(client, userdata, msg): task_data = json.loads(msg.payload.decode()) print("收到新任务:", task_data) # 保存到本地 tasks = load_tasks() tasks.append(task_data) save_tasks(tasks) client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message # 连接公共MQTT服务器,也可自行搭建 client.connect("test.mosquitto.org", 1883, 60) client.loop_forever()
手机安装MQTT客户端(如MQTT Explorer),连接同一服务器后,发布JSON格式任务数据到home/homework/tasks主题,电脑即可实时接收。
手机通知实现方法
1. 邮件转短信
多数运营商支持将邮件转为短信,比如移动用户发送邮件到13xxxxxxxxx@139.com即可收到短信。Python用smtplib实现:
import smtplib from email.mime.text import MIMEText def send_sms_via_email(phone, content): # 替换为你的邮箱信息 sender_email = "your_email@xxx.com" sender_password = "your_password" # 替换为对应运营商的短信邮箱 receiver_email = f"{phone}@139.com" msg = MIMEText(content, "plain", "utf-8") msg["From"] = sender_email msg["To"] = receiver_email msg["Subject"] = "作业截止提醒" with smtplib.SMTP_SSL("smtp.xxx.com", 465) as server: server.login(sender_email, sender_password) server.sendmail(sender_email, receiver_email, msg.as_string()) print("通知已发送") # 调用示例 send_sms_via_email("13xxxxxxxxx", "你的数学作业还有1小时截止!")
2. 第三方推送服务
用推送服务(如Server酱)发送微信通知,Python直接发送POST请求即可:
import requests def send_wechat_notify(key, content): url = f"https://sc.ftqq.com/{key}.send" data = {"text": "作业截止提醒", "desp": content} response = requests.post(url, data=data) if response.json()["errno"] == 0: print("微信通知发送成功") else: print("发送失败") # 替换为你的服务密钥 send_wechat_notify("你的SCKEY", "你的英语作业还有30分钟截止!")
3. 云短信API服务
用阿里云/腾讯云的短信服务,调用官方SDK发送短信,稳定性高。以阿里云为例:
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.request import CommonRequest def send_sms(phone, content): client = AcsClient("你的AccessKeyId", "你的AccessKeySecret", "cn-hangzhou") request = CommonRequest() request.set_accept_format("json") request.set_domain("dysmsapi.aliyuncs.com") request.set_method("POST") request.set_protocol_type("https") request.set_version("2017-05-25") request.set_action_name("SendSms") request.add_query_param("PhoneNumbers", phone) request.add_query_param("SignName", "你的短信签名") request.add_query_param("TemplateCode", "你的短信模板ID") request.add_query_param("TemplateParam", f'{{"content":"{content}"}}') response = client.do_action_with_exception(request) print(str(response, encoding='utf-8')) # 调用示例 send_sms("13xxxxxxxxx", "你的物理作业即将截止,请尽快完成!")
内容的提问来源于stack exchange,提问作者webbxhead
相关产品推荐
相关产品推荐

