我正试图解析我的项目上的Gitlab的原子feed,以在我的网站上显示版本历史。我确实计划每30分钟缓存我的结果,但现在我正试图从提要中提供的URL直接提取提交ID。
在提要中为提交提供的ID是URL:
https://gitlab.com/username/project/commit/c8c6ad918939d6fae60e1369b28b859390a32d56
为了获取实际提交的简化版本,首先我用/
分解URL,然后用end()
选择最后一个索引。如果我是正确的,提交id将始终在URL的末尾,所以这应该在gitlab上的任何项目上工作(如果我错了请纠正我)。
$id = explode('/', $feed->id); // Explode the URL into an array
$commit = substr(end($id), 0, 9); // Cut the string, select
echo $commit, '<br>';
这给了我一个项目所有提交的列表。提交id是漂亮的,而不是预期的长哈希。
这里的问题是,我做的对吗?我能做得更好吗?
如果你想知道我是如何到达这里的,我首先从我的项目提交部分抓取RSS Atom提要,然后在其上运行file_get_contents()
并使用SimpleXMLElement
解析XML。之后,我简单地在条目上使用foreach()
来循环遍历所有提交。
我将缓存文件输出以提高性能,所以请不要考虑这个问题。我真的很想知道我做的是否正确和有效以及你会使用什么方法。
为什么不用一行正则表达式就能搞定呢?例如:
preg_match_all("('/[a-f0-9]{9})",$inputXmlFeed, $urls);
$urls变量现在应该有一个您正在寻找的提交哈希列表,而不需要解析或循环,除非您需要除提交引用之外的其他内容。