Sha256: 529ada10db512426e5ae6bd7baa6f1f4fc6c7c347a95157fcb490e115ee3f499

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

require 'faraday'
require 'faraday_middleware'
require 'digest/sha1'
require 'nokogiri'

module SlideshareApi
  class Client
    SLIDESHARE_API_URL = 'https://www.slideshare.net/api/2'

    attr_accessor :connection, :api_key, :shared_secret

    def initialize(api_key, shared_secret)
      @api_key = api_key
      @shared_secret = shared_secret
      build_connection
    end

    def slideshow(options = {})
      params = {}
      params.merge!({slideshow_url: cleaned_url(options[:slideshow_url])}) if options[:slideshow_url]
      params.merge!({slideshow_id: options[:slideshow_id]}) if options[:slideshow_id]
      params.merge!({detailed: 1}) if options[:detailed]
      xml_response = Nokogiri::XML(@connection.get('get_slideshow', api_validation_params.merge(params)).body)
      check_error xml_response
      SlideshareApi::Model::Slideshow.new xml_response
    end

    private

    def cleaned_url(url)
      url.split('?')[0]
    end

    def check_error(xml_response)
      error = xml_response.search('SlideShareServiceError')
      raise SlideshareApi::Error, xml_response.search('Message').text unless error.empty?
    end

    def build_connection
      @connection = Faraday.new(url: SLIDESHARE_API_URL) do |faraday|
        faraday.request :json
        faraday.adapter Faraday.default_adapter
      end
    end

    def api_validation_params
      timestamp = Time.now.to_i
      hash = Digest::SHA1.hexdigest "#{@shared_secret}#{timestamp}"
      {api_key: @api_key, ts: timestamp, hash: hash}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
slideshare_api-0.0.6 lib/slideshare_api/client.rb