Dette er del to av en serie på Instagram API. I denne veiledningen vil jeg veilede deg gjennom å bruke Instagrams Media Endpoints, som lar deg søke etter populære bilder fra et bestemt tidspunkt og sted.
Du kan laste ned koden for hver episode ved å bruke GitHub-repository-lenken i sidefeltet. Du kan også være interessert i min todelte Tuts + -serie, lokalisere potensielle kriminalitetsscene vitner med sosiale medier-APIer.
Koden for disse opplæringene er skrevet i PHP ved hjelp av Yii Framework. Du kan lære mer om Yii i Introduksjon til Yii Framework (Tuts +) og i programmering med Yii2-serien (Tuts +). Du kan også enkelt tilpasse kodesegmentene for ditt eget PHP-program.
Jeg deltar i diskusjonene. Hvis du har et spørsmål eller et emneforslag, vennligst legg inn en kommentar nedenfor. Du kan også nå meg på Twitter @ reifman eller email meg direkte.
La oss begynne med å registrere deg som en utvikler med Instagram.
For å komme i gang, besøk Instagram API-siden for utviklere og klikk Registrer din søknad:
Du må registrere deg for en utviklerkonto:
Deretter kan du registrere et nytt program for å motta klient-ID:
På Administrer klienter dashbordet, vil du se din klient-ID og Klientshemmelighet, så vær oppmerksom på disse:
Som APIs for webtjeneste går, er Instagram API robust, og i min erfaring fungerer det veldig bra. Instagram tilbyr en håndfull API-endepoeng:
For denne opplæringen vil vi fokusere på Medieendemål:
Med Media Endpoints kan du hente informasjon om et Instagram-bilde eller en video ved å referere til sin ID eller kortnummer fra nettadressen, f.eks. 0EyZ53Ja9X fra https://instagram.com/p/0EyZ53Ja9X. Det gir også geosearch-muligheter for å finne media som er lagt ut fra en bestemt tid og sted som vi gjorde i å finne potensielle kriminalitetsvitenskapere med sosiale medier-APIer. Og til slutt lar den deg hente populære, trending Instagram-innlegg.
For å hjelpe deg med å komme i gang og feilsøke, har Instagram en API-konsoll drevet av Apigee:
Du kan prøve ut spørsmål mot Media-endpoengene ved hjelp av API-konsollen. Her er et eksempel resultat for media / populære:
Åpenbart kan du se hvor nyttig dette er for å jobbe med media fra den populære mobilfotografitjenesten.
La oss fortsette å installere vår prøvekodebase og konfigurere den til å fungere med Instagram-klientprogrammet.
For denne serien skal jeg fortsette å bygge på øyevitenskaps kodebase fra å finne potensielle kriminalitetsvitenskapere med sosiale medier-APIer. Du kan klone GitHub-depotet i sidelinjen for å kjøre vår prøvekode.
cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git
Du må konfigurere din lokale Apache-konfigurasjon. Jeg bruker MAMP, så det ser ut som dette:
cd / programmer / MAMP / htdocs ln -s ~ / Nettsteder / eyew / web / Programmer / MAMP / htdocs / eyew
Du må opprette en database lokalt. Jeg bruker PHPMyAdmin til å lage en grafisk:
Deretter lager jeg en initialiseringsfil i /var/secure/eyew.ini
med databasens legitimasjon og Instagram ID og nøkler. Jeg beskrev denne prosessen nylig i en annen Tuts + opplæring: Beskytte tastene dine fra GitHub.
Min ini-fil ser slik ut:
mysql_host = "localhost" mysql_db = "eyew" mysql_un = "xxxxxxxxx" mysql_pwd = "xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Oppdater komposisjonen din og leverandørbiblioteker:
sudo komponist selvoppdatering sudo komponist oppdatering
Deretter initialiserer vår database. Den første overføringen installerer brukertabeller for vår Yii2-bruker av utvikler Dmeroff-utvidelse, og den andre oppretter våre appspesifikke tabeller:
./ yii migrere / opp -migrationPath = @ leverandør / dektrium / yii2-bruker / migreringer ./yii migrere / opp
Igjen kan du lære mer om å sette opp et Yii Framework-program i min programmering med Yii2-serien for Tuts+.
Her er MySQL-skjemaet for vårt Instagram-bildebord - vi kaller det Gram-tabellen. Vi bruker den til å lagre geosearch-resultater.
klasse m150308_184606_create_gram_table utvider Migrasjon offentlig funksjon opp () $ tableOptions = null; hvis ($ this-> db-> drivernavn === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% gram', ['id' => Skjema :: TYPE_PK, 'moment_id' => Skjema :: TYPE_INTEGER. 'NOT NULL', 'brukernavn' => Skjema :: TYPE_STRING. 'IKKE NULL DEFAULT 0', 'link' => Skjema :: TYPE_STRING. 'IKKE NULL DEFAULT 0', 'image_url' => Skjema :: TYPE_STRING. 'IKKE NULL DEFAULT 0', 'text' => Skjema: : TYPE_TEXT. 'NOT NULL', 'created_time' => Skjema :: TYPE_INTEGER. 'IKKE NULL', 'created_at' => Skjema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Skjema :: TYPE_INTEGER. 'IKKE NULL ',], $ tableOptions); $ this-> addForeignKey ('fk_gram_moment', '% gram', 'moment_id', '% moment', 'id', 'CASCADE', 'CASCADE');
Jeg har omdøpt prøveapplikasjonen "Instapi", kort for Instagram API.
Her ser du hva du bør se når du besøker nettstedet i nettleseren din:
For å implementere mediesøk i vårt Instapi-program bruker jeg Galen Grovers Instagram PHP-pakke.
Først, la oss implementere et søk etter media / populær
. Vi spør etter API-en og viser resultatene i en tabell.
Jeg har laget en handling kalt populær i GramController.php:
offentlig funksjon actionPopular () $ gram = new Gram (); $ media = $ gram-> searchPopular (); returnere $ this-> render ('popular', ['media' => $ media,]);
Det ringer searchPopular ()
i Gram.php-modellen:
setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getPopularMedia (); returner $ media;
I /views/gram/popular.php
, Vi oppretter en HTML-tabellstruktur:
title = 'Instagrams'; $ this-> params ['breadcrumbs'] [] = $ this-> tittelen; ?>
render ('_ item', ['m' => $ m,]); ?> Bilde-ID Bruker thumbnail bildetekst Opprettet på
og inkludere _item.php
delvis visning for å vise individuelle medieresultater:
id?> ">= $m->id?> bruker-> brukernavn?> ">= $m->bruker-> brukernavn?> link?> "> bildetekst-> tekst)? $ m-> bildetekst-> tekst: ");?> = $m->created_time?>
Her er resultatene av Instagram media populære søk. Gå videre og oppdater siden i appen din. Det er gøy å se hva som kommer opp neste.
Jeg har koblet Instagram medie ID i den første kolonnen til en kontroller handling som kaller media endepunktet som gir oss mer informasjon:
offentlig funksjon actionLookup ($ id) $ gram = new Gram (); $ media = $ gram-> oppslag ($ id); print_r ($ media);
Her er oppslagsfunksjonen i Instagram-modellen:
offentlig funksjon oppslag ($ id) $ instagram = nytt Instagram \ Instagram; $ instagram-> setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getMedia ($ id); returner $ media;
Her er et skjermbilde av dataene dumpet til skjermen:
Åpenbart kan du bruke og lagre denne informasjonen, men du vil.
La oss nå søke etter bilder fra et bestemt tidspunkt og sted. For dette eksempelet vurderer jeg vårt øyenvitne eksempel.
Vår kodebase lar deg definere et øyeblikk som sted og tid. Den består av en vennlig deskriptor, et sted (breddegrad og lengdegrad), en starttid og en varighet (i minutter). For mitt første eksempel, ser jeg etter Instagram-brukere som var til stede ved Macklemores videospill på kvelden onsdag 24. juli 2013 i Seattles landemerke Dick's Drive In.
Ved hjelp av Google Maps kan jeg få GPS-breddegraden og lengdegraden for Dick. Det er 47.6195 -122.321.
Fra artikkelen lærte jeg at produksjonen stoppet klokken 1. Jeg skal velge en starttid på 10 pm og en varighet på 3 timer.
Instagram aksepterer starttider i GMT, så jeg har hardkodet en åtte timers tidsendringsjustering fra min tidszone (PST). Du må kanskje endre dette i koden.
offentlig funksjon actionCreate () $ model = new Moment (); if ($ model-> load (Yii :: $ app-> request-> post ())) // konverter dato dato til tidsstempel $ model-> start_at = strtotime ($ model-> start_at); // juster for GMT $ modell-> start_at + = (3600 * 8); // validere skjemaet mot modellregler hvis ($ model-> validate ()) // alle innganger er gyldige $ model-> save (); returnere $ this-> omdirigering (['view', 'id' => $ model-> id]); ellers return $ this-> render ('create', ['model' => $ modell,]); ellers return $ this-> render ('create', ['model' => $ modell,]);
For å søke Instagram, klikk bare på kameraikonet nedenfor:
Selve søket er ganske enkelt: $ instagram-> searchMedia ($ this-> latitude, $ this-> lengdegrad, $ params);
setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ end_at = $ this-> start_at + ($ this-> varighet * 60); $ params = array ('min_timestamp' => $ this-> start_at, 'max_timestamp' => $ end_at, 'avstand' => $ this-> avstand, 'count' => 50); $ media = $ instagram-> searchMedia ($ this-> latitude, $ this-> lengdegrad, $ params); foreach ($ media as $ m) hvis (isset ($ m-> bildetekst-> tekst)) $ caption = $ m-> bildetekst-> tekst; andre $ caption = "; $ i = nytt Gram (); $ i-> legg til ($ dette-> ID, $ m-> bruker-> brukernavn, $ m-> lenke, $ m-> created_time, $ m-> bilder-> miniatyr-> url, $ bildetekst);
Resultatene lagres i Gram-tabellen, som vi kan bla gjennom:
offentlig funksjon legg til ($ moment_id, $ brukernavn, $ link, $ created_time, $ image_url, $ tekst) if (! Gram :: find () -> where (['moment_id' => $ moment_id]) -> ogWhere ['link' => $ link]) -> ogWhere (['created_time' => $ created_time]) -> eksisterer ()) $ i = nytt Gram (); $ i-> moment_id = $ moment_id; $ i-> brukernavn = $ brukernavn; $ i-> link = $ link; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> tekst = $ tekst; $ I-> Lagre ();
Her er den første siden med resultater fra søket mitt. Du kan se folkemengdene og Macklemores Cadillac limo kjører opp.
Så på side tre, har en Instagram-bruker, kalt Joshua Lewis, et skudd av Macklemore som forlater Cadillac:
Her er Macklemore:
Dette eksemplet viser tydelig kraften som Instagram-søke API gir. På bare noen få minutter fant vi en rekke øyenvitner til et arrangement fra sommeren 2013.
Jeg håper du har likt å lære om Instagram API så langt. I neste episode vil vi utforske OAuth-autentisering, slik at vi kan søke etter områder av Instagram-tjenesten som krever brukerautorisasjon.
I mellomtiden er du velkommen til å legge inn dine spørsmål og kommentarer nedenfor. Du kan også nå meg på Twitter @ reifman eller email meg direkte. Du kan også bla gjennom min Tuts + instruktørside for å se andre opplæringsprogrammer jeg har skrevet.
Forhåndsvisningsbildet er endret fra et resultat som kom opp i API-søkingen.