提问者:小点点

如何在GitHub上添加我的堆栈溢出声誉作为一个live徽章?


我正在尝试添加我的堆栈溢出声誉作为一个活徽章在我的GitHub配置文件自述文件。 首先,我需要使用一些API从堆栈溢出获取我的帐户信息。 接下来,我需要提取信誉,然后将其传递给另一个api,该api在Markdown中创建徽章。

现在,我已经做了一些研究,似乎我能够使用stack exchange api通过endpointURL获得JSON格式的堆栈溢出帐户信息。 此外,Shield的api将允许我从一个完美的endpointurl创建徽章。 但是,Shields.io要求endpoint采用特定的JSON格式。

现在要解决这个难题,我需要第三个api,它能够从堆栈交换api读取和解析JSON,然后以所需的JSON格式托管endpointurl。 Runkit的api似乎能够做到这一点。

我试图实现的一个例子(但不是提交,而是我的堆栈溢出声誉):


共1个答案

匿名用户

首先,在这里使用stack Exchange的用户api,您可以通过端点URL获得JSON格式的堆栈溢出帐户信息。 您所要做的就是在id字段中指定您的堆栈溢出用户id,然后单击run生成端点路径。 您可以通过点击您的个人资料图片获得您的堆栈溢出用户id,然后它将出现在搜索栏中。

将生成的路径追加到https://api.stackExchange.com以形成终结点URL。

我的堆栈交换终结点URL:https://api.stackExchange.com/2.2/users/9133459?order=desc&sort=信誉&site=StackOverflow

现在我们已经有了JSON格式的堆栈溢出信息,我们可以继续解析它并创建一个满足shields需求的新端点。 为此,您必须使用runkit创建一个帐户。 在RunKit上发布这段代码,并确保节点版本为V4.9.1(用您自己先前生成的端点url替换代码中的url):

// variables
var endpoint = require("@runkit/runkit/json-endpoint/1.0.0");
var fetch = require("node-fetch");
var url = "https://api.stackexchange.com/2.2/users/9133459?order=desc&sort=reputation&site=stackoverflow";
let settings = { method: "Get" };  

// main function
endpoint(module.exports, async function()
{
    try {
       await fetch(url, settings)
            .then(res => res.json())
            .then((json) => {
                reputation = json["items"][0].reputation;
                if (reputation >= 1000) {
                    reputation = reputation / 1000;
                    reputation = Math.floor(reputation * 10) / 10;
                    // if first decimal place is 0
                    if ((reputation * 10) % 10 == 0) {
                        // round to int
                        reputation = Math.round(reputation);
                    }
                    reputation = reputation.toString();
                    reputation += "K";
                }
        });    
    } catch(e) {
        return {
            "schemaVersion": 1,
            "label": "STACKOVERFLOW REPUTATION",
            "message": "API ERROR",
            "color": "FF0000",
            "labelColor": "black",
            "style": "for-the-badge"
        }
    }
    return {
        "schemaVersion": 1,
        "label": "STACKOVERFLOW REPUTATION",
        "message": reputation,
        "color": "FE7A16",
        "labelColor": "black",
        "style": "for-the-badge"
    }
})

发布之后,单击RunKit页面顶部的endpoint超链接,查看要传递给shields以创建徽章的endpoint url。

下面是我的runkit端点URL:https://stack-overflow-reputation-ciqil1ej93hq.runkit.sh

现在,剩下的就是转到这里的Shields.io的JSON端点徽章页面,并按如下方式粘贴url:

除了复制徽章url选项之外,您还可以选择复制markdown版本,复制它并将其粘贴到您的GitHub配置文件自述文件中。

减价结果:

注意:您可以通过更改RunKit代码中的JSON返回语句或覆盖JSON端点徽章页面中想要更改的内容来更改徽章的设计。 您可以更改的属性列在同一页上。