步骤 :
1.flask app登录(自动登录)
2.获取歌曲/图片资源 (存储到Content数据库里)+content蓝图(get_*接口)+创建二维码
3.scan_qr 接口+绑定玩具+玩具列表显示
4.opentoy+WEBSOCKET+sendmusic(FLASKCORS 跨域请求)+ger_qr+friend_list+app,toy互聊
5.friend_remark语音提醒 (谁发来的消息来的)+recv_msg+ai+toyAI 指令+未读消息存储(redis数据库)+收取多条消息语音提示
6.ADD+REQ + req_list +acc_req +ref_req
7.
settings.py配置文件
# 目录配置 COVER_PATH = "Cover" MUSIC_PATH = "Music" QRCODE_PATH = "Qrcode" CHAT_PATH = "Chat" # 数据库配置 from pymongo import MongoClient M = MongoClient("127.0.0.1",27017) MDB = M["MonsterToy"]
from redis import Redis RDB = Redis("127.0.0.1",6379,db=8) # RET返回值 RET = { "CODE":0, "MSG":"注册成功", "DATA":{} } # 联图二维码接口API LT_URL = "http://qr.topscan.com/api.php?text=%s" # BaiduAI配置 from aip import AipSpeech, AipNlp """ 你的 APPID AK SK """ APP_ID = '16815061' API_KEY = 'G9k256n6aeMRnfvS1paws50x' SECRET_KEY = 'nCbbF44iUp6QrNvSgcYW0eo2EKKl4cvR' SPEECH_CLIENT = AipSpeech(APP_ID, API_KEY, SECRET_KEY) NLP_CLIENT = AipNlp(APP_ID, API_KEY, SECRET_KEY) VIOCE={ 'vol': 5, "spd": 4, "pit": 5, "per": 4 }
(user蓝图)要学会看需求(request.form.to_dict()为获取请求信息)
from bson import ObjectId from flask import Blueprint, request, jsonify from redis_chat import get_all_redis from setting import MDB, RET user_bp = Blueprint("user_bp",__name__)
@user_bp.route("/reg",methods= ["POST"]) def reg(): user_info = request.form.to_dict() user_info["avatar"] = "baba.jpg" if user_info.get("gender") == "2" else "mama.jpg" user_info["bind_toys"] = [] user_info["friend_list"] = [] MDB.Users.insert_one(user_info)#注意insert_one return jsonify({"CODE": 0, "MSG": "注册成功", "DATA": {}})
#千万要注意 Mongodb 中 的“_id”在json传输是要转换成字符串 @user_bp.route("/login",methods=["POST"]) def login(): user_info = request.form.to_dict() print(user_info) user_info_dict = MDB.Users.find_one(user_info) print(user_info_dict) user_info_dict["_id"] = str(user_info_dict.get("_id")) RET["CODE"] = 0 RET["MSG"] = f"欢迎{user_info_dict.get('nickname')}登录" RET["DATA"] = user_info_dict return jsonify(RET)
@user_bp.route("/auto_login",methods=["POST"])
def auto_login():
user_info = request.form.to_dict()
user_info["_id"] = ObjectId(user_info.get("_id"))
user_info_dict = MDB.Users.find_one(user_info)
user_info_dict["_id"] = str(user_info_dict.get("_id"))
count_dict = get_all_redis(user_info) (下面#获取所有未读消息)
user_info_dict["chat"] = count_dict
RET["CODE"] = 0
RET["MSG"] = f"欢迎{user_info_dict.get('nickname')}登录"
RET["DATA"] = user_info_dict
return jsonify(RET)
(位于redis_chat.py文件) # 获取所有未读消息 def get_all_redis(to_user): to_user_json = RDB.get(to_user) if to_user_json: to_user_dict = json.loads(to_user_json) # type:dict to_user_dict["count"] = sum(to_user_dict.values()) else: to_user_dict = {"count": 0} print(to_user_dict) return to_user_dict
(papa.py)(下载图片和歌曲 并存入数据库)
import json import os import time from uuid import uuid4 import requests from setting import COVER_PATH, MUSIC_PATH, MDB
#从网上手动获取data data = '{"ret":200,"msg":"声音播放数据","data":{"uid":0,"albumId":424529,"sort":1,"pageNum":1,"pageSize":30,"tracksAudioPlay":[{"index":30,"trackId":7713678,"trackName":"新年恰恰","trackUrl":"/ertong/424529/7713678","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":92,"src":"https://fdfs.xmcdn.com/group12/M00/3B/B2/wKgDXFWcw12y8TanAAtkIsI9320251.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":29,"trackId":7713564,"trackName":"我的快乐style","trackUrl":"/ertong/424529/7713564","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":155,"src":"https://fdfs.xmcdn.com/group8/M01/3B/D1/wKgDYFWcwlKzWOleABNA26oG9m0575.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":28,"trackId":7713768,"trackName":"鱼儿水中游","trackUrl":"/ertong/424529/7713768","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":114,"src":"https://fdfs.xmcdn.com/group11/M07/3C/12/wKgDa1WcxH-yUx0yAA4jOCnkzoo604.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":27,"trackId":7713763,"trackName":"祝你圣诞快乐","trackUrl":"/ertong/424529/7713763","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":91,"src":"https://fdfs.xmcdn.com/group13/M0A/3C/07/wKgDXVWcxJOxETOJAAtXC0jV-tQ007.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"6月前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":26,"trackId":7713762,"trackName":"祖国祖国我们爱你","trackUrl":"/ertong/424529/7713762","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":113,"src":"https://fdfs.xmcdn.com/group9/M06/3B/EA/wKgDZlWcxJSQzwcfAA4N0BoDMdY241.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":25,"trackId":7713760,"trackName":"最美的图画","trackUrl":"/ertong/424529/7713760","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":92,"src":"https://fdfs.xmcdn.com/group14/M00/3C/07/wKgDZFWcxLrzVVEcAAthUHuW9o8311.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":24,"trackId":7713757,"trackName":"愿望","trackUrl":"/ertong/424529/7713757","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":115,"src":"https://fdfs.xmcdn.com/group10/M05/3B/C0/wKgDaVWcxJGzJ7uSAA47_grnQu0333.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":23,"trackId":7713756,"trackName":"异想天开","trackUrl":"/ertong/424529/7713756","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":242,"src":"https://fdfs.xmcdn.com/group13/M04/3C/13/wKgDXlWcxCujLknpAB361yR0knM330.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":22,"trackId":7713682,"trackName":"雪宝宝","trackUrl":"/ertong/424529/7713682","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":80,"src":"https://fdfs.xmcdn.com/group12/M00/3B/B3/wKgDXFWcw3rzzAXUAAn2_rd_TSs416.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":21,"trackId":7713681,"trackName":"洗澡歌","trackUrl":"/ertong/424529/7713681","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":103,"src":"https://fdfs.xmcdn.com/group16/M04/3B/F0/wKgDalWcwovDamwPAAzWCE1KPhg634.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":20,"trackId":7713679,"trackName":"校园的早晨","trackUrl":"/ertong/424529/7713679","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":170,"src":"https://fdfs.xmcdn.com/group7/M0A/3C/83/wKgDWlWcw4ayhRYzABUJGT5KiYk025.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":19,"trackId":7713676,"trackName":"摇篮曲","trackUrl":"/ertong/424529/7713676","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":141,"src":"https://fdfs.xmcdn.com/group13/M00/3C/11/wKgDXlWcw4bg7pJVABFuZE2it5M023.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":18,"trackId":7713675,"trackName":"幸福的一家","trackUrl":"/ertong/424529/7713675","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":98,"src":"https://fdfs.xmcdn.com/group12/M00/3B/BA/wKgDW1Wcw3mzthSOAAwwJKKstIo183.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":17,"trackId":7713673,"trackName":"小马车","trackUrl":"/ertong/424529/7713673","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":71,"src":"https://fdfs.xmcdn.com/group11/M06/3C/14/wKgDbVWcwtOgeKw_AAjTUUqlrKg930.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":16,"trackId":7713670,"trackName":"小蚂蚁","trackUrl":"/ertong/424529/7713670","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":62,"src":"https://fdfs.xmcdn.com/group11/M06/3C/14/wKgDbVWcwtXQ0dlHAAe1eRxnsE0477.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":15,"trackId":7713665,"trackName":"小红帽","trackUrl":"/ertong/424529/7713665","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":110,"src":"https://fdfs.xmcdn.com/group15/M0B/3C/33/wKgDZVWcwv2it2_0AA2pv_mYNFU658.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":14,"trackId":7713664,"trackName":"小玉米","trackUrl":"/ertong/424529/7713664","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":98,"src":"https://fdfs.xmcdn.com/group7/M0A/3C/7E/wKgDX1Wcw13z8c8YAAwzfb-5DTc863.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":13,"trackId":7713663,"trackName":"小猪猪","trackUrl":"/ertong/424529/7713663","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":201,"src":"https://fdfs.xmcdn.com/group7/M0A/3C/7F/wKgDX1Wcw2_AiWYsABjbdVPaqLY570.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":12,"trackId":7713662,"trackName":"小猪小猪肥嘟嘟","trackUrl":"/ertong/424529/7713662","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":79,"src":"https://fdfs.xmcdn.com/group7/M0A/3C/83/wKgDWlWcw2yBPuHdAAnSUqLNF0g598.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":11,"trackId":7713660,"trackName":"小毛驴","trackUrl":"/ertong/424529/7713660","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":91,"src":"https://fdfs.xmcdn.com/group12/M04/3B/B1/wKgDXFWcwvKzSpMUAAthUBlZLzc281.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":10,"trackId":7713656,"trackName":"小小发型师","trackUrl":"/ertong/424529/7713656","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":77,"src":"https://fdfs.xmcdn.com/group14/M06/3C/1C/wKgDY1Wcw0_AUxG7AAmWOfM875o604.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":9,"trackId":7713655,"trackName":"小宝贝","trackUrl":"/ertong/424529/7713655","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":145,"src":"https://fdfs.xmcdn.com/group15/M0B/3C/32/wKgDaFWcwtaisdS-ABIEA9keU18436.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":8,"trackId":7713654,"trackName":"小孩应把卫生讲","trackUrl":"/ertong/424529/7713654","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":95,"src":"https://fdfs.xmcdn.com/group15/M0B/3C/33/wKgDZVWcwvaT_e8oAAvfdhfXJNQ861.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":7,"trackId":7713653,"trackName":"小喇叭","trackUrl":"/ertong/424529/7713653","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":85,"src":"https://fdfs.xmcdn.com/group12/M03/3B/B1/wKgDXFWcwtzgy3BgAAqLJj1ijho574.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":6,"trackId":7713652,"trackName":"小可爱","trackUrl":"/ertong/424529/7713652","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":214,"src":"https://fdfs.xmcdn.com/group12/M03/3B/B8/wKgDW1WcwvHzL1FEABqFFMJa4L4742.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":5,"trackId":7713649,"trackName":"学走路","trackUrl":"/ertong/424529/7713649","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":73,"src":"https://fdfs.xmcdn.com/group12/M00/3B/BA/wKgDW1Wcw4zBISExAAkms7-Of3Q290.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":4,"trackId":7713648,"trackName":"学唱数字歌","trackUrl":"/ertong/424529/7713648","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":113,"src":"https://fdfs.xmcdn.com/group12/M00/3B/B2/wKgDXFWcw2mgNQIdAA4EE3MzTKU976.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":3,"trackId":7713647,"trackName":"学习雷锋好榜样","trackUrl":"/ertong/424529/7713647","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":68,"src":"https://fdfs.xmcdn.com/group12/M00/3B/BA/wKgDW1Wcw4fQ7JWWAAh7UKT5m7c703.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":2,"trackId":7713644,"trackName":"一只哈巴狗","trackUrl":"/ertong/424529/7713644","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":86,"src":"https://fdfs.xmcdn.com/group9/M08/3B/CA/wKgDYlWcw5HTULbSAAq9BqdgRXQ509.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true},{"index":1,"trackId":7713643,"trackName":"一双小小手","trackUrl":"/ertong/424529/7713643","trackCoverPath":"//imagev2.xmcdn.com/group9/M04/3B/E1/wKgDZlWcvRKwSOIMAAD3201gPxc590.jpg","albumId":424529,"albumName":"【一千零一夜】经典儿歌","albumUrl":"/ertong/424529/","anchorId":9216785,"canPlay":true,"isBaiduMusic":false,"isPaid":false,"duration":62,"src":"https://fdfs.xmcdn.com/group13/M00/3C/12/wKgDXlWcw5GzJ1NgAAfMZ7UShYY633.m4a","hasBuy":true,"albumIsSample":false,"sampleDuration":0,"updateTime":"2年前","createTime":"4年前","isLike":false,"isCopyright":true,"firstPlayStatus":true}],"hasMore":true}}'
#网上获取的是str 需要转成字典 my_data = json.loads(data) print(my_data)
#取出前10条歌曲内容 data_list = my_data.get("data").get("tracksAudioPlay")[:10] # print(data_list) music_list = []
for audio in data_list: #先爬取网址 title_name = audio.get("trackName") sp_is = audio.get('albumName') #(专辑) cover_url = f"http:{audio.get('trackCoverPath')}" music_url = audio.get('src') all_name = uuid4() #从网站下载歌曲和图片 cover_name = f"{all_name}.jpg" cover_path = os.path.join(COVER_PATH, cover_name) #从网站获取2进制流 然后写进文件 cover = requests.get(cover_url) print(cover.content) #可以。content .json() .text time.sleep(0.3) with open(cover_path,"wb") as fcover: fcover.write(cover.content) music_name = f"{all_name}.mp3" music_path = os.path.join(MUSIC_PATH,music_name) music = requests.get(music_url) print(music.content) # 可以。content .json() .text time.sleep(0.3) with open(music_path, "wb") as fmusic: fmusic.write(music.content) music_info = { "music": music_name, "cover": cover_name, "title": title_name, "zhuanji": sp_is } music_list.append(music_info) MDB.Content.insert_many(music_list)
Content.py蓝图
import os from flask import Blueprint, jsonify, send_file from setting import MDB, COVER_PATH, MUSIC_PATH, QRCODE_PATH, CHAT_PATH content_bp = Blueprint("content_bp",__name__)
#音乐列表 @content_bp.route("/content_list",methods=["POST"]) def content_list(): content = list(MDB.Content.find({})) #数据库取出的字典集转换为列表 #ObjectId(_id) 转换为 字符串 for index,item in enumerate(content): content[index]["_id"] = str(item.get("_id")) return jsonify(content)
#获取图片 注意是 send_file() @content_bp.route("/get_cover/<filename>",methods=["GET"]) def get_cover(filename): cover_path = os.path.join(COVER_PATH,filename) return send_file(cover_path) #获取音乐 @content_bp.route("/get_music/<filename>",methods=["GET"]) def get_music(filename): music_path = os.path.join(MUSIC_PATH,filename) return send_file(music_path) #获取二维码 @content_bp.route("/get_qr/<filename>",methods=["GET"]) def get_qr(filename): qr_path = os.path.join(QRCODE_PATH,filename) return send_file(qr_path) #获取语音消息资源 @content_bp.route("/get_chat/<filename>",methods=["GET"]) def get_chat(filename): chat_path = os.path.join(CHAT_PATH,filename) return send_file(chat_path)
createQR.py 创建二维码
import os import requests from setting import LT_URL, MDB, QRCODE_PATH from uuid import uuid4 import time, hashlib
device_list = [] for i in range(5): qr_str = hashlib.md5(f"{uuid4()}{time.time()}{uuid4()}".encode("utf8")).hexdigest() print(qr_str) device_info = {"device_key": qr_str} device_list.append(device_info) res = requests.get(LT_URL % (qr_str)) qrfile_path = os.path.join(QRCODE_PATH, f"{qr_str}.jpg") with open(qrfile_path, "wb") as f: f.write(res.content) MDB.Devices.insert_many(device_list)
devices.py 蓝图 scan_qr 接口+绑定玩具+玩具列表显示
from bson import ObjectId from flask import Blueprint, request, jsonify from setting import MDB, RET devices_bp = Blueprint("devices_bp", __name__) @devices_bp.route("/scan_qr", methods=["POST"]) def scan_qr(): # 扫码绑定 # 1.扫描成功,没有绑定 开启绑定 # 2.扫码失败,未授权 # 3.扫码成功,已经绑定 ?添加好友 device_key = request.form.to_dict() toy_info = MDB.Toys.find_one(device_key) if not toy_info: device = MDB.Devices.find_one(device_key) if device: # 1.扫描成功,没有绑定 开启绑定 RET["CODE"] = 0 RET["MSG"] = "识别玩具成功" RET["DATA"] = device_key else: # 2.扫码失败, 未授权 授权库没有此条码 RET["CODE"] = 1 RET["MSG"] = "请不要瞎JB乱扫" RET["DATA"] = {} else: # // 3.蜜汁逻辑 # 二维码扫描成功, 但设备已经进行绑定 开启添加好友逻辑 RET["CODE"] = 2 RET["MSG"] = "设备已经进行绑定" RET["DATA"] = {"toy_id":str(toy_info.get("_id"))} return jsonify(RET)
#绑定玩具(创建一个玩具 创建聊天窗口) 创建连天窗口添加数据库 toy toy添加user 添加到数据库 user添加toy 更新Users数据库 更新连天数据库 @devices_bp.route("/bind_toy", methods=["POST"]) def bind_toy(): toy_info = request.form.to_dict() user_id = toy_info.pop("user_id") user_info = MDB.Users.find_one({"_id": ObjectId(user_id)}) # 查询user_info # 创建一个Chats chat_id = MDB.Chats.insert_one({"user_list": [], "chat_list": []}) # 1.创建toy toy_info["avatar"] = "toy.jpg" toy_info["friend_list"] = [] toy_info["bind_user"] = user_id # toy_info[bind_user]? 这个值怎么获得? # toy_id = MDB.Toys.insert_one(toy_info) 暂时不创建toy # 2.toy有了app的绑定对象, app的绑定toy对象是谁呢? # 在 Users 数据中的 bind_toys 列表 加入 toy 绑定对象的_id字符串 # MDB.Users.update_one({}, {"$push": {"bind_toys": str(toy_id.inserted_id)}}) 暂时不创建 # 3.将toy和app 交换名片 # 建立一个移动端好友关系是为了 即使通讯 IM 基于通讯录的 # 给玩具增加第一个好友 app toy_add_user = { "friend_id": user_id, # app id "friend_nick": user_info.get("nickname"), # user 昵称 "friend_remark": toy_info.pop("remark"), # remark在哪里呢? "friend_avatar": user_info.get("avatar"), # user有头像吗? "friend_chat": str(chat_id.inserted_id), "friend_type": "app" # 好友的用户类型 app / toy }, toy_info["friend_list"].append(toy_add_user) toy_id = MDB.Toys.insert_one(toy_info) # 一个人无法决定两人的关系 app 也要同时 增加toy为好友 user_add_toy = { "friend_id": str(toy_id.inserted_id), # toy_id str "friend_nick": toy_info.get("baby_name"), # baby_name "friend_remark": toy_info.get("toy_name"), # toy_name "friend_avatar": "toy.jpg", # 阿凡达 "friend_chat": str(chat_id.inserted_id), # chat_id "friend_type": "toy" # 好友的类型 toy } user_info["bind_toys"].append(str(toy_id.inserted_id)) user_info["friend_list"].append(user_add_toy) # 修改 Users 的全部数据 MDB.Users.update_one({"_id": ObjectId(user_id)}, {"$set": user_info}) # Chats 数据也会变化 user_list player_list 将 toy_id 和 user_id 加入 MDB.Chats.update_one({"_id": chat_id.inserted_id}, {"$set": {"user_list": [user_id, str(toy_id.inserted_id)]}}) RET["CODE"] = 0 RET["MSG"] = "绑定完成" RET["DATA"] = {} return jsonify(RET)
@devices_bp.route("/toy_list", methods=["POST"]) def toy_list(): bind_user = request.form.get("_id") toyl = list(MDB.Toys.find({"bind_user": bind_user}))
#ObjectId 转换为 str for toy in toyl: toy["_id"] = str(toy.get("_id")) RET["CODE"] = 0 RET["MSG"] = "获取Toy列表" RET["DATA"] = toyl return jsonify(RET)
@devices_bp.route("/open_toy", methods=["POST"]) def open_toy(): device_key = request.form.to_dict() # 1.用 device_key 查询? Devices or Toys # 先查询已绑定Toy 可以有效减少数据库查询次数(减少IO操作) toy = MDB.Toys.find_one(device_key) # 2.设备处于绑定状态,正常启动 # 设备未绑定 # 设备未授权 0.5% if toy: # 开机成功 ret = { "code": 0, "music": "Success.mp3", "toy_id": str(toy.get("_id")), "name": toy.get("toy_name") } else: if MDB.Devices.find_one(device_key): # 设备未绑定 ret = { "code": 1, "music": "Nobind.mp3" } else: # 设备未授权 ret = { "code": 2, "music": "Nolic.mp3" } return jsonify(ret)
#长连接websocket
import json from flask import Flask, request,render_template from geventwebsocket.handler import WebSocketHandler from geventwebsocket.server import WSGIServer from geventwebsocket.websocket import WebSocket ws_app = Flask(__name__) user_socket_dict={} @ws_app.route("/app/<user_id>") def app(user_id): print(user_id) app_socket =request.environ.get("wsgi.websocket") #type:WebSocket if app_socket: user_socket_dict[user_id] = app_socket while True: app_data = app_socket.receive() toy_data_dict = json.loads(app_data) to_user = toy_data_dict.get("to_user") print("toy_data:" + app_data) usocket = user_socket_dict.get(to_user) usocket.send(app_data) @ws_app.route("/toy/<toy_id>") def toy(toy_id): # Toy 连接的位置 print(toy_id) toy_socket = request.environ.get("wsgi.websocket") # type:WebSocket if toy_socket: user_socket_dict[toy_id] = toy_socket while True: toy_data = toy_socket.receive() toy_data_dict = json.loads(toy_data) to_user = toy_data_dict.get("to_user") usocket = user_socket_dict.get(to_user) usocket.send(toy_data) @ws_app.route("/get_toy/") def get_toy(): return render_template("WebToy.html") if __name__ == '__main__': http_server = WSGIServer(("0.0.0.0",9528),ws_app,handler_class=WebSocketHandler) http_server.serve_forever()