Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Erstellen Sie Ihr Startup: Importieren mit der Google Kontakte-API

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Completing Group Scheduling
Building Your Startup: Error Logging

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Final product image
What You'll Be Creating

Dieses Tutorial ist Teil der Building Your Startup with PHP-Serie auf Envato Tuts +. In dieser Serie führe ich Sie durch die Einführung eines Start-ups von der Idee zur Realität mit meiner Meeting-Planer-App als ein echtes Beispiel. Bei jedem Schritt werde ich den Meeting-Planer-Code als Open-Source-Beispiele veröffentlichen, von denen Sie lernen können. Ich werde auch auf geschäftliche Probleme im Zusammenhang mit dem Start eingehen, sobald sie auftreten.

Einführung

Guten Morgen. Heute werde ich Ihnen zeigen, wie ich mithilfe der Google API Kontakte von Personen in Meeting Planner importiert habe. Das Ziel ist es, es für Personen schneller zu machen, ihre Freunde zu Meetings einzuladen.

Wenn Sie nicht versucht haben, ein Meeting mit Meeting Planner zu planen, versuchen Sie es bitte. Wenn Sie sich mit Ihrem Google-Konto anmelden, können Sie die oben genannte Friends-Seite und Import Your Google Contacts besuchen. Teilen Sie Ihre Gedanken und Feedback in den Kommentaren unten.

Ich nehme an den Diskussionen teil, aber Sie können mich auch @reifman auf Twitter erreichen (vor kurzem wurde mein Konto verifiziert, also muss ich so cool sein wie Justin Beebert (Notiz an die Redaktionsgötter - ich bin überzeugt von dieser Rechtschreibung). Ich denke, es ist richtig. Lass es.) Ich bin immer offen für neue Feature-Ideen für Meeting Planner sowie Vorschläge für zukünftige Serienepisoden.

Zur Erinnerung: Der gesamte Code für Meeting Planner wird als Open Source bereitgestellt und im Yii2 Framework für PHP geschrieben. Wenn Sie mehr über Yii2 erfahren möchten, schauen Sie sich meine Parallel-Serie Programmierung mit Yii2 an.

Über die Google Kontakte-Integration nachdenken

Die Freunde Seite

Viele Menschen haben Tausende von Kontakten in ihrem Google-Konto - und nur wenige sind ihnen wichtig. Aber für die meisten gibt es keine Möglichkeit zu erkennen, welche sind und welche nicht.

Ich glaube, dass die Größe der Benutzertabelle im Besprechungsplaner die Gesamtleistung des Dienstes beeinflusst. Ich wollte Kontakte, die möglicherweise nie relevant sind, nicht in die Benutzertabelle importieren.

Dies führte zu einigen Komplikationen, sowohl in UX als auch in Code, wo die Benutzer im Service nach ihren Freunden suchen und darauf zugreifen.

Ich habe mich letztendlich entschieden, eine separate Tabelle für Kontakte zu erstellen und diese in der Benutzeroberfläche zunächst getrennt anzuzeigen.

Building Startups Google Contacts API - List of Imported Contacts on Friends Page

Teilnehmer für Besprechungen auswählen

All dies führt dazu, dass es einfacher wird, Freunde aus ihren Kontakten hinzuzufügen, indem Sie einfach die ersten Zeichen eingeben. Ich verwende ein Typeahead-Widget im Popup-Fenster Add Participants, das unten angezeigt wird:

Building Startups Google Contacts API - Add a Participant Form

Nachdem ich meine Google-Kontakte importiert habe, sind sie in meine Freunde integriert (Personen, die ich bereits zu Besprechungen eingeladen oder von denen ich eingeladen wurde).

In diesem Fall habe ich angefangen, sar einzugeben und eine ganze Reihe von Sar-Präfix-Namen erscheint:

Building Startups Google Contacts API - Dropdown from Friend and Address Table

Die Suche nach Personen, die Sie über Ihre Google-Kontakte zu einem Meeting einladen können, wird schnell und einfach (bis Sie viele hinzufügen, auf die ich weiter unten noch eingehen werde).

Datenschutzprobleme

Ich möchte auch nicht das Vertrauen der Menschen missbrauchen, indem ich ihre tausenden von Kontakten missbrauche. Derzeit bieten wir nicht einmal die Möglichkeit, alle Google-Kontakte zu Meeting Planner einzuladen, auch wenn wir dies in Zukunft anbieten. Wir werden sicherlich keine E-Mails ohne Erlaubnis versenden.

Schreiben des Codes

Falls noch nicht geschehen, werfen Sie einen Blick auf Build Your Startup with PHP: Simplifying Onramp With OAuth. In dieser Folge habe ich die Google-APIs für die OAuth-Anmeldung und die Anmeldung authentifiziert.

Google ist bei der Sicherheit mit seinen APIs vorsichtig. Angesichts dessen, was kürzlich mit den Yahoo-Hacks passiert ist, weiß ich das tiefer zu schätzen. Dies macht jedoch ihre APIs schwieriger zu authentifizieren und mit anderen zu arbeiten als andere.

Tatsächlich stellte ich fest, dass die Google-Kontakte-API einige der verwirrendsten, frustrierendsten und schwierigsten Probleme aufwies, die ich zu schreiben hatte. Und die PHP-Programmierer von Google API haben keine Lust - wir sind die letzten, die Beispielcode erhalten.

Lass uns eintauchen.

Erstellen der Adresstabelle

Da es bereits eine UserContact-Tabelle für die Telefon- und Skype-Adressen des Benutzers gibt, habe ich mich entschieden, die Tabelle Address aufzurufen. Hier ist die Migration, um es zu erstellen:

Natürlich habe ich Yii's Gii benutzt, um mir bei der Steuerung, dem Modell und den Ansichten zu helfen. Dies wurde bereits in der Startup-Serie behandelt.

Erweiterung der Google API-Authentifizierung

Sie erinnern sich vielleicht an die Google Credentials-Seite im oben genannten Tutorial:

Building Startups Google Contacts API - Google API Credentials Form

Sie finden es in der Google Developers Console.

Sie müssen URLs für alle Ihre Umgebungen hinzufügen - Entwicklung, Bereitstellung, Produktion usw. - und für jeden Controller und jede Methode. Dies erschwert die Arbeit mit der Kontakte-API, sichert aber wahrscheinlich auch die Daten von Personen besser.

Building Startups Google Contacts API - Google API Credentials Form lower part

Importieren von Google-Kontakten

Hier ist das Google Contacts API v3.0. Ich habe nicht bemerkt, als ich mit dem Schreiben des Codes begann, dass sie jetzt die People API für den schreibgeschützten Zugriff empfehlen. Leider verwendet mein Code die Lese- / Schreib-API. Okay, ich bin kein Genie. Unternehmer sind selten - selbst Bill Gates sagt, er habe nur Glück gehabt.

Im Allgemeinen war das Google Kontakte-API eines der eher verwirrenden und schwierigsten APIs, die ich je verwendet habe.

Wenn ich mehr Erfahrung in der Entwicklung von Google APIs hätte oder mehr Zeit damit verbringen würde, hätte ich vielleicht einen einfacheren Ansatz gefunden. Aber von dem, was ich sagen konnte, war es wichtig, dass Sie alles mit der API von einer URL aus tun. In meinem Fall https://meetingplanner.io/address/import.

Und Google gibt Schlüssel zurück und leitet Sie wiederholt zu dieser URL zurück. Sie müssen also auf den Status der API achten und diese umgehen.

Ich gehe davon aus, dass dies alles getan wird, um die Sicherheit zu erhöhen, aber es erfordert eine integrierte Verwaltung des Zustands, die ansonsten einfache API-Anfragen wären. Die staatliche Verwaltung kann Zeit sparen, aber nur, wenn die Dokumentation und der Beispielcode gut sind. In diesem Fall sind sie das nicht.

Anfangen

Schauen wir uns AddressController.php actionImport() an:

Oben beobachte ich, ob Google seine API-Tokens zurücksetzen möchte. In diesem Fall entferne ich die Cookies, in denen ich sie gespeichert habe, und wende mich erneut an die Methode an, um von vorne zu beginnen.

Die Anfrage nach einem Token machen

Im Folgenden stelle ich meine erste Anfrage über die PHP-Client-Bibliothek an Google:

Die Google PHP-Bibliothek befindet sich in der Betaversion. Tatsächlich ist PHP im Allgemeinen ein nachträglicher Einfall zu Google. Daher ist es nicht immer einfach, mit ihren APIs in PHP zu arbeiten.

Beachten Sie, dass Googles $redirect_uri die gleiche Methode ist: 'address/import'.

Als nächstes versuchen wir, das Token aus dem Abfrageparameter in einem Cookie zu platzieren:

Wenn Sie den Code von Google erhalten, müssen Sie ihn im Cookie festlegen und erneut auf die Seite umleiten. Das ist mir seltsam.

Freudig fand ich auch, dass, wenn ich keine Schleife zurückbekam, als der Code fehlte - um wieder zu derselben Seite zurückzukehren, würde es nicht konsistent funktionieren.

Dann konstruieren wir und bitten Google, dem Benutzer einen Berechtigungsdialog zu zeigen, um dem Konferenzplaner Zugriff auf ihre Kontakte zu gewähren:

Building Startups Google Contacts API - Google Asks User for Permissions

Ich musste eine Menge Fehlermanagement hinzufügen, um herauszufinden, warum es nicht funktionierte und um all dies konsistent zu erhalten.

Sie haben es erraten, wenn es eine Fehlerbedingung gibt, würde ich oft auf dieselbe Controller-Methode umleiten.

Verarbeitung der zurückgegebenen Daten

Wenn alles funktioniert, wird der spaßige, einfache Code die Daten verarbeiten. Derzeit greifen wir 1.000 Einträge fünf Mal auf und erstellen wiederholt Paginierungsanfragen, die natürlich an diese URL gesendet werden:

Übersetzen von Google XML (das ist auch komplex, mit ungeraden Variablennamen für PHP-Entwickler, z. B. Schlüssel wie $contact['gd$email'][0]['address'] mit einem Dollarzeichen in der Mitte.

Im Folgenden führen wir jede Anfrage durch, indem wir die JSON-Daten durchgehen und Kontaktnamen aufnehmen, um sie der Adresstabelle hinzuzufügen:

Die Arbeit mit der Google Kontakte-API war sehr schwierig, nicht gut dokumentiert und hat viel Zeit für mich gekostet. Während ich mit vielen APIs erfolgreich gearbeitet habe, weiß ich, dass ich kein Experte darin bin. Aus Sicherheitsgründen möchte ich Google diesbezüglich nicht wirklich verprügeln - in vielen dieser Fälle wissen sie wahrscheinlich, warum sie bestimmte Dinge tun.

Aber es ist okay, ein bisschen Spaß zu machen, oder?

Erstens ist jeder bei Google ein Genie, und sie haben es erneut bewiesen, indem sie API.ai erworben haben, einen brillanten Service, der seinen Anmelde-Button mit seinem Login-Formular verbindet. Wirklich, sie taten:

Ich bin mir sicher, dass Googles Due-Diligence-Team ein Genie darin gesehen hat, das über Sterbliche wie mich hinausgeht. Sie müssen gesagt haben: "Wow, die API.ai-Programmierer sind Genies wie unsere AdSense- und DFP-Teams! Fügen wir sie dem Alphabet hinzu!"

Da ich in Zukunft vielleicht mit Angel- und VC-Investoren über Meeting Planner sprechen werde, möchte ich demütig sein. Aber ich wäre entsetzt, wenn meine Homepage dies tun würde und einer meiner potenziellen Investoren dies bemerkt hätte.

Das neue Alphabet (Googles neue Muttergesellschaft) ist so nachsichtig.

Das Formular "Teilnehmer hinzufügen" wird erweitert

Schauen wir uns schließlich den Code hinter dem erweiterten Formular "Teilnehmer hinzufügen" an. Im Grunde nehme ich E-Mails aus der Friends-Tabelle und dann E-Mails aus der Address-Tabelle:

Der Optionswert ist jedoch nur die E-Mail, da es komplizierter geworden wäre, die Art des Freundes zu bestimmen (aus der Tabelle "Friend" oder "Address").

Ich bin nicht besonders stolz auf den obigen Code und die Vorgehensweise, aber als ich auf die Beta-Version zuging, habe ich Kompromisse gemacht, um es zu schaffen.

Mit 5.000 Google Kontakte in meiner Drop-down-Liste für Freunde ist die Leistung langsamer. Wahrscheinlich muss ich die Steuerung bald besser mit einer AJAX-Datenbank-Suche verknüpfen.

Und ich habe sehr früh viel Zeit damit verschwendet, den Friends-Tisch um Personen, die ich eingeladen habe, und Google Kontakte zu erweitern. Dies führte jedoch zu einem Durcheinander von schwierig zu verwaltenden verwandten Datenbankabfragen. Die Benutzer-Tabellen-Relationen aus der Friends-Tabelle begannen für Kontaktzeilen zu brechen, wo sie null waren, und dies erwies sich als sehr schwierig zu lösen. Das Entfernen von vorhandenen Fremdschlüsseln durch Migrationen ist ebenfalls tückisch.

Schlussgedanken

Diese Funktionen waren großartige Beispiele für die Herausforderungen, die sich aus der Verwendung von APIs mit schlechter Dokumentation in der von Ihnen gewählten Sprache ergeben, und machen Kompromisse in der Code-Architektur für den Zeitpunkt, an dem Features zu einem Release-Zeitplan gestartet werden.

Und es gibt sicher immer noch Probleme mit der Participant add Performance und der Friends-Seite UX, die behoben werden müssen.

Ehrlich gesagt, der Umfang des Meeting Planners hat den Punkt erreicht, wo dies als eine Person entmutigend ist. Und es wäre hilfreich, mehr Ressourcen zu haben (d. H. Teammitglieder).

Und wenn Sie es noch nicht getan haben, planen Sie jetzt Ihr erstes Meeting mit Meeting Planner! Lassen Sie mich wissen, was Sie in den Kommentaren denken. Sie können mich auch erreichen @reifman. Ich bin immer offen für neue Feature-Ideen und Themenvorschläge für zukünftige Tutorials.

Ein Tutorial zum Thema Crowdfunding ist ebenfalls in Arbeit. Bitte folgen Sie unserer WeFunder Meeting Planner Seite.

Bleiben Sie dran für all diese und weitere anstehende Tutorials, indem Sie die Building Your Startup With PHP-Serie ausprobieren.

verwandte Links

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.