Mise en route de l'API Instagram points de terminaison multimédia

Ce que vous allez créer

Ceci est la deuxième partie d'une série sur l'API Instagram. Dans ce tutoriel, je vais vous guider dans l'utilisation des points de terminaison multimédia d'Instagram, qui vous permettent de rechercher des images populaires à partir d'une heure et d'un lieu spécifiques.. 

Vous pouvez télécharger le code de chaque épisode en utilisant le lien du référentiel GitHub dans la barre latérale. Vous pouvez également être intéressé par ma série en deux parties, Tuts +, Localisation des témoins potentiels de scènes de crime avec les API de médias sociaux.. 

Le code de ces tutoriels est écrit en PHP avec le framework Yii. Pour en savoir plus sur Yii, consultez Introduction au framework Yii (Tuts +) et à la série Programmation avec Yii2 (Tuts +). Vous pouvez également facilement adapter les segments de code à votre propre application PHP..

Je participe aux discussions. Si vous avez une question ou une suggestion de sujet, veuillez poster un commentaire ci-dessous. Vous pouvez également me joindre sur Twitter @reifman ou m'envoyer un email directement.

Commençons par vous inscrire en tant que développeur avec Instagram.

Commencer

Pour commencer, visitez la page API Instagram pour les développeurs et cliquez sur Enregistrez votre application:

Vous devrez créer un compte développeur:

Ensuite, vous pouvez enregistrer une nouvelle application pour recevoir votre identifiant client:

Sur le Gérer les clients tableau de bord, vous verrez votre identité du client et Secret du client, alors prenez note de ceux-ci:

Utilisation des points de terminaison multimédia

En ce qui concerne les API de service Web, l’API Instagram est robuste et, selon mon expérience, fonctionne très bien. Instagram propose une poignée de points de terminaison API:

Pour ce tutoriel, nous allons nous concentrer sur la Points de terminaison médias:

Avec les points de terminaison multimédia, vous pouvez récupérer des informations sur une photo ou une vidéo Instagram en référençant son ID ou le shortcode à partir de son URL, par exemple. 0EyZ53Ja9X à partir de https://instagram.com/p/0EyZ53Ja9X. Il fournit également des fonctionnalités de géo-recherche permettant de trouver des médias postés à une heure et à un endroit spécifiques, comme nous l’avions fait dans la section Localisation des témoins potentiels de scènes de crimes avec les API de médias sociaux. Et enfin, il vous permet de récupérer les publications Instagram les plus en vogue.

La console de l'API

Pour vous aider à démarrer et à déboguer, Instagram dispose d'une console API optimisée par Apigee:

Vous pouvez tester des requêtes sur les points de terminaison du média à l'aide de la console de l'API. Voici un exemple de résultat pour media / popular:

Évidemment, vous pouvez voir à quel point cela est utile pour travailler avec les médias du célèbre service de photographie mobile..

Passons maintenant à l'installation de notre exemple de base de code et à sa configuration pour fonctionner avec votre application client Instagram..

Installer la base de code

Pour cette série, je vais continuer à me baser sur la base de code Eyewitness des API Localisation de témoins potentiels de scènes de crimes avec les médias sociaux. Vous pouvez cloner le référentiel GitHub situé dans la barre latérale pour exécuter notre exemple de code..

cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git

Vous devrez configurer votre configuration Apache locale. J'utilise MAMP, donc ça ressemble à quelque chose comme ça:

cd / Applications / MAMP / htdocs ln -s ~ / Sites / eyew / web / Applications / MAMP / htdocs / eyew 

Vous devez créer une base de données localement. J'utilise PHPMyAdmin pour en créer un graphiquement:

Puis je crée un fichier d’initialisation dans /var/secure/eyew.ini avec mes identifiants de base de données et les identifiants et clés Instagram. J'ai récemment décrit ce processus dans un autre tutoriel de Tuts +: Protéger vos clés de GitHub.

Mon fichier ini ressemble à ceci:

mysxloukoukoukou 

Mettez à jour votre compositeur et ses bibliothèques de fournisseurs:

compositeur sudo mise à jour automatique compositeur sudo

Puis initialisez notre base de données. La première migration installe des tables utilisateur pour notre extension Dmeroff Yii2-User par développeur, et la seconde crée nos tables spécifiques à l'application:

 ./ yii migrate / up --migrationPath = @ vendor / dektrium / yii2-user / migrations ./yii migrate / up

Encore une fois, vous pouvez en apprendre plus sur la configuration d’une application Yii Framework dans la série Programmation avec Yii2 pour Tuts.+.

Voici le schéma MySQL pour notre table d'images Instagram - nous l'appelons la table Gram. Nous allons l'utiliser pour stocker les résultats de géosearch.

La classe m150308_184606_create_gram_table étend la migration fonction publique up () $ tableOptions = null; if ($ this-> db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB';  $ this-> createTable ('% gram', ['id' => Schema :: TYPE_PK, 'moment_id' => Schema :: TYPE_INTEGER. 'NOT NULL', 'nomutilisateur' => Schema :: TYPE_STRING. 'NOT NULL DEFAULT 0', 'link' => Schéma :: TYPE_STRING. 'NOT NULL DEFAULT 0', 'image_url' => Schema :: TYPE_STRING. 'NOT NULL DEFAULT 0', 'text' => Schéma: : TYPE_TEXT. 'NOT NULL', 'created_time' => Schéma :: TYPE_INTEGER. 'NOT NULL', 'created_at' => Schéma :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schéma :: TYPE_INTEGER. 'NOT NULL ',], $ tableOptions); $ this-> addForeignKey ('fk_gram_moment', '% gram', 'moment_id', '% moment', 'id', 'CASCADE', 'CASCADE'); 

La page d'accueil

J'ai renommé l'exemple d'application "Instapi", raccourci pour Instagram API.

Voici un aperçu de ce que vous devriez voir lorsque vous visitez le site dans votre navigateur:

Effectuer des recherches multimédia

Pour mettre en œuvre des recherches de médias dans notre application Instapi, j'utilise le paquet PHP Instagram de Galen Grover.

Rechercher des images populaires

Tout d'abord, mettons en œuvre une recherche de média / populaire. Nous interrogerons l'API et afficherons les résultats dans un tableau.

J'ai créé une action appelée populaire dans GramController.php:

 fonction publique actionPopular () $ gram = new Gram (); $ media = $ gram-> searchPopular (); return $ this-> render ('popular', ['media' => $ media,]);  

Il appelle searchPopular () dans le modèle Gram.php:

setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getPopularMedia (); return $ media;  

Dans /views/gram/popular.php, nous mettons en place une structure de table HTML:

title = 'Instagrams'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?> 
render ('_ item', ['m' => $ m,]); ?>
ID de l'image Utilisateur La vignette Légende Créé à

et inclure le _item.php vue partielle pour afficher les résultats de chaque média:

 id?> ">id?> utilisateur-> nom d'utilisateur?> ">utilisateur-> nom d'utilisateur?> lien?> ">  légende-> texte)? $ m-> légende-> texte: ");?>  created_time?> 

Voici les résultats des requêtes populaires des médias Instagram. Allez-y et actualisez la page dans votre application. C'est amusant de voir ce qui vient ensuite.

Rechercher des informations sur une image ou une vidéo

J'ai lié l'ID de média Instagram dans la première colonne à une action du contrôleur qui appelle le point de terminaison du média et qui nous fournit plus d'informations:

 fonction publique actionLookup ($ id) $ gram = new Gram (); $ media = $ gram-> lookup ($ id); print_r ($ media);  

Voici la fonction de recherche dans le modèle Instagram:

 fonction publique recherche ($ id) $ instagram = new Instagram \ Instagram; $ instagram-> setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getMedia ($ id); return $ media;  

Voici une capture d'écran des données vidées à l'écran:

Évidemment, vous pouvez utiliser et stocker ces informations comme bon vous semble.

Rechercher des médias à partir d'un moment et d'un lieu

Maintenant, recherchons des images d’un moment et d’un lieu donnés. Pour cet exemple, je vais passer en revue notre exemple de témoin oculaire.

Notre base de code vous permet de définir un moment comme lieu et heure. Il se compose d'un descripteur convivial, d'un emplacement (latitude et longitude), d'une heure de début et d'une durée (en minutes). Pour mon premier exemple, je recherche des utilisateurs d'Instagram qui étaient présents lors du tournage vidéo de Macklemore dans la soirée du mercredi 24 juillet 2013 au Dick's Drive In de Seattle..

En utilisant Google Maps, je peux obtenir la latitude et la longitude GPS de Dick. C'est 47.6195 -122.321. 

De l'article, j'ai appris que la production a cessé à 1 heure du matin. Je vais choisir une heure de départ de 22 heures et une durée de 3 heures.

Instagram accepte les heures de début à l’heure GMT et j’ai codé en dur un ajustement de changement d’heure de huit heures de mon fuseau horaire (PST). Vous devrez peut-être changer cela dans le code.

fonction publique actionCreate () $ model = new Moment (); if ($ model-> load (Yii :: $ app-> request-> post ())) // convertit l'heure en timestamp $ model-> start_at = strtotime ($ model-> start_at); // ajuster pour GMT $ model-> start_at + = (3600 * 8); // valide le formulaire par rapport aux règles du modèle if ($ model-> validate ()) // toutes les entrées sont valides $ model-> save (); return $ this-> redirect (['view', 'id' => $ model-> id]);  else return $ this-> render ('create', ['model' => $ model,]);  else return $ this-> render ('create', ['model' => $ model,]); 

Pour rechercher sur Instagram, il suffit de cliquer sur l'icône de la caméra ci-dessous:

La recherche actuelle est assez simple: $ instagram-> searchMedia ($ this-> latitude, $ this-> longitude, $ params); 

setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ end_at = $ this-> start_at + ($ this-> duration * 60); $ params = array ('min_timestamp' => $ this-> start_at, 'max_timestamp' => $ end_at, 'distance' => $ this-> distance, 'compte' => 50); $ media = $ instagram-> searchMedia ($ this-> latitude, $ this-> longitude, $ params); foreach ($ media as $ m) if (isset ($ m-> légende-> texte)) $ légende = $ m-> légende-> texte;  else $ caption = "; $ i = new Gram (); $ i-> add ($ this-> id, $ m-> user-> nom d'utilisateur, $ m-> link, $ m-> created_time, $ m-> images-> vignette-> url, $ légende);

Les résultats sont stockés dans la table de Gram, que nous pouvons ensuite parcourir:

fonction publique add ($ moment_id, $ utilisateur, $ lien, $ heure_créée, $ image_url, $ texte) if (! Gram :: find () -> où (['moment_id' => $ moment_id]) -> andWhere ( ['link' => $ link]) -> andWhere (['created_time' => $ created_time]) -> existe ()) $ i = new Gram (); $ i-> moment_id = $ moment_id; $ i-> nom d'utilisateur = $ nom d'utilisateur; $ i-> link = $ link; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> text = $ text; $ i-> save (); 

Voici la première page de résultats de ma recherche. Vous pouvez voir la foule et la limousine Cadillac de Macklemore qui monte.

Ensuite, à la page trois, un utilisateur Instagram nommé Joshua Lewis a une photo de Macklemore sortant de la Cadillac: 

Voici Macklemore:

Cet exemple montre clairement la puissance fournie par l'API de recherche Instagram. En quelques instants, nous avons trouvé une variété de témoins oculaires lors d'un événement de l'été 2013..

Et après?

J'espère que vous avez apprécié l'apprentissage de l'API Instagram jusqu'à présent. Dans le prochain épisode, nous explorerons l'authentification OAuth afin de pouvoir interroger les zones du service Instagram nécessitant l'autorisation de l'utilisateur..

En attendant, n'hésitez pas à poster vos questions et commentaires ci-dessous. Vous pouvez également me joindre sur Twitter @reifman ou m'envoyer un courriel directement. Vous pouvez également parcourir ma page d’instructeur Tuts + pour voir les autres tutoriels que j’ai écrits.. 

Liens connexes

  • Instagram
  • L'API Instagram
  • Le blog des développeurs Instagram
  • Localisation de témoins potentiels de scènes de crime avec des API de médias sociaux
  • Yii2 Developer Exchange

L'image d'aperçu est modifiée à partir d'un résultat apparu dans notre recherche d'API..