Javascript 将WikipediaAPI中的纯文本作为段落提取到我的网站
我正试图从维基百科API中获取关于柏林的文章的纯文本,并将其作为一个段落实现到我的网站上——所有这些都在ReactJs环境中 我有这个网址: 在浏览器中工作正常,然后尝试获取数据,如下面的sanbox: 这通常适用于大多数APIJavascript 将WikipediaAPI中的纯文本作为段落提取到我的网站,javascript,reactjs,fetch,react-hooks,wikipedia-api,Javascript,Reactjs,Fetch,React Hooks,Wikipedia Api,我正试图从维基百科API中获取关于柏林的文章的纯文本,并将其作为一个段落实现到我的网站上——所有这些都在ReactJs环境中 我有这个网址: 在浏览器中工作正常,然后尝试获取数据,如下面的sanbox: 这通常适用于大多数API 但在这里,我不知道该怎么办——在这个状态下,我得到了一个我实际上无法到达文章文本的对象。例如,我可以访问URL地址,但这不是我想要的 这里有一个有效的解决方案 以下几点需要您考虑: 您的查询URL末尾有一个“0”,因此它不会返回任何结果 您需要提取结果的内容以在
但在这里,我不知道该怎么办——在这个状态下,我得到了一个我实际上无法到达文章文本的对象。例如,我可以访问URL地址,但这不是我想要的 这里有一个有效的解决方案 以下几点需要您考虑:
- 您的查询URL末尾有一个“0”,因此它不会返回任何结果
- 您需要提取结果的内容以在HTML中显示它们,这就是getFirstPageExtract函数的作用
- 从状态呈现HTML有其缺点,请阅读
“
我还添加了加载
和错误
状态,因为我认为处理加载
和错误
状态是非常常见的做法。我还将您的内容制作成一个数组,并使用map
请注意,我使用过道具,众所周知,跨站点脚本(XSS)攻击非常危险
从“react-dom”导入ReactDOM;
从“React”导入React,{useState,useffect};
常量应用=()=>{
const[contents,setContents]=useState([]);
const[loading,setLoading]=useState(false);
const[error,setError]=useState();
常量url=
"https://en.wikipedia.org/w/api.php?action=query&origin=*&prop=extracts&format=json&exintro=&titles=Berlin”;
const extractAPIContents=(json)=>{
const{pages}=json.query;
返回Object.keys(pages).map(id=>pages[id].extract);
}
const getContents=async()=>{
让我们分别;
让内容=[];
设置加载(真);
试一试{
resp=等待获取(url);
const json=await resp.json();
contents=extractAPIContents(json);
}捕捉(错误){
设置错误(err);
}最后{
设置加载(假);
}
设置内容(contents);
};
useffect(()=>{
getContents();
}, []);
如果(加载)返回“加载…”;
如果(错误)返回“发生错误”;
返回(
文章
{contents.map(content=>)}
)
};
const rootElement=document.getElementById(“根”);
ReactDOM.render(谢谢!你是我的上帝:):…现在只需要读100遍就可以理解这里发生了什么,我们很好:)再次感谢!谢谢这也是一个很好的解决方案,……上帝。。。。我觉得我现在的反应太弱了:(,非常感谢大家的关注!如果你不理解代码中的任何内容,请随时问我。:)这只是一个例子,当然,在产品中
在使用危险的SetinenerHTML
和访问对象属性之前,您会三思而后行。请将代码等放在问题中,而不是链接到沙盒
import ReactDOM from "react-dom";
import React, { useState, useEffect } from "react";
const App = () => {
const [contents, setContents] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState();
const url =
"https://en.wikipedia.org/w/api.php?action=query&origin=*&prop=extracts&format=json&exintro=&titles=Berlin";
const extractAPIContents = (json) => {
const { pages } = json.query;
return Object.keys(pages).map(id => pages[id].extract);
}
const getContents = async () => {
let resp;
let contents = [];
setLoading(true);
try {
resp = await fetch(url);
const json = await resp.json();
contents = extractAPIContents(json);
} catch(err) {
setError(err);
} finally {
setLoading(false);
}
setContents(contents);
};
useEffect(() => {
getContents();
}, []);
if (loading) return 'Loading ...';
if (error) return 'An error occurred';
return (
<div>
<h1>Article</h1>
{contents.map(content => <div dangerouslySetInnerHTML={{ __html: content }} />)}
</div>
)
};
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);