Dies ist Teil zwei einer Serie über die Instagram-API. In diesem Tutorial werde ich Sie durch die Medienendpunkte von Instagram führen, mit denen Sie nach beliebten Bildern zu einem bestimmten Zeitpunkt und an einem bestimmten Ort suchen können.
Sie können den Code für jede Episode herunterladen, indem Sie den GitHub-Repository-Link in der Seitenleiste verwenden. Möglicherweise interessieren Sie sich auch für meine zweiteilige Tuts + -Serie zum Auffinden potenzieller Tatorte von Zeugen mit Social Media-APIs.
Der Code für diese Tutorials ist in PHP unter Verwendung des Yii Framework geschrieben. Weitere Informationen zu Yii finden Sie in Einführung in das Yii-Framework (Tuts +) und in der Programmierung mit Yii2-Serie (Tuts +). Sie können die Codesegmente auch leicht für Ihre eigene PHP-Anwendung anpassen.
Ich nehme an den Diskussionen teil. Wenn Sie eine Frage oder ein Thema haben, schreiben Sie bitte einen Kommentar. Sie können mich auch auf Twitter @reifman erreichen oder mich direkt per E-Mail kontaktieren.
Beginnen wir mit der Registrierung als Entwickler bei Instagram.
Um zu beginnen, besuchen Sie die Instagram-API-Seite für Entwickler und klicken Sie auf Registrieren Sie Ihre Bewerbung:
Sie müssen sich für ein Entwicklerkonto anmelden:
Dann können Sie eine neue Anwendung registrieren, um Ihre Kunden-ID zu erhalten:
Auf der Kunden verwalten Dashboard, sehen Sie Ihre Kunden ID und Kundengeheimnis, so notieren Sie sich diese:
Bei den Web-Service-APIs ist die Instagram-API robust und funktioniert meiner Erfahrung nach sehr gut. Instagram bietet eine Handvoll API-Endpunkte:
In diesem Tutorial konzentrieren wir uns auf die Medienendpunkte:
Mit Media-Endpunkten können Sie Informationen zu einem Instagram-Foto oder -Video abrufen, indem Sie seine ID oder den Kurzcode von seiner URL aus angeben, z. 0EyZ53Ja9X von https://instagram.com/p/0EyZ53Ja9X. Es bietet auch Geosearch-Funktionen zum Suchen von Medien, die zu einem bestimmten Zeitpunkt und an einem bestimmten Ort gepostet wurden, wie bei der Suche nach potenziellen Tatortzeugen mit Social Media-APIs. Und schließlich können Sie beliebte, trendige Instagram-Posts abrufen.
Um Ihnen den Einstieg und das Debugging zu erleichtern, verfügt Instagram über eine API-Konsole, die von Apigee unterstützt wird:
Sie können mit der API-Konsole Abfragen gegen die Media-Endpunkte testen. Hier ist ein Beispiel für media / popular:
Offensichtlich können Sie sehen, wie nützlich dies für die Arbeit mit Medien des beliebten mobilen Fotografiedienstes ist.
Fahren Sie mit der Installation unserer Beispiel-Codebase fort und konfigurieren Sie sie so, dass sie mit Ihrer Instagram-Clientanwendung zusammenarbeitet.
Für diese Serie werde ich weiterhin auf der Augenzeugen-Codebasis von "Finding potenzieller Tatortzeugen mit Social Media-APIs" aufbauen. Sie können das GitHub-Repository in der Seitenleiste klonen, um unseren Beispielcode auszuführen.
cd ~ / Sites / eyew https://github.com/link-in-sidebar/eyew.git
Sie müssen Ihre lokale Apache-Konfiguration konfigurieren. Ich benutze MAMP, also sieht es ungefähr so aus:
cd / Anwendungen / MAMP / htdocs ln -s ~ / Sites / eyew / web / Anwendungen / MAMP / htdocs / eyew
Sie müssen lokal eine Datenbank erstellen. Ich verwende PHPMyAdmin, um eine grafisch zu erstellen:
Dann erstelle ich eine Initialisierungsdatei in /var/secure/eyew.ini
mit meinen Datenbank-Anmeldeinformationen und Instagram-IDs und -Schlüsseln. Ich habe diesen Vorgang kürzlich in einem anderen Tuts + -Tutorial beschrieben: Schutz Ihrer Schlüssel vor GitHub.
Meine Ini-Datei sieht folgendermaßen aus:
mysql_host = "localhost" mysql_db = "EyeW" mysql_un = "xxxxxxxxx" MYSQL_PWD = "xxxxxxxxxxxx" instagram_client_id = "4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7" instagram_client_secret = "1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx4"
Aktualisieren Sie Ihren Composer und seine Herstellerbibliotheken:
Sudo Composer Update Sudo Composer selbst aktualisieren
Dann initialisieren Sie unsere Datenbank. Bei der ersten Migration werden Benutzertabellen für unseren Yii2-User nach Entwicklererweiterung Dmeroff installiert, und bei der zweiten werden unsere App-spezifischen Tabellen erstellt:
./ yii migrieren / up --migrationPath = @ vendor / dektrium / yii2-user / migrationen ./yii migrieren / up
Weitere Informationen zum Einrichten einer Yii Framework-Anwendung finden Sie in meiner Programmierserie Yii2 für Tuts+.
Hier ist das MySQL-Schema für unsere Instagram-Image-Tabelle - wir nennen es die Gram-Tabelle. Wir werden es verwenden, um Geosearch-Ergebnisse zu speichern.
Klasse m150308_184606_create_gram_table erweitert die Migration public function up () $ tableOptions = null; if ($ this-> db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% gramm', ['id' => Schema :: TYPE_PK, 'moment_id' => Schema :: TYPE_INTEGER. 'NOT NULL', 'username' => Schema :: TYPE_STRING. 'NOT NULL DEFAULT 0', 'link' => Schema :: TYPE_STRING. 'NOT NULL DEFAULT 0', 'image_url' => Schema :: TYPE_STRING. 'NOT NULL DEFAULT 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. 'NOT NULL ',], $ tableOptions); $ this-> addForeignKey ('fk_gram_moment', '% gramm', 'moment_id', '% moment', 'id', 'CASCADE', 'CASCADE');
Ich habe die Beispielanwendung "Instapi", kurz Instagram API, umbenannt.
Hier sehen Sie, was Sie beim Besuch der Site in Ihrem Browser sehen sollten:
Um die Mediensuche in unserer Instapi-Anwendung zu implementieren, verwende ich das Instagram PHP-Paket von Galen Grover.
Lassen Sie uns zuerst eine Suche nach implementieren Medien / beliebt
. Wir fragen die API ab und zeigen die Ergebnisse in einer Tabelle an.
Ich habe eine Aktion mit dem Namen popular in GramController.php erstellt:
öffentliche Funktion actionPopular () $ gram = new Gram (); $ media = $ gram-> searchPopular (); return $ this-> render ('popular', ['media' => $ media,]);
Es ruft searchPopular ()
im Gram.php-Modell:
setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getPopularMedia (); $ media zurückgeben;
Im /views/gram/popular.php
, Wir haben eine HTML-Tabellenstruktur eingerichtet:
title = 'Instagramme'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?>
render ('_ item', ['m' => $ m,]); ?> Bild-ID Nutzer Miniaturansicht Bildbeschriftung Hergestellt in
und enthalten die _item.php
Teilansicht zur Anzeige einzelner Medienergebnisse:
id?> ">= $m->id?> Benutzer-> Benutzername?> ">= $m->Benutzer-> Benutzername?> link?> "> caption-> text)? $ m-> caption-> text: ");?> = $m->created_time?>
Hier sind die Ergebnisse der beliebten Instagram-Medienabfragen. Fahren Sie fort und aktualisieren Sie die Seite in Ihrer App. Es macht Spaß zu sehen, was als nächstes kommt.
Ich habe die Instagram-Medien-ID in der ersten Spalte mit einer Controller-Aktion verknüpft, die den Medienendpunkt aufruft, um mehr Informationen zu erhalten:
öffentliche Funktion actionLookup ($ id) $ gram = new Gram (); $ media = $ gram-> Lookup ($ id); print_r ($ media);
Hier ist die Suchfunktion im Instagram-Modell:
Suche nach öffentlicher Funktion ($ id) $ instagram = neuer Instagram \ Instagram; $ instagram-> setClientID (\ Yii :: $ app-> params ['instagram'] ['client_id']); $ media = $ instagram-> getMedia ($ id); $ media zurückgeben;
Hier ist ein Screenshot der auf dem Bildschirm abgelegten Daten:
Natürlich können Sie diese Informationen beliebig nutzen und speichern.
Lassen Sie uns nun nach Bildern von einer bestimmten Zeit und einem bestimmten Ort suchen. In diesem Beispiel werde ich unser Augenzeugenbeispiel überprüfen.
In unserer Codebase können Sie einen Moment als Ort und Zeit definieren. Es besteht aus einer freundlichen Beschreibung, einem Ort (Breitengrad und Längengrad), einer Startzeit und einer Dauer (in Minuten). Für mein erstes Beispiel suche ich nach Instagram-Benutzern, die am Mittwochabend, dem 24. Juli 2013, bei Macklemores Video-Shooting in Dick's Drive In, einem Wahrzeichen von Seattle, anwesend waren.
Mit Google Maps kann ich den GPS-Längen- und Breitengrad von Dick ermitteln. Es ist 47.6195 -122.321.
Aus dem Artikel erfuhr ich, dass die Produktion um 1 Uhr morgens eingestellt wurde. Ich werde eine Startzeit von 22 Uhr und eine Dauer von 3 Stunden wählen.
Instagram akzeptiert Startzeiten in GMT, daher habe ich eine achtstündige Zeitanpassung aus meiner Zeitzone (PST) fest codiert. Möglicherweise müssen Sie dies im Code ändern.
öffentliche Funktion actionCreate () $ model = new Moment (); if ($ model-> load (Yii :: $ app-> request-> post ())) // konvertiere Datum Uhrzeit in Zeitstempel $ model-> start_at = strtotime ($ model-> start_at); // für GMT $ model-> start_at + = (3600 * 8) anpassen; // das Formular anhand von Modellregeln validieren, wenn ($ model-> validate ()) // alle Eingaben gültig sind $ model-> save (); $ this-> redirect zurückgeben (['view', 'id' => $ model-> id]); else return $ this-> render ('create', ['model' => $ model,]); else return $ this-> render ('create', ['model' => $ model,]);
Um Instagram zu suchen, klicken Sie einfach auf das Kamerasymbol unten:
Die eigentliche Suche ist recht einfach: $ instagram-> searchMedia ($ this-> width, $ 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, 'count' => 50); $ media = $ instagram-> searchMedia ($ this-> width, $ this-> longitude, $ params); foreach ($ media als $ m) if (isset ($ m-> caption-> text)) $ caption = $ m-> caption-> text; else $ caption = "; $ i = new Gram (); $ i-> add ($ this-> id, $ m-> Benutzer-> Benutzername, $ m-> Link, $ m-> Created_time, $ m-> images-> thumbnail-> url, $ caption);
Die Ergebnisse werden in der Gram-Tabelle gespeichert, die wir dann durchsuchen können:
public function add ($ moment_id, $ benutzername, $ link, $ created_time, $ image_url, $ text) if (! Gram :: find () -> where (['moment_id' => $ moment_id]) -> andWhere ( ['link' => $ link]) -> andWhere (['created_time' => $ created_time]) -> exists ()) $ i = new Gram (); $ i-> moment_id = $ moment_id; $ i -> Benutzername = $ Benutzername; $ i-> link = $ link; $ i-> created_time = $ created_time; $ i-> image_url = $ image_url; $ i-> text = $ text; $ i-> save ();
Hier ist die erste Ergebnisseite meiner Suche. Sie können die Massen und die Cadillac-Limousine von Macklemore sehen.
Auf Seite drei zeigt ein Instagram-Benutzer namens Joshua Lewis, wie Macklemore den Cadillac verlässt:
Hier ist Macklemore:
Dieses Beispiel zeigt deutlich die Leistungsfähigkeit der Instagram-Such-API. In wenigen Augenblicken fanden wir verschiedene Augenzeugen zu einer Veranstaltung aus dem Sommer 2013.
Ich hoffe, dass Sie bis jetzt Spaß an der Instagram-API hatten. In der nächsten Episode untersuchen wir die OAuth-Authentifizierung, um Bereiche des Instagram-Services abzufragen, für die eine Benutzerautorisierung erforderlich ist.
In der Zwischenzeit können Sie gerne Ihre Fragen und Kommentare posten. Sie können mich auch auf Twitter @reifman erreichen oder mich direkt per E-Mail kontaktieren. Sie können auch meine Tuts + Instructor-Seite durchsuchen, um andere Tutorials zu sehen, die ich geschrieben habe.
Das Vorschaubild wird von einem Ergebnis geändert, das in unserer API-Suche angezeigt wurde.