破除Github API接口的访问次数限制

破除Github API接口的访问次数限制

  • 1、Github介绍
  • 2、Github API接口
    • 2.1 介绍
    • 2.2 使用方法
  • 3、Github API访问限制
    • 3.1 访问限制原因
    • 3.2 访问限制类别
  • 4、Github API访问限制破除
    • 4.1 限制破除原理
    • 4.2 限制破除示例

1、Github介绍

Github,是一个面向开源及私有软件项目的托管平台,也是全球最早且最大的项目代码托管平台,在无数代码人心中有着不可撼动的地位。Github只支持使用Git作为唯一的版本库控制托管,故名为Github。得助于Git强大的项目组织管理功能,全球范围内无数的企业用户也被吸引使用Github完成团队项目的协助工作。
在这里插入图片描述

截止2023年11月17日,Github在全球已有超过1亿的开发者用户(大多数来自于美国、中国、印度),超过90%的财富100强企业也选择使用Github。所有个人开发者用户与企业用户共同在Github上完成了约4.2亿个项目(包含2.84亿个开源项目)以及共计45亿次的开源贡献。

在这里插入图片描述

2、Github API接口

2.1 介绍

在 GitHub 汇聚了庞大的开源项目数据基础之上,该平台为开发者和研究者提供了丰富的研究素材。为了更好地协助 GitHub 用户访问和有效组织这些数据,GitHub 提供了公开的 API(Application Programming Interface) 接口,用以调用其平台资源。通过Github API,Github平台上公开的海量的数据得以轻松获取,这对爬虫、搜索、推荐系统与代码漏洞检测等方面的研究带来的极大的便利与促进作用。

GitHub API采用RESTful风格的设计,允许开发者通过 HTTP 请求访问 GitHub 上的各种资源,如仓库(Repositories)、用户(Users)、问题(Issues)、分支(Branches)等。通过 GitHub API,用户能够实现从查看存储库信息到管理问题, 以及提交、合并请求等各种操作。

2.2 使用方法

  1. 创建一个Github账户,并获取认证信息

    大多数 GitHub API 操作都需要进行身份验证,我们可以申请API Key (或者称为token凭证)进行身份验证。生成 API Key的步骤可以在 GitHub 平台里的个人设置中完成。
    在这里插入图片描述

    进入个人设置页面后,点击左侧侧边栏的Developers Settings选项,配置Github API Key。
    在这里插入图片描述

    Github身份认证支持authtoken两种验证方式,其中auth为授权码认证方式,其原理可参考这篇博客:第三方登陆auth(github),token为凭证认证方式,我们这里通过token方式进行认证。

    先点击左边侧栏的Token(classic), 然后点击右边弹出页面的Generate new token按钮,生成一个新的token。
    在这里插入图片描述
    之后设置token名称(Note)到期时间(Expiration)可访问的权限范围(Select scopes),然后点击Generate token生成即可。
    在这里插入图片描述
    下图中token即为绿色标注的区域(由于隐私性,本文生成的token加了马赛克)。
    在这里插入图片描述

  2. 使用API Key发起API请求

    有了API Key后,就能够以最大限度地访问Github API了。本文给出一个使用Python语言访问Github API接口的实例。

    首先,确保已经安装了requests库:

    pip install requests
    

    然后,使用以下的Python代码。 以下代码给出了通过requests向Github API发送Get请求,获取指定Github用户名、用户ID与粉丝数的实现逻辑:

    import requestsdef get_github_user(username):# 替换为上一步生成的有效tokenaccess_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"# 构建 API 请求的 URLapi_url = f"https://api.github.com/users/{username}"# 构建请求头,包括认证信息headers = {"Authorization": f"Bearer {access_token}","Accept": "application/json"  # 指定响应数据格式为 JSON}# 发送 GET 请求response = requests.get(api_url, headers=headers)# 检查响应状态码if response.status_code == 200:# 解析 JSON 响应user_data = response.json()# 打印用户信息print(f"GitHub 用户名: {user_data['login']}")print(f"用户ID: {user_data['id']}")print(f"粉丝数: {user_data['followers']}")else:print(f"请求失败,状态码: {response.status_code}")print(f"错误信息: {response.text}")# 替换为你要查询的 GitHub 用户名
    get_github_user("YuDongPan")
    

    运行后将得到以下结果:
    在这里插入图片描述

3、Github API访问限制

3.1 访问限制原因

在Github REST API Documentation中,详细介绍了Github API的使用方式、使用规范、使用案例与应用场景。此外,文档中还谈及了GitHub将限制用户在特定时间内可以发出的REST API请求的数量。此限制有助于防止滥用和拒绝服务攻击,并确保API对所有用户仍然可用。

3.2 访问限制类别

通常,Github根据身份验证方法计算REST API的主要速率限制,如下所述:

  • 未认证用户 (unauthenticated users):
    如果仅提取公共数据,则可以发出未经身份验证的API请求。未经身份验证的API请求与发起者的IP地址相关联,而不是与发出请求的用户或应用程序相关联。

    未经身份验证的请求的主要速率限制为每小时60个请求

  • 认证用户 (authenticated users):
    认证用户可以使用个人访问令牌来发出API请求。此外,认证用户可以授权GitHub应用程序或OAuth应用程序,然后它们可以代表认证用户发出API请求。

    普通情况下,认证用户每小时5000次请求的速率限制GitHub企业云组织拥有的GitHub应用程序请求的速率限制更高,为每小时15000个请求。同样,如果认证用户是GitHub Enterprise Cloud组织的成员,则由GitHub企业云组织拥有或批准的OAuth应用程序代表您提出的请求的速率限制更高,为每小时15000个请求。

  • Github APP安装 (Github APP installation):
    使用安装访问token进行身份验证的GitHub应用程序使用安装的最低速率限制,即每小时5000个请求。如果安装在GitHub企业云组织上,则安装的速率限制为每小时15000个请求。

    对于不在GitHub企业云组织上的安装,安装速率限制将随着用户和存储库的数量而变化。具有20个以上存储库的安装每小时会收到另外50个请求。在一个拥有20个以上用户的组织中安装,每个用户每小时还会收到50个请求。速率限制不能超过每小时12500个请求。

    GitHub应用程序用户访问token的主要速率限制由经过身份验证的用户的主要速率限值决定。此速率限制与另一个GitHub应用程序或OAuth应用程序代表该用户发出的任何请求以及该用户使用个人访问令牌发出的任何要求相结合。

4、Github API访问限制破除

4.1 限制破除原理

从Github API的访问限制类别中可以看出,未经认证的用户每小时可访问的次数最少,为60次;经认证的用户每小时可访问次数为5000次;作为Github企业云组织的应用程序每小时的访问次数则可以高达15000次。

考虑到大部分开发者并非Github企业云组织成员,故按照官方标准一个普通开发者经身份认证后最高可达到5000次/小时的访问速率。

但是,值得注意的是,一个开发者经身份认证后每小时可以访问5000次API接口,并不意味着一个应用程序的整个运行周期内就只能使用一个开发者的认证信息!!!

因此,如果我们在应用程序里头同时穿插使用多个开发者的身份认证信息(如token认证),即可完美破除Github API的访问限制

从而,破除Github API访问限制的关键,转化为了计算我们的应用程序每个小时需访问多少次Github API接口,对应于我们需要为应用程序准备多少个Github用户身份认证信息(token)。

例如,倘若我们开发的应用程序是一个爬虫程序,用于爬取Github的用户信息。爬虫程序在使用了多线程后,每小时需要访问13865次的Github
API接口,那么我们则需要准备 ⌈ 13865 ÷ 5000 ⌉ \lceil 13865÷5000 \rceil 13865÷5000=3个Github用户的token凭证。

4.2 限制破除示例

根据这一逻辑,我们给出以下的Python代码示例:

import requests
import random
from concurrent.futures import ThreadPoolExecutordef get_github_user(username):access_token = random.choice(token_lst)# 构建 API 请求的 URLapi_url = f"https://api.github.com/users/{username}"# 构建请求头,包括认证信息headers = {"Authorization": f"Bearer {access_token}","Accept": "application/json"  # 指定响应数据格式为 JSON}# 发送 GET 请求response = requests.get(api_url, headers=headers)# 检查响应状态码if response.status_code == 200:# 解析 JSON 响应user_data = response.json()# 打印用户信息print(f"GitHub 用户名: {user_data['login']}")print(f"用户ID: {user_data['id']}")print(f"粉丝数: {user_data['followers']}")else:print(f"请求失败,状态码: {response.status_code}")print(f"错误信息: {response.text}")# 构建一个token列表, 代表多个Github用户的token凭证
token_lst = ['xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
]# 假设构建一个含有8888个用户名的列表
username_lst = []
for i in range(8888):username_lst.append("YuDongPan")# 使用ThreadPoolExecutor创建线程池,控制并发数量
with ThreadPoolExecutor(max_workers=10) as executor:# 将每个用户名提交给线程池中的线程进行获取用户信息executor.map(get_github_user, username_lst)

在这个示例中,我们试图通过多线程机制在短时间内(一小时内)完成8888条Github API请求,获取指定Github用户名、用户ID与粉丝数。由于单个Github用户每个小时在使用token凭证后可访问5000次API,那么我们需要准备 ⌈ 8888 ÷ 5000 ⌉ \lceil 8888÷5000 \rceil 8888÷5000=2个Github用户的token凭证,装入token列表中。

在每次访问Github API接口时,我们通过random.choice()函数随机中token列表中选取一个Github用户的token凭证即可。

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

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

相关文章

提升你的PHP开发效率:探索JetBrains PhpStorm 2022的全新特性

在当今快速发展的软件开发领域,选择一个强大且高效的开发工具对于提升开发效率、保证代码质量至关重要。对于PHP开发者来说,JetBrains PhpStorm一直是市场上最受欢迎的IDE之一。随着JetBrains PhpStorm 2022的发布,这款工具带来了一系列创新功…

MybatisPlus快速入门及常见设置

目录 一、快速入门 1.1 准备数据 1.2 创建SpringBoot工程 1.3 使用MP 1.4 获取Mapper进行测试 二、常用设置 2.1 设置表映射规则 2.1.1 单独设置 2.1.2 全局设置 2.2 设置主键生成策略 2.2.1 为什么会有雪花算法? 2.2.2 垂直分表 2.2.3 水平分表 2.…

JavaScript流程控制详解之顺序结构和选择结构

流程控制 流程控制,指的是控制程序按照怎样的顺序执行 在JavaScript中,共有3种流程控制方式 顺序结构选择结构循环结构 顺序结构 在JavaScript中,顺序结构是最基本的结构,所谓的顺序结构,指的是代码按照从上到下、…

上海亚商投顾:沪指涨超3% 深成指和创指双双飙涨超6%

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 今日A股三大指数一改近期低迷状态,早盘小幅低开后一路高歌猛进集体大涨,沪指涨超3%&am…

锁(二)队列同步器AQS

一、队列同步器AQS 1、定义 用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 2、实现 同步器的设计是基于模板方法模式的,也就是说&#…

如何安装x11vnc并结合cpolar实现win远程桌面Deepin

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&#xff…

11.0 Zookeeper watcher 事件机制原理剖析

zookeeper 的 watcher 机制,可以分为四个过程: 客户端注册 watcher。服务端处理 watcher。服务端触发 watcher 事件。客户端回调 watcher。 其中客户端注册 watcher 有三种方式,调用客户端 API 可以分别通过 getData、exists、getChildren …

GLSL ES 1.0

GLSL ES 概述 写在前面 程序是大小写敏感的每一个语句都应该以英文分号结束一个shader必须包含一个main函数,该函数不接受任何参数,并且返回voidvoid main() { }数据值类型 GLSL支持三种数据类型: 整型浮点型:必须包含小数点&…

python 动态显示数据。

界面显示动态的数据。 from time import sleep import serialimport tkinter as tklis[1,10,40] # 打开串行端口 ser serial.Serial(COM3, 9600) # 9600为波特率,根据实际情况进行调整# 创建窗口和画布 window tk.Tk() canvas tk.Canvas(window, width400, heig…

高阶滤波器

一阶后向差分:s(1-z^(-1))/T dx/dt[x(k)-x(k-1)]/T[x(k)-x(k)z^(-1)]/Tx(k)*(1-z^(-1))/T 一阶前向差分:s(z-1)/T dx/dt[x(k1)-x(k)]/T[z*x(k)-x(k)]/Tx(k)*(z-1)/T 双线性差分:s(2/T)*(1-z…

通过 docker-compose 部署 Flink

概要 通过 docker-compose 以 Session Mode 部署 flink 前置依赖 Docker、docker-composeflink 客户端docker-compose.yml version: "2.2" services:jobmanager:image: flink:1.17.2ports:- "8081:8081"command: jobmanagervolumes:- ${PWD}/checkpoin…

【大模型上下文长度扩展】FlashAttention:高效注意力计算的新纪元

FlashAttention:高效注意力计算的新纪元 核心思想核心操作融合,减少高内存读写成本分块计算(Tiling),避免存储一次性整个矩阵块稀疏注意力,处理长序列时的效率问题利用快速 SRAM,处理内存与计算…

【大模型上下文长度扩展】LongQLoRA:单GPU(V100)环境下的语言模型优化方案

LongQLoRA 核心问题子问题1: 预定义的上下文长度限制子问题2: 训练资源的需求高子问题3: 保持模型性能分析不足 LongQLoRA方法拆解子问题1: 上下文长度限制子问题2: 高GPU内存需求子问题3: 精确量化导致的性能损失分析不足效果 论文:https://arxiv.org/pdf/2311.048…

docker镜像结构

# 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["java", "-jar"…

游泳耳机推荐性价比排行榜,四大高性价比游泳耳机推荐

随着运动健康意识的提高,越来越多的朋友选择在游泳馆进行锻炼。然而,在水中享受音乐并非易事,这就需要一款真正防水的耳机。尽管市面上有许多声称具备防水功能的耳机产品,但实际使用中往往难以达到理想的防水效果。为了帮助大家找…

之前看过的前序遍历的线索二叉树感觉写的有点问题 这里更新一下我的思路

前序线索化 #include<iostream> using namespace std;typedef int datatype; typedef struct BitNode {datatype Data;struct BitNode* leftchild;struct BitNode* rightchild;int lefttag;int righttag; }Node; #pragma region 前序线索化递归遍历 Node* previous NUL…

maven依赖报错处理(或者maven怎么刷新都下载不了依赖)

maven依赖报错&#xff0c;或者不报错&#xff0c;但是怎么刷新maven都没反应&#xff0c;可以试一下以下操作 当下载jar的时候&#xff0c;如果断网&#xff0c;或者连接超时的时候&#xff0c;会自动在文件夹中创建一个名为*lastupdate的文件&#xff0c;当有了这个文件之后…

网络工程师专属春节对联,不要太真实了!

中午好&#xff0c;我的网工朋友。 都放假了没&#xff1f;龙年将至&#xff0c;都有啥新年计划&#xff1f; 过年&#xff0c;讲究的就是一个热闹&#xff0c;可以暂时告别辛苦的一年&#xff0c;重新整装出发。 热闹可少不了春联啊&#xff0c;红红火火又一年&#xff0c;…

Vue源码系列讲解——虚拟DOM篇【一】(Vue中的虚拟DOM)

目录 1. 前言 2. 虚拟DOM简介 2.1什么是虚拟DOM&#xff1f; 2.2为什么要有虚拟DOM&#xff1f; 3. Vue中的虚拟DOM 3.1 VNode类 3.2 VNode的类型 3.2.1 注释节点 3.2.2 文本节点 3.2.3 克隆节点 3.2.4 元素节点 3.2.5 组件节点 3.2.6 函数式组件节点 3.2.7 小结 3…

OpenCV-31 获得形态学卷积核

OpenCV提供了获取卷积核的API&#xff0c;不需要我们手动创建卷积核。 通过下面API---getStructuringElement(shape&#xff0c;ksize&#xff0c;[, anchor]) shape是指卷积核的型状&#xff0c;注意不是指长宽&#xff0c;是指卷积核中1形成的形状。MORPH_RECT 卷积核中的1…