על Trackback, Pingback ועל API (הלא כל־כך) ידידותי

ב־28.5.2008, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, לינוקס, פיתוח, תכנה ומחשבים, WordPress בעברית, ספאם, CppCMS; ‏0 תגובות

אם אתם לא שמתם לב, הוספתי תמיכה בטראקבק לבלוג שלי. חייב להגיד, שהמשימה לא הייתה פשוטה.

בהתחלה דווקא רציתי לממש את פינגבק שלפי דברי ויקיפדיה פחות בעייתי מבחינת spam וגם קראתי את הכתבה המשבחת את מנגנן הפינגבק ומבקרת את מנגנון הטראקבק.

אז בהתחלה החלטתי ליישם את הראשון. התחלתי לקרוא את הספציפיקציות

וכאן מתחיל הסיפור

תוכן הפרוטוקול

הבעיה הראשונה שנתקלתי בה: כיצד אני מייצר את תוכן ההפניה? לפי הפרוטוקול, בפועל מועברים רק שני פרמטרים: url מקורי ו־url מטרה... במילים אחרות, אם אני ארצה להציג את ההפניה לאתר כל מה שאני אצטרך להציג זה "http://www.you-coolblog.com/artficle/?p=23". נכון שזה מאוד משמעותי?

מי בכלל היה מנסה להיכנס אליו בלי אפילו תקציר קצרצר? מי בכלל היה יודע מי הפנה לכתבה ובגלל איזו סיבה עם כל מה שניתן לראות זה url?

אז על מנת למלא את ה־pingback בקצת יותר משמעות אני אצטרך לעשות פיענוח ל־html ולחפש למשל title ועוד שזה הופך את המשימה לכלל לא טריביאלית, שלא לדבר על זה שצריך למצוא קידוד של הדף על מנת להפוך את ה"כותרת" לקידוד היעד (למשל מ־koi8 ל־utf8). לשם השוואה לפי ספציפיקציות של טראקבק כל המידע הדרוש מועבר כאחד משדות ה־post.

אבל נגיד, שהייתי משאיר את זה רק בתור קישור בודד, אז נגיע למימוש.

שרת

מסתבר על מנת לממש תמיכה בקליטה של פינגים, אני חייב לעבוד מול אחת מספריות XML-RPC הקיימות או להשתמש בספריית XML על מנת למשוך מידע משם. שד"א בטראקבק המידע נמשך בעזרת post פשוט שלא דורש שום כלי חיצוני מלבד היכולות הסטנדרטיים שם יישומי ה־web: "קריאת מידע מטפסים" (אולי למעט קידוד שמועבר ב־http header).

עכשיו פה בדיוק יש לעצור ולדבר על ספאם.

לפי פרוטוקול פניגבק, האתר שמקבל פינג, אמור לבדוק שהקישור שמוביל אליו קיים ושאתר היעד מכיל את הקישור: קרי להוריד עומד web ולפחות לעשות עליו חיפוש. הם מציינים את זה כרכיב שלמעשה מאפשר סינון יעיל של ספאמרים: הרי כדי להכניס קישורים הם בפועל צריכים לשים אותו בדף שאליו מפנים.

מצד שני, הדרישה הזו הוא רשות ולא חובה. בנוסף אין שום מניעה לבצע את אותה בדיקה כשמתקבלת הפניית טראקבק!

לקוח

לפי ספציפיקציות הפינגבק, הלקוח אמור לעבוד בפרוטוקול XML-PRC כאשר בעבודה עם טראקבק הוא אמור להיות מסוגל לבצע שליחת נתונים ב־POST לכתובת מסוימת.

אם נקח הן את השרת והן את הלקוח ביחד, נראה שמה שצריך זה לדעת לעבוד בתור לקוח HTTP: על מנת לבדוק שיש הפניה באמת וגם לבדוק כי האתר באמת מקבל פינגבקים (ראה בהמשך). כנ"ל גם טראקבק צריך את היכולת, אם כי, במקרה שלו הלקוח אמור לתמוך גם ב־POST.

אם מדברים על שרת ולקוח של פינגבק: צריך גם לקוח HTTP וגם שרת ולקוח של XML-RPC או לפחות ספריה לפענוח XML. למען ההגינות, אומר כי, גם לקוח של טראקבק צריך לדעת לקרוא XML, רק שבמקרה שלו, ה־XML שלו הרבה יותר פשוט כך שניתן לעשות הכל בעזרת strstr פשוט.

תהליך Auto-Discovery

פה אין ספק, שפינגבק הוא יותר "פשוט". הוא צריך לבדוק רק שני מקומות: http header וגם תוכן הדף לפי ביטוי רגולרי מאוד פשוט. לעומת זאת, במקרה של טארקבק, הלקוח צריך לפענח RDF שזו בהחלט משימה יותר קשה בהשוואה לפינגבק, אבל האם היא עד כדי כך קשר שבעזרת חיפוש של "tackback:ping=‎" לא נוכל לבצע אותה? לא יודע.

ברור שבמחינת Auto-Discovery, מימוש של פניגבק הוא פשוט יותר. רק אני רוצה לשאול שאלה: עד כמה הוא נחוץ? לא עדיף שבלוגר ישלח את הפניות שלו באופן מודע ולא ישלח אותן לכל קישור שמופיע בכתבה שלו? יש כאלה שלא יסכימו איתי ויעדיפו המנגנון האוטומטי, אבל, אני אישית, זכיתי לכמה הפתעות לא נעימות כשהמנגנון האוטומטי היה מופעל ב־WordPress שלי.

סיכום

הטכנולוגיה היותר מתקדמת של פינגבק דורשת עבודה עם: ספריית XML-RPC וגם עם לקוח HTTP, לעומת זאת, טראקבק דורש רק לקוח HTTP כדי לבצע הפניה עצמה בלבד (לא לקלוט אותה).

המידע שמועבר בטראקבק הוא הרבה יותר משמעותית שמקל על הצגת ההפניות.

אז השאלה היא? למה דווקא כשמחפשים ברשת מוצאים שפינגבק זה טוב וטראקבק זה רע? מה שברור שהתכנון של טראקבק הוא הרבה יותר טוב הן למפתחים והן לעבודה אתו בפועל.

גילוי נאות:

  1. זה לקח לי כמה ערבים טובים לממש טראקבק, אבל הבעיה העיקרית שלי הייתה התמודדות עם ספריות iconv כדי להבטיח המרה בטוחה של הודעות ו־libcurl כדי לשלוח מידע ב־POST -- הספריה הזו עשירה מידי כדי להבין, איזה בדיוק דגלונים אני הייתי צריך להפעיל, על מנת שזה יעבוד כמו שצריך.
  2. המימוש של טראקבק בבלוג שלי לא תומך ב־Auto-Discovery בגלל בעיות הספאם וגם בגלל שאני חושב שהפניה צריך להתבצע ע"י בלוגר באופן מודע.

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים