如何使用web api sonarcloud

How to use web api sonarcloud

最近开始使用sonarcloud,大学项目要求我提取项目的技术债务。我正在尝试使用 sonarcloud 公开的网络 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格式,但它没有。请问有人好心告诉我哪里错了吗?提前谢谢了。你好。

我解决了这个问题。我在下面报告解决方案,以防它为其他人服务。无法使用 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)

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

公认的解决方案表明无法使用 curl 或 Python 脚本收集指标。首先,我认为 Sonarcloud API 需要设置一定的 headers ,但事实并非如此

下面是一个通过 curl 访问 Sonarcloud API 的例子,Python 上面的例子。

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 returns HTTP 状态代码 200 和结果与通过浏览器访问时相同。

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