בתחתית דף הבית שלנו יש גריד של שמונה כרטיסים: הכתבה האחרונה מכל אחד משמונה אתרי טכנולוגיה. אין מאחוריו הסכם עם האתרים, אין API ואין מפתח. יש קובץ XML שכל אחד מהאתרים מפרסם בכתובת קבועה, ותוכנה אצלנו שקוראת אותו פעם ביום. זה RSS, והוא עובד בערך אותו דבר מאז 2003.
מה יש בקובץ
פיד הוא רשימה של פריטים, כל אחד עם כותרת, קישור, מזהה, תאריך, ולעיתים תקציר או גוף. שני פורמטים נפוצים:
- RSS 2.0: אלמנט
<rss>ובתוכו<channel>עם<item>-ים. התאריך ב-<pubDate>, המזהה ב-<guid>. המפרט קצר ומכוון, והרחבות כמוcontent:encoded(גוף מלא) ו-media:*(תמונות, וידאו) נוספו עליו ב-namespaces. - Atom (RFC 4287): אלמנט
<feed>עם<entry>-ים. מדויק יותר: יש הבחנה בין<published>ל-<updated>, הקישורים נושאיםrel, והתוכן מצהיר על הסוג שלו. The Verge, למשל, מפרסם Atom; שבעת האתרים האחרים ברשימה שלנו מפרסמים RSS.
קורא פיד טוב צריך לתמוך בשניהם, ולהיות סלחן למה שהוא פוגש: CDATA, ישויות HTML בתוך כותרות, תאריכים בפורמטים משונים, ופריטים בלי תאריך בכלל.
איך בוחרים ״את הכתבה האחרונה״
זה נשמע פשוט ולא לגמרי. הכלל שלנו: הפריט עם תאריך הפרסום המאוחר ביותר. אם אין תאריך פרסום אבל יש תאריך עדכון, משתמשים בו ומציינים זאת בכרטיס. אם אין תאריכים אמינים בכלל, לוקחים את הפריט הראשון בקובץ, כי רוב האתרים ממיינים מהחדש לישן, וגם זה מצוין. מה שלא עושים: לא מסננים לפי נושא. אם הכתבה האחרונה ב-Ars Technica היא על מדע ולא על תוכנה, זה מה שיוצג, כי זה מה שביקשנו להראות.
התמונות: לכל אתר הרגל אחר
כאן המפרט נגמר והפרקטיקה מתחילה. אין דרך אחת שבה אתרים מצרפים תמונה לפריט. בבדיקה המקדימה של שמונת הפידים מצאנו:
| אתר | איפה התמונה |
|---|---|
| The Verge | בתוך ה-HTML של התוכן (Atom) |
| WIRED | media:thumbnail |
| Ars Technica | media:content ו-media:thumbnail |
| VentureBeat | enclosure ו-media:content |
| IEEE Spectrum | media:content |
| Engadget | media:thumbnail ו-enclosure |
| TechRadar | enclosure ותגי media |
| MIT Technology Review | לא תמיד יש; לעיתים בתוך content:encoded |
לכן לכל מקור יש אצלנו ״adapter״: רשימת מקומות שבהם מחפשים תמונה, לפי סדר. לפני שמקבלים תמונה בודקים שהיא תמונה ולא וידאו, שהיא לא פיקסל מעקב של 1×1, ושהיא לא אווטאר של הכותב. ואם בפריט האחרון אין תמונה, לא לוקחים תמונה מפריט ישן יותר ולא מכתבה אחרת. הכרטיס מציג רקע ממותג של אותו אתר, ובניהול נרשם שהפריט חסר תמונת מקור.
נימוס מול השרת
פיד שנקרא כל דקה על ידי אלפי תוכנות הוא עומס אמיתי לאתר שמפרסם אותו. HTTP נותן שני כלים לצמצום: ETag ו-Last-Modified. הקורא שולח אותם בבקשה הבאה, והשרת עונה 304 (לא השתנה) בלי גוף. אנחנו שומרים אותם לכל מקור, קוראים פעם ביום, ומזדהים בשם ברור עם קישור לעמוד המקורות, כדי שמפעיל שרואה אותנו ביומנים ידע מי זה ומה הקצב.
מה קורא פיד לא צריך לעשות
RSS הוא הזמנה להציג כותרת וקישור, לא רישיון להעתיק אתר. אנחנו לא שומרים את גוף הכתבות, לא בונים ארכיון של כותרות ישנות, ולא מציגים תמונה של מקור בלי שתועד שמותר. עד שזה תועד, הכרטיס מראה רקע ממותג. זה אולי פחות יפה, אבל זו הדרך לכבד את מי שכתב.
למה זה עדיין רלוונטי
כי זה הפרוטוקול היחיד שבו האתר מחליט מה לפרסם, הקורא מחליט מה לקרוא, ואין מתווך שמדרג ביניהם. אפליקציות קריאה, פודקאסטים (שכולם RSS מתחת לפני השטח), ושירותי אוטומציה עדיין נשענים עליו. ואם אתם מפעילים אתר, יש לכם כנראה פיד גם אם לא ידעתם: לאתר הזה יש אחד ב-feed.xml.