devstory

Restfb Java API pour Facebook

  1. Qu'est-ce que Restfb?
  2. Restfb download
  3. Créer un projet
  4. Các ví dụ

1. Qu'est-ce que Restfb?

D'abord Facebook considère le rapport entre l'entité comme un "Graphique Social" (Social Graph). Et ils contruisent un API, baptisé "Facebook Graph API", ce API permet d'extraire l'information, modifier l'information de l'entité, telle que le téléchargement des photos, l'écriture des commentaires (comment), prendre la liste des amis,... Ce API est basé sur la bibliothèque HTTP donc il permet n'importe quel langage qui possède la bibliothèque HTTP de travailler avec lui, comprenant Java.
Restfb est un Java API qui vous permet d'interagir avec le Facebook Graph API.
Vous devez connaître de "Facebook Graph API" avant de lire ce document. Vous pouvez consulter les instruction sur "Facebook Graph API" à l'adresse suivante:

2. Restfb download

Si vous utilisez Maven:
<!-- http://mvnrepository.com/artifact/com.restfb/restfb -->

<dependency>
    <groupId>com.restfb</groupId>
    <artifactId>restfb</artifactId>
    <version>1.16.0</version>
</dependency>

3. Créer un projet

Copiez ACCESS_TOKEN que vous voyez sur "Facebook Graph Explorer" et collez sur MY_ACCESS_TOKEN de la classe Constants ci- dessous.
Remarque: ACCESS_TOKEN sur "Facebook Graph Explorer" n'existe pas long temps, il va expirer dans certaine période de temps, donc vous devez copier à nouveau. Dans l'application, vous pouvez obtenir la valeur Access_Token dynamiquement au moment de l'exécution (runtime) du programme. Ce problème sera indiqué dans ce document.
Constants.java
package org.o7planning.tutorial.restfb;

public class Constants {

   public static final String REDIRECT_URI
                 = "http://localhost:8080/facebookfriends/FriendsListServlet";

  
   public static final String MY_ACCESS_TOKEN = "<Your Access Token>";

   // Facebook App
   public static final String MY_APP_ID = "<your app id>";
   public static final String MY_APP_SECRET = "<your app secret>";

}
Vous devriez utiliser Access Token avec la multitude droits de l'accès des données. Sur Facebook Graph Explorer cliquez à "Get Token/Get User Access Token".Après de sélectionner les droits, cliquez "Get Access Token" pour obtenir un nouveau Access Token avec plus de pouvoirs.

4. Các ví dụ

Pour accéder des données de Facebook, vous devez avoir l'objet FacebookClient. Ci-dessous sont des instructions de création cet objet.
// DefaultFacebookClient is the FacebookClient implementation
// that ships with RestFB. You can customize it by passing in
// custom JsonMapper and WebRequestor implementations, or simply
// write your own FacebookClient instead for maximum control.

FacebookClient facebookClient = new DefaultFacebookClient(MY_ACCESS_TOKEN);

// It's also possible to create a client that can only access
// publicly-visible data - no access token required.
// Note that many of the examples below will not work unless you supply an access token!

FacebookClient publicOnlyFacebookClient = new DefaultFacebookClient();

// Get added security by using your app secret:

FacebookClient facebookClient = new DefaultFacebookClient(MY_APP_ACCESS_TOKEN, MY_APP_SECRET);
L'exemple de prendre votre information
SimpleMeExample.java
package org.o7planning.tutorial.restfb.me;

import org.o7planning.tutorial.restfb.Constants;

import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.types.User;

public class SimpleMeExample {

    public static void main(String[] args) {
        
        // Tạo đối tượng FacebookClient
        FacebookClient facebookClient= new DefaultFacebookClient(Constants.MY_ACCESS_TOKEN);
        
        // User là một class có sẵn của Restfb mô tả các thông tin của User
        // Trong tình huống này chúng ta biết trước dữ liệu trả về là User.
        User user = facebookClient.fetchObject("me", User.class);
        
        System.out.println("User="+ user);
        System.out.println("UserName= "+ user.getUsername());
        System.out.println("Birthday= "+ user.getBirthday());

    }

}
Exécutez l'exemple:
Personnaliser votre information
CustomUser.java
package org.o7planning.tutorial.restfb.me;

import com.restfb.Facebook;

public class CustomUser {

    @Facebook("first_name")
    private String firstName;

    @Facebook("last_name")
    private String lastName;

    @Facebook("name")
    private String fullName;

    @Facebook
    private String email;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}
CustomDataMeExample.java
package org.o7planning.tutorial.restfb.me;

import org.o7planning.tutorial.restfb.Constants;

import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;

public class CustomDataMeExample {

   public static void main(String[] args) {
  
       FacebookClient facebookClient = new DefaultFacebookClient(
               Constants.MY_ACCESS_TOKEN);

       CustomUser user = facebookClient.fetchObject("me", CustomUser.class,
               Parameter.with("fields",
                       "id, name, email, first_name, last_name"));

       System.out.println("First Name= " + user.getFirstName());
       System.out.println("Last Name= " + user.getLastName());
       System.out.println("Full Name= " + user.getFullName());
       System.out.println("Email= " + user.getEmail());
   }
}
L'exécution de l'exemple:
Le type des données JsonObject
Restfb construit quelques classes qui représentent des données, par exemple User, Album, .. en réalité, vous avez besoin plus de ça. dans le cas général, elle est JsonObject. Un simple exemple de données Json ci- dessous:
{
 "id": "687563464611117",
 "email": "abc@yahoo.com",
 "birthday": "04/11/2000",
 "albums": {
   "data": [
     {
       "name": "Test Album",
       "type": "normal",
       "id": "726713597396700",
       "created_time": "2014-09-01T08:11:52+0000"
     },
     {
       "name": "Untitled Album",
       "type": "normal",
       "id": "726695580731835",
       "created_time": "2014-09-01T06:55:23+0000"
     }
   ]
 }
}
JsonUserDataExample.java
package org.o7planning.tutorial.restfb.me;

import org.o7planning.tutorial.restfb.Constants;

import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.json.JsonObject;

public class JsonUserDataExample {

    public static void main(String[] args) {

        FacebookClient facebookClient = new DefaultFacebookClient(
                Constants.MY_ACCESS_TOKEN);

        //
        // Trong tình huống tổng quát, sử dụng JsonObject.
        //
        JsonObject userData = facebookClient.fetchObject("me",
                JsonObject.class, Parameter.with("fields", "name, first_name"));

        System.out.println("userData=" + userData);

        System.out.println("FirstName=" + userData.getString("first_name"));
        System.out.println("Name= " + userData.getString("name"));
    }
}
Exécutez l'exemple:
Connection
Connection (Connexion) - est le lien entre des "choses" sur facebook, par exemple la relation entre une photo et ses commentaires, le rapport entre l'utilisateur et leurs amis. Parfois, il est appelé Edge (le bord).
Voir dans "Facebook Graph Explorer":
L'exemple avec Albums
AlbumsExample.java
package org.o7planning.tutorial.restfb.connection;

import java.util.List;

import org.o7planning.tutorial.restfb.Constants;

import com.restfb.Connection;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.types.Album;

public class GetAlbumsExample {

   public static void main(String[] args) {
       FacebookClient facebookClient = new DefaultFacebookClient(
               Constants.MY_ACCESS_TOKEN);

       Connection<Album> albumConnection = facebookClient.fetchConnection(
               "me/albums", Album.class);
       List<Album> albums = albumConnection.getData();

       for (Album album : albums) {
           System.out.println("Album name:" + album.getName());
       }

   }
}
L'exécution de l'exemple:
L'exemple avec Album et des paramètres
CustomGetAlbumsExample.java
package org.o7planning.tutorial.restfb.connection;

import java.util.Date;
import java.util.List;

import org.o7planning.tutorial.restfb.Constants;

import com.restfb.Connection;
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.types.Album;

public class CustomGetAlbumsExample {
    
    
    public static void main(String[] args) {
        FacebookClient facebookClient = new DefaultFacebookClient(
                Constants.MY_ACCESS_TOKEN);

        // 1 tuần trước.
        Date oneWeekAgo = new Date(System.currentTimeMillis() - 1000L * 60L
                * 60L * 24L * 7L);

        // Lấy ra kết nối tới các Album tạo trong khoảng 1 tuần trước.
        // Và tối đa 3 Album.
        Connection<Album> albumConnection = facebookClient.fetchConnection(
                "me/albums", Album.class, Parameter.with("limit", 3),                
                Parameter.with("since", oneWeekAgo));
        List<Album> albums = albumConnection.getData();

        for (Album album : albums) {
            System.out.println("Album name:" + album.getName());
        }

    }
}
Exécutez l'exemple: