首先,使用 API 将 wikitext 抓取为 JSON。通过获取此 URL 来做到这一点:
https://en.wikipedia.org/w/api.php?action=parse&page=Nick_Diaz&prop=wikitext&format=json
然后,假设结果在 中$data
,请执行以下操作:
$data = json_decode($data, true);
$data = $data['parse']['wikitext']['*'];
现在所有的 wikitext 都在$data
. 碰巧的是,总数是从五个字段中计算出来的:
mma_kowin
- 昏死
mma_subwin
- 提交
mma_decwin
- 决定
mma_dqwin
— 取消资格
mma_otherwin
- 其他
您可以使用正则表达式轻松解析这些字段:
/^\s*\|\s*mma_([a-z]+)win\s*=\s*(\d*)/m
您需要在$data
. 第一组将是ko
,sub
等。第二个匹配将是数字的字符串表示形式或零的空字符串。然后你会想把所有这些数字加起来,然后bam,你明白了。
现在都在一起了:
<?php
$data = file_get_contents("https://en.wikipedia.org/w/api.php?action=parse&page=Nick_Diaz&prop=wikitext&format=json");
$data = json_decode($data, true);
$data = $data['parse']['wikitext']['*'];
preg_match_all('/^\s*\|\s*mma_([a-z]+)win\s*=\s*(\d*)/m', $data, $matches, PREG_SET_ORDER);
$wins = array();
foreach($matches as $match) {
$wins[$match[1]] = (int)$match[2];
}
?>
<h1>Nick Diaz's Wins</h1>
<table border="1">
<tr><th>Means</th><th>Wins</th></tr>
<tr><td>Knockout</td><td><?php echo $wins['ko']; ?></td></tr>
<tr><td>Submission</td><td><?php echo $wins['sub']; ?></td></tr>
<tr><td>Decision</td><td><?php echo $wins['dec']; ?></td></tr>
<tr><td>Disqualification</td><td><?php echo $wins['dq']; ?></td></tr>
<tr><td>Other</td><td><?php echo $wins['other']; ?></td></tr>
<tr><td><strong>Total</strong></td><td><strong><?php echo array_sum($wins); ?></strong></td></tr>
</table>