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