IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

phpiste

php facebook sdk: récuperer les messages d'un group

Noter ce billet
par , 30/09/2016 à 12h58 (1561 Affichages)
Bonjour,

Voilà avec quoi on commence une bonne journée, écrire un tuto
(ca donne une énergie positive pour continuer une journée plein de stress)

L'idée du tutorial est simple:

Comment récupérer les posts d’un group facebook avec un script lancé en ligne de commande

Step1: Créé l’application facebook
Donc commençant par le commencement, créer l’application facebook pour obtenir les clés d’accès au api, pour cela rendez vous sur cette page https://developers.facebook.com

Donner un titre et une adresse email à votre nouvelle app

Nom : Screen Shot 2016-09-29 at 9.56.48 AM.png
Affichages : 419
Taille : 57,9 Ko

Après avoir créé l’application veuillez récupérer l’ID de l’app et la clé secrète.

Nom : Screen Shot 2016-09-29 at 9.57.46 AM.png
Affichages : 388
Taille : 48,8 Ko

Step2: Installer le SDK php
Rdv sur cette page github https://github.com/facebook/php-graph-sdk et sure votre terminal lancer cette commande
composer require facebook/graph-sdk
Vous allez voir un nouveau dossier dans votre arborescence nommé vendor

Step3: récupérer les feed
La classe va servir comme récupérateur des messages du group.
Elle prend en paramètre de constructeur l'app key et le secret key de l’application facebook que vous venez de créer.

Dans un nouveau fichier importFeed.php ajouter cette classe

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
class FacebookFeedScrapper{
  private $clientId;
  private $appSecret;
 
  //Access token from graph
  private $accessToken;
 
  //should be the client sdk
  private $fb;
 
  public function __construct($clientId, $appSecret){
    $this->clientId = $clientId;
    $this->appSecret = $appSecret;
 
    $this->accessToken = $this->getAccessToken();
    $this->fb = new \Facebook\Facebook([
      'app_id' => $this->clientId,
      'app_secret' => $this->appSecret,
      'default_graph_version' => 'v2.7'
    ]);
  }
 
  private function getAccessToken() {
    $url = "https://graph.facebook.com/oauth/access_token?client_id="
    . $this->clientId
    . "&client_secret=" 
    . $this->appSecret 
    . "&grant_type=client_credentials";
 
    $str = file_get_contents($url);
 
    return  str_replace ("access_token=", "", $str);
  }
 
  public function getFeed($id, $since){
    try {
      return $this->fb->get($id."/feed?since=".$since, $this->accessToken);
    } catch(\Facebook\Exceptions\FacebookResponseException $e) {
      throw new \Exception('Graph returned an error: ' . $e->getMessage());
    } catch(\Facebook\Exceptions\FacebookSDKException $e) {
      throw new \Exception('Facebook SDK returned an error: ' . $e->getMessage());
    }
  }
}

Explication du code
- Le constructeur
Pour utiliser l’api de facebook on doit posséder un jeton d'access (access token) en plus des app key and secret key, c’est pour cela que dans le constructeur de la classe on essaye de le récupérer.
on initialise aussi dans le constructeur le client facebook dans l’attribut fb, ceci nous permet de l’utiliser ultérieurement dans les méthodes de la classe.

- La méthode getFeeds
c’est la méthode qui fait le travail réel de récupération des feed, elle prend en paramètre l’id du group, ainsi qu’un filtre de date pour récupérer tous les feeds de la semaine qui vient de s’écouler (vous pouvez aussi utiliser le paramètre limit pour minimiser le nombre de résultats)
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
return $this->fb->get($id."/feed?since=".$since, $this->accessToken);

Step Execution et affichage

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
$feedScrapper = new FacebookFeedScrapper(
  "your-app-key", 
  "your-secret-key"
);
 
$groupId = “the-group-ID”;
 
try {
  $feeds = $feedScrapper->getFeed($groupId, date("Y-m-d", strtotime("-1 week +1 day")))->getDecodedBody()['data'];
} catch(\Exception $e) {
  throw new \Exception($e->getMessage());
}
 
echo "<pre>";
print_r($feeds);

la variable feeds est maintenant un tableau contenant la liste des posts du group apparus depuis une semaine

Le code source complet de l’exemple


Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
<?php
require_once __DIR__ . '/vendor/autoload.php';
 
class FacebookFeedScrapper{
  private $clientId;
  private $appSecret;
 
  //Access token from graph
  private $accessToken;
 
  //should be the client sdk
  private $fb;
 
  public function __construct($clientId, $appSecret){
    $this->clientId = $clientId;
    $this->appSecret = $appSecret;
 
    $this->accessToken = $this->getAccessToken();
    $this->fb = new \Facebook\Facebook([
      'app_id' => $this->clientId,
      'app_secret' => $this->appSecret,
      'default_graph_version' => 'v2.7'
    ]);
  }
 
  //Get the Access token
  //@todo change this with some official api
  private function getAccessToken() {
    $url = "https://graph.facebook.com/oauth/access_token?client_id="
    . $this->clientId
    . "&client_secret=" 
    . $this->appSecret 
    . "&grant_type=client_credentials";
 
    $str = file_get_contents($url);
 
    return  str_replace ("access_token=", "", $str);
  }
 
  public function getFeeds($id, $since){
    try {
      return $this->fb->get($id."/feed?since=".$since, $this->accessToken);
    } catch(\Facebook\Exceptions\FacebookResponseException $e) {
      throw new \Exception('Graph returned an error: ' . $e->getMessage());
    } catch(\Facebook\Exceptions\FacebookSDKException $e) {
      throw new \Exception('Facebook SDK returned an error: ' . $e->getMessage());
    }
  }
}
 
$groupId = “the-group-ID”;
$feedScrapper = new FacebookFeedScrapper(
  "your-app-key", 
  "your-secret-key"
);
 
try {
  $feeds = $feedScrapper->getFeeds($groupId, date("Y-m-d", strtotime("-1 week +1 day")))->getDecodedBody()['data'];
} catch(\Exception $e) {
  throw new \Exception($e->getMessage());
}
 
echo "<pre>";
print_r($feeds);

Voila il ne reste maintenant qu'a lancer le script pour récupérer les feeds

@todo
la méthode getAccessToken n'utilise pas le sdk php
(voir comment récupérer ce token via une méthode de l'sdk)

Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Viadeo Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Twitter Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Google Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Facebook Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Digg Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Delicious Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog MySpace Envoyer le billet « php facebook sdk: récuperer les messages d'un group » dans le blog Yahoo

Mis à jour 17/08/2017 à 18h13 par Malick (Ajout balises code)

Tags: facebook, php, poo, sdk
Catégories
PHP , Développement Web

Commentaires