RESTful_API

RESTful_API只有听最後一堂

1.Lab_AJAX_Node.js
localhost:80


2.自动寄信
Lab_SendMail

ourNodeApp nodemailer Gamil > 寄信

(1)寄信的信箱变更安全性
在左边侧边栏,点按「安全性」
如果「低安全性应用程序存取权」的状态不是「开启」,
请点一下「开启存取权」

Note
请用分身帐号练习,或者在本练习之後,关闭存取权

(2)安装 nodemailer

npm install nodemailer

(3)在本资料夹新建档案,档名: index.js,内容如下

    var nodemailer = require("nodemailer");
    
    var transporter = nodemailer.createTransport({
        service: "gmail",
        auth: {
            user: "帐号",  // lab 3.2
            pass: "密码" // lab 3.2
        }
    });
    
    var mailOptions = {
        from: "帐号",  // lab 3.3
        to: "寄给谁?", // lab 3.3
        subject: "用程序寄信给自己",  // lab 3.5
        // text: "Mail body (Text)",  // lab 3.6
        html: "<h1>Heading</h1><a href='https://en.wikipedia.org/'>Wiki</a>"
    };
    
    transporter.sendMail(mailOptions, function(error, info){
        if (error) {
            console.log(error);
        } else {
            console.log("讯息发送: " + info.response);
        }
    });

(4)在终端机视窗,输入

node index.js

(5)收信


3.爬虫
Lab_Puppeteer(爬虫) > lab.js

(1)安装 Puppeteer

npm install puppeteer

(2)在本资料夹建立新的 JavaScript 档案(lab.js)

    const puppeteer = require('puppeteer');

    async function main () {
    const browser = await puppeteer.launch({headless: false}); //1.启动浏览器
    const page = await browser.newPage(); //2.开一个页签
    //3.浏览这页
    await page.goto('https://www.taipower.com.tw/TC/news2.aspx?mid=225', {waitUntil: 'networkidle2'});

    // 跑完网页会拍照储存成example.png,并关闭
    // await page.screenshot({path: 'example.png'});
    // await browser.close();

    // 跑到网页,按右上focus输入earth,并按下方向键"下"
    // await page.goto('https://en.wikipedia.org/wiki/Wiki', {waitUntil: 'networkidle2'});
    // await page.focus("#searchInput");
    // await page.keyboard.type('earth');
    // await page.keyboard.press('ArrowDown');
    // await page.keyboard.press('\n');    

    // 模拟滑鼠点一下
    // (await page.$("#searchButton")).click();
    //  await delay(1000);
    //  await page.keyboard.press('ArrowDown');
    //  await page.keyboard.press('\n');
    //  await delay(1000);
    //  await page.screenshot({path: 'example.png'});
    //  await browser.close();

    await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'}) //4.让网页加入JS

    // 5.撷取网页内容
    var dataList = await page.evaluate( () => {
        let result = []; //6.网页内容转成阵列
        const $ = window.$; //7.把JS的$拿出来用
        let liList = $("#news_box3 > div.box_list > ul > li");
        liList.each(function (index, element) {  //第几个,内容
            var newsItem = { //把每个li都拿出来
                newsUrl: $(element).find("a").prop("href"),
                newsTitle: $(element).find("a div h3").text(),
                newsTime: $(element).find("a div span").text()
            };
            result.push(newsItem); //8.加到阵列里面
        })
        return result;
    })
    await browser.close();  //9.关掉网页

    console.log(dataList); //10.显示
}

main();

(3)在终端机视窗,执行程序

node lab.js

顺利的话,会启动 Google 浏览器,并在终端机显示内文


<<:  IOS、Python自学心得30天 Day-17 learning rate

>>:  Day5-TypeScript(TS)宣告

Day 18 AWS云端实作起手式第八弹 让开机器变得很自动自发Auto Scaling-WriteNode设置

Auto-Scaling设置内容较多,我们快速回顾一下昨天的架构图: 针对外面的流量,我们提供使用者...

【Day3】不可貌相的JS变数型别:基本型别

俗话说:「人不可貌相,海水不可斗量。」就像我们看到郭靖傻不楞登,怎麽知道他武功高强。杨康外表英俊,...

连续 30 天 玩玩看 ProtoPie - Day 12

第二种启动相机的方法 昨天勾选 Camera 的 Auto Start 来启动相机。 今天使用第二种...

[ Day 18 ] 条件 Render - Conditional Rendering

在前面元件以及生命周期的章节中我们提过 render() 这个方法,而且有特别指出它是在 Clas...

day9 稽核 (雷)除了技术,也要学管理

来部落格看图文并茂文章 补觉鸣诗 所谓的稽核 很多人都会担心做不好就惩处 导致稽核前大家人仰马翻 其...