使用MediaWiki API,this为我提供了类似的输出,搜索词为Tiger
https://simple.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Tiger&format=json&exintro=1
响应:
{"batchcomplete":"","query":{"pages":{"9796":{"pageid":9796,"ns":0,"title":"Tiger","extract":"<p>The <b>tiger</b> (<i>Panthera tigris</i>) is a carnivorous mammal. It is the largest living member of the cat family, the Felidae. It lives in Asia, mainly India, Bhutan, China and Siberia.</p>\n<p></p>"}}}}
如何获得输出
虎(Panthera tigris)是一种食肉哺乳动物。它是猫科动物猫科动物中最大的活体成员。它生活在亚洲,主要是印度,不丹,中国和西伯利亚。
有人也可以告诉我如何将所有内容存储在文本文件中吗?我是初学者,所以请你好。我需要这个用于我在Bash中进行的项目,在Raspberry Pi 2上,使用Raspbian
答案 0 :(得分:1)
通常建议使用JSON解析器来处理JSON,我喜欢的是jq
% jq -r '.query.pages[].extract' file
<p>The <b>tiger</b> (<i>Panthera tigris</i>) is a carnivorous mammal. It is the largest living member of the cat family, the Felidae. It lives in Asia, mainly India, Bhutan, China and Siberia.</p>
<p></p>
要删除HTML标记,您可以执行以下操作:
... | sed 's/<[^>]*>//g'
将删除不在续行中的HTML标记:
% jq -r '.query.pages[].extract' file | sed 's/<[^>]*>//g'
The tiger (Panthera tigris) is a carnivorous mammal. It is the largest living member of the cat family, the Felidae. It lives in Asia, mainly India, Bhutan, China and Siberia.
file
是存储JSON的文件,例如:
curl -so - 'https://simple.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Tiger&format=json&exintro=1' > file
jq '...' file
或
jq '...' <(curl -so - 'https://simple.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Tiger&format=json&exintro=1')
您可以使用以下代码安装jq
sudo apt-get install jq
对于您的示例输入,您还可以将grep
与-P
(PCRE)一起使用。但建议使用上面适当的JSON解析器
grep -oP '(?<=extract":").*?(?=(?<!\\)")' file
<p>The <b>tiger</b> (<i>Panthera tigris</i>) is a carnivorous mammal. It is the largest living member of the cat family, the Felidae. It lives in Asia, mainly India, Bhutan, China and Siberia.</p>\n<p></p>
答案 1 :(得分:1)
如果你正在使用PHP,你可以很容易地完成它,如下所示。
我们知道文本存储在extract
属性中,因此我们需要访问它。
执行此操作的最简单方法是将API中的字符串解析为对象格式,这是使用PHP中的json_decode
方法完成的。然后,您可以从该对象访问extract
属性,这将为您提供字符串。代码将是这样的:
//Get the string from the API, however you've already done it
$JSONString = getFromAPI();
//Use the inbuilt method to create a JSON object
$JSONObject = json_decode($JSONString);
//Follow the structure to get the pages property
$Pages = JSONObject->query->pages;
//Here, we don't know what the Page ID is (because the MediaWiki API returns a different number, depending on the page)
//Therefore we need to simply get the first key, and within it should be our desired 'extract' key
$Extract = "";
foreach($Pages as $value) {
$Extract = $value->extract;
break;
}
//$Extract now contains our desired text
现在我们需要将$Extract
的内容写入文件,如您所述。这可以通过使用file_put_contents
方法完成如下。
//Can be anything you want
$file = 'APIResult.txt';
// Write the contents to the file,
// using the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $Extract, LOCK_EX);
Aaand我们已经完成了!
<强> 文档 强>
这些功能的文档(json_decode
和file_put_contents
)可在以下网址找到:
答案 2 :(得分:0)
你可能会发现pandoc很有帮助,来自http://pandoc.org/ - 它可以理解包括Mediawiki在内的输入上的多种文件格式,并且在输出上还有一堆文件格式,包括纯文本。它更像是“瑞士军刀”的方法,而且由于Mediawiki任意复杂的解析,你会想要使用这样的东西,这是通过一个大的测试套件。