是否可以从GitHub获取文件的编程语言?

蔬菜

我正在准备Python脚本,该脚本将从git commits日志中比较文件,并将差异写入漂亮的html文件中。

我想对源代码进行着色,类似于在GitHub diff上进行着色,为此,我想使用pygments只有一个问题,它将需要有关编写源代码的语言的信息,因此我必须以某种方式获取它。

我想知道是否有可能直接从存储库的本地副本(首选)或GitHub本身获取它。GitHub正在使用语言学家,所以工作已经完成了,为什么不使用它呢?此外,当我们从GitHub UI界面上的语言栏信息下方输入特定的语言链接时,您可以清楚地看到所有被识别为使用所选语言编写的文件。

我看到了一些有关.gitattributes文件的信息,您可以在其中设置文件的语言,但是我需要手动设置它,并且在项目更新后,我必须用所有添加的文件来更新该文件。

蔬菜

我写完这个问题后,立即找到了GitHub REST API。即使我还没有找到可以按原样提供文件语言的功能。我发现可以结合使用两种GitHub REST API方法:

我将在下面基于python实现对其进行描述。

  1. 列出项目中的所有语言并将其存储到python字典中
  2. 遍历存储库语言并在查询中使用语言参数执行查找(由于需要参数q,我认为任何文件中的字符都应为“空格”,因此我们提供%20作为我们要查找的字符串)
  3. 如果total_count等于1,则意味着我们找到了具有以下语言的文件:我们可以返回语言名称
import requests
import json


def check_file_lang(filename: str, repo: str):
    response = requests.get("https://api.github.com/repos/{}/languages".format(repo))
    lang = json.loads(response.text)
    for lang in lang.keys():
        response = requests.get("https://api.github.com/search/code?q=%20+filename:{}+repo:{}+language:{}".format(filename,
                                                                                                       repo,
                                                                                                       lang))
        search_result = json.loads(response.text)
        if search_result['total_count'] == 1:
            return lang

f = "Gruntfile.js"
r = "jquery/jquery"
file_lang = check_file_lang(f, r)
print(file_lang)

与此相关的一个问题是,当存储库使用多种语言时,有可能无法完成此请求。由于GitHub限制了每分钟的请求数(未认证== 10和已认证== 30),因此可能有很多请求需要检查存储库中的所有语言。GitHub REST API速率限制此外,即使存储库只有一种语言,每个文件仍然需要2个请求,这意味着您每分钟最多可以检查5或15个文件。

之后,尽管我会更好地根据提供的语言从存储库返回所有文件,但是GitHub限制了查询GitHub REST API超时和不完整的结果,这意味着对于大型项目,您的数据可能会被截断,因此您无法知道存储库中的所有文件。

def list_all_files_by_language(repo: str):
    response = requests.get("https://api.github.com/repos/{}/languages".format(repo))
    lang = json.loads(response.text)
    ret_dict = {}
    for lang in lang.keys():
        response = requests.get("https://api.github.com/search/code?q=%20+repo:{}+language:{}".format(repo,
                                                                                                      lang))
        search_result = json.loads(response.text)
        if 'items' in search_result.keys():
            ret_dict[lang] = search_result['items']
    return ret_dict

解决方案有其缺陷,但可以起作用。如果有人能找到更好的东西,我很想尝试一下。

目前,我接受此答复是因为它符合我的需求,因为GitHub Enterprise(这是我的用例)没有提到局限性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以创建通用的中间编程语言?

是否可以将Web Assembly(wasm)文件反编译为特定的编程语言?

是否可以通过编程获取任何文件(汇编和非汇编)的文件版本?

是否可以使用R编程语言进行Android开发?

是否可以以编程方式使用 Outlook 的“语言”设置?

是否有可以直接转换为另一种语言的编程语言?

是否可以使用统计编程语言R进行默认编程?

是否可以从C语言函数写入Word文件?

是否可以在WPF中以编程方式操纵psd文件的图层?

是否可以以编程方式锁定文件?(IBM 连接 5.0)

是否可以通过编程方式找到回退日志文件?

是否可以以编程方式下载 .scn 文件并运行它?

是否可以从DocumentFile获取常规文件?

如何让GitHub的不计数的编程语言分发一些文件?

是否可以在一个网站上使用多种编程语言

是否可以将类型构造函数视为功能编程语言中的类型?

是否可以在Node-RED的模板节点上添加其他编程语言的语法突出显示?

在Go编程语言中,是否可以将变量的类型作为字符串获得?

是否可以从ABAP内调用具有C编程语言接口的库?

除编程语言外,Unix / Linux shell是否可以视为操作系统?

耐用的Azure函数是否可以跨编程语言(从C#到Python Azure函数)进行通信?

是否可以使用其他编程语言替换Google Play控制台中的应用?

在哪里可以找到《 Rust编程语言》一书中提到的源代码(.rs文件)?

以任何编程语言(仅)读取后是否有必要关闭文件?

是否可以从Github网站或API获取合并到分支的列表?

是否可以通过用户位置从Github Api获取用户

C ++是否被视为Von Neumann编程语言?

自定义编程语言是否受阻?

Groovy编程语言是否存在正式规范?