API در عمل
API یعنی دری که یک سرویس عمداً برای برنامهها باز گذاشته. بهجای اینکه صفحهی وب را بخوانی، داده را تمیز و ساختاریافته میگیری.
مسیرِ داده از بیرون تا گزارش، تقریباً همیشه این پنج مرحله است:
سه چیزی که در کار با API عملاً به دردت میخورند:
- سقف درخواست. تقریباً هر API میگوید در دقیقه یا روز چند بار میتوانی صدا بزنی. ردکردنش یعنی مسدودشدن.
- کلید. اغلب APIها کلید میخواهند — و همهی قواعد فصل ۷.۵ اینجا برقرار است.
- و قالب جواب، که معمولاً JSON است (فصل ۱.۴.۴).
بهخاطر بسپار دادهی خام را همانطور که آمد ذخیره کن، قبل از هر تمیزکاری. این ارزانترین بیمهی این فصل است: اگر منطقِ تمیزکاریات غلط از آب دربیاید، داده را از دست ندادهای — و مهمتر، میتوانی ثابت کنی خطا از منبع بوده یا از کارِ خودت.
scraping و مرزهایش (فنی و اخلاقی)
scraping — که اسکرپینگ خوانده میشود — یعنی خواندنِ خودِ صفحهی وب و بیرونکشیدنِ داده از دلِ آن، وقتی API وجود ندارد.
و اول مرزِ فنی، چون همیشه شکننده است:
- صفحه برای آدم ساخته شده، نه برای برنامه. پس هر تغییری در ظاهرِ سایت میتواند کارت را بشکند — و این تغییر بدون اطلاع اتفاق میافتد.
- خیلی از سایتها محتوا را بعداً بارگذاری میکنند، پس آنچه یک برنامهی ساده میبیند با آنچه تو در مرورگر میبینی یکی نیست.
و بعد مرزِ اخلاقی و حقوقی، که جدیتر است و کمتر گفته میشود:
- شرایط استفادهی سایت را بخوان. خیلی از سایتها صریحاً منع کردهاند. «فنیاش ممکن است» با «اجازهاش را داری» یکی نیست.
- فشار نیاور. صدها درخواست در دقیقه به سایتِ کسِ دیگری، هزینهی او را بالا میبرد و ممکن است سرویسش را مختل کند. یک درخواست در چند ثانیه، مؤدبانه است.
- دادهی شخصی را جمع نکن. اینکه اطلاعاتی عمومی باشد، به معنی مجازبودنِ جمعآوری و نگهداریاش نیست.
- و اگر API هست، از API استفاده کن — حتی اگر سختتر به نظر برسد. API قراردادی است که طرف مقابل پذیرفته؛ scraping نیست.
دیتابیس در یک نگاه
وقتی دادهات از چند فایل بیشتر شد، فایل جواب نمیدهد. دیتابیس جایی است که دادهی زیاد را نگه میداری و میتوانی سریع در آن بگردی.
برای کارِ ما فقط سه چیز لازم است:
- SQLite یک دیتابیس است که در یک فایل جا میشود. نه سرور میخواهد، نه نصب. برای تقریباً هر کاری که در این دوره میسازی کافی است — و اغلب بیش از کافی.
- جدول همان مفهوم اکسل است: سطر و ستون.
- و پرسوجو یعنی سؤالپرسیدن از داده. لازم نیست زبانش را بلد باشی؛ به ایجنت میگویی چه میخواهی.
و کِی از فایل به دیتابیس برو؟ سه علامت: داده از چند هزار ردیف گذشت · مکرراً جستوجو میکنی · یا داده مدام اضافه میشود و نمیخواهی هر بار کل فایل را بازنویسی کنی. تا وقتی هیچکدام نیست، CSV کافی است — و مزیتِ بزرگش این است که با چشم قابل دیدن است.
ساخت خلاصهی روزانه
حالا سرِ هم کردنش. یک خلاصهی روزانه چهار تصمیم دارد:
- چه دادهای؟ — کمترین چیزی که سؤالت را جواب بدهد.
- چه چیزی «قابل توجه» است؟ این مهمترین تصمیم است. خلاصهای که هر روز همهچیز را میگوید، بعد از یک هفته خوانده نمیشود. خلاصه باید بگوید چه چیزی فرق کرده، نه چه چیزی هست.
- چه وقت؟ — و مهمتر: قبل از اینکه لازمش داشته باشی.
- کجا برود؟ — فصل بعد.
و یک قاعدهی طراحی که خلاصه را زنده نگه میدارد: اگر خبری نیست، بگو «خبری نیست» — ولی چیزی بفرست. پیامِ کوتاهِ «امروز هیچ تغییر قابل توجهی نبود» دو کار میکند: هم خیالت را راحت میکند، و هم ثابت میکند سیستم هنوز کار میکند. سکوت، مبهم است — نمیدانی خبری نبود یا سیستم مرده (فصل ۸.۷.۴).
وقتی منبع عوض میشود
و حالا حقیقتی که باید از اول بپذیری: هر چیزی که به دنیای بیرون وصل است، روزی میشکند. نه چون بد ساختهای — چون منبع مالِ تو نیست.
چهار شکلِ شکستن، و علامتشان:
- ساختار جواب عوض شد. نام یک ستون فرق کرد. علامت: خطا، یا بدتر، ستونِ خالی.
- آدرس عوض شد. علامت: خطای روشن. این بهترین حالت است، چون داد میزند.
- کلید منقضی شد. علامت: خطای اجازه.
- و بدترینش: داده هنوز میآید ولی معنایش عوض شده. واحد از ریال به تومان رفته، یا ستونی که «فروش» بود حالا «فروشِ خالص» است. هیچ خطایی نمیدهد و گزارشت بیصدا غلط میشود.
و دفاع در برابر آن چهارمی، یک چیز است: یک بررسیِ معقولبودن. اگر عدد امروز بیش از حدی با دیروز فرق دارد، هشدار بده بهجای اینکه گزارش بدهی. این ده خط کار است و همان چیزی است که بین «اتوماسیونِ قابل اعتماد» و «اتوماسیونی که یک روز دروغ میگوید» فرق میگذارد.
تمرین (ساختنی + توضیحی)
یک دریافت ساده بساز — چیزی عمومی و بیدردسر (نرخ ارز، آب و هوا، یک فید خبری). بعد:
- دادهی خام را ذخیره کن، با تاریخ دریافت.
- یک خلاصهی سهخطی از آن بساز که بگوید چه چیزی فرق کرده.
- و بنویس: اگر منبع عوض شود، دقیقاً چه چیزی میشکند؟ برای هر چهار حالت بخش ۸.۴.۵ جواب بده.
پاسخنامه — و اینکه چرا حالت چهارم تنها حالتی است که باید برایش کار کنی
برای یک دریافتِ نرخ ارز:
- ساختار عوض شود (نام فیلد
rateبهvalue): برنامه خطا میدهد یا مقدار خالی برمیگرداند. قابل تشخیص. - آدرس عوض شود: خطای روشن. قابل تشخیص.
- کلید منقضی شود: خطای اجازه. قابل تشخیص.
- واحد از ریال به تومان برود: هیچ خطایی نیست. عدد میآید، جدول پر میشود، گزارش ساخته میشود — و ده برابر غلط است.
و نکته این است: سه حالت اول خودشان را اعلام میکنند، پس لازم نیست برایشان کار خاصی بکنی — فقط باید خطاها را ببینی (فصل ۸.۷.۳). تنها حالتی که باید عمداً برایش دفاع بسازی، چهارمی است.
و آن دفاع، همان بررسیِ معقولبودن است: «اگر نرخ امروز بیش از ۲۰٪ با دیروز فرق دارد، بهجای گزارش، هشدار بده.» ده خط کار، در برابر یک گزارشِ بیصدای غلط که ممکن است هفتهها ادامه پیدا کند.