我试图在我的项目中解析来自Gitlab的原子提要,以在我的网站上显示版本历史记录。我计划每30分钟缓存一次结果,但现在我试图直接从Feed中提供的URL中提取提交ID。
Feed中提交的ID是一个URL:
https://gitlab.com/username/project/commit/c8c6ad918939d6fae60e1369b28b859390a32d56
要获取实际提交的简化版本,首先我按/
展开网址,然后使用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()
来遍历所有提交。
我要缓存文件输出以获得性能,因此请忘记这一点。我真的想知道我是否正确有效地执行此操作以及您将使用哪种方法。
答案 0 :(得分:0)
那么为什么不用一行正则表达式来打击它?类似的东西:
preg_match_all("(\/[a-f0-9]{9})",$inputXmlFeed, $urls);
$ urls变量现在应该有一个你正在查找的提交哈希列表,而不需要解析或循环,除非你需要提交引用以外的东西。