سلام
وقت بخیر
کسی از دوستان لینک api محصولات دیجیکالا رو داره ؟
مثل api :
https://www.morvarid-store.ir/api/torob
برای انتقال محصولات از دیجی کالا به سایت دیگه ای میخوام
api میخوام که محصولات دیجی کالا در اون نشون بده، api صفحه آرشیو محصولات، سایتی که میخوام از دیجی کالا به اون منتقل کنم این طور api میخواد
{
"products": [
{
"title": "مغازه ی جادویی اثر جیمز دوتی",
"price": "130000",
"product_id": "dkg-2000",
"page_url": "https://www.morvarid-store.ir/product/Into the Magic Shop",
"availability": 1,
"off": "0",
"image": "https://www.morvarid-store.ir/upload/image/2024/1b671355e5324c5883f0d31cf945a674.jpg,https://www.morvarid-store.ir/upload/image/2024/482a6ccadc6447cd80fbc2095e4f7765.jpg",
"guarantee": "",
"category": "فانتزی,داستان و رمان,داستان خارجی"
},
{
"title": "به امید دل بستم اثر لنکالی",
"price": "250000",
"product_id": "uk-2001",
"page_url": "https://www.morvarid-store.ir/product/به-امید-دل-بستم-اثر-لنکالی",
"availability": 1,
"off": "0",
"image": "https://www.morvarid-store.ir/upload/image/2024/معرفی کتاب من عاشق امید شدم اثر لنکالی.jpg,https://www.morvarid-store.ir/upload/image/2024/معرفی کتاب من عاشق امید شدم اثر لنکالی1.jpg",
"guarantee": "",
"category": "داستان و رمان,داستان خارجی"
},
مهدی عزیز سلام امید وارم حالت خوب باشه
نفهمیدم دقیقا کدوم بخش مد نظرت هست اما این هارو برات میزارم امیدوارم به کارت بیاد
دسته بندی محصولات
https://api.digikala.com/v1/categories/notebook-netbook-ultrabook/brands/asus/search/?page=2
اطلاعات محصول
https://api.digikala.com/v2/product/14486886/
سرچ محصولات
https://api.digikala.com/v1/search/?q=%D9%84%D8%A8%D8%A7%D8%B3&page=1
api میخوام که محصولات دیجی کالا در اون نشون بده، api صفحه آرشیو محصولات، سایتی که میخوام از دیجی کالا به اون منتقل کنم این طور api میخواد
{
"products": [
{
"title": "مغازه ی جادویی اثر جیمز دوتی",
"price": "130000",
"product_id": "dkg-2000",
"page_url": "https://www.morvarid-store.ir/product/Into the Magic Shop",
"availability": 1,
"off": "0",
"image": "https://www.morvarid-store.ir/upload/image/2024/1b671355e5324c5883f0d31cf945a674.jpg,https://www.morvarid-store.ir/upload/image/2024/482a6ccadc6447cd80fbc2095e4f7765.jpg",
"guarantee": "",
"category": "فانتزی,داستان و رمان,داستان خارجی"
},
{
"title": "به امید دل بستم اثر لنکالی",
"price": "250000",
"product_id": "uk-2001",
"page_url": "https://www.morvarid-store.ir/product/به-امید-دل-بستم-اثر-لنکالی",
"availability": 1,
"off": "0",
"image": "https://www.morvarid-store.ir/upload/image/2024/معرفی کتاب من عاشق امید شدم اثر لنکالی.jpg,https://www.morvarid-store.ir/upload/image/2024/معرفی کتاب من عاشق امید شدم اثر لنکالی1.jpg",
"guarantee": "",
"category": "داستان و رمان,داستان خارجی"
},
سلام.
شما باید بسته به زبان برنامه نویسی خودتون،از یک الگوی رفت و برگشتی برای اتصال به api استفاده کنید.
مثلا در فریم ورک های جاوا اسکریپت،axios رو داریم.
در لاراول،httpguzzle
و...
همه زبات های برنامه نویسی،از فرمت JSON پشتیبانی میکنن.
مثلا در vue اگر بخوای محصولات دیجیکالا رو نشون بدی باید اینطوری بنویسی:
onMounted(async () => {
try {
const response = await axios.get('https://api.digikala.com/v1/incredible-offers/products/?category_id=1&page=1')
console.log( response.data)
} catch (error) {
console.error('Error data:', error)
}
})
اینم مثال لاراول:
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.digikala.com/v1/incredible-offers/products/?category_id=1&page=1');
echo $res->getBody();
سلام. چرا این api را که با کد کال می کنیم خطای 403 میده؟
من با httpclient در c# فراخوانی می کنم خطا میده. ولی همین api را با postman جواب میده.
علتش را کسی میدونه؟
سلام وقت بخیر
این مواردی که ارسال کردین همگی خطای 403 میده چطور باید این مورد و رفع کنیم؟
@sepehrsalimimehr
ببخشید میشه بگید این endpoint ها رو از کجا ازش مطلع شدید؟
دیجیکالا برای api documents داره؟ جایی که بشه دید چطور از api استفاده کرد؟ یا چه endpoint هایی وجود داره
یا اگه میشه بگید خودتون از کجا این ها رو پیدا کردید؟
@arshia.moharrary
سلام وقت بخیر
ببخشید شما میدونید که api documetns وجود داره برای دیجیکالا؟ یا کلا از کجا باید بدونیم چطور از api استفاده کرد؟ endpoint هاش چی هستن؟
این کد رو cloude نوشت برای دریافت لیست دسته بنده بندی هایی که میخوام.
شاید بدردتون خورد
import json
import time
# دستهبندیهای مورد نظر با URL های صحیح
categories = {
'mobile': {
'url': 'https://api.digikala.com/v1/categories/mobile-phone/search/',
'name': 'گوشی موبایل'
},
'laptop': {
'url': 'https://api.digikala.com/v1/categories/notebook-netbook-ultrabook/search/',
'name': 'لپ تاپ'
},
'tablet': {
'url': 'https://api.digikala.com/v1/categories/tablet/search/',
'name': 'تبلت'
}
}
def fetch_products(category_url, category_name, max_pages=5):
"""
دریافت محصولات از API دیجیکالا
"""
all_products = []
print(f"\n{'='*60}")
print(f"🔍 در حال دریافت محصولات {category_name}...")
print(f"{'='*60}")
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'application/json',
}
for page in range(1, max_pages + 1):
try:
# ساخت URL با پارامتر صفحه
url = f'{category_url}?page={page}'
print(f"📄 صفحه {page} در حال دریافت...")
response = requests.get(url, headers=headers, timeout=15)
if response.status_code == 200:
data = response.json()
# بررسی ساختار داده و استخراج محصولات
products = []
# حالت اول: data.products
if 'data' in data and 'products' in data['data']:
products = data['data']['products']
# حالت دوم: products مستقیم
elif 'products' in data:
products = data['products']
# حالت سوم: data.items
elif 'data' in data and 'items' in data['data']:
products = data['data']['items']
if products:
all_products.extend(products)
print(f" ✅ {len(products)} محصول دریافت شد")
print(f" 📊 مجموع تا الان: {len(all_products)} محصول")
else:
print(f" ⚠️ صفحه {page} محصولی ندارد یا به آخر رسیدیم")
break
# اگر تعداد محصولات کمتر از حد معمول باشه، احتمالا آخرین صفحه است
if len(products) < 20:
print(f" ℹ️ احتمالا به آخرین صفحه رسیدیم")
break
# تاخیر برای جلوگیری از فشار به سرور
time.sleep(2)
elif response.status_code == 404:
print(f" ❌ صفحه {page} یافت نشد - احتمالا به انتهای لیست رسیدیم")
break
elif response.status_code == 429:
print(f" ⏸️ محدودیت نرخ درخواست - صبر میکنیم...")
time.sleep(10)
continue
else:
print(f" ❌ خطا در دریافت صفحه {page}: کد {response.status_code}")
# نمایش بخشی از پاسخ برای دیباگ
print(f" 📝 پاسخ سرور: {response.text[:200]}")
break
except requests.exceptions.Timeout:
print(f" ⏱️ درخواست صفحه {page} منقضی شد")
break
except requests.exceptions.RequestException as e:
print(f" ❌ خطا در درخواست صفحه {page}: {str(e)}")
break
except json.JSONDecodeError as e:
print(f" ❌ خطا در تجزیه JSON صفحه {page}: {str(e)}")
break
except Exception as e:
print(f" ❌ خطای غیرمنتظره در صفحه {page}: {str(e)}")
break
print(f"\n✨ تعداد کل محصولات {category_name}: {len(all_products)}")
return all_products
def save_to_json(data, filename):
"""
ذخیره دادهها در فایل JSON
"""
try:
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
# محاسبه حجم فایل
import os
file_size = os.path.getsize(filename) / 1024 # به کیلوبایت
print(f"💾 فایل {filename} با موفقیت ذخیره شد ({file_size:.2f} KB)")
return True
except Exception as e:
print(f"❌ خطا در ذخیره فایل {filename}: {str(e)}")
return False
def extract_product_summary(products):
"""
استخراج خلاصه اطلاعات محصولات
"""
summary = []
for product in products[:5]: # فقط 5 محصول اول برای نمونه
try:
item = {
'id': product.get('id', 'N/A'),
'title': product.get('title_fa', product.get('title', 'N/A')),
'price': product.get('default_variant', {}).get('price', {}).get('selling_price', 0),
'url': f"https://www.digikala.com/product/dkp-{product.get('id', '')}"
}
summary.append(item)
except:
continue
return summary
def main():
print("\n" + "="*60)
print("🚀 شروع دریافت محصولات از دیجیکالا")
print("="*60)
results_summary = {}
# دریافت و ذخیره محصولات هر دسته
for category_key, category_info in categories.items():
print(f"\n{'🔷'*30}")
products = fetch_products(
category_info['url'],
category_info['name'],
max_pages=5 # تعداد صفحات - میتونی تغییرش بدی
)
if products:
filename = f'digikala_{category_key}.json'
# ساختار داده برای ذخیره
output_data = {
'category_name': category_info['name'],
'category_url': category_info['url'],
'total_products': len(products),
'fetch_date': time.strftime('%Y-%m-%d %H:%M:%S'),
'products': products
}
# ذخیره فایل
if save_to_json(output_data, filename):
# نمایش نمونه محصولات
print(f"\n📋 نمونه محصولات {category_info['name']}:")
summary = extract_product_summary(products)
for i, item in enumerate(summary, 1):
print(f" {i}. {item['title'][:50]}...")
print(f" 💰 قیمت: {item['price']:,} تومان")
results_summary[category_key] = {
'name': category_info['name'],
'count': len(products),
'file': filename
}
else:
print(f"⚠️ هیچ محصولی برای {category_info['name']} یافت نشد")
results_summary[category_key] = {
'name': category_info['name'],
'count': 0,
'file': None
}
# تاخیر بین دستهبندیها
time.sleep(3)
# نمایش خلاصه نتایج
print("\n" + "="*60)
print("📊 خلاصه نتایج:")
print("="*60)
for key, info in results_summary.items():
status = "✅" if info['count'] > 0 else "❌"
print(f"{status} {info['name']}: {info['count']} محصول")
if info['file']:
print(f" 📁 فایل: {info['file']}")
print("\n" + "="*60)
print("🎉 عملیات با موفقیت پایان یافت!")
print("="*60)
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\n⚠️ برنامه توسط کاربر متوقف شد")
except Exception as e:
print(f"\n\n❌ خطای کلی: {str(e)}")
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟