Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

social

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

social

  • 0.3.3
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

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

FAQs

Package last updated on 15 Nov 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc