过渡年的工作经验!
#node #api #项目 #discordjs

所以今年我要进入过渡年,建议我们搜索工作经验,因为它是爱尔兰过渡年计划的一部分,这很棒。

他们为我们提供了专门为过渡年份展示工作经验的网站

CareersPortal

https://careersportal.ie/

Ty.ie

https://ty.ie/

然后,他们告诉我们每天在这些网站上查找经验,因为大多数工作经历都是“先到先得的”,这意味着他们会先申请任何人。

所以...作为开发人员,我想到我可能可以通过获取或卷发来获得网站的更改,因此我不必每天检查工作经历的更改,并且仍然知道是否是否出现了新的体验。

好吧,我该怎么做?我决定使用我的可信赖和喜欢的 node.js 和一种称为“ web刮擦”的方法。

网络刮擦是使用机器人从网站提取内容和数据的过程。

因此,首先我创建了一个可以获取CareerSportal的循环。即每1分钟向我展示HTML。

setInterval(function() {
    fetch("https://careersportal.ie/workx/student_search.php?s_sector1=8&s_ty=&s_cx_county=6&s_cx_address=", {
        "method": "GET",
        "headers": {}
        })
        .then(res => res.text())
        .then(text => console.log(text));
}, 60000);

哪个...不起作用。

它一直用HTML代码对我的反应,这似乎是Google统计和Drupal,这是非常不寻常的。在调试并尝试使用诸如phantomjs之类的东西之后,这是用于自动化网页互动的无头浏览器,仍然没有结果。我决定在网站的代码内挖掘它,以防它阻止了请求。

我最终发现整个网页https://careersportal.ie仅用于显示按钮,实际上它使用iframe来显示所有工作经验,从https://cc.careersportal.ie的URL中放置。所以我用那个URL获取了所有内容,并且似乎有效!

现在就获取https://ty.ie/的问题

幸运的是,ty.ie使用了使用WordPress的API。因此,我能够获取该API,以获取具有工作经验的公司。

尽管CareerSportal拥有描述和联系信息的工作安置,但Ty.ie拥有与TY学生申请的公司。

虽然ty.ie api的提取工作只能工作约1小时,这并不理想。我发现那个泰。 IE使用WordPress添加的称为 nonce 的东西。

WordPress

nonce是WordPress生成的一次性使用安全令牌,以帮助保护URL免受滥用形式。

因此,我必须考虑如何绕过这一点,因为我意识到我需要提供一个nonce,否则API会返回错误。

因此,在测试并研究了网站的代码后。看起来像您输入https://ty.ie/网站时,它确实创建了一个nonce,该nonce存储在一个称为“ um_scripts”的变量中,然后由网站用于访问API。

使用该信息,我可以使用称为JSDOM的东西从HTML提取该代码,它是一个NPM软件包,像浏览器一样,可以像浏览器一样解析和与组装的HTML进行交互用该非CE代码称自己为API以获取公司!

jsdom

似乎有效!

现在,我们需要检查页面上是否有任何区别,我可以通过在TXT文件上保存以前的获取响应,然后比较2个响应,以查看是否使用以下代码更改了任何内容

    const diff = (diffMe, diffBy) => diffMe.split(diffBy).join('')

    const differences = diff(oldpage, newpage)
    if (differences == "") {
        // No Change
    } else {
        // Something changed
    }}

如果有任何区别,我们要提醒用户。我决定通过使用Discord.js制作一个Discord机器人来做到这一点,该机器人会在特定频道内发生更改的情况下通知我,以与该频道相关联!

Discord Bot

这是所有这些基本工作方式的图:

Diagram

这是一个非常有趣的项目,因为它遇到了一些有趣的问题,我学到了很多东西,例如如何从网站上获取信息以及我之前从未使用过的新包装,例如JSDOM,以及如何将所有内容连接在一起使用node.js!

-
最初发布于:https://blog.arisamiga.rocks/post/tyexperience/