ایزی ریت
ورود / ثبت‌نامورود

اسکرپ قیمت ارز یا API رسمی؟ مقایسهٔ فنی، حقوقی و هزینهٔ واقعی

اسکرپ قیمت ارز از سایت‌ها ارزان به نظر می‌رسد اما با تغییر قالب، مسدود شدن IP و داده‌های غلط هزینه‌ساز می‌شود. مقایسهٔ کامل اسکرپینگ و API با جدول تصمیم.

عرفان فضلی
· کارشناس توسعه و برنامه نویسی
انتشار ۳ آبان ۱۴۰۵، ۱۲:۰۰ · ۴ دقیقه مطالعه
اسکرپ قیمت ارز یا API رسمی
خلاصه در سه خط
  • اسکرپینگ یعنی خواندن HTML سایت دیگر و بیرون کشیدن عدد؛ با هر تغییر طراحی آن سایت، کد شما می‌شکند.
  • مشکل بزرگ‌تر از قطعی، دادهٔ غلط بی‌صداست: عددی که اشتباه خوانده شده اما خطا نمی‌دهد.
  • API رسمی قرارداد ثابت دارد (JSON، کد خطا، زمان به‌روزرسانی، تعداد منبع) و هزینهٔ نگهداری را تقریباً صفر می‌کند.

بسیاری از برنامه‌نویس‌ها اولین بار با یک اسکریپت کوچک سراغ قیمت دلار می‌روند: صفحهٔ یک سایت قیمت را باز می‌کند، عدد را از HTML بیرون می‌کشد و تمام. این روش برای یک پروژهٔ آزمایشی کار می‌کند، اما در محصولی که مشتری به آن اعتماد کرده، دیر یا زود مشکل می‌سازد. در این مقاله اسکرپ قیمت ارز را با استفاده از API رسمی از نظر فنی، حقوقی و هزینهٔ واقعی مقایسه می‌کنیم.

★
پاسخ کوتاه
برای نمونهٔ آزمایشی، اسکرپینگ قابل قبول است. برای هر سیستمی که مشتری یا تصمیم مالی به آن وابسته است، API بهتر است: قالب پاسخ ثابت است، خطا صریح اعلام می‌شود، زمان و تعداد منبع هر نرخ معلوم است و با تغییر طراحی سایت‌ها کد شما نمی‌شکند.

این مقاله بخشی از راهنمای کامل API قیمت ارز و طلا است.

اسکرپینگ دقیقاً چطور کار می‌کند؟

اسکریپت اسکرپر صفحهٔ وب را مثل یک مرورگر دریافت می‌کند، ساختار HTML را تحلیل می‌کند و با یک انتخاب‌گر (مثلاً #usd .price) عدد را برمی‌دارد. اگر سایت مقصد قیمت را با جاوااسکریپت بارگذاری کند، اسکرپر باید یک مرورگر کامل (مثل Playwright) را اجرا کند که چند ده برابر حافظه و زمان مصرف می‌کند.

پنج مشکلی که در اسکرپینگ قیمت پیش می‌آید

۱. شکستن با هر تغییر طراحی

انتخاب‌گر شما به ساختار صفحهٔ دیگری وابسته است. سایت مقصد یک کلاس CSS را عوض می‌کند، یک ستون جدید اضافه می‌کند یا جدول را به کارت تبدیل می‌کند و کد شما از کار می‌افتد. معمولاً هم این اتفاق در بدترین زمان، مثلاً روز نوسان شدید بازار، کشف می‌شود.

۲. دادهٔ غلط بی‌صدا

از قطعی بدتر، وقتی است که اسکرپر عدد اشتباه برمی‌دارد و خطا هم نمی‌دهد: قیمت یورو به‌جای دلار، نرخ خرید به‌جای فروش، عدد ریالی به‌جای تومانی، یا قیمت دیروز از یک بخش آرشیوی. سیستم شما با اطمینان عدد غلط را به مشتری نشان می‌دهد.

۳. مسدود شدن IP

سایت‌های قیمت معمولاً پشت سرویس‌هایی مثل کلودفلر هستند و درخواست‌های مکرر از یک IP را به‌عنوان ربات مسدود می‌کنند یا کپچا نشان می‌دهند. دور زدن این محدودیت‌ها هم هزینه دارد و هم اخلاقی و قانونی نیست.

۴. نامعلوم بودن تازگی عدد

صفحهٔ وب به شما نمی‌گوید عدد چه ساعتی ثبت شده و از چند منبع آمده است. در API، فیلدهای updated_at و sources این را صریح می‌گویند و شما می‌توانید تصمیم بگیرید عدد قدیمی را نمایش ندهید.

۵. ریسک حقوقی

بیشتر سایت‌ها در شرایط استفادهٔ خود برداشت خودکار داده را منع کرده‌اند. استفادهٔ تجاری از دادهٔ اسکرپ‌شده می‌تواند به اختلاف حقوقی یا دست‌کم مسدود شدن دائمی برسد.

مقایسهٔ تصویری خروجی اسکرپر و پاسخ JSON API
HTML ناپایدار در برابر JSON با قرارداد ثابت

جدول مقایسه

معیاراسکرپینگAPI رسمی
هزینهٔ شروعصفرپلن رایگان دارد
هزینهٔ نگهداریبالا و غیرقابل پیش‌بینیتقریباً صفر
پایداری قالب دادهبا هر تغییر سایت می‌شکندقرارداد ثابت و نسخه‌دار
اعلام خطاندارد؛ خطای بی‌صداکدهای 401، 403، 429 صریح
زمان و منبع عددنامعلومupdated_at و sources در هر نرخ
چند دارایی در یک درخواستبه تعداد صفحه‌هایک درخواست برای همه
وضعیت حقوقیمعمولاً خلاف شرایط سایتمجاز طبق شرایط سرویس

هزینهٔ واقعی را حساب کنید

فرض کنید هر بار که اسکرپر می‌شکند، یک برنامه‌نویس دو ساعت برای پیدا کردن مشکل و اصلاح وقت می‌گذارد و این اتفاق ماهی دو بار می‌افتد. یعنی سالی حدود ۴۸ ساعت کار، به‌علاوهٔ ساعت‌هایی که سایت عدد غلط یا قدیمی نشان داده است. در بیشتر کسب‌وکارها همین هزینه از اشتراک سالانهٔ یک API بیشتر است. محاسبهٔ دقیق‌تر هزینهٔ مالکیت را در نسخهٔ انگلیسی Scraping vs Financial API آورده‌ایم.

چه زمانی اسکرپینگ منطقی است؟

  • پروژهٔ آموزشی یا آزمایشی که خطای آن هزینه‌ای ندارد.
  • داده‌ای که هیچ وب‌سرویسی ارائه نمی‌دهد و صاحب سایت اجازهٔ برداشت را داده است.
  • بررسی یک‌بارهٔ آرشیو برای پژوهش، با رعایت فایل robots.txt و فاصلهٔ زمانی مناسب بین درخواست‌ها.

برای همهٔ موارد دیگر، از یک API با قرارداد روشن استفاده کنید. اگر دنبال API رایگان غیررسمی هستید، پیش از آن خطرات وب‌سرویس‌های غیررسمی قیمت ارز را هم بخوانید.

نشانه‌های اینکه اسکرپر شما در حال خراب شدن است

اگر هنوز اسکرپر دارید، این علائم را زیر نظر بگیرید. هر کدام دیده شد، وقت مهاجرت است:

  • عدد چند ساعت تغییر نمی‌کند در حالی که بازار باز است.
  • گاهی عددی ده برابر یا یک‌دهم مقدار معمول ثبت می‌شود (احتمالاً ریال و تومان قاطی شده).
  • زمان پاسخ اسکرپر رو به افزایش است یا گاهی کپچا برمی‌گردد.
  • برای نگه داشتن اسکرپر مجبور شده‌اید مرورگر کامل (Headless Chrome) اجرا کنید.
  • بیش از یک انتخاب‌گر جایگزین در کد گذاشته‌اید «برای وقتی که سایت عوض شد».

یک روش کم‌هزینه برای کشف خطای بی‌صدا، مقایسهٔ خودکار است: عدد اسکرپر را هر ساعت با یک منبع دوم مقایسه کنید و اگر بیش از ۲ درصد فاصله داشت، هشدار بفرستید.

مهاجرت از اسکرپر به API در یک روز

  1. فهرست داده‌ها: بنویسید اسکرپر دقیقاً چه عددهایی را برمی‌دارد و هر کدام کجا استفاده می‌شود.
  2. نگاشت نمادها: برای هر عدد، نماد معادل را از GET /assets پیدا کنید (مثلاً «دلار آزاد» = usd، «سکه طرح جدید» = emami).
  3. واحد: بررسی کنید اسکرپر ریال برمی‌داشت یا تومان و quote را همان بگذارید تا کدهای بعدی تغییر نکنند.
  4. لایهٔ جایگزین: تابعی که امروز عدد اسکرپ‌شده را برمی‌گرداند، از فردا همان خروجی را از API بدهد. بقیهٔ سیستم نباید بفهمد.
  5. اجرای موازی: یک هفته هر دو را اجرا و مقایسه کنید، سپس اسکرپر را خاموش کنید.

نمونه‌کد دریافت نرخ در پایتون و PHP آماده است.

نکتهٔ اخلاقی و فنی برای اسکرپ‌های مجاز

اگر به هر دلیلی مجبورید از سایتی داده بردارید که API ندارد، دست‌کم این‌ها را رعایت کنید: فایل robots.txt و شرایط سایت را بخوانید، فاصلهٔ بین درخواست‌ها را چند ثانیه نگه دارید، User-Agent واقعی و قابل تماس بگذارید و نتیجه را کش کنید تا یک صفحه را بارها نخوانید. این‌ها هم احتمال مسدود شدن را کم می‌کنند و هم بار اضافه روی سایت دیگران نمی‌گذارند.

گزارش مصرف API در پنل کاربری بعد از مهاجرت از اسکرپر
مصرف ثابت و قابل پیش‌بینی درخواست‌ها پس از مهاجرت

نرخ‌های لحظه‌ای مرتبط با این مطلب: قیمت دلار، قیمت طلای ۱۸ عیار، قیمت سکه امامی.

آیا اسکرپ قیمت ارز از سایت‌های دیگر قانونی است؟
به شرایط استفادهٔ هر سایت بستگی دارد. بیشتر سایت‌های قیمت برداشت خودکار و استفادهٔ تجاری را منع کرده‌اند. برای استفادهٔ تجاری از API مجاز استفاده کنید.
چرا اسکرپر من گاهی عدد صفر یا خالی برمی‌گرداند؟
معمولاً چون سایت مقصد قیمت را با جاوااسکریپت بعد از بارگذاری صفحه درج می‌کند یا درخواست شما را به‌عنوان ربات تشخیص داده و صفحهٔ دیگری نشان داده است.
API هم ممکن است قطع شود؛ چه فرقی دارد؟
قطعی API صریح اعلام می‌شود و شما می‌توانید آخرین عدد معتبر را نشان دهید. خطای اسکرپر اغلب بی‌صداست و عدد غلط را جای عدد درست می‌نشاند.
برای نمایش ساده در سایت هم باید API بخرم؟
نه. ویجت‌های قیمت رایگان‌اند و کلید نمی‌خواهند. API برای محاسبه و ذخیرهٔ عدد است.
عرفان فضلی
من در حوزه توسعه نرم‌افزار و برنامه‌نویسی فعالیت می‌کنم و به طراحی و پیاده‌سازی راهکارهای کاربردی و بهینه علاقه‌مندم. تمرکز من بر توسعه قابلیت‌های جدید، بهبود عملکرد سیستم‌ها و حل چالش‌های فنی با استفاده از فناوری‌های روز است. در مسیر کاری خود تلاش می‌کنم با یادگیری مستمر و به‌کارگیری روش‌های نوین برنامه‌نویسی، محصولات نرم‌افزاری کارآمد، پایدار و قابل‌اعتماد توسعه دهم.
همهٔ مطالب نویسنده ←

نظرات (۰)

نظرها پس از تأیید نمایش داده می‌شوند؛ برای ارسال، ورود به حساب لازم است.

مطالب مرتبط

API و برنامه‌نویسی
دریافت نرخ ارز در PHP و لاراول با cURL و Guzzle؛ آموزش کامل
API و برنامه‌نویسی
قیمت طلا در React و Next.js؛ پیاده‌سازی تابلو قیمت لحظه‌ای طلا و سکه
API و برنامه‌نویسی
نمایش قیمت ارز در وردپرس؛ آموزش با افزونه، شورت‌کد و API