Advertisement
  1. Code
  2. Yii

Создание вашего стартапа: импорт с помощью API контактов Google

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

Russian (Pусский) translation by Svetlana (you can also view the original English article)

Final product image
What You'll Be Creating

Это руководство является частью серии «Построение стартапа с помощью PHP» на Envato Tuts +. В этой серии я проведу вас через запуск стартапа от концепции до реальности, используя мое приложение Meeting Planner в качестве примера из реальной жизни. На каждом этапе я буду публиковать код Планировщика собраний в качестве примеров с открытым исходным кодом, из которых вы можете извлечь уроки. Я также буду решать вопросы, связанные с бизнесом при запуске, по мере их возникновения.

Введение

Доброе утро. Сегодня я расскажу вам, как я использовал API Google для импорта контактов людей в Meeting Planner. Цель состоит в том, чтобы люди быстрее приглашали своих друзей на встречи.

Если вы еще не пробовали запланировать встречу с Meeting Planner, попробуйте. Если вы используете свою учетную запись Google для регистрации, вы можете посетить страницу друзей выше и импортировать ваши контакты Google. Поделитесь своими мыслями и отзывами в комментариях ниже.

Я участвую в обсуждениях, но вы также можете связаться со мной @reifman в Твиттере (недавно мой аккаунт был подтвержден, поэтому я должен быть таким же крутым, как Джастин Биберт (примечание для редакционных богов - я уверен в этом правописании). Я думаю, что это правильно. Оставьте это.) Я всегда открыт для новых идей для планировщика собраний, а также предложений для будущих серий.

Напоминаем, что весь код для Meeting Planner предоставляется с открытым исходным кодом и написан на Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с моей параллельной серией Программирование с Yii2.

Думая об интеграции контактов Google

Страница друзей

Многие люди имеют тысячи контактов в своей учетной записи Google, и немногие из них важны для них. Но, для большинства, нет никакого способа определить, какие есть, а какие нет.

Я считаю, что размер таблицы User в Meeting Planner влияет на общую производительность сервиса. Я не хотел импортировать контакты, которые могут никогда не иметь отношения к таблице пользователей.

Это создало некоторые сложности как в UX, так и в коде, когда люди ищут и получают доступ к своим друзьям в сервисе.

В конце концов я решил создать отдельную таблицу для контактов и показать ее отдельно в пользовательском интерфейсе.

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

Выбор участников для встреч

Все это приводит к тому, что людям будет проще добавлять друзей из своих контактов, просто набрав первые несколько символов. Я использую виджет Typeahead во всплывающем окне «Добавить участников», показанном ниже:

Building Startups Google Contacts API - Add a Participant Form

После того, как я импортировал свои контакты Google, они интегрированы с моими друзьями (людьми, которых я уже пригласил на встречи или пригласил).

В этом случае я начал набирать sar, и появилась целая куча имен префиксов Sar:

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

Поиск кого-либо для приглашения на встречу из ваших контактов Google становится довольно быстрым и легким (пока вы не добавите их много, о чем я упомяну ниже).

Вопросы конфиденциальности 

Я также не хочу злоупотреблять доверием людей, злоупотребляя их тысячами контактов. В настоящее время мы даже не будем предлагать людям возможность пригласить всех своих контактов Google в Meeting Planner, хотя мы можем предложить это в будущем. Мы, конечно, не будем отправлять их по электронной почте без разрешения.

Написание кода 

Если вы еще этого не сделали, загляните в Создание своего стартапа с помощью PHP: упрощение Onramp с помощью OAuth. Это эпизод, в котором я впервые аутентифицировал API Google для входа и регистрации OAuth.

Google заботится о безопасности своих API. В свете того, что недавно произошло с хаки Yahoo, я ценю это более глубоко. Однако это делает их API более сложными для аутентификации и работы с ними, чем другие.

Фактически, я нашел поток API Контактов Google одним из самых запутанных, разочаровывающих и сложных, которые мне пришлось написать. И программисты Google API отдают предпочтение PHP-программистам - мы последние получаем пример кода.

Давайте вникать.

Создание таблицы адресов

Поскольку уже существует таблица UserContact для телефона пользователя и адресов Skype, я решил позвонить в таблицу Address. Вот миграция для его создания:

Конечно, я использовал Gii от Yii, чтобы помочь мне с контроллером, моделью и представлениями. Это было рассмотрено ранее в серии запуска.

Расширение аутентификации Google API

Возможно, вы помните страницу учетных данных Google в учебнике, упомянутом выше:

Building Startups Google Contacts API - Google API Credentials Form

Вы можете найти его в консоли разработчиков Google.

Вы должны добавить URL-адреса для всех ваших сред - разработки, подготовки, производства и т. Д. - и для каждого контроллера и метода. Это усложняет усилия по работе с его API-интерфейсом контактов, но также, вероятно, лучше защищает данные людей.

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

Импорт контактов Google

Вот API контактов Google v3.0. Когда я начал писать код, я не заметил, что теперь они рекомендуют API People для доступа только для чтения. К сожалению, мой код использует API чтения / записи. Итак, я не гений. Предприниматели редко бывают - даже Билл Гейтс говорит, что ему просто повезло.

В общем, я нашел API Контактов Google одним из самых запутанных и сложных API, которые я когда-либо использовал.

Если бы у меня был более высокий уровень знаний в разработке Google API или я потратил бы больше времени на это, я мог бы найти более простой подход. Но из того, что я могу сказать, было важно, чтобы вы делали все с помощью API с одного URL. В моем случае https://meetingplanner.io/address/import.

А Google возвращает ключи и повторно перенаправляет вас на этот URL-адрес, поэтому вам нужно следить за состоянием API и обходить его.

Я предполагаю, что все это сделано для повышения безопасности, но требует управления состоянием, встроенного в то, что в противном случае было бы простым запросом API. Управление состоянием может сэкономить время, но только если документация и пример кода хороши. В данном случае для PHP это не так.

Начало работы

Давайте посмотрим на AddressController.php actionImport ():

Выше, я наблюдаю за тем, хочет ли Google перезагрузить свои символы API. В этом случае я удаляю печенье, которое я сохранил их в и перенаправление назад к методу, чтобы начать.

Обращение с просьбой для символа(маркера)

Ниже, я обращаюсь со своей первой просьбой к Google через ее библиотеку клиента PHP:

Библиотека Google PHP в бета-версии. На самом деле PHP обычно - запоздалая мысль к Google. Таким образом, это - не всегда легкая работа в PHP с их API.

Заметьте выше, что $redirect_uri Google - тот же метод снова: 'адрес/импорт'.

Затем, мы пытаемся поместить символ от параметра вопроса в печенье:

Если Вы действительно получаете кодекс от Google, Вы должны установить его в печенье и перенаправлении к странице снова. Это странное мне.

Радостно, я также нашел, что, если я не создал петлю назад, когда кодекс отсутствовал — чтобы вернуться к той же странице снова, это не будет последовательно работать.

Затем мы строим и просим, чтобы Google представил пользователю диалог разрешения, чтобы предоставить доступ Организатора мероприятий к их контактам:

Building Startups Google Contacts API - Google Asks User for Permissions

Я должен был добавить большое управление обработкой ошибок, чтобы выяснить, почему оно не работало и заставить все это последовательно работать.

Вы предположили его, если бы есть состояние ошибки, я часто перенаправлял бы к этому тому же методу диспетчера.

Обработка возвращенных данных

Когда все работает, забава, легкий кодекс добирается, чтобы обработать данные. В настоящее время мы захватываем 1 000 записей пять раз, неоднократно строение нумерации страниц просит, чтобы, конечно, были переданы обратно в этот URL:

Перевод XML Google (который также сложен со странными именами переменной для разработчиков PHP, например, ключами, такими как $contact ['gd$email'] [0] ['адрес'] со знаком доллара в середине.

Ниже, мы обращаемся с каждой просьбой, пробегая данные JSON, и хватая контактных лиц, чтобы добавить к столу Адреса:

Работа с Google Contacts API была супер трудной, не хорошо зарегистрированный, и потратила впустую много времени для меня. В то время как я работал с большим количеством API успешно, я знаю, что я не эксперт в этом. Из-за проблем безопасности, я действительно не хочу избивать на Google по этому — в большом количестве этих случаев, они, вероятно, знают, почему они делают вещи определенные пути.

Но это должно хорошо ткнуть немного забавы, правильно?

Во-первых, все в Google - гении, и они доказали это снова, приобретя API.ai, блестящее обслуживание, которое связывает его кнопку Sign Up с его Формой Логина. Действительно, они сделали:

Я уверен, что команда должной осмотрительности Google видела гения в нем, который остается вне смертных как я. Они, должно быть, сказали, «Ничего себе, программисты API.ai - гении как наш AdSense и команды DFP! Давайте добавим их к Алфавиту!»

Так как я могу говорить с ангелом и инвесторами VC об Организаторе мероприятий в будущем, я хочу быть скромным. Но я был бы испуган, если бы моя домашняя страница сделала это, и один из моих возможных инвесторов заметил.

Новый Алфавит (новая компания-учредитель Google) -настолько прощающий.

Распространение добавить форма участников

Наконец, позвольте нам просто посмотреть на кодекс позади расширенного, Добавляет Форма Участников. В основном я захватываю электронные письма от Друзей таблица и затем электронные письма от стола Адреса:

Однако стоимость выбора - просто электронная почта, так как это стало бы более сложным, чтобы определять, какой вид друга это (от Друга или от стола Адреса).

Я супер не горжусь кодексом и подходом выше, но мчащийся к бете-версии, я пошел на компромиссы, чтобы сделать его.

С 5 000 Google Contacts в моих друзьях dropdown, работа медленнее. Я, вероятно, должен лучше связать контроль с поиском базы данных AJAX скоро.

И я потратил впустую много времени рано при попытке расширить Друзей стол, чтобы включать людей, которых я пригласил, а также Google Contacts. Однако это превратилось в беспорядок трудно управляемых связанных вопросов базы данных. Пользовательские отношения стола от Друзей, которых стол начал ломать для рядов Контактов, где они будут пустыми, и это на самом деле, оказались очень трудными решить. Управление удалением существующих внешних ключей вверх и вниз посредством миграций предательское также.

Закрытие мыслей

Этими особенностями были яркие примеры проблем доверия API с плохой документацией на Вашем выбранном языке и хождении на компромиссы в кодовой архитектуре в настоящий момент, чтобы начать особенности к графику выпуска (решивший не сократить их).

И есть, конечно, все еще проблемы с Участником, добавляют работа и Друзья страницу UX, который должен быть зафиксирован.

Честно, объем Организатора мероприятий достиг точки, где, делая это как один человек пугающее. И было бы полезно иметь больше ресурсов (т.е. члены команды.)

Наконец, если Вы еще не  имеете, пойдите, то намечают Вашу первую встречу с Организатором мероприятий теперь! Сообщите мне то, что Вы думаете в комментариях ниже. Вы можете также обратиться ко мне @reifman. Я всегда открыт для идей новой возможности и предложений темы для будущих обучающих программ.

Обучающая программа на краудфандинге находится также в работах, поэтому, пожалуйста, следуйте за нашей страницей Организатора мероприятий WeFunder.

Останьтесь настроенными для всего этого и большего количества предстоящих обучающих программ, проверив Здание Ваш Запуск С рядом PHP.

Ссылки по теме

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.