انتقل إلى المحتوى

كيفية استخدام GitHub API في Python: دليل كامل

تفتح واجهة برمجة تطبيقات GitHub عالمًا مثيرًا من الإمكانيات لأتمتة سير العمل، والتكامل مع GitHub، وإدارة المشاريع، وتحليل البيانات. باعتبارنا مطوري لغة Python، يمكننا الاستفادة الكاملة من واجهة برمجة التطبيقات (API) لتعزيز إنتاجيتنا وإنشاء أدوات مفيدة.

في هذا الدليل الشامل خطوة بخطوة، ستتعلم كيفية استخدام GitHub API باستخدام Python.

لماذا نستخدم واجهة برمجة تطبيقات GitHub مع Python؟

قبل الانتقال إلى التعليمات البرمجية، دعونا نلقي نظرة على سبب قوة استخدام واجهة برمجة تطبيقات GitHub مع Python:

  • أتمتة سير العمل – تخلص من المهام المتكررة عن طريق كتابة البرامج النصية لإنشاء المشكلات، وفتح ودمج العلاقات العامة، وإصدار الثنائيات، وما إلى ذلك.

  • تعزيز الإنتاجية – دمج الأدوات المخصصة في بيئة التطوير الخاصة بك لتحسين سير العمل.

  • إدارة المشاريع - إدارة المشكلات والتسميات والمعالم برمجيًا عبر المستودعات.

  • تحليل البيانات - استخرج مقاييس ورؤى مثيرة للاهتمام من أكثر من 96 مليون اتفاقية إعادة شراء.

  • دمج وتوسيع جيثب - إنشاء تطبيقات ويب مخصصة، وتصورات، وأدوات CLI، وروبوتات، والمزيد!

تفتح واجهة برمجة التطبيقات (API) العديد من الطرق الإبداعية لتعزيز الإنتاجية وبناء أدوات وتجارب رائعة للمطورين.

نظرة عامة على واجهة برمجة تطبيقات GitHub

توفر واجهة برمجة تطبيقات GitHub نقاط نهاية RESTful للوصول إلى بيانات وخدمات GitHub. أنت تستطيع:

  • إدارة المستودعات والجوهر والمشكلات وطلبات السحب
  • التفاعل مع بيانات Git – الالتزامات والفروع والعلامات
  • استرداد ملفات تعريف المستخدمين والمنظمات والفرق
  • رمز البحث، والقضايا، والمستودعات، والمستخدمين
  • الوصول إلى البيانات الوصفية، والقضايا، والعلاقات العامة، والملفات، والالتزامات
  • تحليل اتجاهات المجتمع، وشوك المشروع

و أكثر من ذلك بكثير!

تستخدم واجهة برمجة التطبيقات JSON لإجراء تسلسل للبيانات وتستخدم OAuth للمصادقة. يجب تقديم جميع الطلبات عبر HTTPS.

لاستخدام واجهة برمجة التطبيقات (API)، ما عليك سوى:

  1. قم بإنشاء حساب على جيثب
  2. إنشاء رمز وصول شخصي للمصادقة
  3. تقديم طلبات API والتعامل مع الاستجابات

الآن دعونا نرى هذا عمليًا مع أمثلة بايثون!

تقديم طلبات GitHub API

بايثون requests تسهل المكتبة التفاعل مع واجهات برمجة تطبيقات الويب. دعنا نحضر بعض بيانات مستخدم GitHub:

import requests

username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")

print(response.json())

يؤدي هذا إلى طباعة معلومات مثل:

{
  "login": "defunkt",
  "id": 2,
  "node_id": "MDQ6VXNlcjI=",
  "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/defunkt",
  "html_url": "https://github.com/defunkt",

  //...
}

يمكننا الوصول إلى أي مسار API غير مصادق عليه بهذه الطريقة. للوصول إلى البيانات الخاصة، نحن بحاجة إلى تمرير رمز المصادقة.

إنشاء رمز وصول شخصي لـ GitHub

لإنشاء رمز مميز:

  1. انتقل إلى البرنامج المساعد في التأليف الإعدادات > إعدادات المطور > رموز الوصول الشخصية
  2. انقر إنشاء رمز جديد
  3. أعطه وصفًا مثل "My Python Script"
  4. حدد النطاقات/الأذونات التي تريدها
  5. انقر إنشاء رمز مميز

تأكد من نسخ الرمز المميز – لن تتمكن من استعادته مرة أخرى لاحقًا!

تشمل النطاقات الشائعة ما يلي:

  • repo - الوصول إلى المستودعات الخاصة
  • admin:org - إدارة المنظمات
  • notifications - وصول الإخطارات
  • user – الوصول للقراءة/الكتابة إلى معلومات الملف الشخصي

دعونا نستخدم الرمز المميز الخاص بنا لإنشاء ريبو جديد:

import requests

token = "ghp_123abcMyToken"

data = {"name": "My New Repo"}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": f"token {token}"}
)

print(response.status_code) # 201 = Success!

يصادقنا الرمز المميز على إنشاء مستودعات خاصة.

يمكنك أيضا استخدام تطبيقات جيثب التي لها وصول محدد ولا تنتهي صلاحيتها مثل الرموز المميزة للمستخدم. يجب أن يتم تثبيت التطبيقات بواسطة مستخدم/مؤسسة لتتمكن من الوصول.

العمل مع مستودعات جيثب

يتضمن جزء كبير من واجهة برمجة التطبيقات (API) إدارة المستودعات. دعنا نستعرض بعض مهام المستودع الشائعة.

احصل على مستودع

للحصول على البيانات التعريفية للمستودع:

response = requests.get("https://api.github.com/repos/pandas-dev/pandas")
repo_info = response.json()

print(repo_info[‘description‘]) 
# Powerful data structures for data analysis, time series, statistics

يمكننا الوصول إلى معلومات مثل الأوصاف والنجوم والمستنسخات والمساهمين واللغات والإصدارات والالتزامات وغير ذلك الكثير!

قائمة المستودعات

لسرد المستودعات الخاصة بمستخدم أو مؤسسة:

repos_url = "https://api.github.com/users/octocat/repos"
repos = requests.get(repos_url).json()

for repo in repos:
  print(repo[‘name‘]) # Prints names of each repo

إنشاء مستودع

يمكننا أيضًا إنشاء مستودعات جديدة:

data = {
  "name": "My New Repo",
  "description": "This is my cool new repo",
  "private": False
}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": "token {token}"}
) 

حذف مستودع

لحذف مستودع:

requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘, 
                headers={"Authorization": "token {token}"})

يمنحك هذا التحكم الكامل في إدارة مستودعاتك برمجيًا.

ملحوظة: يجب إجراء جميع طلبات واجهة برمجة التطبيقات (API) باستخدام HTTPS للأمان.

العمل مع القضايا في المستودعات

تسمح واجهة برمجة التطبيقات للمشاكل بإدارة المشكلات وسحب الطلبات. أنت تستطيع:

  • قائمة/إنشاء/تحرير/إغلاق/إعادة فتح المشكلات
  • قفل المحادثات، ودمج العلاقات العامة
  • إرسال وتحرير التعليقات
  • إضافة التسميات والمكلفين والمعالم

على سبيل المثال، للحصول على المشكلات من المستودع:

response = requests.get(‘https://api.github.com/repos/octocat/hello-world/issues‘)
issues = response.json()

for issue in issues:
  print(issue[‘title‘]) # Prints each issue title

يتيح لك ذلك دمج إدارة المشكلات في الأدوات الخارجية وسير العمل.

العمل مع بيانات جيت

توفر واجهة برمجة تطبيقات Git Data نقاط نهاية للتفاعل مع مستودعات Git مباشرة. أنت تستطيع:

  • إدارة الفروع والعلامات
  • قراءة/كتابة بيانات blob
  • استرداد الالتزامات والمراجع والأشجار
  • قارن الالتزامات والمراجع والملفات

على سبيل المثال، للحصول على التزامات من الريبو:

commits_url = "https://api.github.com/repos/pandas-dev/pandas/commits"
commits = requests.get(commits_url).json()

for commit in commits:
  print(commit[‘sha‘]) # Print commit SHAs
  print(commit[‘commit‘][‘message‘]) # Print messages

يوفر هذا وصولاً كاملاً لإدارة مستودعات Git برمجيًا.

البحث عن المستودعات والتعليمات البرمجية

تسمح واجهة برمجة تطبيقات البحث الخاصة بـ GitHub بالاستعلام عن أي شيء تقريبًا عبر أكثر من 96 مليون مستودع عام.

على سبيل المثال، للعثور على مشاريع بايثون المتعلقة بعلم البيانات:

import requests

query = "language:python data science in:readme"
response = requests.get("https://api.github.com/search/repositories", 
                        params={"q": query})

results = response.json()[‘items‘]
for result in results:
  print(result[‘name‘]) # Prints names of matching repos 

تدعم بنية استعلام البحث العوامل المنطقية والمرشحات واختيار السياق والمزيد لصياغة عمليات البحث المستهدفة.

بعض الأمثلة:

  • org:facebook language:python stars:>5000 - مستودعات Python في مؤسسة Facebook مع أكثر من 5 آلاف نجمة
  • filename:requirements.txt django - اتفاقيات إعادة الشراء مع require.txt الذي يحتوي على Django
  • user:defunkt location:san francisco - ابحث عن مستودعات defunkt إذا كان الموقع SF

تفتح واجهة برمجة تطبيقات البحث العديد من الطرق الإبداعية لاستخراج مجموعات البيانات والرؤى المثيرة للاهتمام عبر البيانات المفتوحة لـ GitHub.

استخدام واجهة برمجة تطبيقات GraphQL الخاصة بـ GitHub

بالإضافة إلى REST API، يوفر GitHub واجهة برمجة تطبيقات GraphQL لاستعلامات أكثر مرونة.

يتيح لك GraphQL تحديد البيانات التي تريدها بدقة في هياكل JSON المتداخلة. يمكنك الاستعلام عن كيانات مرتبطة متعددة في طلب واحد.

على سبيل المثال، نقوم هنا بالاستعلام عن بيانات الملف الشخصي للمستخدم بالإضافة إلى أسماء المستودعات الخاصة به:

import requests 

query = """
query {
  user(login:"defunkt") {
    name
    repositories(first:10) {
      nodes { 
        name 
      }
    }
  }
}
"""

response = requests.post(‘https://api.github.com/graphql‘, json={‘query‘: query})
print(response.json())

وهذا يسمح بتشكيل الاستجابة الدقيقة التي تحتاجها. ال مستكشف GraphQL يساعد في بناء الاستعلامات بشكل تفاعلي.

دمج واجهة برمجة تطبيقات GitHub في التطبيقات

الآن بعد أن تعرفت على الأساسيات، دعنا نلقي نظرة على إنشاء التطبيقات باستخدام واجهة برمجة تطبيقات GitHub.

ترخيص تطبيق OAuth

بالنسبة لتطبيقات الويب، استخدم جيثب OAuth للحصول على إذن بدلاً من الرموز المميزة. وهذا يسمح للمستخدمين بإلغاء الوصول.

  1. قم بتسجيل تطبيق OAuth جديد
  2. استخدم معرف العميل والسر للحصول على الترخيص
  3. إعادة توجيه المستخدمين لطلب الوصول إلى GitHub

الآن يمكن لتطبيقك إجراء مكالمات API نيابة عن المستخدمين.

تقديم الطلبات المصادق عليها

بمجرد التصريح، قم بإجراء المكالمات باستخدام رمز الوصول:

access_token = "abc123xxddff" # OAuth token 

response = requests.get(
  "https://api.github.com/user/repos",
  headers={"Authorization": f"token {access_token}"}
)

print(response.json()) # Print user‘s private repos

يتيح لك هذا الوصول إلى البيانات الخاصة بناءً على أذونات المستخدم.

معدل الحد

لدى GitHub API حدود لمعدلات الطلبات. مراقبة حالة تطبيقك:

response = requests.get("https://api.github.com/users/octocat") 

print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999

قم بتوزيع الطلبات بمرور الوقت وبيانات التخزين المؤقت لتجنب الحدود.

التعامل مع الأخطاء بلطف

تحقق دائمًا من رموز الحالة وتعامل مع الأخطاء بشكل صحيح:

response = requests.get(‘https://api.github.com/invalid/url‘)

if response.status_code == 404:
  print("Resource not found!") 
elif response.status_code == 403:
  print("You do not have access!")
else:
  print("An error occurred.")

وهذا يضمن أن يظل تطبيقك مستقرًا في مرحلة الإنتاج.

من خلال اتباع أفضل ممارسات واجهة برمجة التطبيقات (API)، يمكنك إنشاء عمليات تكامل وأدوات قوية للمطورين.

بناء تطبيق لوحة تحكم GitHub

دعونا نربط ما تعلمناه من خلال إنشاء تطبيق ويب لعرض ملف تعريف GitHub الخاص بك وإعادة الشراء باستخدام Flask:

# app.py

from flask import Flask
import requests
from github import Github # pyGithub library

app = Flask(__name__)

@app.route("/")
def dashboard():
  # Use access token for API requests
  github = Github("access_token123xxdd")

  # Fetch user profile info
  user = github.get_user()

  # Fetch list of repos
  repos = user.get_repos() 

  # Pass info to template
  return render_template("dashboard.html", user=user, repos=repos)

if __name__ == "__main__":
  app.run(debug=True)

نحن نستخدم pyGithub لتبسيط بعض تفاعلات واجهة برمجة التطبيقات (API). سوف تعرض الصفحة الرئيسية dashboard.html قالب:

<!-- dashboard.html -->

<h3>GitHub Dashboard for {{user.name}}</h3>

<img src="{{user.avatar_url}}" style="width:64px">

<h4>Your Repositories</h4>

<ul>
  {% for repo in repos %}
  <li>{{repo.name}}</li>
  {% endfor %}
</ul>

يوضح هذا كيف يمكنك إنشاء تطبيق لعرض بيانات GitHub لمستخدم قام بتسجيل الدخول!

الاحتمالات لا حصر لها لدمج واجهة برمجة التطبيقات (API) في تطبيقاتك وأدواتك الخاصة.

أفضل الممارسات عند استخدام GitHub API

فيما يلي بعض أفضل الممارسات للتأكد من أن تطبيقاتك التي تستخدم واجهة برمجة تطبيقات GitHub فعالة وآمنة وقوية:

  • التحقّق من المُستخدم – استخدم الرموز المميزة أو OAuth، وتجنب إرسال اسم المستخدم/كلمات المرور الأولية.
  • HTTPS - استخدم دائمًا نقاط نهاية HTTPS لتأمين البيانات.
  • معدل الحد – نشر الطلبات وبيانات ذاكرة التخزين المؤقت لتجنب الحدود.
  • ترقيم الصفحات - استخدم معلمات الصفحة للتكرار عبر مجموعات النتائج.
  • معالجة الأخطاء - التعامل مع أخطاء 4xx و5xx بأمان.
  • الاختبار - اختبار استدعاءات واجهة برمجة التطبيقات (API) بدقة، واستخدام السخرية للتكرارات.
  • توثيق – اقرأ المستندات عن كثب، فهي توفر نماذج التعليمات البرمجية لكل نقطة نهاية.

يؤدي اتباع أفضل ممارسات واجهة برمجة التطبيقات (API) إلى منع الأخطاء التي يمكن تجنبها ويضمن موثوقية التطبيقات.

ميزات واجهة برمجة تطبيقات GitHub الأخرى التي يمكنك استكشافها

لقد قمنا فقط بخدش سطح ما هو ممكن باستخدام واجهة برمجة تطبيقات GitHub. فيما يلي بعض الميزات الرائعة الأخرى التي يمكنك التحقق منها:

  • واجهة برمجة تطبيقات إجراءات جيثب – أتمتة سير العمل عن طريق تشغيل الإجراءات باستخدام واجهة برمجة التطبيقات
  • جيثب الصفحات – إدارة صفحات الصفحات برمجياً
  • الجوهر - إدارة مقتطفات التعليمات البرمجية والتكوينات والقوالب
  • المنظمات – إدارة فرق المؤسسة والأعضاء والأذونات
  • قاعدة بيانات جيت – الوصول مباشرة إلى بيانات كائن Git مثل النقط والأشجار
  • واجهة برمجة تطبيقات سوق جيثب - إدارة التطبيقات المدرجة في GitHub Marketplace
  • واجهة برمجة تطبيقات مناقشات جيثب – إنشاء منتديات المجتمع وتكامل الأسئلة والأجوبة

تتوسع إمكانيات واجهة برمجة التطبيقات (API) مع إضافة GitHub لميزات جديدة، لذا ترقب نقاط النهاية الجديدة.

قارن واجهة برمجة تطبيقات GitHub بالبدائل

بالنسبة للمطورين الذين يعملون مع منصات أخرى، كيف يمكن مقارنة واجهة برمجة تطبيقات GitHub بالمنافسين مثل GitLab وBitBucket وAzure DevOps وما إلى ذلك؟

تتميز إمكانيات واجهة برمجة التطبيقات (API) الخاصة بـ GitHub بشكل عام فيما يتعلق بما يلي:

  • تبني - إلى حد بعيد أكبر قاعدة مستخدمين ومجتمع
  • توثيق – مستندات شاملة للغاية مع الأمثلة
  • الراحة + الرسم البيانيQL – مرونة كل من نقاط النهاية REST وGraphQL
  • قدرات البحث - بحث مفهرس قوي عبر جميع البيانات العامة
  • النظام الإيكولوجي - نظام بيئي ضخم من التطبيقات والأدوات وعمليات التكامل
  • تحليل الكود – قدرات مسح الكود والفحص وتحليل الجودة

من الواضح أن GitHub يتصدر وظائف واجهة برمجة التطبيقات (API) بفضل حجمه وسنوات التطوير. يقوم مقدمو خدمات آخرون مثل GitLab وBitBucket بتوسيع إمكانيات واجهة برمجة التطبيقات (API) للمنافسة. ولكن في الوقت الحالي، يظل GitHub واجهة برمجة التطبيقات (API) الأكثر تميزًا للتفاعل برمجيًا مع مستودعات Git.

الخطوات والموارد التالية

آمل أن يقدم هذا الدليل نظرة عامة شاملة حول كيفية استخدام GitHub API مع Python!

فيما يلي بعض الخطوات والموارد التالية لمزيد من التعلم:

  • خذ نظرة أعمق في المستندات: مطور مستندات
  • شاهد فيديوهات واجهة برمجة التطبيقات: مختبر التعلم جيثب
  • اكتشف التطبيقات التي تم إنشاؤها باستخدام واجهة برمجة التطبيقات: سوق جيثب
  • تعرف على المزيد حول OAuth: مستندات تطبيق OAuth
  • تحقق من المكتبات مثل PyGithub وurllib3 لتبسيط استخدام واجهة برمجة التطبيقات
  • فكر في الاستجابات الساخرة لاختبار تفاعل واجهة برمجة التطبيقات
  • استكشف الأدوات المرتبطة مثل GitHub CLI وGitHub Actions

تفتح واجهة برمجة تطبيقات GitHub عالمًا كاملاً من الإمكانيات لبناء أدوات المطورين، وأتمتة سير العمل، وإدارة المشاريع، وتحليل البيانات. أتمنى أن تشعر بالإلهام لإنشاء شيء ذي قيمة للمجتمع!

الترميز سعيدة!

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *