0

最近我开始使用 sonarcloud,我被要求为一个大学项目提取项目的技术债务。我正在尝试使用由 sonarcloud 公开的 Web API,但收效甚微。这是我写的python代码

import requests
import json

r = requests.get ('https://sonarcloud.io/component_measures?id=Huginn87_jabref/api/metrics/component?component=&metricKeys=sqale_index',auth= (' usr ',' pwd '))

code = r.status_code

print "Status code:", code

print r.json ()

这就是我得到的结果

Status code: 200

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    print r.json ()

  File "/home/usr/.local/lib/python2.7/site-packages/requests/models.py", line 897, in json
    return complexjson.loads (self.text, ** kwargs)

  File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode (s)

  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode (s, idx = _w (s, 0) .end ())

  File "/usr/lib/python2.7/json/decoder.py", line 382, ​​in raw_decode
    raise ValueError ("No JSON object could be decoded")

ValueError: No JSON object could be decoded

根据文档,您应该给我一个 json 格式,但事实并非如此。有人好心告诉我哪里错了吗?提前谢谢了。问候。

4

2 回答 2

1

我解决了这个问题。我在下面报告解决方案,以防它为其他人服务。既不能使用 wget 也不能​​使用 curl,无法使用 python 脚本提取指标,但您必须将 url 放在地址栏中

https://sonarcloud.io/api/measures/component_tree?component=keyJabref4.2&metricKeys=sqale_index&ps=100&p=1

更改参数组件 -> 项目的键 metricKeys -> 要采用的度量 ps -> 指示页面大小,因此最多可以等于 500(从 0 到 499)的元素数量 p -> 表示页面(例如,对于 1500 个班级的项目,您必须先保存 p = 1 的值,然后使用 p = 2,然后使用 p = 3)

我感谢那些试图帮助我的人,即使你的建议也很有帮助。我希望他能帮助你。问候

于 2018-11-22T10:17:26.967 回答
1

接受的解决方案表示无法使用curlPython 脚本收集指标。首先,我认为 Sonarcloud API 需要设置一组特定的标头,但事实并非如此。

在下面的完成中,通过 curl 和 Python 访问 Sonarcloud API 的示例以及上面的示例。

curl "https://sonarcloud.io/api/measures/component_tree?component=keyJabref4.2&metricKeys=sqale_index&ps=100&p=1"

请注意 URL 周围的引号,我猜想早先已经忘记了。

或者类似地在 Python 中使用该requests模块:

import requests

url = 'https://sonarcloud.io/api/measures/component_tree'
query = {'component': 'keyJabref4.2', 'metricKeys': 'sqale_index', 'ps': 100, 'p': 1}
r = requests.get(url, params=query)
metrics_dict = r.json()

在这两种情况下,API 都会返回 HTTP 状态代码 200,结果与通过浏览器访问时的结果相同。

当我在搜索有关如何使用 Sonarcloud API 的示例时偶然发现了这个问题时,它的文档在这里:https ://sonarcloud.io/web_api

于 2019-01-16T15:09:03.620 回答