0%
در حال بارگذاری...

جستجو در سایت

درس ۹ مقدماتی: کار با APIها در پایتون

پایتون | Python مقدماتی

می‌خوای اطلاعات یه وب‌سایت، مثل قیمت ارز یا وضعیت آب‌وهوا، رو مستقیم توی برنامه‌ت بیاری؟ 🌐 APIها (رابط‌های برنامه‌نویسی کاربردی) مثل یه پل برنامه‌ت رو به دنیای اینترنت وصل می‌کنن! تو این درس، من بهت یاد می‌دم چطور با ماژول requests از APIها داده بگیری و استفاده کنی. برای مثال، تو می‌تونی پیش‌بینی آب‌وهوا یا اطلاعات یه کاربر رو از سرور بگیری. بنابراین، اگر درس‌های ۱ تا ۸ (متغیرها، شرط‌ها، حلقه‌ها، داده‌ساختارها، توابع، فایل‌ها، ماژول‌ها و شیءگرایی) رو یاد گرفتی، حالا آماده‌ای که با داده‌های آنلاین کار کنی! 🚀 من با مثال‌های واقعی، جداول مقایسه، ۱۲ تمرین و یه پروژه جذاب بهت کمک می‌کنم داده‌های آنلاین رو به برنامه‌ت بیاری. بریم شروع کنیم! 🎉

API چیه و چرا مهمه؟ 🔗

API (Application Programming Interface) به برنامه‌ت اجازه می‌ده با سرویس‌های خارجی (مثل سرورهای وب) ارتباط برقرار کنه و داده بگیره یا بفرسته. برای مثال، تو می‌تونی از API آب‌وهوا دمای فعلی رو بگیری. علاوه بر این، APIها این مزایا رو دارن:

  • اتصال: تو به داده‌های آنلاین (مثل اخبار یا قیمت‌ها) دسترسی پیدا می‌کنی.
  • سادگی: تو نیازی به ساخت داده‌ها از صفر نداری.
  • انعطاف: APIها برای پروژه‌های متنوع کاربرد دارن.

به همین دلیل، APIها برای برنامه‌های مدرن ضروریه. ما از ماژول requests استفاده می‌کنیم که ساده و قدرتمنده. بیا یه نمونه ببینیم:

import requests
response = requests.get("https://api.example.com/data")
print(response.json())

بنابراین، تو با requests.get داده رو از API می‌گیری و با json() اون رو به دیکشنری پایتون تبدیل می‌کنی.

گرفتن داده با requests 📡

ماژول requests به تو کمک می‌کنه درخواست‌های HTTP (مثل GET و POST) بفرستی. برای مثال، بیا از یه API عمومی (مثل JSONPlaceholder) داده بگیریم:

import requests
response = requests.get("https://jsonplaceholder.typicode.com/users/1")
user = response.json()
print(f"نام: {user['name']}, ایمیل: {user['email']}")

به علاوه، پاسخ API معمولاً به‌صورت JSONه که مثل دیکشنری (درس ۳) کار می‌کنه:

متد کارکرد مثال
requests.get(url) گرفتن داده requests.get("https://api.example.com")
requests.post(url, data) ارسال داده requests.post(url, data={'key': 'value'})
response.json() تبدیل به دیکشنری response.json()['key']

💡 نکته: تو باید همیشه وضعیت پاسخ (response.status_code) رو چک کنی (۲۰۰ یعنی موفقیت).

مدیریت خطاها در APIها 🛡️

APIها ممکنه خطا بدن (مثل قطع اینترنت یا پاسخ نامعتبر). برای مثال، تو می‌تونی با try-except (درس ۵) خطاها رو مدیریت کنی:

import requests
try:
    response = requests.get("https://jsonplaceholder.typicode.com/users/1")
    response.raise_for_status()  # خطا در صورت کد غیر ۲۰۰
    print(response.json()['name'])
except requests.RequestException:
    print("خطا در اتصال به API!")

علاوه بر این، تو می‌تونی وضعیت پاسخ رو این‌جوری چک کنی:

response = requests.get("https://jsonplaceholder.typicode.com/users/1")
if response.status_code == 200:
    print("موفق!")
else:
    print(f"خطا: کد {response.status_code}")

💡 نکته: کدهای ۴XX (مثل ۴۰۴) یعنی درخواستت مشکل داره، و ۵XX یعنی سرور مشکل داره.

ترکیب با درس‌های قبلی: API و پایگاه داده 📚

برای مثال، تو می‌تونی داده‌های API رو توی پایگاه داده (درس ۸) ذخیره کنی:

import requests
import sqlite3

conn = sqlite3.connect("users.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)")
response = requests.get("https://jsonplaceholder.typicode.com/users")
users = response.json()
for user in users:
    cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", (user['name'], user['email']))
conn.commit()
conn.close()

بنابراین، تو با ترکیب API با حلقه‌ها و پایگاه داده (درس‌های ۲ و ۸) برنامه‌های قوی‌تر می‌سازی.

مثال‌های عملی: دنیای واقعی 💡

برای مثال، بیا چند برنامه کاربردی بسازیم:

۱. گرفتن اطلاعات کاربر:

import requests
def get_user(user_id):
    response = requests.get(f"https://jsonplaceholder.typicode.com/users/{user_id}")
    if response.status_code == 200:
        user = response.json()
        return f"نام: {user['name']}, ایمیل: {user['email']}"
    return "کاربر پیدا نشد!"
print(get_user(1))

۲. ذخیره پست‌های وبلاگ:

import requests
import sqlite3
def save_posts():
    conn = sqlite3.connect("posts.db")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY, title TEXT)")
    response = requests.get("https://jsonplaceholder.typicode.com/posts")
    posts = response.json()
    for post in posts[:5]:  # فقط ۵ پست اول
        cursor.execute("INSERT INTO posts (title) VALUES (?)", (post['title'],))
    conn.commit()
    conn.close()
save_posts()

۳. نمایش آب‌وهوا (با API عمومی):

import requests
def get_weather(city):
    # برای تست از API واقعی باید کلید API داشته باشی
    response = requests.get(f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=your_api_key")
    if response.status_code == 200:
        weather = response.json()
        return f"{city}: {weather['main']['temp']} درجه"
    return "خطا در گرفتن آب‌وهوا!"
print(get_weather("Tehran"))

به همین دلیل، این مثال‌ها درس‌های قبلی (مثل توابع و Database) رو با API ترکیب می‌کنن. کدها رو توی lesson9_examples.py ذخیره کن.

خطاهای رایج و راه‌حل‌ها ⚠️

به طور کلی، این خطاها تو کار با APIها شایعن:

خطا علت راه‌حل
RequestException مشکل در اتصال یا پاسخ تو باید اتصال اینترنت و URL رو چک کنی
KeyError کلید ناموجود در JSON تو باید ساختار JSON رو با print(response.json()) بررسی کنی
HTTPError کد وضعیت غیر ۲۰۰ تو باید کد وضعیت رو با response.status_code چک کنی

برای مثال:

import requests
try:
    response = requests.get("https://invalid-api")
    response.raise_for_status()
except requests.RequestException:
    print("خطا در اتصال!")

تمرین‌ها: مهارتت رو تست کن! 📝

برای تسلط، این ۱۲ تمرین رو حل کن:

  1. یه تابع بنویس که اطلاعات کاربر رو از JSONPlaceholder بگیره.
  2. یه برنامه بنویس که پست‌های سایت رو توی دیتابیس ذخیره کنه.
  3. یه تابع بنویس که ایمیل کاربر رو از API بگیره و نمایش بده.
  4. یه برنامه بنویس که خطای API رو با try-except مدیریت کنه.
  5. یه کلاس بساز که داده‌های کاربر رو از API بگیره.
  6. یه برنامه بنویس که تعداد پست‌های یه کاربر رو بشماره.
  7. یه تابع بنویس که داده‌های API رو توی فایل ذخیره کنه.
  8. یه برنامه بنویس که کامنت‌های یه پست رو از API بگیره.
  9. یه کلاس بساز که پست‌های وبلاگ رو مدیریت کنه و توی پایگاه داده ذخیره کنه.
  10. یه تابع بنویس که وضعیت پاسخ API رو چک کنه.
  11. یه برنامه بنویس که اطلاعات چند کاربر رو از API بگیره و مرتب کنه.
  12. یه کلاس بساز که داده‌های آب‌وهوا رو از API بگیره (با API واقعی یا تستی).

💡 نکته: هر تمرین رو توی فایل جدا (ex1.py، ex2.py) ذخیره کن.

پروژه کوچک: مدیر پست‌های وبلاگ 📜

برای مثال، بیا یه برنامه برای مدیریت پست‌های وبلاگ بسازیم:

  1. دریافت پست‌ها از API.
  2. ذخیره در دیتابیس.
  3. نمایش و جست‌وجوی پست‌ها.
import requests
import sqlite3

class BlogManager:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()
        self.cursor.execute("CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY, title TEXT, user_id INTEGER)")

    def fetch_posts(self):
        try:
            response = requests.get("https://jsonplaceholder.typicode.com/posts")
            response.raise_for_status()
            posts = response.json()
            for post in posts[:5]:
                self.cursor.execute("INSERT INTO posts (title, user_id) VALUES (?, ?)", (post['title'], post['userId']))
            self.conn.commit()
            print("پست‌ها ذخیره شدن!")
        except requests.RequestException:
            print("خطا در گرفتن پست‌ها!")

    def show_posts(self):
        self.cursor.execute("SELECT * FROM posts")
        posts = self.cursor.fetchall()
        if not posts:
            print("هیچ پستی نیست!")
        else:
            for post in posts:
                print(f"ID: {post[0]}, عنوان: {post[1]}, کاربر: {post[2]}")

    def __del__(self):
        self.conn.close()

blog = BlogManager("blog.db")
while True:
    print("\n=== مدیر پست‌ها ===")
    action = input("گرفتن پست‌ها (f)، نمایش (s)، خروج (q): ")
    if action == "q":
        break
    elif action == "f":
        blog.fetch_posts()
    elif action == "s":
        blog.show_posts()
print("خداحافظ!")

💡 تست کن: پست‌ها رو بگیر، نمایش بده و فایل blog.db رو چک کن.

سؤالات متداول (FAQ) ❓

به طور کلی، این سؤالات برای مبتدی‌ها رایجه:

  • API چطور کار می‌کنه؟ API مثل یه گارسون بین برنامه‌ت و سرور عمل می‌کنه.
  • چرا باید requests نصب کنم؟ چون جزو کتابخانه‌های استاندارد نیست (با pip install requests نصبش کن).
  • چطور خطای API رو رفع کنم؟ تو باید URL، اتصال اینترنت و کلید API رو چک کنی.
  • JSON چیه؟ JSON یه فرمت مثل دیکشنری برای تبادل داده‌ست.

جمع‌بندی و قدم بعدی ⏭️

تبریک! 🚀 تو این درس یاد گرفتی چطور با APIها کار کنی و با بیش از ۱۲ مثال و یه پروژه، حسابی مسلط شدی. بنابراین، حالا می‌تونی داده‌های آنلاین رو به برنامه‌ت بیاری. علاوه بر این، درس بعدی (مدیریت پروژه و تست کد) بهت یاد می‌ده چطور کدت رو سازمان‌دهی و تست کنی. در نهایت، تمرین‌ها رو توی PythonLessons ذخیره کن و اگه دوست داشتی، توی GitHub آپلود کن تا پیشرفتت رو نشون بدی! 😎

ارسال نظر جدید

گزارش دیدگاه