AI एजेंट · पाठ

GitHub REST API का अवलोकन

PyGitHub लाइब्रेरी, व्यक्तिगत पहुँच टोकन और API दर सीमाएँ।

पाठ 1, कुल 4 में से13 चरण

GitHub REST API का अवलोकन, CoddyKit पर AI एजेंट का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह AI एजेंट सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। AI एजेंट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

PyGitHub — पाइथन GitHub क्लाइंट

PyGitHub, GitHub आरईएसटी एपीआई के लिए सबसे लोकप्रिय पाइथन लाइब्रेरी है। यह कच्चे एचटीटीपी एपीआई को रिपॉज़िटरी, इश्यू, PR, कमिट और उपयोगकर्ताओं का प्रतिनिधित्व करने वाले पाइथन ऑब्जेक्ट में लपेटती है। लगभग हर GitHub स्वचालन कार्य Github(token=) और g.get_repo() से शुरू होता है।

# Install: pip install PyGitHub
from github import Github
import os

# Authenticate with a personal access token
g = Github(token=os.environ['GITHUB_TOKEN'])

# Get the authenticated user
user = g.get_user()
print(f'Logged in as: {user.login}')
print(f'Name: {user.name}')
print(f'Public repos: {user.public_repos}')

# Get a specific repository
repo = g.get_repo('octocat/Hello-World')
print(f'Repo: {repo.full_name}')
print(f'Stars: {repo.stargazers_count}')

प्रमाणीकरण: व्यक्तिगत एक्सेस टोकन

सबसे सरल प्रमाणीकरण एक व्यक्तिगत एक्सेस टोकन (PAT) है—आपके GitHub खाते से जुड़ा लंबे समय तक मान्य टोकन। इसे github.com → सेटिंग्स → डेवलपर सेटिंग्स → व्यक्तिगत एक्सेस टोकन पर बनाएँ। इसे किसी परिवेश चर में रखें, कोड में कभी नहीं। बेहतर सुरक्षा के लिए सूक्ष्म-स्तरीय PAT का उपयोग करें और उन्हें विशिष्ट रिपॉज़िटरी तक सीमित रखें।

from github import Github, Auth
import os

# Method 1: Classic token (works with PyGitHub)
token = os.environ['GITHUB_TOKEN']
g = Github(token=token)

# Method 2: Auth object (recommended for PyGitHub >= 1.59)
auth = Auth.Token(os.environ['GITHUB_TOKEN'])
g = Github(auth=auth)

# Test authentication
try:
    user = g.get_user()
    print(f'Authenticated as {user.login}')
except Exception as e:
    print(f'Auth failed: {e}')
    print('Check: Is GITHUB_TOKEN set? Has it expired?')

g.close()  # close the connection when done

GitHub ऐप प्रमाणीकरण

उत्पादन एजेंटों के लिए PAT की तुलना में GitHub ऐप्स को प्राथमिकता दी जाती है। इनके पास सूक्ष्म-स्तरीय अनुमतियाँ होती हैं, इन्हें विशिष्ट रिपॉज़िटरी पर इंस्टॉल किया जा सकता है और ये कम अवधि वाले इंस्टॉलेशन टोकन का उपयोग करते हैं जो अपने-आप बदलते रहते हैं। इंस्टॉलेशन टोकन बनाने के लिए github.GithubIntegration का उपयोग करें।

import os
import github

APP_ID = os.environ['GITHUB_APP_ID']
PRIVATE_KEY = os.environ['GITHUB_APP_PRIVATE_KEY']  # PEM content
INSTALLATION_ID = os.environ['GITHUB_INSTALLATION_ID']

# Create GitHub App client
auth = github.Auth.AppAuth(APP_ID, PRIVATE_KEY)
gi = github.GithubIntegration(auth=auth)

# Get installation access token (expires in 1 hour)
installation = gi.get_installation(int(INSTALLATION_ID))
access_token = gi.get_access_token(int(INSTALLATION_ID))

# Use the token with a standard Github client
g = github.Github(token=access_token.token)
print(f'App authenticated, token expires: {access_token.expires_at}')

अनुरोध सीमा: प्रति घंटे 5,000 अनुरोध

GitHub आरईएसटी एपीआई प्रमाणित उपयोगकर्ताओं के लिए प्रति घंटे 5,000 अनुरोध की अनुमति देता है। हर एपीआई अनुरोध, यहाँ तक कि पृष्ठांकित अनुरोध भी, गिना जाता है। सामूहिक कार्य शुरू करने से पहले अपनी शेष सीमा जाँचें—यदि सीमा समाप्त हो जाए, तो सीमा रीसेट होने तक सभी अनुरोध 403 Forbidden लौटाएँगे।

from github import Github
import os

g = Github(token=os.environ['GITHUB_TOKEN'])

# Check current rate limit status
rate_limit = g.get_rate_limit()
core = rate_limit.core

print(f'Remaining: {core.remaining}/{core.limit} requests')
print(f'Resets at: {core.reset}')

# Calculate time until reset
import datetime
now = datetime.datetime.utcnow()
reset_in = (core.reset.replace(tzinfo=None) - now).seconds
print(f'Reset in: {reset_in // 60}m {reset_in % 60}s')

# Check before heavy operations
if core.remaining < 100:
    print('WARNING: Rate limit nearly exhausted!')

रिपॉज़िटरी ऑब्जेक्ट प्राप्त करना

repo ऑब्जेक्ट लगभग सभी GitHub कार्यों का प्रारंभिक बिंदु है। इसे g.get_repo('owner/name') से प्राप्त करें। इसमें मेटाडेटा (स्टार, फ़ोर्क, विवरण और दृश्यता) तथा इश्यू, PR, कमिट, रिलीज़ आदि तक पहुँचने की विधियाँ होती हैं।

from github import Github
import os

g = Github(token=os.environ['GITHUB_TOKEN'])
repo = g.get_repo('myorg/myrepo')

# Repository metadata
print(f'Full name: {repo.full_name}')
print(f'Description: {repo.description}')
print(f'Default branch: {repo.default_branch}')
print(f'Stars: {repo.stargazers_count}')
print(f'Forks: {repo.forks_count}')
print(f'Open issues: {repo.open_issues_count}')
print(f'Private: {repo.private}')
print(f'Language: {repo.language}')
print(f'Created: {repo.created_at}')
print(f'Last push: {repo.pushed_at}')

एपीआई पृष्ठांकन — PaginatedList

बहुत-सी वस्तुएँ लौटाने वाले GitHub एपीआई अनुरोध (इश्यू, कमिट, PR) एक PaginatedList लौटाते हैं। आप इसमें सामान्य सूची की तरह क्रम से चल सकते हैं—PyGitHub आपके क्रम से चलने पर पृष्ठ अपने-आप प्राप्त करता है। हालाँकि, किसी PaginatedList पर len() चलाने से सभी पृष्ठ प्राप्त होते हैं, जिसमें अधिक संसाधन लग सकते हैं।

from github import Github
import os

g = Github(token=os.environ['GITHUB_TOKEN'])
repo = g.get_repo('myorg/myrepo')

# PaginatedList: fetch pages lazily as you iterate
issues = repo.get_issues(state='open')  # returns PaginatedList

# Iterate — fetches pages 30 at a time automatically
for issue in issues:
    print(f'#{issue.number}: {issue.title}')

# Get first N items without fetching everything
first_10 = list(issues[:10])  # only fetches first page

# Count (WARNING: fetches ALL pages)
total_open = issues.totalCount  # uses the count from API metadata, not iteration

अनुरोध सीमा से जुड़े अपवाद सँभालना

अनुरोध सीमा पार करने पर PyGitHub github.GithubException.RateLimitExceededException उत्पन्न करता है। रीसेट समय जाँचकर और सीमा रीसेट होने तक प्रतीक्षा करके इसे सँभालें। किसी भी GitHub अनुरोध को विश्वसनीय बनाने के लिए इसे पुनःप्रयास आवरण में शामिल करें।

from github import Github
from github.GithubException import RateLimitExceededException
import os
import time
import datetime

g = Github(token=os.environ['GITHUB_TOKEN'])

def github_call_with_rate_limit(func, *args, **kwargs):
    while True:
        try:
            return func(*args, **kwargs)
        except RateLimitExceededException:
            rate_limit = g.get_rate_limit()
            reset_time = rate_limit.core.reset.replace(tzinfo=None)
            now = datetime.datetime.utcnow()
            wait_seconds = (reset_time - now).total_seconds() + 10

            print(f'Rate limit exceeded. Sleeping {wait_seconds:.0f}s until reset...')
            time.sleep(max(wait_seconds, 1))

# Usage
repo = github_call_with_rate_limit(
    g.get_repo, 'myorg/myrepo'
)

GitHub में व्यापक खोज

सभी सार्वजनिक और अपनी निजी रिपॉज़िटरी में GitHub की खोज चलाने के लिए g.search_issues(), g.search_repositories() और g.search_code() का उपयोग करें। इनमें खोज एपीआई का उपयोग होता है, जिसकी अलग सीमा प्रति मिनट 30 अनुरोध है।

from github import Github
import os

g = Github(token=os.environ['GITHUB_TOKEN'])

# Search issues across all your repos
results = g.search_issues(
    query='is:open is:issue label:bug user:myorg',
    sort='created',
    order='desc'
)

print(f'Found {results.totalCount} open bugs')
for issue in results[:10]:
    print(f'{issue.repository.full_name}#{issue.number}: {issue.title}')

# Search for repos using a specific package
repos = g.search_repositories(
    query='topic:machine-learning language:python stars:>100'
)
for repo in repos[:5]:
    print(f'{repo.full_name}: {repo.stargazers_count} stars')

एकाधिक रिपॉज़िटरी के साथ कार्य करना

एजेंटों को अक्सर किसी संगठन की कई रिपॉज़िटरी पर कार्य करना पड़ता है। किसी संगठन की सभी रिपॉज़िटरी की सूची पाने के लिए g.get_organization() का उपयोग करें, फिर उन्हें लूप में संसाधित करें। निष्क्रिय रिपॉज़िटरी को संसाधित करने से बचने के लिए भाषा, संग्रहीत स्थिति या गतिविधि की तारीख के आधार पर फ़िल्टर करें।

from github import Github
import os
import datetime

g = Github(token=os.environ['GITHUB_TOKEN'])
org = g.get_organization('myorg')

# Get all active Python repos
cutoff = datetime.datetime.now() - datetime.timedelta(days=180)

active_repos = [
    repo
    for repo in org.get_repos(type='all')
    if (
        not repo.archived
        and repo.language == 'Python'
        and repo.pushed_at
        and repo.pushed_at.replace(tzinfo=None) > cutoff
    )
]

print(f'Active Python repos: {len(active_repos)}')
for repo in active_repos[:5]:
    print(f'  {repo.name}: last push {repo.pushed_at.date()}')

रिपॉज़िटरी से फ़ाइल की सामग्री पढ़ना

रिपॉज़िटरी की कोई भी फ़ाइल पढ़ने के लिए repo.get_contents(path) का उपयोग करें। सामग्री बेस64 में एन्कोड की गई होती है, लेकिन PyGitHub .decoded_content गुण के माध्यम से इसे अपने-आप डिकोड कर देता है। ref पैरामीटर से कोई शाखा या कमिट SHA निर्दिष्ट करें।

from github import Github
import os

g = Github(token=os.environ['GITHUB_TOKEN'])
repo = g.get_repo('myorg/myrepo')

# Read a file from the default branch
contents = repo.get_contents('README.md')
readme_text = contents.decoded_content.decode('utf-8')
print(f'README ({len(readme_text)} chars):')
print(readme_text[:200])

# Read from a specific branch
requirements = repo.get_contents(
    'requirements.txt',
    ref='feature/new-deps'
)
deps = requirements.decoded_content.decode('utf-8')
print('Dependencies:', deps[:300])

सामान्य GitHub अपवादों के लिए त्रुटि प्रबंधन

PyGitHub सभी एपीआई त्रुटियों के लिए GithubException उत्पन्न करता है। सामान्य उपवर्ग हैं: UnknownObjectException (404 — रिपॉज़िटरी या इश्यू नहीं मिला), BadCredentialsException (401 — गलत टोकन), RateLimitExceededException (403 — अनुरोध सीमा पार)। इन्हें हमेशा विशेष रूप से पकड़ें।

from github import Github
from github.GithubException import (
    GithubException, UnknownObjectException,
    BadCredentialsException, RateLimitExceededException
)
import os

g = Github(token=os.environ['GITHUB_TOKEN'])

def get_repo_safely(repo_full_name):
    try:
        return g.get_repo(repo_full_name)
    except BadCredentialsException:
        print('ERROR: GitHub token is invalid or expired')
        return None
    except UnknownObjectException:
        print(f'ERROR: Repo not found: {repo_full_name}')
        print('Check: typo in name? Private repo you can\'t access?')
        return None
    except RateLimitExceededException:
        print('ERROR: GitHub rate limit exceeded, retry later')
        return None
    except GithubException as e:
        print(f'GitHub API error {e.status}: {e.data}')
        return None

त्वरित जाँच: अनुरोध सीमा

GitHub एपीआई की अनुरोध सीमाओं की अपनी समझ जाँचें।

GitHub आरईएसटी एपीआई का सारांश

अब आप PyGitHub के साथ GitHub से जुड़ सकते हैं:

  • Github(token=) या Github(auth=Auth.Token(...)) PAT प्रमाणीकरण के लिए
  • सूक्ष्म-स्तरीय अनुमतियों वाले उत्पादन एजेंटों के लिए GithubIntegration के साथ GitHub ऐप्स
  • अनुरोध सीमा: 5,000 अनुरोध/घंटा; g.get_rate_limit() से जाँचें; RateLimitExceededException सँभालें
  • PaginatedList: आवश्यकता के अनुसार क्रम से चलाएँ; सभी पृष्ठ प्राप्त किए बिना संख्या के लिए .totalCount का उपयोग करें
  • g.get_repo('owner/name') — रिपॉज़िटरी-स्तरीय कार्यों का प्रवेश-बिंदु
  • UnknownObjectException (404) और BadCredentialsException (401) को स्पष्ट रूप से पकड़ें
शुरुआत निःशुल्क

एआई शिक्षक के साथ AI एजेंट सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
60
पाठ
239

अक्सर पूछे जाने वाले प्रश्न

क्या “GitHub REST API का अवलोकन” पाठ निःशुल्क है?

हाँ—“GitHub REST API का अवलोकन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और AI एजेंट पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। AI एजेंट पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“GitHub REST API का अवलोकन” में मैं क्या सीखूँगा?

PyGitHub लाइब्रेरी, व्यक्तिगत पहुँच टोकन और API दर सीमाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ AI एजेंट का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या AI एजेंट शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर AI एजेंट शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“GitHub REST API का अवलोकन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस AI एजेंट पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर AI एजेंट पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. GitHub REST API का अवलोकन
  2. समस्याओं की सूची बनाना और प्रबंधन करना
  3. स्वचालित PR समीक्षा टिप्पणियाँ
  4. कमिट इतिहास और डिफ़ विश्लेषण
← AI एजेंट पर वापस जाएँ