Ubuntu Python与GitHub API 交互,获取仓库更新信息

news2024/12/28 19:03:54

1. 获取 GitHub 个人访问令牌

  1. 登录 GitHub ,首先使用帐户登录 GitHub

  2. 在 GitHub 页面右上角点击头像,然后选择 “Settings”
    在这里插入图片描述

  3. 在左侧菜单栏滚动到最下方,找到并点击 “Developer settings”
    在这里插入图片描述

  4. 在 “Developer settings” 页面中,点击 “Personal access tokens”,然后选择 “Tokens (classic)”
    在这里插入图片描述

  5. 点击 “Generate new token” 按钮,显示生成令牌的表单,按照提示设置:

  • Note : 给令牌一个描述性的名称,比如 “Sentinel Access”
  • Expiration:选择令牌的过期时间(例如 30 天、60 天、或 No expiration,没有到期时间)
  • Scopes: 选择令牌的权限范围。
    需要读取仓库信息,勾选 repo 下的 repo:statusrepo_deploymentpublic_reporepo:invite
    需要对仓库内容进行写操作(例如推送代码),还需选择 repo:write
  1. 置完毕后,点击页面底部的 “Generate token” 按钮,GitHub 将生成一个新的个人访问令牌
  2. 写入 ~/.bashrc 文件
export GITHUB_KEY=ghp_xxxx

查看

$ echo $GITHUB_KEY
ghp_xxxx

2. Python与GitHub API 交互

代码:

import requests
import os


class GitHubClient:
    def __init__(self, token):
        self.token = token

    def fetch_updates(self, subscriptions):
        headers = {
            'Authorization': f'token {self.token}'
        }
        updates = {}
        for repo in subscriptions:
            response = requests.get(f'https://api.github.com/repos/{repo}/events', headers=headers)
            if response.status_code == 200:
                updates[repo] = response.json()
        return updates


if __name__ == "__main__":
    github_client = GitHubClient(os.getenv("GITHUB_KEY"))
    updates = github_client.fetch_updates(["huggingface/transformers", "tensorflow/tensorflow","apache/spark"])
    #print(updates)
    # print("**"*400)
    report = ""
    for repo, events in updates.items():

        print(events)
        report += f"Repository: {repo}\n"
        for event in events:
            report += f"- {event['type']} id : {event['id']} at {event['created_at']}\n"
    print(report)

报错:

    raise ValueError(f"Unable to determine SOCKS version from {proxy_url}")
ValueError: Unable to determine SOCKS version from socks://127.0.0.1:1080/

修改后:

import os
import httpx


# 设置代理服务器
proxy_url = 'socks5://127.0.0.1:1080'

# 创建一个 HTTPX 客户端并配置代理
client = httpx.Client(proxies={
    "http://": proxy_url,
    "https://": proxy_url,
})

class GitHubClient:
    def __init__(self, token):
        self.token = token

    def fetch_updates(self, subscriptions):
        headers = {
            'Authorization': f'token {self.token}'
        }
        updates = {}
        for repo in subscriptions:
            response = client.get(f'https://api.github.com/repos/{repo}/events', headers=headers)
            if response.status_code == 200:
                updates[repo] = response.json()
        return updates


if __name__ == "__main__":

    github_client = GitHubClient(os.getenv("GITHUB_KEY"))
    updates = github_client.fetch_updates(["huggingface/transformers", "tensorflow/tensorflow"])

    report = ""
    for repo, events in updates.items():
        report += f"Repository: {repo}\n"
        for event in events:
            report += f"- {event['type']} id : {event['id']} at {event['created_at']}\n"
    print(report)

运行结果:

Repository: huggingface/transformers
- IssueCommentEvent id : 41653179474 at 2024-09-05T11:25:30Z
- WatchEvent id : 41653123066 at 2024-09-05T11:23:39Z
- IssueCommentEvent id : 41653105714 at 2024-09-05T11:23:05Z
- PullRequestReviewCommentEvent id : 41653061082 at 2024-09-05T11:21:35Z
- PullRequestReviewEvent id : 41653060997 at 2024-09-05T11:21:36Z
- WatchEvent id : 41652733799 at 2024-09-05T11:11:12Z
- IssueCommentEvent id : 41652632676 at 2024-09-05T11:07:58Z
- PullRequestReviewCommentEvent id : 41652553166 at 2024-09-05T11:05:23Z
- PullRequestReviewEvent id : 41652553115 at 2024-09-05T11:05:24Z
- PullRequestReviewCommentEvent id : 41652525289 at 2024-09-05T11:04:31Z
- PullRequestReviewEvent id : 41652525183 at 2024-09-05T11:04:32Z
- PullRequestReviewEvent id : 41652515178 at 2024-09-05T11:04:13Z
- PullRequestReviewCommentEvent id : 41652515280 at 2024-09-05T11:04:12Z
- PullRequestReviewCommentEvent id : 41652494849 at 2024-09-05T11:03:32Z
- WatchEvent id : 41652495060 at 2024-09-05T11:03:34Z
- PullRequestReviewEvent id : 41652494752 at 2024-09-05T11:03:33Z
- WatchEvent id : 41652344813 at 2024-09-05T10:58:54Z
- IssueCommentEvent id : 41652202609 at 2024-09-05T10:54:31Z
- PullRequestReviewCommentEvent id : 41652140247 at 2024-09-05T10:47:41Z
- PullRequestReviewCommentEvent id : 41652140269 at 2024-09-05T10:50:50Z
- PullRequestReviewCommentEvent id : 41652140261 at 2024-09-05T10:49:47Z
- PullRequestReviewEvent id : 41652140207 at 2024-09-05T10:52:37Z
- PullRequestReviewEvent id : 41652140156 at 2024-09-05T10:52:37Z
- IssuesEvent id : 41651848008 at 2024-09-05T10:43:52Z
- PushEvent id : 41651737460 at 2024-09-05T10:40:46Z
- PushEvent id : 41651577778 at 2024-09-05T10:36:07Z
- IssueCommentEvent id : 41651380814 at 2024-09-05T10:29:58Z
- PullRequestReviewCommentEvent id : 41651114817 at 2024-09-05T10:22:07Z
- PullRequestReviewEvent id : 41651114714 at 2024-09-05T10:22:08Z
- PushEvent id : 41651089649 at 2024-09-05T10:21:22Z
Repository: tensorflow/tensorflow
- ForkEvent id : 41653000234 at 2024-09-05T11:19:37Z
- IssueCommentEvent id : 41652864055 at 2024-09-05T11:15:19Z
- IssueCommentEvent id : 41652805357 at 2024-09-05T11:13:29Z
- PushEvent id : 41652771430 at 2024-09-05T11:12:25Z
- IssueCommentEvent id : 41652723831 at 2024-09-05T11:10:53Z
- WatchEvent id : 41651729210 at 2024-09-05T10:40:32Z
- IssuesEvent id : 41651693889 at 2024-09-05T10:39:36Z
- CommitCommentEvent id : 41651661031 at 2024-09-05T10:38:38Z
- CommitCommentEvent id : 41651626667 at 2024-09-05T10:37:33Z
- CommitCommentEvent id : 41651144722 at 2024-09-05T10:23:02Z
- CommitCommentEvent id : 41651113295 at 2024-09-05T10:22:05Z
- CommitCommentEvent id : 41651098529 at 2024-09-05T10:21:38Z
- CommitCommentEvent id : 41651062753 at 2024-09-05T10:20:30Z
- PullRequestEvent id : 41650975772 at 2024-09-05T10:17:51Z
- CreateEvent id : 41650974318 at 2024-09-05T10:17:48Z
- WatchEvent id : 41650740807 at 2024-09-05T10:10:44Z
- PushEvent id : 41650462691 at 2024-09-05T10:02:36Z
- PushEvent id : 41650330117 at 2024-09-05T09:58:53Z
- IssueCommentEvent id : 41649922726 at 2024-09-05T09:47:09Z
- WatchEvent id : 41649641425 at 2024-09-05T09:39:04Z
- PullRequestEvent id : 41649496774 at 2024-09-05T09:34:54Z
- DeleteEvent id : 41649496291 at 2024-09-05T09:34:53Z
- PushEvent id : 41649495821 at 2024-09-05T09:34:52Z
- PushEvent id : 41649495399 at 2024-09-05T09:34:52Z
- PushEvent id : 41649313881 at 2024-09-05T09:29:47Z
- PushEvent id : 41649201712 at 2024-09-05T09:26:39Z
- PushEvent id : 41648991757 at 2024-09-05T09:20:44Z
- PushEvent id : 41648777010 at 2024-09-05T09:14:50Z
- IssueCommentEvent id : 41648540862 at 2024-09-05T09:08:13Z
- PushEvent id : 41648203089 at 2024-09-05T08:58:48Z

GitHub API 返回的数据,格式为 JSON,假设有两个事件,输出类似于以下内容:

{
    "huggingface/transformers": [
        {
            "id": "event_id_1",
            "type": "PushEvent",
            "created_at": "2023-09-01T12:34:56Z",
            "actor": {
                "id": 1234567,
                "login": "user123",
                "url": "https://api.github.com/users/user123"
            },
            "repo": {
                "id": 6543210,
                "name": "6master6/GitHubSentinel",
                "url": "https://api.github.com/repos/6master6/GitHubSentinel"
            },
            "payload": {
                // ...其他相关信息
            }
        },
        {
            "id": "event_id_2",
            "type": "IssuesEvent",
            "created_at": "2023-08-31T10:11:22Z",
            "actor": {
                "id": 2345678,
                "login": "user456",
                "url": "https://api.github.com/users/user456"
            },
            "repo": {
                "id": 6543210,
                "name": "6master6/GitHubSentinel",
                "url": "https://api.github.com/repos/6master6/GitHubSentinel"
            },
            "payload": {
                // ...其他相关信息
            }
        }
    ]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2108418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】数据结构08

文章目录 最小堆的构建 另一个树的子树找树左下角的值 折半查找的平均查找长度[顺序表] 画出折半查找树将关键字按完全二叉树形式画出查找树 l o g 2 n 1 log_2n1 log2​n112个结点画出高度为4的查找树 1层1个节点比较1次,2层2个节点比较2次,3层4个节点…

2024年高教杯国赛(A题)碰撞检测模型+最优螺距|数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

计算机,数学,AI在社会模拟中的应用

国家智囊团会使用社会模拟器来预测社会动向和一些问题的涌现,亚洲社会仿真学会(ASSA)最近在武汉成立,旨在推动大型社会模拟器的研发和应用。 未来随着计算机算力的提升以及人工智能的进化,我们每个人都可能在计算机中被…

如何通过学习英语,打出人生的‘王炸’?

如何通过学习英语,打出人生的‘王炸’? 每个人都渴望一张“王炸”牌,能瞬间改变人生的走向。有的人通过天赋,有的人依靠机遇,而今天我们要探讨的,是通过学习英语打出人生“王炸”的真实故事。英语&#xf…

DB2创建数据库-创建用户-赋值权限-导入数据

这篇文章主要内容以下几点: 1)创建数据库 2)创建用户 3)给用户赋权限 4)导入准备好的建表语句和数据 一、创建数据库 安装DB2数据库软件,在我另一篇文章写有,自己查看。这里不讲解安装。假设你…

react 使用Ant Design中DatePicker设置mode=“year“无法获取value

一、问题描述 <DatePicker placeholder"请选择年份" mode"year" onChange{this.onChange}/>// 使用上边代码&#xff0c;界面呈现出只有年份的选择器。但是&#xff0c; onChange 事件根本不会触发&#xff0c;获取不了值&#xff01;二、解决办…

【系统架构设计师-2011年】综合知识-答案及详解

更多内容请见&#xff1a; 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2~4题】【第5~7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24题】【第2…

【PyQt6 应用程序】解说+原声视频混剪无显卡精简版,无显卡可用

在当今视频内容创作日益繁荣的时代,利用自动化工具进行视频编辑和二次创作已成为提高生产效率和创作水平的重要手段。本文将介绍如何使用PyQt6创建一个应用程序,该程序能够自动提取视频中的解说和原声部分,并使用人工智能对解说进行二次创作,从而生成具有独特风格的新视频内…

[网络原理]关于网络的基本概念 及 协议

文章目录 一. 关于网络的概念介绍1. 局域⽹LAN2. ⼴域⽹WAN3. 主机4. 路由器5. 交换机IP地址端口号 二. 协议协议分层TCP/IP五层模型(或四层)OSI七层模型封装分用 一. 关于网络的概念介绍 1. 局域⽹LAN 局域⽹&#xff0c;即 Local Area Network&#xff0c;简称LAN。 Local …

会声会影2024是一款功能强大的专业视频制作软件及会声会影字体怎么安装

字幕在视频中扮演着多重角色&#xff0c;对于不同类型的观众都有重要意义。通过提供文字信息&#xff0c;字幕帮助观众更好地理解视频内容&#xff0c;特别是对于那些听力受损或不懂视频语言的观众来说&#xff0c;字幕是他们获取信息的重要途径。这篇文章就一起来看看会声会影…

面试高频:Mysql事务

在MySQL中&#xff0c;事务是用于管理数据库操作的一组语句&#xff0c;它们作为一个整体执行&#xff0c;以确保数据的一致性和完整性。事务提供了一种机制&#xff0c;可以将多个操作合并为一个原子单元&#xff0c;这样要么所有操作都成功执行&#xff0c;要么在出现错误时&…

HarmonyOS开发实战( Beta5版)合理使用动画丢帧规范实践

本文列举了部分用于优化动画时延的正反案例&#xff0c;帮助开发者在遇到相似场景时进行优化&#xff0c;解决构建页面动画时遇到动画时延较长的问题。 减少动画丢帧 在播放动画或者生成动画时&#xff0c;画面产生停滞而导致帧率过低的现象&#xff0c;称为动画丢帧。 播放…

《Learning To Count Everything》CVPR2021

摘要 论文提出了一种新的方法来解决视觉计数问题&#xff0c;即在给定类别中仅有少量标注实例的情况下&#xff0c;对任何类别的对象进行计数。将计数问题视为一个少样本回归任务&#xff0c;并提出了一种新颖的方法&#xff0c;该方法通过查询图像和查询图像中的少量示例对象…

【Linux高级命令】2_查看日志命令(重点)

文章目录 一、查看日志文件1.1 日志文件1.2 查看日志信息&#xff1a;head1.3 查看日志信息&#xff1a; tail【重点】1.4 工作中的使用场景 二、查看操作系统信息 一、查看日志文件 1.1 日志文件 就是一个文本文件 里面记录了程序运行的信息 作用 通过最后几行信息&#xff…

JIT编译:Java性能加速的关键技术

JIT&#xff08;Just-In-Time&#xff09;编译是 Java 虚拟机&#xff08;JVM&#xff09;中一种重要的优化技术&#xff0c;用来在程序运行时动态地将字节码编译成机器码&#xff08;也就是平台特定的原生代码&#xff09;&#xff0c;从而提高程序的执行效率。 以下是 JIT 编…

领衔登榜!凯伦股份入选2024年度市级工业设计中心名单

近日&#xff0c;由苏州市工信局认定的2024年度市级工业设计中心名单正式完成了公示&#xff0c;江苏凯伦建材股份有限公司领衔登榜。 据了解&#xff0c;工业设计是指以工业产品为主要对象&#xff0c;综合运用科技手段和工学、美学、心理学、经济学等知识&#xff0c;对产品的…

2024.9.5 作业

注释QT基础代码 QT core gui#如果Qt版本大于4&#xff0c;则添加widgets模块 greaterThan(QT_MAJOR_VERSION, 4): QT widgets#启用C11编译标准 CONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been mark…

【机器学习】自然语言处理中的Transformer模型:深度解析与前沿发展

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言Transformer模型概述编码器&#xff08;Encoder&#xff09;与解码器&#xff08;Decoder&#xff09; 自注意力机制与多头注意力自注意力机制多头注意力机制 位置编码与模型优势位置编码模型优势…

MySQL数据库的基本概念(day23)

1 学习目标 了解数据库相关的概念了解并掌握MySQL产品的安装了解并掌握MySQL服务的使用重点掌握MySQL语法规范重点掌握数据库的管理语法重点掌握数据表的管理语法 2 数据库概述 2.1 数据库相关概念 2.1.1 什么是数据库 数据库的英文为DataBase&#xff0c;简称DB&#xff…

linux基础IO——动静态库——实现与应用学习、原理深入详解

前言&#xff1a;本节内容是基础IO部分的动静态库。 本节内容&#xff0c; 我们将站在实现者的角度上自己实现一下动静态库&#xff0c; 并且会站在使用者的角度上使用我们自己实现的库。过程中牵扯到许多新的知识&#xff0c; 最后我们会重谈一下我们的进程。 理解一下有了动静…