零基础学习编程处理大数据 (0基础学编程写脚本)

没有任何复杂操作或代码,不需要*载下**配置任何其他东西。

打开只有几 MB 的最简开发工具 aardio ,新建工程。

零基础学编程软件附教程,零基础学编程算法

默认会打开主窗口 main.aardio ,点击『代码视图』按钮:

零基础学编程软件附教程,零基础学编程算法

简单解释一下主窗口代码:

//导入界面库
import win.ui;

//创建主窗口
mainForm = win.form(text="视频*载下**");
 
//显示主窗口
mainForm.show();

//启动界面消息循环
win.loopMessage();

最后一句:

win.loopMessage();

启动界面消息循环很重要,它就好比汽车的发动机 —— 要一直运转不停,窗口界面才能收发处理各种消息,用户才能在界面上操作、查看结果。

然后我们再添加几句代码创建网页浏览器:

import win.ui; 
mainForm = win.form(text="视频*载下**");
mainForm.show();

//导入浏览器组件
import web.view;

//在主窗口上创建浏览器
var wb = web.view(mainForm);

//在浏览器中显示网页
wb.go("https://www.*******.com/video/*******/")

win.loopMessage();

现在我们再为浏览器添加一个网页可以调用的 external 对象,这样网页里的 JavaScript 脚本就可以直接调用本地导出的 aardio 对象了。

新增的代码如下:

//导出 aardio 对象到网页
wb.external = {
    
    //添加一个网页可以调用的 aardio 函数
    parseRenderData = function(renderData){
        
    } 
}


上面这段代码应当添加在哪个位置呢?后面我会讲,但您可以动手试一下,看能不能提前找到答案。

那么现在我们就可以在网页 JavaScript 里调用上面的

external.parseRenderData() 函数了。

下面我们调用 wb.waitEle 等待网页创建指定的节点,并执行 JavaScript 脚本,代码如下:

//导出 aardio 函数
wb.external = { 
    parseRenderData = function(renderData){
        
    } 
}

//打开视频页面
wb.go("https://www.*******.com/video/*******/")

//等待 CSS 选择器 "#RENDER_DATA" 指定的节点出现
wb.waitEle("#RENDER_DATA",`
aardio.parseRenderData( this.innerText )
`);

wb.waitEle() 函数的第 1 个参数用于指定等待节点的 CSS 选择器,而 "#RENDER_DATA" 指的是 id 属性为 "RENDER_DATA" 的节点。

wb.waitEle() 函数的第 2 个参数指定节点出现后要执行的 JavaScript 脚本。在这个 JS 脚本里 this 对象就指向找到的 HTML 节点,this.innerText 就是这个节点内部包含的文本数据。

JavaScript 的 aardio 对象就是 aardio 里的 wb.external 对象。

那么下面我们就要改进 aardio 中的 parseRenderData 函数分析网页传过来的数据,并提取视频地址。

改进的代码如下,每句都写了注释:

//导出 aardio 对象
wb.external = {
    
    //导出 aardio 函数
    parseRenderData = function(renderData){
        
        // URL 解码
        var json = inet.url.decode(renderData);
        
        // JSON 解码
        var jsonData = web.json.tryParse(json);
        
        //提取视频信息,双 [[]] 的作用是 jsonData 为空不报错
        var info = jsonData[["data"]][["initialVideo"]][["videoPlayInfo"]];
        
        //忽略错误数据
        if(!info) return; 
        
        //视频*载下**地址列表(数组)
        var vList = info.dynamic_video.dynamic_video_list;
        
        //音频*载下**地址列表(数组)
        var aList = info.dynamic_video.dynamic_audio_list;
        
        //取出最后一个视频信息,#取数组长度(起始索引为 1)
        var video = vList[#vList];
        
        //取出最后一个音频信息
        var audio = aList[#aList];
        
        //创建*载下**对话框,*载下**视频,支持断点续传   
        import inet.downBox;
        var d = inet.downBox(winform,"正在*载下**视频",1);
        d.download(video.backup_url,"/download/v.mp4");
        
        //*载下**音频  
        var d = inet.downBox(winform,"正在*载下**音频",1);
        d.download(audio.backup_url,"/download/a.mp4"); 
        
        //合并音频与视频
        import process.ffmpeg;
        
        //第一个参数指定 FFmpeg 工作目录
        var ffmpeg = process.ffmpeg("/download/"
            , "-y -i v.mp4 -i a.mp4 -vcodec copy -acodec copy " 
            + "out.mp4"); 
      
        //等待操作完成
        ffmpeg.waitOne();
    }
}

下面是完整代码:

import win.ui;
mainForm = win.form(text="视频*载下**");

import web.view;
var wb = web.view(mainForm);

wb.external = {
    
    parseRenderData = function(renderData){
        
        var json = inet.url.decode(renderData);
        var jsonData = web.json.tryParse(json);
        
        var info = jsonData[["data"]][["initialVideo"]][["videoPlayInfo"]];
        if(!info) return; 
        
        var vList = info.dynamic_video.dynamic_video_list;
        var aList = info.dynamic_video.dynamic_audio_list;
        
        var video = vList[#vList];
        var audio = aList[#aList];
        
        import inet.downBox;
        var d = inet.downBox(winform,"正在*载下**视频",1);
        d.download(video.backup_url,"/download/v.mp4");
        
        var d = inet.downBox(winform,"正在*载下**音频",1);
        d.download(audio.backup_url,"/download/a.mp4"); 
        
        import process.ffmpeg;
        var ffmpeg = process.ffmpeg("/download/"
            , "-y -i v.mp4 -i a.mp4 -vcodec copy -acodec copy " 
            + "out.mp4"); 
       
        ffmpeg.waitOne(); 
        process.exploreSelect("/download/out.mp4");
    }
}

mainForm.show();

wb.go("https://www.*******.com/video/*******/");

wb.waitEle("#RENDER_DATA",`
aardio.parseRenderData( this.innerText )
`);
 
win.loopMessage();

点击『保存 Ctrl +S』按钮:

零基础学编程软件附教程,零基础学编程算法

按『运行 F5 』按钮看效果,按 F7 一键生成独立 EXE 文件。

测试的视频网址这里就不写了,*载下**视频不是目的,学习编码技术才是最重要的。