Detta är del två i en serie på Instagram API. I denna handledning guidar jag dig igenom Instagrams Media Endpoints, som låter dig söka efter populära bilder från en viss tid och plats.
Du kan ladda ner koden för varje avsnitt genom att använda länk GitHub-arkivet i sidofältet. Du kanske också är intresserad av min tvådelade Tuts + -serie, Att lokalisera potentiella brottsplatsvittnen med Social Media APIs.
Koden för dessa handledning skrivs i PHP med hjälp av Yii Framework. Du kan lära dig mer om Yii i Introduktion till Yii Framework (Tuts +) och i programmering med Yii2-serien (Tuts +). Du kan också enkelt anpassa kodsegmenten för din egen PHP-applikation.
Jag deltar i diskussionerna. Om du har en fråga eller ett ämnesförslag, vänligen skriv en kommentar nedan. Du kan också nå mig på Twitter @ reifman eller maila mig direkt.
Låt oss börja med att registrera som en utvecklare med Instagram.
För att komma igång, besök Instagram API-sidan för utvecklare och klicka på Registrera din ansökan:
Du måste anmäla dig till ett utvecklarkonto:
Då kan du registrera en ny applikation för att ta emot ditt klient-ID:
På Hantera klienter instrumentpanelen ser du din Klient ID och Kundhemlighet, så notera dessa:
Som API för API-tjänster går Instagram API, och fungerar enligt min erfarenhet mycket bra. Instagram erbjuder en handfull API-slutpunkter:
För den här handledningen fokuserar vi på Medieändpunkter:
Med Media-ändpunkter kan du hämta information om ett Instagram-foto eller en video genom att referera till dess ID eller kortnummer från dess URL, t.ex. 0EyZ53Ja9X från https://instagram.com/p/0EyZ53Ja9X. Det ger också geosökningsmöjligheter för att hitta media publicerade från en viss tid och plats som vi gjorde för att lokalisera potentiella brottscrime vittnen med sociala medier API. Och till sist kan du hämta populära Instagram-inlägg.
För att hjälpa dig att komma igång och felsöka har Instagram en API-konsol som drivs av Apigee:
Du kan prova frågor mot Media-ändpunkterna med hjälp av API-konsolen. Här är ett exempel för media / populär:
Självklart kan du se hur användbart det här är för att arbeta med media från den populära mobilfotografitjänsten.
Låt oss fortsätta installera vårt provkodsbas och konfigurera det för att fungera med ditt Instagram-klientprogram.
För den här serien kommer jag fortsätta att bygga på Ögonvittens kodbas från att hitta potentiella brottsscenen vittnen med sociala medier API. Du kan klona GitHub-förvaret som finns i sidofältet för att köra vår provkod.
cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git
Du måste konfigurera din lokala Apache-konfiguration. Jag använder MAMP, så det ser något ut så här ut:
cd / applikationer / MAMP / htdocs ln -s ~ / webbplatser / eyew / web / applikationer / MAMP / htdocs / eyew
Du måste skapa en databas lokalt. Jag använder PHPMyAdmin för att skapa en grafiskt:
Då skapar jag en initialiseringsfil i /var/secure/eyew.ini
med mina databasuppgifter och Instagram ID och nycklar. Jag beskrev denna process nyligen i en annan Tuts + handledning: Skydda dina nycklar från GitHub.
Min ini-fil ser ut så här:
mysql_host = "localhost" mysql_db = "eyew" mysql_un = "xxxxxxxxx" mysql_pwd = "xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Uppdatera kompositören och dess leverantörsbibliotek:
sudo kompositör självuppdatering sudo kompositör uppdatering
Starta sedan vår databas. Den första migreringen installerar användartabeller för vår Yii2-användare av utvecklaren Dmeroff-tillägg och den andra skapar våra appspecifika tabeller:
./ yii migrera / upp - migrationPath = @ leverantör / dektrium / yii2-användare / migreringar ./yii migrera / upp
Återigen kan du lära dig mer om att skapa en Yii Framework-applikation i min programmering med Yii2-serien för Tuts+.
Här är MySQL-schemat för vårt Instagram-bildbord - vi kallar det Gram-bordet. Vi använder den för att lagra geosearchresultat.
klass m150308_184606_create_gram_table utökar migration public function up () $ tableOptions = null; om ($ this-> db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('grams', ['id' => Schema :: TYPE_PK, 'moment_id' => Schema :: TYPE_INTEGER. 'NOT NULL', 'användarnamn' => Schema :: TYPE_STRING. 'NOT NULL DEFAULT 0', 'länk' => Schema :: TYPE_STRING. 'INTE NULL DEFAULT 0', 'image_url' => Schema :: TYPE_STRING. 'INTE NULLSTÄLLNING 0', 'text' => Schema: : TYPE_TEXT. 'NOT NULL', 'created_time' => Schema :: TYPE_INTEGER. 'NOT NULL', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. NULL ',], $ tableOptions); $ this-> addForeignKey ('fk_gram_moment', '% gram', 'moment_id', 'moment', 'id', 'CASCADE', 'CASCADE');
Jag har bytt namn på provprogrammet "Instapi", kort för Instagram API.
Här är en titt på vad du bör se när du besöker webbplatsen i din webbläsare:
För att genomföra mediasökningar i vårt Instapi-program använder jag Galen Grovers Instagram PHP-paket.
Först låt oss genomföra en sökning efter media / populärt
. Vi frågar API: n och visar resultaten i en tabell.
Jag har skapat en åtgärd som heter populär i GramController.php:
public function actionPopular () $ gram = nytt gram (); $ media = $ gram-> searchPopular (); returnera $ this-> render ('popular', ['media' => $ media,]);
Det ringer searchPopular ()
i Gram.php-modellen:
setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getPopularMedia (); returnera $ media;
I /views/gram/popular.php
, Vi skapar en HTML-tabellstruktur:
title = 'Instagrams'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?>
render ('_ item', ['m' => $ m,]); ?> Bild-ID Användare Miniatyr Rubrik Skapad vid
och inkludera _item.php
delvis vy för att visa enskilda media resultat:
id?> ">= $m->id?> användar-> användarnamn?> ">= $m->användarnamn-> användarnamn?> länk?> "> textning-> text)? $ m-> bildtext-> text: ");?> = $m->created_time?>
Här är resultatet av Instagram Media populära sökningar. Fortsätt och uppdatera sidan i din app. Det är roligt att se vad som kommer upp nästa.
Jag har länkat Instagram medie-id i den första kolumnen till en kontrolleråtgärd som kallar mediaändpunkten som får oss mer information:
public function actionLookup ($ id) $ gram = nytt gram (); $ media = $ gram-> lookup ($ id); print_r ($ medier);
Här är uppslagsfunktionen i Instagram-modellen:
public function lookup ($ id) $ instagram = nytt Instagram \ Instagram; $ instagram-> setClientID (\ Yii :: $ app-> parametrar ['instagram'] ['client_id']); $ media = $ instagram-> getMedia ($ id); returnera $ media;
Här är en skärmdump av data som dumpats till skärmen:
Självklart kan du använda och lagra den här informationen men du vill.
Låt oss nu leta efter bilder från en viss tid och plats. I det här exemplet ska jag granska vårt ögonvittnexempel.
Vår kodbas låter dig definiera ett ögonblick som en plats och tid. Den består av en vänlig deskriptor, en plats (latitud och longitud), en starttid och en varaktighet (i minuter). För mitt första exempel söker jag Instagram-användare som var närvarande vid Macklemores videospelning på onsdagen den 24 juli 2013 i Seattles landmärke Dick's Drive In.
Med Google Maps kan jag få GPS-latitud och longitud för Dick's. Det är 47.6195 -122.321.
Från artikeln lärde jag mig att produktionen stängdes klockan 1 på morgonen. Jag ska välja en starttid på 10 och en varaktighet på 3 timmar.
Instagram accepterar starttider i GMT så jag har hardkodat en åtta timmars tidsändringsjustering från min tidszon (PST). Du kan behöva ändra detta i koden.
public function actionCreate () $ model = new Moment (); om ($ model-> load (Yii :: $ app-> request-> post ())) // konvertera datum tid till tidsstämpel $ model-> start_at = strtotime ($ model-> start_at); // justera för GMT $ modell-> start_at + = (3600 * 8); // validera formuläret mot modellregler om ($ model-> validate ()) // alla inmatningar är giltiga $ model-> save (); returnera $ this-> omdirigering (['view', 'id' => $ model-> id]); annars returnera $ this-> render ('create', ['model' => $ modell,]); else return $ this-> render ('create', ['model' => $ modell,]);
För att söka Instagram, klicka bara på kamerans ikon nedan:
Den faktiska sökningen är ganska enkel: $ instagram-> searchMedia ($ this-> latitude, $ this-> longitud, $ 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, 'avstånd' => $ this-> avstånd, 'count' => 50); $ media = $ instagram-> searchMedia ($ this-> latitude, $ this-> longitud, $ params); foreach ($ media as $ m) if (isset ($ m-> caption-> text)) $ caption = $ m-> textning-> text; andra $ caption = "; $ i = nytt gram (); $ i-> lägg till ($ this-> id, $ m-> användarnamn-> användarnamn, $ m-> länk, $ m-> created_time, $ m-> images-> thumbnail-> url, $ caption);
Resultaten lagras i Gram-tabellen, som vi sedan kan bläddra:
public function add ($ moment_id, $ användarnamn, $ link, $ created_time, $ image_url, $ text) if (! Gram :: find () -> where (['moment_id' => $ moment_id]) -> ochWhere ['link' => $ link]) -> ochWhere (['created_time' => $ created_time]) -> existerar ()) $ i = nytt gram (); $ i-> moment_id = $ moment_id; $ i-> användarnamn = $ användarnamn; $ i-> länk = $ länk; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> text = $ text; $ I-> Spara ();
Här är den första sidan av resultaten från min sökning. Du kan se massorna och Macklemores Cadillac limo kör upp.
Sedan på sidan tre, har en Instagram-användare som heter Joshua Lewis ett skott av Macklemore som går ut ur Cadillac:
Här är Macklemore:
Detta exempel visar tydligt den kraft som Instagram-sök API ger. På bara några ögonblick hittade vi en mängd ögonvittnen till ett evenemang från sommaren 2013.
Jag hoppas att du har haft lärt dig om Instagram API hittills. I nästa avsnitt utforskar vi OAuth-autentisering så att vi kan fråga om områden i Instagram-tjänsten som kräver användarbehörighet.
Under tiden kan du skicka in dina frågor och kommentarer nedan. Du kan också nå mig på Twitter @ reifman eller maila mig direkt. Du kan även bläddra i min Tuts + instruktörssida för att se andra handledning som jag har skrivit.
Förhandsgranskningsbilden är modifierad från ett resultat som kom fram i vår API-sökning.