在昨天完善Magic主题的时候,突然想到一个需求,获取我另一个博客的文章和对应url。但是Halo博客没有提供api(可能是我不知道),但是它提供了sitemap。
那样我就可以用php去解析sitemap然后输出<a>
标签。
使用cURL发送get请求发现回传一个html。
1 | <html lang="zh-CN"> |
可以发现需要的标题都在 '/archives/.*?" title="(.*?)">
那么我们用这个正则表达式进行解析。
1 | $url_map = $url . '/sitemap.html'; |
首先使用cURL获取html存入$html, 然后使用preg_match_all
正则匹配 把匹配到的放入$title 变量。这里要注意传入preg_match_all中第一个参数是匹配式,需要两端加#
原因未知,反正没加就报错。走了很多弯路。
$title是一个数组,里面会有两个数组,第一个是匹配到的项,第二个是匹配到的结果,这里我们要第二个数组。也就是$title['1']
,并将它倒置,这样可以从新到旧的方式排列。
1 | $title['1'] = array_reverse($title['1']); |
构造url列表。
1 | foreach ($title['1'] as $item) |
然后构造<a>
标签。使用array_map()方法。1
2
3$all = array_map(function ($i1, $i2) {
return '<a href="' . $i1 . '" target="_blank">' . $i2 . '</a>';
}, $url_list, $title['1']);
最后附上完整的方法。
1 | function parse_halo_sitemap($url) |
其他博客也是如此。