فصل ۱۲: دریافت داده از APIهای خارجی (مثل هواشناسی یا هوش مصنوعی)

مقدمه فصل
تا اینجا ربات ما با دادههای ثابت یا دیتابیس خودش کار میکرد،
اما حالا میخواهیم آن را به سرویسهای خارجی وصل کنیم تا بتواند اطلاعات زنده یا حتی مبتنی بر هوش مصنوعی تولید کند.
با API میتوانیم امکانات نامحدودی به ربات اضافه کنیم، مثل:
- گرفتن وضعیت آبوهوا
- دریافت پاسخ از مدلهای هوش مصنوعی (مثل GPT)
- ترجمه متن
- تبدیل واحدها
و هر قابلیت دیگری که یک سرویس آنلاین ارائه دهد.
بخش ۱: API چیست؟
API یک درگاه ارتباطی بین برنامه ما و سرویس دیگر است.
ما یک درخواست (Request) میدهیم و یک پاسخ (Response) دریافت میکنیم.
این ارتباط معمولاً از طریق HTTP انجام میشود و دادهها بیشتر اوقات با فرمت JSON برمیگردند.
مثلاً:
https://api.open-meteo.com/v1/forecast?latitude=35.7&longitude=51.4¤t_weather=true
با این آدرس میتوانیم اطلاعات آبوهوای تهران را از API بگیریم.
بخش ۲: ابزار لازم
pip install requests
کتابخانه requests برای ارسال درخواست به API استفاده میشود.
بخش ۳: مثال اول – وضعیت آبوهوای تهران
import requests
url = "https://api.open-meteo.com/v1/forecast?latitude=35.7&longitude=51.4¤t_weather=true"
response = requests.get(url)
data = response.json()
print("دمای فعلی تهران:", data["current_weather"]["temperature"], "°C")
بخش ۴: اتصال API هواشناسی به ربات
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
import requests
TOKEN = "توکن_ربات"
async def weather(update: Update, context: ContextTypes.DEFAULT_TYPE):
url = "https://api.open-meteo.com/v1/forecast?latitude=35.7&longitude=51.4¤t_weather=true"
res = requests.get(url)
data = res.json()
temp = data["current_weather"]["temperature"]
wind = data["current_weather"]["windspeed"]
await update.message.reply_text(f"🌡 دمای فعلی تهران: {temp}°C\n💨 سرعت باد: {wind} km/h")
app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("weather", weather))
app.run_polling()
بخش ۵: مثال دوم – ارتباط با API یک مدل هوش مصنوعی
در این مثال با API مدل GPT کار میکنیم (میتواند ChatGPT، Claude یا هر مدل مشابه باشد).
۱. دریافت API Key
برای مثال، اگر از سرویس OpenAI استفاده میکنید:
- به https://platform.openai.com/ بروید.
- ثبتنام کنید و API Key بگیرید.
۲. نمونه کد اتصال ربات به API GPT
import requests
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
TOKEN = "توکن_ربات"
API_KEY = "کلید_API_هوش_مصنوعی"
async def ai(update: Update, context: ContextTypes.DEFAULT_TYPE):
# متن بعد از دستور /ai را میگیریم
user_text = " ".join(context.args)
if not user_text:
await update.message.reply_text("لطفاً بعد از دستور /ai سوال خود را بنویسید.")
return
# درخواست به API مدل GPT
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": user_text}]
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
# پاسخ مدل را استخراج میکنیم
answer = data["choices"][0]["message"]["content"]
await update.message.reply_text(answer)
app = ApplicationBuilder().token(TOKEN).build()
app.add_handler(CommandHandler("ai", ai))
app.run_polling()
توضیح کد هوش مصنوعی:
- کاربر دستور
/aiرا به همراه یک سوال یا متن ارسال میکند. - متن کاربر به API مدل GPT ارسال میشود.
- API یک متن پاسخ تولید میکند و ما آن را به کاربر برمیگردانیم.
مثال:
/ai یک متن درباره فواید ورزش بنویس
پاسخ:
ورزش منظم باعث بهبود سلامت قلب، افزایش انرژی، تقویت سیستم ایمنی و کاهش استرس میشود.
بخش ۶: نکات امنیتی و عملکردی APIهای هوش مصنوعی
- API Key را هیچوقت در کد عمومی قرار ندهید. آن را در فایل
.envیا متغیر محیطی ذخیره کنید. - پاسخهای مدل را قبل از ارسال به کاربر بررسی کنید، مخصوصاً در پروژههای مهم.
- برای درخواستهای زیاد، استفاده از Queue و Rate Limit ضروری است.
بخش ۷: سوالات متداول
س: آیا میتوان از مدل هوش مصنوعی برای پردازش عکس یا صدا هم استفاده کرد؟
ج: بله، بعضی APIها این قابلیت را دارند (مثل OpenAI’s Whisper برای صدا یا DALL·E برای تصویر).
س: آیا APIهای هوش مصنوعی رایگان هستند؟
ج: بیشتر سرویسها پلن رایگان محدود دارند و برای استفاده بیشتر باید هزینه پرداخت کنید.
بخش ۸: اشتباهات رایج
| اشتباه | توضیح |
|---|---|
| ارسال درخواست بدون محدود کردن ورودی کاربر | باعث هدر رفت سهم API و هزینه اضافی میشود. |
| نگهداری API Key داخل کد | احتمال لو رفتن و سوءاستفاده وجود دارد. |
| نبود مدیریت خطا | اگر API قطع شود، ربات شما هم پاسخ نمیدهد. |
بخش ۹: نکات حرفهای
- نتایج AI را میتوانید در دیتابیس ذخیره کنید تا در صورت درخواست مشابه، دوباره API را صدا نزنید.
- میتوانید با استفاده از دکمههای Inline در فصل ۱۰، حالت پرسشوپاسخ چندمرحلهای بسازید.
- برای پاسخ سریعتر، از مدلهای سبکتر استفاده کنید.