Je vous propose de découvrir aujourd'hui comment utiliser l'API d'instagram. Comme beaucoup, Instagram ne permet pas de taper son API librement, il faudra passer par un Client

Création d'un client

La création d'un client pour instagram est très simple et il vous faudra seulement posséder un compte Instagram pour accéder à l'interface de création. La seule information réellement importante ici est OAuth redirect_uri. Ce paramètre indique vers quelle URL sera redirigé l'utilisateur après avoir accepté ou refusé l'application.

Une fois l'application créée vous obtiendrez 2 informations important

  • Client_id qui vous permettra de faire des appels à certains éléments de l'API
  • Client_secret que vous ne devez pas diffuser, et qui vous permettra de demander un token d'accès

Sans authentification

Certains points de l'api ne nécessite pas d'authentification et c'est notamment le cas du point qui nous intérèsse : La récupération des images d'un utilisateurs : https://api.instagram.com/v1/users/3/media/recent/?client_id=YOUR-CLIENT_ID.

Pour appeller cette page en PHP nous allons utiliser CURL qui permet d'avoir plus de contrôle qu'un file_get_content()

$user_id   = "USER_ID"; 
$client_id = "CLIENT_ID";
$endpoint  = "https://api.instagram.com/v1/users/$user_id/media/recent/?client_id={$this->options['client_id']}";
$curl = curl_init($endpoint);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$data = curl_exec($curl);
$json = json_decode($data);
// Dans $json->data vous avez les informations à vous de faire le reste ^^

Avec Authentification

La pluspart des autres méthodes de l'API demande un access_token et du coup implique une authentification. L'implémentation de l'OAauth n'est pas forcément complexe mais un peu répétitive donc on préfèrera passer par une classe qui gère ça pour nous. Via composer je vais installer "php-instagram-api/php-instagram-api": "dev-master".

On va créer une nouvelle instance d'Instagram\Auth qui va nous permettre de demander l'autorisation.

$auth = new Instagram\Auth([
    'client_id'     => 'CLIENT_ID',
    'client_secret' => 'CLIENT_SECRET',
    'redirect_uri'  => 'REDIRECT_URI'
]);

Une fois cet objet créé on peut l'utiliser pour forcer l'autorisation gràce à la méthode authorize() (attention cette méthode redirige dès qu'elle est appellée. L'utilisateur sera alors redirigé vers la page d'autorisation Instagram. Si il accepte les autorisation on récupèrera alors un code en GET qui nous permettra de générer le fameux token d'accès.

// On va stocker le token d'accès dans la SESSION donc ne pas oublier le session_start() au début de notre fichier ^^
if(!isset($_SESSION['instagram_token'])){
    if(!isset($_GET['code'])){
        $auth->authorize();
    } else {
        $access_token = $auth->getAccessToken($_GET['code']);
        $_SESSION['instagram_token'] = $access_token;
    }
}

On a maintenant en Session notre token d'accès donc on peut appeller l'API en utilisant ce dernier. On peut utiliser le même code que dans le premier exemple (avec CURL) ou continuer à utiliser la classe chargée. Cette fois-ci on utilisera l'objet Instagram\Instagram.

try{
    $instagram = new Instagram\Instagram();
    $instagram->setAccessToken($_SESSION['instagram_token']);
    $medias = $instagram->getCurrentUser()->getMedia(['count' => 3]);
} catch(Exception $e) {
    die($e->getMessage());
}
foreach($medias as $media){
    if ($media->type == 'image') {
        echo "<img src='{$media->images->standard_resolution->url}' width='100'>";
    }
}

Conclusion

Après à vous d'imaginer des applications un peu plus aboutit, mais une fois que vous savez comment récupérer un token d'accès et appeller une URL de l'API vous savez tout faire, il vous suffit de lire la section endpoints pour voir ce qu'Instagram vous laisse faire.