March 31, 2006

MXNA posts feeder Ver. 1.0.0


השילוב של אפליקציות פלאש ופלקס עם webserivces (להלן ws) תמיד קסם לי. הרעיון של ליצור GUI יותר נוח עבורי או עבור אחרים המציג שירותי-רשת נחוצים נראה אחד היתרונות הגדולים וללא ספק הצד החזק של RIA.
MXNA (MX News Aggregator) נותנים ws חינם, אשר דרך API נוח יחסית שהם יצרו, מאפשר לאפליקציה חיצונית להתקשר ולהשיג נתונים. ובמקרה שלנו אלו עדכוני פוסטים של בלוגרים.
יש כמה דרכים להשיג את המידע הנ"ל. הראשונה היא להתחבר ישירות ל-RSS ולהתחיל לפרסס את ה-XML בעזרת E4X, שזו דרך שנוסתה על-ידי בגרסה הקודמת, ולמרות הגמישות שהיא טומנת בחובה היא מאוד מסורבלת. השנייה היא להתחבר ל-RSS דרך הקוד המוצע ב- as libraries של אדובי. את הדרך הזו לא ניסיתי, אבל עושה רושם שהיא מבוססת על הדרך הראשונה. פשוט בנו קפסולה עם API נוח עבור קריאות ופרסוס ה-rss וה-atom.
הדרך השלישית, והיא זו המוצגת פה, היא לתקשר ישירות עם ה-ws של MXNA ולגרום לשרת שלהם לעבוד, לפרסס ולעבד את המידע ולקבל בסופו של תהליך מערך מידע במקרה הגרוע.

אז הנה האפליקציה, די פשוטה בגרסה הראשונית שלה. עדיין בלי שום "הו-הא" וכדומה, רק פונקציונאליות בסיסית, אבל מועילה. כמה דברים לגבי אופן הפעולה שלה:
כמצב התחלתי, האפליקציה תעלה ותבקש 20 פוסטים אחרונים מקטגוריית flash בשפה האנגלית (יש להקליק על ה-screen shots להגדלה).


מרגע זה המשתמש יכול לעשות מספר דברים:
ללחוץ על אחד הפוסטים בכדי לקבל את ההקדמה שלו וגם קישור על המקור, במסך שנראה כך:


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

מעבר ליכולות הבסיסיות הללו, הוספתי עוד פיצ'ר שחשוב לי. האפליקציה תבדוק כל דקה האם יש עדכונים חדשים, ורק במידה ויש היא תתריע על כך בעזרת צליל (עדין משהו) למשתמש. כך אני יכול לפתוח את האפליקציה, להשאיר אותו למטה ב-taskbar ולקבל צלצול רק שעלו פוסטים חדשים.

במהלך הפיתוח נתקלתי במצב, שאני מאמין שהוא די שכיח. מצב בו אני מקבל מערך אובייקטים, אשר אני אמור להכניס את תכולתם אל תוך combo box. כפי שודאי ידוע למי שעוסק ב-soap, מאפייני האובייקטים לא תמיד יגיעו בצורה שפלקס רוצה: זאת אומרת, לא בפורמאט של data ו-label. בשביל להקל עלי את העיבוד נתונים, יצרתי פונקציה אשר מקבלת כארגומנטים את המערך הגולמי ושמות השדות שהיא אמור להפוך ל-data ול-label. ומחזירה מערך לתפארת פלקס. נשאלת השאלה: מה קורה, אם חוץ משני השדות הסטאנדרטים יש עוד מידע שאמור להיכנס באובייקט? א-הא! כאן בא לשימוש rest המדובר. אני אתן לקוד לדבר בעד עצמו:



/**
* Method: convertDataArray ();
* Desc: Converts raw data array to suite the format of
* a binding-data component.
* @param: raw_array (Array) The raw data array.
* @param: toBeLabel_str (String) The data field name to
* be the "label" property.
* @param: toBeData_srt (String) The data field name to
* be the "data" property.
*/
private function convertDataArray (raw_array:Array, toBeLabel_str:String, toBeData_srt:String, ...rest):Array {
var return_array:Array = new Array ();
for (var i:int = 0; i < raw_array.length; i++) {
var data_obj:Object = new Object ();
// Sets the label and data
data_obj.label = raw_array[i][toBeLabel_str];
data_obj.data = raw_array[i][toBeData_srt];
// And for the rest...
for (var each:Object in rest) {
data_obj[rest[each]] = raw_array[i][rest[each]];
}
return_array.push (data_obj);
}
return return_array;
}


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

4 comments:

Le-Fay said...

סבבה אחי!!1
נראה מזניב מהתמונות.
ותמיד כיף לקרוא קוד באופן הנפלא בו הוא מוצג בבלוג שלך.
אבל איפה אני מוצא את האקליפציה?

FlashMattic said...

תודה, בנאדם.
תוקן.

עטר ש. said...

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

FlashMattic said...

סבבה, אני רושם פיצ'רים.
אם יש עוד הצעות יעול, אני אשמח לקבל.