Работа с API социальных сетей. Часть1: интеграция с Rails

Дата публикации:

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

Регистрация приложения

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

Для создания приложения нужно заполнить следующие поля: имя, адрес сайта и callback url. О том, что такое callback url мы расскажем чуть ниже.API-socialmedia

Как видите, в адресах ссылок нельзя использовать localhost — вместо него вводим 127.0.0.1:3000.

Callback url — это адрес, на который будут отправлены данные пользователя после авторизации.

Далее нам нужны ключи приложения.

API-socialmedia-2

Копируем API Key И API Secret. А теперь идем настраивать Rails.

Типы авторизации в API

Для того чтобы выполнить запрос в социальной сети, нужна авторизация. И тут у нас два пути:

  1. Авторизация от приложения
  2. Авторизация от пользователя

То есть тип авторизации определяет реквестера запросов. Давайте разбираться. Для авторизации от приложения вам достаточно пары API Key и API Secret, полученной при регистрации. В этом случае у вас будет доступ ко всем публичным данным пользователей. Но лимит запросов окажется ограниченным.

Авторизация от пользователя позволит получить доступ ко всем данным, на которые он дал разрешение. После авторизации у вас будет еще пара токенов Key и Secret. Их нужно сохранить для последующего использования.

Примечание: Некоторые соцсети, например, Facebook возвращают лишь одно значение.

Зачем нужен Callback URL в настройках приложения

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

Примечание: Возможность использовать localhost  присутствует не всегда. Но вы можете юзать локальный IP адрес. Мы поступили именно так.

Omniauth and Devise — авторизация пользователей через социальные сети

На стороне Rails все достаточно просто, если знать о паре подводных камней. Но до них мы еще дойдем, а пока давайте по порядку

Гемы

gem ‘omniauth’

gem ‘omniauth-facebook’

gem ‘omniauth-twitter’

gem ‘omniauth-linkedin’

gem ‘omniauth-instagram’

gem ‘devise’

Ключи и инициализация

Все ключи хорошо бы хранить в одном месте. В Rails для этого задумывался файл config/secrets.yml, но он не поддерживает вложенность из коробки. Поэтому придется работать по старинке.

Создаем файл config/omniauth_keys.yml. Не забываем добавить его в .gitignor!

Примечание: перед вами не реальные ключи и работать они не будут. Просто хотелось для наглядности оставить ключи, похожие на оригинал. Дело в том, что у каждой социальной сети они обзываются по-своему. Мы же привели названия к одному формату.

Создаем initializer config/initializers/omniauth.rb

Как видите, для Фейсбука был использован параметр scope. Это список данных и действий, к которым приложение получит доступ после авторизации.

Добавляем роуты для callback_url — config/routes.rb

Теперь мы готовы реализовать логику регистрации и авторизации.

Регистрация и Авторизация

Общий план.

  1. Принять данные от социальной сети
  2. Привести их к единому формату
  3. Сохранить в базу, создать нового пользователя
  4. Авторизовать нового пользователя

Для хранения социальных профилей будем использовать таблицу social_profiles(int: user_id, string: access_token, string: secret_key, bool: valid_tokens).

То есть мы сохраняем токен и прикрепляем его к пользователю. Если же юзер хочет поменять свой пароль от социальной сети, его токен становится невалидным. В таком случае мы помечаем его профиль и просим переподключить социальный аккаунт.

Примечание: этот пункт не нужен, если социальная сеть используется только для авторизации.

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

Сохраняем данные авторизации в переменную для более удобного использования.

Логинимся с полученными данными (предварительно их нормализуем). Если пользователь пришел к нам впервые — мы его регистрируем.

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

Оставшаяся часть контроллера не так интересна (банальное приведение данных к единому формату). Давайте лучше рассмотрим подводные камни такой логики при использовании гема “devise”.

Проблема заключается в том, что по умолчанию “devise” накладывает индекс уникальности на поле email при создании таблицы пользователей. Социальные сети обычно не присылают электронный адрес пользователя. Поэтому у нас, во-первых — не проходит валидация email, во-вторых — даже если мы ее уберем, база позволит сохранить пустое значение всего один раз. Второй раз оно уже не будет уникальным.

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

И пишем модуль для регистрации через социальные сети:

Код логики регистрации и авторизации говорит сам за себя. Нам же интересны те два метода, которые необходимо переопределить.


То есть мы проверяем, есть ли у нас социальные профили и в зависимости от этого смотрим нужно ли нам валидировать email.

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

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая.

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании.

Следующий курс намечен на август. Не пропусти анонс записи!