搭建移动app

前端是怎么搞app的,学习了。。。
搭建开发环境
不需要搭建ios和android的开发环境,只需要下载hbuilder(估计需要java环境支持),

选定ui
目前推荐mui,效果不错

写事件
通过js调用原生方法实现app效果

写业务逻辑

常用网址

http://dev.dcloud.net.cn/mui/ui/

http://www.html5plus.org/doc/h5p.html

 

 

HBuilder / HBuilderX - HTML/JS 代码块 - 代码封装 - 简单数据形成代码格式
MUI - 移动App布局框架 - 最接近原生App操作
HTML5PLUS - 调用硬件驱动 和 系统调用

Mui当中封装HTML5PLUS 喊一句就出来了

MUI页面的DOM - mdo
标题栏 - mhe - 带返回的 不带返回的
MUI内容主体 - mbo
九宫格 - mg
轮播 - msl
图文列表 - mli
底部选项卡 - mta

JS:
mui.openwindow({
url:"页面.html",
id:"页面.html",
styles:{
top:"0px",
bottom:"50px"
},
extras:{}
}) - mop

mui.init() - min - 加载子页面 - mins s=subpages:[{}]
mui.post() - mpo - ajax 的 POST请求方式 - url,data,SCB,datatype
mui.toast() - 展示自动消失提示框

document.getElementById("btn").addEventListener("tap",funcation(){

}) - dga - 绑定事件



1.手势事件
tap 点击事件
ming - 修改当前webview可监听的手势事件

2.webview
将HTML代码翻译成可以显示的webview页面
plus.webview.currentWebView(); 获取当前WebView所有对象
plus.webview.getWebViewById("webview_id_string"); 获取指定的WebView所有对象


3.mui.fire
login 向 index 发送 事件触发
1.事件触发
var index = plus.webview.getWebViewById("HBuilder"); login 获取 index webview
mui.fire(index,"hello",{age:123})

2.事件监听
index 页面监听事件
document.addEventListener("hello",function(eventData){
eventData.detail === {age:123}
// ws.send(JSON.stringify(event.detail)));
mui.toast("我是index页面,你调用了我的hello事件 ,你给我传递了"+JSON.stringify(event.detail));
})

4.storage === cookie
本地存储空间
{"key":"string/int"}

5.页面参数传递 extras
extras:{name:666} 传递页面参数 login.html
login.html: plus.webview.currentWebView().name; 获取当前WebView所有对象

 

代码和图片

前端代码:

百度云盘完整:

链接:https://pan.baidu.com/s/1QaSc7ZsZarQ4cBstNW2REw
提取码:fsfu

前端ui框架:

下面index.html启动口,HBuild创建项目,index.html 是入口界面,也是第一个界面,其他界面从这里点击进入

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <title></title>
        <script src="js/mui.js"></script>
        <link href="css/mui.css" rel="stylesheet" />
    </head>

    <body>
        <nav class="mui-bar mui-bar-tab">
            <a class="mui-tab-item mui-active" id="home">
                <span class="mui-icon mui-icon-home"></span>
                <span class="mui-tab-label">首页</span>
            </a>
            <a class="mui-tab-item" id="friend_list">
                <span class="mui-icon mui-icon-chat"><span class="mui-badge mui-badge-red" id="count">0</span></span>
                <span class="mui-tab-label">消息</span>
            </a>
            <a class="mui-tab-item" id="req_list"> 
                <span class="mui-icon mui-icon-email"></span>
                <span class="mui-tab-label">好友请求</span>
            </a>
            <a class="mui-tab-item" id="self">
                <span class="mui-icon mui-icon-contact"></span>
                <span class="mui-tab-label">我的</span>
            </a>
        </nav>
    </body>
    <script type="text/javascript" charset="utf-8">
        mui.init({
            subpages: [{
                url: 'main.html',
                id: 'main.html',
                styles: {
                    top: "0px",
                    bottom: "50px"
                },
                extras: {}
            }]
        })
        
        
        var ws = null;
        var user_info = null;
        mui.plusReady(function () {
            if(window.localStorage.getItem("user_id")){
                mui.post(window.serv + '/auto_login',{
                        _id:window.localStorage.getItem("user_id")
                },function(data){ 
                        user_info = data.DATA;
                        console.log(JSON.stringify(user_info));
                        document.getElementById("count").innerText = user_info.chat.count;
                        create_ws(data.DATA._id);
                    },'json'
                );
            }            
        }) 

        function create_ws(id) {
            ws = new WebSocket(window.ws_serv + id);
            ws.onmessage = function(eventMessage) {
                var recv_msg = JSON.parse(eventMessage.data);
//                user_info[recv_msg.from_user] += 1;
                document.getElementById("count").innerText = parseInt(document.getElementById("count").innerText)+1;
//                var p = plus.audio.createPlayer(window.chat_serv + recv_msg.chat);
////                mui.toast("开始播放语音消息");
//                p.play();
                var chat = plus.webview.getWebviewById("chat.html");
                mui.fire(chat,'add_chat',recv_msg);
                
                
                console.log(eventMessage.data);
            };
            ws.onclose = function() {
                create_ws(id);
            }
        }

        document.addEventListener("send_music", function(event) {
            var s = JSON.stringify(event.detail);
            ws.send(s);
        });
        
        document.addEventListener("send_chat", function(event) {
            var s = JSON.stringify(event.detail);
            ws.send(s);
        });
        
        document.getElementById('self').addEventListener('tap', function() {
            if(window.localStorage.getItem("user_id")) {
                mui.openWindow({
                    url: "user_info.html",
                    id: "user_info.html",
                    styles: {
                        top: "0px",
                        bottom: "50px"
                    },
                    extras:user_info
                })
            } else {
                mui.openWindow({
                    url: "login.html",
                    id: "login.html",
                    styles: {
                        top: "0px",
                        bottom: "50px"
                    }
                })
            }

        })

        document.getElementById('home').addEventListener('tap', function() {
            mui.openWindow({
                url: 'main.html',
                id: 'main.html',
                styles: {
                    top: "0px",
                    bottom: "50px"
                },
                extras: {}
            });
        })
        
        document.getElementById('friend_list').addEventListener('tap',function () {
            mui.openWindow({ 
                url: 'message.html',
                id: 'message.html',
                styles: {
                    top: "0px",
                    bottom: "50px"
                },
                extras: user_info,
                createNew:true
            });    
        })
        
        document.addEventListener("cut",function(eventMessage){
            var cut = eventMessage.detail.cut;
            var count = parseInt(document.getElementById("count").innerText);
            document.getElementById("count").innerText = count - cut;
        })
        
        document.getElementById('req_list').addEventListener('tap',function () {
            mui.openWindow({ 
                url: 'req_list.html',
                id: 'req_list.html',
                styles: {
                    top: "0px",
                    bottom: "50px"
                },
                createNew:true
            });        
        })
    </script>

</html>

点击底部栏首页,消息,好友,我的分别进入不同页面,

首页的html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <link rel="stylesheet" type="text/css" href="css/mui.css"/>
</head>
<body>
    <header class="mui-bar mui-bar-nav">
        <h1 class="mui-title">首页</h1>
    </header>
    <div class="mui-content">
        <div id="slider" class="mui-slider" >
          <div class="mui-slider-group mui-slider-loop">
            <!-- 额外增加的一个节点(循环轮播:第一个节点是最后一张轮播) -->
            <div class="mui-slider-item mui-slider-item-duplicate">
              <a href="#">
                <img src="http://placehold.it/400x300">
              </a>
            </div>
            <!-- 第一张 -->
            <div class="mui-slider-item">
              <a href="#">
                <img src="http://placehold.it/400x300">
              </a>
            </div>
            <!-- 第二张 -->
            <div class="mui-slider-item">
              <a href="#">
                <img src="http://placehold.it/400x300">
              </a>
            </div>
            <!-- 第三张 -->
            <div class="mui-slider-item">
              <a href="#">
                <img src="http://placehold.it/400x300">
              </a>
            </div>
            <!-- 第四张 -->
            <div class="mui-slider-item">
              <a href="#">
                <img src="http://placehold.it/400x300">
              </a>
            </div>
            <!-- 额外增加的一个节点(循环轮播:最后一个节点是第一张轮播) -->
            <div class="mui-slider-item mui-slider-item-duplicate">
              <a href="#">
                <img src="http://placehold.it/400x300">
              </a>
            </div>
          </div>
          <div class="mui-slider-indicator">
            <div class="mui-indicator mui-active"></div>
            <div class="mui-indicator"></div>
            <div class="mui-indicator"></div>
            <div class="mui-indicator"></div>
          </div>
        </div>
        <ul class="mui-table-view mui-grid-view mui-grid-9">
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-4">
            <a href="#">
                <span class="mui-icon mui-icon-home"></span>
                <div class="mui-media-body">Home</div>
            </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-4">
            <a href="#">
                <span class="mui-icon mui-icon-email"></span>
                <div class="mui-media-body">Email</div>
            </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-4">
            <a href="#">
                <span class="mui-icon mui-icon-chatbubble"></span>
                <div class="mui-media-body">Chat</div>
            </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-4">
            <a href="#">
                <span class="mui-icon mui-icon-location"></span>
                <div class="mui-media-body">Location</div>
            </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-4">
            <a href="#">
                <span class="mui-icon mui-icon-search"></span>
                <div class="mui-media-body">Search</div>
            </a>
        </li>
        <li class="mui-table-view-cell mui-media mui-col-xs-4 mui-col-sm-4">
            <a href="#">
                <span class="mui-icon mui-icon-phone"></span>
                <div class="mui-media-body">Phone</div>
            </a>
        </li>
            </ul>
        
        
        <ul class="mui-table-view" id="content_list">
            
        </ul>
        
    </div>
    <script src="js/mui.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
    mui.init();
    mui.back = function(){};
    mui.plusReady(function () {
        mui.post(window.serv + '/content_list',{
                
            },function(data){
                //data  = [{内容1},{内容2}]
                console.log(JSON.stringify(data));
                for (var i = 0; i < data.data.length; i++) {
                    create_content(data.data[i]);
                }
                
            },'json' 
        );
    }) 
    
    function create_content(content){   
        var li = document.createElement("li");
        li.className = "mui-table-view-cell mui-media";
        var a = document.createElement("a");
        a.onclick = function(){
            mui.openWindow({
                url:"player.html",
                id:"player.html",
                extras:content
            });
        };
        var img = document.createElement("img");
        img.className = "mui-media-object mui-pull-left";
        img.src = window.image_serv+content.cover;
        var div = document.createElement("div");
        div.className = "mui-media-body";
        div.innerText=content.title;
        var p = document.createElement("p");
        p.className="mui-ellipsis";
        p.innerText = content._id;
        
        li.appendChild(a); 
        a.appendChild(img);
        a.appendChild(div);
        div.appendChild(p);
        
        document.getElementById("content_list").appendChild(li);
        
    }

    </script>
</body>
</html>
main.html

消息的html

<!doctype html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link rel="stylesheet" type="text/css" href="css/mui.css" />
    </head>

    <body>
        <header class="mui-bar mui-bar-nav">
            <h1 class="mui-title">好友列表</h1>
        </header>
        <div class="mui-content">
            <ul class="mui-table-view" id="friend_list">
            </ul>
        </div>
        <script src="js/mui.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            mui.init();
            mui.back = function(){};
            var Sdata = null;
            var index = null;
            mui.plusReady(function(){
                Sdata = plus.webview.currentWebview();
                index = plus.webview.getWebviewById("H5945F808");
                mui.post(window.serv + '/friend_list',{
                        _id:window.localStorage.getItem("user_id")
                    },function(data){
                        console.log(JSON.stringify(data));
                        for (var i = 0; i < data.DATA.length; i++) {
                            create_friend(data.DATA[i]);
                        }
                    },'json'
                );
            })

            function create_friend(friend_info) {
                
                var span = document.createElement("span");
                span.className = "mui-badge mui-badge-red";
                span.innerText = Sdata.chat[friend_info.friend_id];
                friend_info.self_avatar = Sdata.avatar;
                var li = document.createElement("li");
                li.className = "mui-table-view-cell mui-media";
                var a = document.createElement("a");
                a.onclick = function() {
                    span.innerText = 0;
                    mui.fire(index,'cut',{cut:Sdata.chat[friend_info.friend_id]})
                    mui.openWindow({
                        url: "chat.html",
                        id: "chat.html",
                        extras: friend_info
                    });
                };
                var img = document.createElement("img");
                img.className = "mui-media-object mui-pull-left";
                img.src = "avatar/"+friend_info.friend_avatar;
                var div = document.createElement("div");
                div.className = "mui-media-body";
                div.innerText = friend_info.friend_remark;
                var p = document.createElement("p");
                p.className = "mui-ellipsis";
                p.innerText = friend_info.friend_nick;

                li.appendChild(a);
                a.appendChild(img);
                a.appendChild(div);
                a.appendChild(span);
                div.appendChild(p);

                document.getElementById("friend_list").appendChild(li);

            }
        </script>
    </body>

</html>

点击我的,进入登陆注册:

<!doctype html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link rel="stylesheet" type="text/css" href="css/mui.css" />
    </head>

    <body>
        <header class="mui-bar mui-bar-nav">
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
            <h1 class="mui-title">用户注册</h1>
        </header>
        <div class="mui-content">
            <form class="mui-input-group">
                <div class="mui-input-row">
                    <label>用户名</label>
                    <input type="text" id="username" class="mui-input-clear" placeholder="请输入用户名">
                </div>
                <div class="mui-input-row">
                    <label>昵称</label>
                    <input type="text" id="nickname" class="mui-input-clear" placeholder="请输入用户名">
                </div>
                <div class="mui-input-row">
                    <label>密码</label>
                    <input type="password" id="pwd" class="mui-input-password" placeholder="请输入密码">
                </div>
                <div class="mui-input-row">
                    <label>确认密码</label>
                    <input type="password" id="repwd" class="mui-input-password" placeholder="请输入密码">
                </div>

                <div class="mui-input-row mui-radio mui-left">
                    <label>我是爸爸</label>
                    <input name="gender" type="radio" value="2">
                </div>
                <div class="mui-input-row mui-radio mui-left">
                    <label>我是妈妈</label>
                    <input name="gender" type="radio" checked value="1">
                </div>
                <div class="mui-button-row">
                    <button type="button" class="mui-btn mui-btn-primary" id="reg_btn">确认眼神</button>
                    <button type="button" class="mui-btn mui-btn-danger">取消</button>
                </div>
            </form>
        </div>
        <script src="js/mui.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/md5.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            mui.init();
            document.getElementById('reg_btn').addEventListener('tap', function() {
                var username = document.getElementById("username").value;
                var nickname = document.getElementById("nickname").value;
                var pwd = document.getElementById("pwd").value;
                var repwd = document.getElementById("repwd").value;
                var gender_group = document.getElementsByName("gender");
                var gender = null;
                for(var i = 0; i < gender_group.length; i++) {
                    if(gender_group[i].checked) {
                        gender = gender_group[i].value;
                    }
                }
                
                if(pwd != repwd){
                    mui.toast('两次密码不一致');
                    return
                }
                
                mui.post(window.serv + '/reg',{
                        username : username,
                        password : hex_md5(pwd),
                        nickname : nickname,
                        gender : gender
                    },function(data){
                        console.log(JSON.stringify(data));
                        if (data.CODE == 0) {
                            mui.toast(data.MSG);
                            mui.back();
                        }
                    },'json'
                );
                
            })
        </script>
    </body>

</html>
reg.html
<!doctype html>
<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <title>Document</title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link rel="stylesheet" type="text/css" href="css/mui.css" />
    </head>

    <body>
        <header class="mui-bar mui-bar-nav">
            <h1 class="mui-title">用户登陆</h1>
        </header>
        <div class="mui-content">
            <form class="mui-input-group">
                <div class="mui-input-row">
                    <label>用户名</label>
                    <input type="text" id="username" class="mui-input-clear" placeholder="请输入用户名">
                </div>
                <div class="mui-input-row">
                    <label>密码</label>
                    <input type="password" id="pwd" class="mui-input-password" placeholder="请输入密码">
                </div>
                <div class="mui-button-row">
                    <button type="button" class="mui-btn mui-btn-primary" id="login_btn">登陆</button>
                    <button type="button" class="mui-btn mui-btn-danger" id="reg_btn">注册</button>
                </div>
            </form>
        </div>
        <script src="js/mui.js" type="text/javascript" charset="utf-8"></script>
        <script src="js/md5.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            mui.init();
            mui.back = function() {
                mui.toast('再按就给你关掉');
            };

            document.getElementById('reg_btn').addEventListener('tap', function() {
                mui.openWindow({
                    url: 'reg.html',
                    id: 'reg.html'
                });
            })
            
            document.getElementById('login_btn').addEventListener('tap',function () {
                var username = document.getElementById("username").value;
                var pwd = document.getElementById("pwd").value;
                mui.post(window.serv + '/login',{
                        username:username,
                        password:hex_md5(pwd)
                    },function(data){
                        console.log(JSON.stringify(data));
                        mui.toast(data.MSG);
                        if(data.CODE == 0){
                            window.localStorage.setItem("user_id",data.DATA._id);
                            mui.openWindow({
                                url: 'user_info.html',
                                id: 'user_info.html',
                                styles:{
                                    top:"0px",
                                    bottom:"50px"
                                },
                                extras:data.DATA
                            });
                        }
                    },'json'
                );
            })
        </script>
    </body>

</html>
login.html

 

 

 

 

后端代码,用的flask框架展示

 

数据采集:

import json
import os

import requests
from uuid import uuid4

from Config import COVER_PATH, MUSIC_PATH, MongoDB

header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
}


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":"7月前","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}}'
data = json.loads(DATA)
audio_list = data["data"]["tracksAudioPlay"]


res=requests.get("https://www.ximalaya.com/ertong/26060202/",headers=header)



content_list = []

for content_info in audio_list:
    content = {
        "title":content_info.get("trackName"),
        "zhuanji":content_info.get("albumName"),
        "cover":"",
        "music":"",

    }

    file_name = uuid4()
    cover_res = requests.get("http:"+content_info.get("trackCoverPath"))
    cover_file_name = f"{file_name}.jpg"
    cover_file_path = os.path.join(COVER_PATH,cover_file_name)
    with open(cover_file_path,"wb") as fc :
        fc.write(cover_res.content)

    music_res = requests.get(content_info.get("src"))
    music_file_name = f"{file_name}.mp3"
    music_file_path = os.path.join(MUSIC_PATH, music_file_name)
    with open(music_file_path, "wb") as fm:
        fm.write(music_res.content)
    # MongoDB 很快 - json存储 - 不用原生sql语句 - 数据存储方便
    # 数据后期 非常方便 - 用户画像(用户的操作日志) == 钱

    content["cover"] = cover_file_name
    content["music"] = music_file_name

    content_list.append(content)

MongoDB.Content.insert_many(content_list)
pachong

 

from flask import Flask

from Serv.Content import content
from Serv.Users import user

app = Flask(__name__)
app.debug = True

app.register_blueprint(content)
app.register_blueprint(user)


if __name__ == '__main__':
    app.run("0.0.0.0",9527)
app.py
MUSIC_PATH="Music"
COVER_PATH="Cover"


from pymongo import MongoClient

MC = MongoClient("localhost",27017)
MongoDB =MC["ang"]


RET = {
    "CODE":0,
    "MSG":"",
    "DATA":{}
}
Config
import os

from flask import Blueprint,jsonify,send_file
from Config import RET,MongoDB,COVER_PATH,MUSIC_PATH

content = Blueprint('content',__name__)

@content.route("/content_list",methods=["post"])
def content_list():
    con_list = list(MongoDB.Content.find({}))

    for index,cont in enumerate(con_list):
        con_list[index]["_id"] = str(cont.get("_id"))


    RET["CODE"] = 0
    RET["MSG"] = "获取内容资源列表"
    RET["data"]=con_list

    return jsonify(RET)

@content.route("/get_cover/<filename>",methods=["get"])
def get_cover(filename):
    file_path = os.path.join(COVER_PATH,filename)
    return send_file(file_path)

@content.route("/get_music/<filename>",methods=["get"])
def get_music(filename):
    file_path = os.path.join(MUSIC_PATH,filename)
    return send_file(file_path)
Content
from flask import Blueprint, request, jsonify

from Config import MongoDB, RET

user = Blueprint("user",__name__)

@user.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"]=[]
    MongoDB.Users.insert_one(user_info)

    RET["CODE"] = 0
    RET['MSG'] = "注册成功"
    RET["DATA"]={}
    return jsonify(RET)

@user.route("/login",methods=["post"])
def login():
    user_dict = request.form.to_dict()
    user_info=MongoDB.Users.find_one(user_dict,{"password":0})
    # *****
    user_info["_id"]=str(user_info.get("_id"))

    RET["CODE"] = 0
    RET["MSG"] = 'SUCCESS'
    RET["DATA"] = user_info
    return jsonify(RET)
Users

 

posted @ 2019-08-15 08:04  AnthonyWang  阅读(741)  评论(0)    收藏  举报