שימוש ב-FQL באפליקציות פייסבוק

הסברים ליצירת שאילתות למסדי הנתונים של פייסבוק עבור אפליקציות כולל אפליקצית פייסבוק שעושה שימוש ב-FQL

במאמרים הקודמים למדנו כיצד להשתמש ב-PHP SDK על מנת ליצור אפליקציות פייסבוק. אחד הכלים החשובים ביותר כדי לקבל מידע מהמשתמש הוא שימוש ב-FQL. השימוש ב-FQL מאפשר לנו לבצע שאילתות מורכבות על 'טבלאות' שיש למשתמש. כאשר מידת המורכבות של השאילתות תלויה בעיקר בכם.

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

יצירת שאילתת SQL

יצירת השאילתה היא פשוטה ביותר לאלו מכם שיודעים SQL או MySQL. אם אינכם יודעים, סימן שצריך ללמוד MySQL. בהנחה שאתם יודעים, אנו בעצם מבצעים בחירה של שדות שנמצאים בטבלאות שונות כאשר אין לנו בעצם JOIN, אך אנו יכולים להשתמש ב-Subqueries ובאופרטורים שונים כמו NOT, LIMIT, ORDER BY.

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

אם נציץ בדוקומנטציה של טבלת משתמשים (user), אנו נוכל לראות את השדות השונים. לפיכך, בהנחה שיש לנו את ההרשאות המתאימות, אנו יכולים לכתוב שאילתה שתחזיר לנו את השדות האלו. למשל:


SELECT name,sex,pic FROM user WHERE uid = 12345678

כאשר ה-12345678 הוא כמובן UID כלשהו. הוא יכול להיות ה-UID של זה שמפעיל את האפליקציה או UID של החברים שלו. איך אנו משיגים את ה-UID של החברים שלו? באמצעות בחינה של טבלת friend, שם באמצעות ה-UID של המשתמש אנו יכולים לראות מי כל חבריו (בתנאי שהוא נתן לנו הרשאה מתאימה לכך). באמצעות השאילתה:


SELECT uid2 FROM friend WHERE uid1 = 12345678

uid1 ו-uid2 הם כמובן השדות בטבלת friend, כאשר uid2 הם ה-UID של החברים של uid1. אם נזכור שאנו יכולים להשתמש ב-subqueries, אנו יכולים להשתמש בשאילתה הזו על מנת לשאוב את כל הפרטים על אותו משתמש שהתקין את האפליקציה שלנו:


SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = 12345678)

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

קריאה ל-API

אחרי שניסחנו את שאילתת ה-FQL, הגיע הזמן לשלוח אותה. בהנחה שאתם יודעים כיצד ליצור אפליקצית פייסבוק באמצעות PHP SDK, לאחר תהליך האותנטיקציה אנו משתמשים במתודת api על מנת לשגר FQL ולקבל תוצאות באופן הבא:


		try{
            $fql    =   "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())";
            $param  =   array(
                'method'    => 'fql.query',
                'query'     => $fql,
                'callback'  => ''
            );
            $fqlResult   =   $facebook->api($param);
        }
        catch(Exception $o){
            print_r($o);
        }

כאשר ()me ב-FQL הוא פונקציה קטנה שפשוט מחזירה את ה-UID של המשתמש שהתקין אותה.

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


<?php
    //facebook application configuration -mahmud
    $fbconfig['appid' ] = "XXXXXXXXXXX";
    $fbconfig['secret'] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

    $fbconfig['baseUrl']    =   "https://internet-israel.com/internet_files/facebook/facebook_fql";
    $fbconfig['appBaseUrl'] =   "http://apps.facebook.com/fbtest-fql-il/";

    $user            =   null; //facebook user uid
    include_once "facebook.php";

    $facebook = new Facebook(array(
      'appId'  => $fbconfig['appid'],
      'secret' => $fbconfig['secret'],
      'cookie' => true,
    ));

    $user  = $facebook->getUser(); //האם המשתמש מחובר
    
    $loginUrl = $facebook->getLoginUrl( //קישור לחיבור + ההרשאות המבוקשות
            array(
                'scope' => 'friends_about_me,friends_activities,friends_birthday,friends_education_history,friends_likes,friends_photos,friends_status'
            )
    );

    if ($user) { //בדיקה אם המשתמש קיים
		print 'user on line';
		
		try{
            $fql    =   "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())";
            $param  =   array(
                'method'    => 'fql.query',
                'query'     => $fql,
                'callback'  => ''
            );
            $fqlResult   =   $facebook->api($param);
        }
        catch(Exception $o){
            print_r($o);
        }

		
		print "<table>";
		foreach ($fqlResult as $key => $value) {
			print "<tr>";
			print "<td><img src='".$value['pic_square']."' alt='user picture' /></td>";
			print "<td>".$value['name']."</td>";
			print "<tr />";
		}
		print "</table>";
    }
    else if (!$user) {
        echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
        exit;
    }

כאשר לא נשכח להכניס במקום ה-XXXX את מספר האפליקציה והקוד הסודי שלה שמתקבל לאחר הגדרת האפליקציה.

פוסטים נוספים שכדאי לקרוא

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

גלילה לראש העמוד