Project

social

0.0
No commit activity in last 3 years
No release in over 3 years
This is social networks api wrapper and authorization tools for social applications. Now it is a compilation of code from various projects in production. Without tests. =( NOT RECOMMENDED USE IN PRODUCTION.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.6.0
~> 0.9.8.4
~> 1.4.1
~> 0.6.1
>= 0
~> 1.0
 Project Readme

Social

Библиотека для обращения к API социальных сетей со стороны сервера. Содержит методы API и средства определения текущей социальной сети.

Данная библиотека была создана в рамках проекта SocialFrame - Шаблон для IFrame приложений на базе Sinatra (Padrino). Но библиотеку можно также использовать и для Rails-приложений и других.

Библиотека решает следующие задачи:

  • Определение типа соцсети до создания сессии и авторизации по средствам Rack::Builder
  • Осуществление общих запросов к API соцсети
  • Генерирует уникальный пользовательский UID и уникальный SESSION_ID для сессии на основе SID соцсети

Поддержка социальных сетей:

  • vk.com
  • odnoklassniki.ru

Поддерживаемые методы API:

  • Получает профиль пользователя
  • Получить список друзей для пользователя
  • Получить профили друзей
  • Работа с балансом пользователя (только для vk.com)

Установка

gem install social

Для Gemfile

gem 'social'

Концепция API

  • Интерфейс API социальной сети представлена одним объектом (синглтоном), чтобы иметь легкий доступ к этому API из разных мест без необходимости каждый раз конструировать объект.
  • Интерфейс API социальной сети разделен на блоки которые представленны соответствующими цепочками вызова, например api.user.get_info
  • Конфигурация API социальной сети должна каходится в файле (с учетом различных окруженйи), но также должна быть возможность переопределить ее простым объектом

Использование

Получение профиля пользователя (get user profile)

Social::Network(:ok).user.get_info(uid)

или

Social::Network::Vk.user.get_info(uid)

или отправка нотификации

Social::Network(social_type).notification.send(:message => msg, :uids => [ ... ])

Обращение к текущей социальной сети осуществляется после Глобального определения этого типа (см. ниже). При этом возможны следующие вызовы.

Social::Network.current.user.get_info(uid)

Инциализация по запросу (и по SocialPrefix)

Глобальное определение типа социальной сети

Social::Env.init(params[:social_type])

Определение соцсети с помощью SocialPrefix

SocialPrefix позволяет определять социальную сеть по строке запроса т.е.

  • без использования субдоменов
  • без определения соц.сети по параметрам запроса (что также поддерживается)
  • без добавления доп.роутов в приложение

Также пользоволяет решить проблему с показам аватаров пользователей в Одноклассниках, для которых в REFERRAL должно быть слово "odnoklassniki" или "odkl".

config.ru

builder = Social::Builder::produce(Example::Application)
run builder

При этом в параметры запроса добавляется ключ social_env со следующим содержанием

request.params['social_env'] = {
  'prefix' => <SOCIAL_PREFIX>, 
  'type'   => <SOCIAL_TYPE_NAME>,
  'id'     => <SOCIAL_TYPE_ID>
}

Например, при запросе /odkl/*

params[:social_env][:id] # => 1
params[:social_env][:prefix] # => 'odkl'
params[:social_env][:type] # => :ok

Для SinglePage приложения: Предпологается, что первый GET запрос приходит на URL из SocialPrefix, а последующие запросы идут уже без без SocialPrefix и тип соцсети берется из сессии и передается в метод Social::Env.init(<SOCIAL_TYPE>).

Для "Многостраничного" приложения: Предпологается, что все запросы все запросы осуществляются с помощью SocialPrefix

Определение соцсети с помощью SocialParam

Помимо SocialPrefix определение соцсети можно осуществлять с помощью параметров запроса - SocialParam, если нет поддержки SocialPrefix. Например если запрос содержит параметры viewer_id и sid, то можно сказать что это соцсеть ВКонтакт.

Этот способ также предпологает использование Rack::Builder.

Глобальная инициализация окружения для SocialPrefix и SocialPrams

Осуществляет вызовом метода Social::Env.init_by_params, например

before_filter ->{ Social::Env.init_by_params(params) }

Определение конфигурации

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

По-умолчанию конфигурация загружается из конфигурационного файла (см. далее), но также конфигурацию можно задать первым вызовом #Network этого хеша, например

Social::Network(:ok, config_hash)

Или определить с помощью у объекта

Social::Network::Ok.instance.params = { config: config_hash }
Social::Network::Ok.instance.reload_config

или

Social::Network(:ok).params = { config: config_hash }
Social::Network(:ok).reload_config

Определение конфигурации через конфигурационный файл

Конфигурационный файл должен иметь имя "social.yml"

При использовании Rails конфигурационный файл должн находится в папаке

APP_ROOT/config

Также путь к папке с конфигурационным файлом может быть определен в переменной окружения "SOCIAL_CONFIG_PATH".

Конфигурационный файл может иметь следующее содержание

ok:
  development:
    api_server: 'http://api.odnoklassniki.ru/'
    application_key: 'APPLICATION_KEY'
    secret_key: 'SECRET_KEY'
  production:
  test:
vk:
  development:
    key: "KEY"
    app_id: 123
  production:
  test:

Название окружение для чтения конфига задается через переменные окружения "APP_ENV", "RACK_ENV", "RAILS_ENV". По-умолчанию окружение "development".

TODO

  • Тесты с использованием VCR
  • Поддержка Mail.ru
  • Поддержка Facebook
  • Больше поддерживаемых "общих" методов API