par , 30/09/2016 à 12h58 (1751 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

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

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
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)
1 2
|
return $this->fb->get($id."/feed?since=".$since, $this->accessToken); |
Step Execution et affichage
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
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)