我正在尝试显示最新版本的圆形立方体。我得到了我想要的结果
curl https://api.github.com/repos/roundcube/roundcubemail/releases | grep tag_name | grep -o "1.2.[0-9]\{1,\}" | sort -n | tail -1
我正在尝试将此工作转换为RC插件,所以我必须通过php执行此操作并且它无法正常工作。
<?php
$ch = curl_init();
curl_setopt_array(
$ch, array(
CURLOPT_URL => 'https://api.github.com/repos/roundcube/roundcubemail/releases',
CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'],
CURLOPT_POSTFIELDS => 'grep tag_name | grep -o \"1.2.[0-9]\{1,\}\" | sort -n | tail -1'));
$output = curl_exec($ch);
echo $output;
?>
返回
{“message”:“Not Found”,“documentation_url”:“https://developer.github.com/v3”} 1
感谢任何帮助。感谢
答案 0 :(得分:0)
您将CURLOPT_POSTFIELDS
设为grep tag_name | grep -o \"1.2.[0-9]\{1,\}\" | sort -n | tail -1
。这样做的结果是向GitHub Releases API发出HTTP POST请求,并将该shell命令作为POST数据发送。
您的方法存在许多问题:
/repos/:owner/:repo/releases
endpoint仅接受HTTP GET请求。不支持发送POST请求并导致错误消息。grep...
命令不。它们是在本地计算机上执行的Unix命令。因此,没有理由将它们作为API请求的一部分发送。grep
和朋友来解析输出。 GitHub API的响应采用名为JSON的标准格式。你应该use json_decode
instead,它比正则表达式更快,更可靠。您可以将sort
命令替换为PHP sorting functions。/repos/:owner/:repo/releases/latest
端点。由于这只返回一个版本,因此您无需进行排序,并且可以直接访问tag_name
属性。您缺少几个重要选项:
CURLOPT_RETURNTRANSFER => true
,让curl_exec
实际返回回复。CURLOPT_SSL_VERIFYHOST => false
和CURLOPT_SSL_VERIFYPEER => false
,禁用HTTPS证书检查,这很烦人。以下是我将如何实现它:
<?php
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => 'https://api.github.com/repos/roundcube/roundcubemail/releases/latest',
CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false
));
$output = json_decode(curl_exec($ch))->tag_name;
echo $output;