مفهوم الـ API: كيف نطلب البيانات من Google وOpenAI


ماذا سنبني اليوم؟

في هذا الدرس العملي، سنتعمق في فهم مفهوم الـ API (واجهة برمجة التطبيقات) وكيفية استخدامها لجلب البيانات من خدمات ويب شهيرة مثل Google وOpenAI. سنقوم بكتابة كود Python عملي يوضح كيفية إرسال طلبات (Requests) واستقبال استجابات (Responses) وتحليل البيانات المسترجعة، مما يفتح لك أبواباً واسعة لأتمتة المهام وتحليل البيانات.

مقدمة سريعة إلى الـ API

الـ API، أو Application Programming Interface، هي مجموعة من القواعد والبروتوكولات التي تسمح لتطبيقات مختلفة بالتواصل مع بعضها البعض. تخيلها كنادل في مطعم: أنت (تطبيقك) تطلب وجبة (بيانات) من المطبخ (الخادم)، والنادل (الـ API) هو الوسيط الذي يأخذ طلبك ويجلب لك الوجبة المطلوبة. تتيح لنا الـ API الوصول إلى وظائف وخدمات معينة تقدمها منصات أخرى دون الحاجة لفهم كامل تعقيداتها الداخلية.

ملاحظة تقنية: عند التعامل مع الـ APIs، هناك مفاهيم أساسية يجب معرفتها:
  • Endpoint: هو عنوان URL المحدد الذي ترسل إليه طلبك (مثل https://api.example.com/data).
  • Request (الطلب): البيانات التي ترسلها إلى الـ API (مثل معلمات البحث، مفتاح الـ API).
  • Response (الاستجابة): البيانات التي تتلقاها من الـ API (عادةً بصيغة JSON أو XML).
  • Authentication (المصادقة): طريقة تعريف نفسك للـ API، غالباً عبر مفتاح API (API Key) أو رموز OAuth.

متطلبات البدء

للمتابعة مع هذا الدرس، ستحتاج إلى:

  • تثبيت Python (إصدار 3.6 أو أحدث).
  • مكتبة requests في Python: يمكنك تثبيتها عبر pip install requests.
  • مكتبة openai في Python: يمكنك تثبيتها عبر pip install openai.
  • لمفتاح Google API: حساب Google Cloud Project وتمكين Google Custom Search API. ستحتاج إلى API Key و Custom Search Engine ID (CX ID).
  • لمفتاح OpenAI API: حساب على موقع OpenAI. ستحتاج إلى API Key.

التعامل مع Google Custom Search API

تسمح لك Google Custom Search API بإجراء عمليات بحث برمجية على الويب أو على مجموعة محددة من المواقع. سنستخدمها لجلب نتائج بحث لعنوان معين.

الحصول على مفتاح Google API ومعرف محرك البحث المخصص (CX ID):

  1. انتقل إلى Google Cloud Console.
  2. قم بإنشاء مشروع جديد أو حدد مشروعاً موجوداً.
  3. من قائمة التنقل، انتقل إلى "APIs & Services" > "Credentials" لإنشاء API Key جديد.
  4. انتقل إلى "APIs & Services" > "Library" وابحث عن "Custom Search API" وقم بتمكينها.
  5. انتقل إلى Programmable Search Engine لإنشاء محرك بحث مخصص. بعد الإنشاء، ستحصل على Search Engine ID (CX ID).

كود Python لجلب نتائج البحث من Google:

تأكد من استبدال YOUR_GOOGLE_API_KEY و YOUR_CX_ID بالقيم الخاصة بك.

import requests
import json

# قم بتعيين مفتاح API الخاص بك ومعرف محرك البحث المخصص
GOOGLE_API_KEY = "YOUR_GOOGLE_API_KEY"
CUSTOM_SEARCH_ENGINE_ID = "YOUR_CX_ID"
SEARCH_QUERY = "أتمتة SEO باستخدام بايثون"

# بناء عنوان URL للطلب
url = f"https://www.googleapis.com/customsearch/v1?key={GOOGLE_API_KEY}&cx={CUSTOM_SEARCH_ENGINE_ID}&q={SEARCH_QUERY}"

print(f"إرسال طلب إلى Google Custom Search API لـ: '{SEARCH_QUERY}'...")

try:
    # إرسال طلب GET
    response = requests.get(url)
    response.raise_for_status() # رفع استثناء لأكواد الحالة الخاطئة (4xx أو 5xx)

    # تحليل الاستجابة JSON
    search_results = response.json()

    print("\nأبرز 5 نتائج بحث:")
    if "items" in search_results:
        for i, item in enumerate(search_results["items"][:5]):
            print(f"{i+1}. العنوان: {item['title']}")
            print(f"   الرابط: {item['link']}")
            print(f"   المقتطف: {item['snippet']}\n")
    else:
        print("لم يتم العثور على نتائج للبحث.")

except requests.exceptions.RequestException as e:
    print(f"حدث خطأ أثناء الاتصال بـ Google API: {e}")
    if response and response.text:
        print(f"استجابة الخطأ: {response.text}")
except json.JSONDecodeError:
    print("فشل تحليل استجابة JSON من Google API.")
except Exception as e:
    print(f"حدث خطأ غير متوقع: {e}")
ملاحظة تقنية: Google Custom Search API لها قيود على عدد الطلبات المجانية يومياً. تأكد من مراجعة وثائق التسعير والحدود لتجنب تجاوزها.

التعامل مع OpenAI API

تسمح لك OpenAI API بالوصول إلى نماذج الذكاء الاصطناعي القوية مثل GPT-3.5 و GPT-4 و DALL-E. سنستخدمها لإنشاء نص باستخدام نموذج الدردشة.

الحصول على مفتاح OpenAI API:

  1. انتقل إلى OpenAI Platform وقم بتسجيل الدخول أو إنشاء حساب.
  2. انتقل إلى API keys لإنشاء Secret API Key جديد. احتفظ بهذا المفتاح في مكان آمن، لأنه لن يظهر مرة أخرى.

كود Python لجلب استجابة من نموذج OpenAI GPT:

تأكد من استبدال YOUR_OPENAI_API_KEY بالمفتاح الخاص بك.

from openai import OpenAI
import os

# يوصى بشدة باستخدام متغيرات البيئة لمفاتيح API
# يمكنك تعيين المفتاح مباشرة هنا لأغراض الدرس، ولكن ليس للإنتاج
# os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
# client = OpenAI()

# أو، إذا كنت لا تستخدم متغيرات البيئة (لأغراض الدرس فقط):
client = OpenAI(api_key="YOUR_OPENAI_API_KEY")

PROMPT_TEXT = "اكتب فقرة قصيرة حول أهمية الـ API في أتمتة الـ SEO."

print(f"\nإرسال طلب إلى OpenAI API لإنشاء نص حول: '{PROMPT_TEXT}'...")

try:
    # إرسال طلب لإكمال الدردشة
    chat_completion = client.chat.completions.create(
        model="gpt-3.5-turbo", # يمكنك استخدام "gpt-4" إذا كان لديك وصول
        messages=[
            {"role": "system", "content": "أنت مساعد SEO خبير ومبرمج."},
            {"role": "user", "content": PROMPT_TEXT}
        ],
        max_tokens=150,
        temperature=0.7 # درجة الحرارة تتحكم في عشوائية الإخراج (0.0 حاسم، 1.0 إبداعي)
    )

    # استخراج النص من الاستجابة
    ai_response_content = chat_completion.choices[0].message.content

    print("\nاستجابة OpenAI:")
    print(ai_response_content)

except Exception as e:
    print(f"حدث خطأ أثناء الاتصال بـ OpenAI API: {e}")
ملاحظة تقنية:
  • الأمان: لا تقم أبداً بتضمين مفاتيح الـ API مباشرة في الكود الخاص بك عند مشاركته أو وضعه في أنظمة الإنتاج. استخدم متغيرات البيئة (Environment Variables) أو أنظمة إدارة الأسرار.
  • التسعير: استخدام نماذج OpenAI ليس مجانياً تماماً. يتم محاسبتك بناءً على عدد الـ "توكنز" (Tokens) التي يتم إرسالها واستقبالها. راجع صفحة التسعير لفهم التكاليف.
  • النماذج (Models): هناك نماذج مختلفة (مثل gpt-3.5-turbo، gpt-4). اختر النموذج الأنسب لاحتياجاتك وميزانيتك.

ملاحظات هامة حول الأمان والأخطاء

عند العمل مع الـ APIs، من الضروري مراعاة ما يلي:

  • إدارة المفاتيح: استخدم متغيرات البيئة (os.environ في Python) لتخزين مفاتيح الـ API الخاصة بك بدلاً من تضمينها مباشرة في الكود. هذا يمنع تسربها في حال مشاركة الكود.
  • معالجة الأخطاء: استخدم كتل try-except للتعامل مع الأخطاء المحتملة (مثل فشل الشبكة، الأخطاء من جانب الخادم 4xx/5xx، أخطاء تحليل JSON). هذا يجعل تطبيقك أكثر قوة.
  • حدود الطلبات (Rate Limiting): تفرض معظم الـ APIs قيوداً على عدد الطلبات التي يمكنك إجراؤها في فترة زمنية معينة. كن مستعداً للتعامل مع استجابات 429 Too Many Requests عن طريق إضافة فترات انتظار (delays) بين الطلبات أو استخدام مكتبات تدعم إعادة المحاولة.

النتيجة النهائية المتوقعة

بعد تشغيل سكربت Python هذا، ستشاهد في نافذة الطرفية (Terminal) أو سطر الأوامر (Command Prompt) ما يلي:

  1. أولاً، سيتم عرض رسالة تفيد بإرسال طلب إلى Google Custom Search API.
  2. بعد ذلك، ستظهر قائمة بأبرز 5 نتائج بحث متعلقة بـ "أتمتة SEO باستخدام بايثون"، مع عرض العنوان والرابط والمقتطف لكل نتيجة.
  3. ثم، ستظهر رسالة تفيد بإرسال طلب إلى OpenAI API.
  4. أخيراً، ستتلقى فقرة نصية تم إنشاؤها بواسطة نموذج GPT حول أهمية الـ API في أتمتة الـ SEO، مكتوبة بأسلوب مساعد SEO خبير.

هذه النتائج توضح بنجاح كيفية استهلاك الـ APIs المختلفة لجلب وتحليل البيانات وإنشاء المحتوى برمجياً، مما يمثل أساساً قوياً لبناء حلول أتمتة متقدمة.