Javascript 从大型JSON响应中提取文章

Javascript 从大型JSON响应中提取文章,javascript,node.js,json,Javascript,Node.js,Json,我正在尝试编写一些代码,跟踪安大略移民提名计划更新页面的更新,然后在有新文章时发送电子邮件警报。我已经在PHP中完成了这项工作,但我想尝试在JS中重新创建它,因为我在过去几周一直在学习JS OINP有一个公共API,但整个网页都存储在JSON响应中(您可以在这里看到:) 查看安全值-常见的趋势是日期/标题始终在标记之间。我使用PHP所做的是创建一个函数,将之间的文本存储到名为Date/Title的变量中。然后-为了存储文章正文文本,我只抓取了和之间的所有文本(基本上是标题之后的所有内容,直到下一

我正在尝试编写一些代码,跟踪安大略移民提名计划更新页面的更新,然后在有新文章时发送电子邮件警报。我已经在PHP中完成了这项工作,但我想尝试在JS中重新创建它,因为我在过去几周一直在学习JS

OINP有一个公共API,但整个网页都存储在JSON响应中(您可以在这里看到:)

查看安全值-常见的趋势是日期/标题始终在
标记之间。我使用PHP所做的是创建一个函数,将
之间的文本存储到名为Date/Title的变量中。然后-为了存储文章正文文本,我只抓取了

之间的所有文本(基本上是标题之后的所有内容,直到下一个标题的开头),将其存储在“bodytext”变量中,然后遍历所有出现的内容

我一直在琢磨如何在JS中实现这一点

到目前为止,为了保持简单,我确实做到了:

const fetch = require("node-fetch");

fetch(
  "https://api.ontario.ca/api/drupal/page%2F2020-ontario-immigrant-nominee-program-updates?fields=body"
)
  .then((result) => {
    return result.json();
  })
  .then((data) => {
    let websiteData = data.body.und[0].safe_value;
    console.log(websiteData);
  });
这将输出整个身体。有人能告诉我图书馆的方向吗/一些可以帮助我的提示:

  • 通读整个安全值响应,并将每篇文章(日期/标题+文章正文)分解为一个数组
  • 我可能会将每篇文章上传到MongoDB中,然后每天检查两次->如果有新文章,我会发送电子邮件notif

    任何建议都将不胜感激


    谢谢,

    您可以使用regex获取标签的内容,例如

    /<h3>(.*?)<\/h3>/g.exec(data.body.und[0].safe_value)[1]
    
    /(.*)/g.exec(data.body.und[0].安全值)[1]
    

    返回2020年8月26日

    您可以使用正则表达式获取标记的内容,例如

    /<h3>(.*?)<\/h3>/g.exec(data.body.und[0].safe_value)[1]
    
    /(.*)/g.exec(data.body.und[0].安全值)[1]
    
    返回2020年8月26日

    使用一些工具,您可以非常轻松地完成此操作

    我不确定“日期/标题/内容”部分是什么,但它展示了如何解析一些html

    我还将代码更改为“async/await”。这更多的是个人偏好。代码应与“then/catch”相同

    (异步()=>{
    试一试{
    //请求
    const response=等待获取(“https://api.ontario.ca/api/drupal/page%2F2020-安大略移民提名人计划更新?字段=正文“;
    //将响应解析为json
    const data=wait response.json();
    //获取我们需要的解析数据
    const websiteData=data.body.und[0]。安全值;
    //将html拆分为单独的文章(每一篇都是新文章的开始)
    const articles=websiteData.split(/(?={
    //第一个h3之间的所有内容都是日期
    const date=/(.*)/m.exec(文章)[0];
    //第一个h4之间的所有内容都是标题
    const title=/(.*)/m.exec(文章)[0];
    //从第一个到最后一个之间的所有内容都是本文的内容
    const content=/(.*)/m.exec(article)[0];
    返回{日期、标题、内容};
    });
    //显示结果
    console.log(articleInfo);
    }捕获(错误){
    //如果存在任何错误,则显示错误
    console.log(错误);
    }
    })();
    使用一些工具,你可以很容易地完成这项工作

    我不确定“日期/标题/内容”部分是什么,但它展示了如何解析一些html

    我还将代码更改为“async/await”。这更多是个人偏好。代码应与“then/catch”相同

    (异步()=>{
    试一试{
    //请求
    const response=等待获取(“https://api.ontario.ca/api/drupal/page%2F2020-安大略移民提名人计划更新?字段=正文“;
    //将响应解析为json
    const data=wait response.json();
    //获取我们需要的解析数据
    const websiteData=data.body.und[0]。安全值;
    //将html拆分为单独的文章(每一篇都是新文章的开始)
    const articles=websiteData.split(/(?={
    //第一个h3之间的所有内容都是日期
    const date=/(.*)/m.exec(文章)[0];
    //第一个h4之间的所有内容都是标题
    const title=/(.*)/m.exec(文章)[0];
    //从第一个到最后一个之间的所有内容都是本文的内容
    const content=/(.*)/m.exec(article)[0];
    返回{日期、标题、内容};
    });
    //显示结果
    console.log(articleInfo);
    }捕获(错误){
    //如果存在任何错误,则显示错误
    console.log(错误);
    }
    
    })();
    我刚刚完成了为此创建.Net核心工作者服务

    您要查找的值是“metatags.description.og:updated_time.#attached.drupal_add_html_head.#value”

    我们的想法是,如果上次更新的更改,您将发送电子邮件通知

    在你的javascript中试试这个

    fetch(`https://api.ontario.ca/api/drupal/page%2F2021-安大略省移民提名计划更新`)
    。然后((结果)=>{
    返回result.json();
    })
    。然后((数据)=>{
    让lastUpdated=data.metatags[“og:updated_time”][“#attached”]。drupal_添加_html_head[0][0][“#value”];
    console.log(最新更新);
    
    })
    我刚刚完成了为此创建.Net核心工作者服务

    您要查找的值是“metatags.description.og:updated_time.#attached.drupal_add_html_head.#value”

    我们的想法是,如果上次更新的更改,您将发送电子邮件通知

    在你的javascript中试试这个

    fetch(`https://api.ontario.ca/api/drupal/page%2F2021-安大略省移民提名计划更新`)
    。然后((结果)=>{
    返回result.json();
    })
    。然后((数据)=>{
    让lastUpdated=data.metatags[“og:updated_time”][“#attached”]。drupal_添加_html_head[0][0][“#value”];
    console.log(最新更新);
    
    });
    也许最好分两步进行。1)html到JSON:或2)JSON到JSArray(一种普通的解析)也许最好分两步进行。1) html到JSON:或2)JSON到JSArray(普通pa