1

可能重复:
使用 wikipedia API 获取内容
使用 PHP,如何使用 MediaWiki API 获取 Wikipedia 文章的第一段?

这主要是一个与 XML 相关的问题。

我正在尝试使用 MediaWiki API 来做到这一点。

我设法获得了 XML 格式的响应(如果更容易,可以更改为 JSON),并且我在响应中看到了我需要的所有内容。例子:

http://en.wikipedia.org/w/api.php?format=xml&action=query&titles=War%20and%20Peace&prop=revisions&rvprop=content&format=xmlfm

出于格式化原因,我在这里使用了 xmlfm。在 PHP 中,我正在做:

$request = "http://en.wikipedia.org/w/api.php?format=xml&action=query&titles=War%20and%20Peace&prop=revisions&rvprop=content&format=xml";

$response = @file_get_contents($request);

$wxml = simplexml_load_string($response);

var_dump($wxml);

它打印出 XML 中的所有内容。我的问题是,我如何从中得到第一段?

我可以从全文中解析它,所以基本上我要问的是,我如何从这个 XML 中获取文章文本?当然,如果有办法直接进入第一段,那将是最好的。

4

1 回答 1

5

我肯定会说你正在寻找这个

如果您想检索第一部分中的所有内容(不仅仅是第一段):

// action=parse: get parsed text
// page=Baseball: from the page Baseball
// format=json: in json format
// prop=text: send the text content of the article
// section=0: top content of the page

$url = 'http://en.wikipedia.org/w/api.php?action=parse&page=Baseball&format=json&prop=text&section=0';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, "TestScript"); // required by wikipedia.org server; use YOUR user agent with YOUR contact information. (otherwise your IP might get blocked)
$c = curl_exec($ch);

$json = json_decode($c);

$content = $json->{'parse'}->{'text'}->{'*'}; // get the main text content of the query (it's parsed HTML)

// pattern for first match of a paragraph
$pattern = '#<p>(.*?)</p>#s'; // http://www.phpbuilder.com/board/showthread.php?t=10352690
if(preg_match_all($pattern, $content, $matches))
{
    // print $matches[0]; // content of the first paragraph (including wrapping <p> tag)
    print strip_tags(implode("\n\n",$matches[1])); // Content of the first paragraph without the HTML tags.
}
于 2012-06-09T12:43:18.690 回答