Sha256: db03c7bb1e68beb48016bf142eae66be57970df05571c6579f14e9d9206b1ddb

Contents?: true

Size: 1.21 KB

Versions: 30

Compression:

Stored size: 1.21 KB

Contents

require 'httparty'
require 'zip'

module Peerflixrb
  module YifySubtitles
    API_URL  = 'http://api.yifysubtitles.com/subs/'.freeze
    BASE_URL = 'http://www.yifysubtitles.com'.freeze

    def self.download(imdb_id, language = 'english')
      url = get_subtitles_url(imdb_id, language)
      return if url.nil?

      zip = download_subtitles(url)
      extract_zip(zip)
    end

    # Helper methods (private)
    def self.get_subtitles_url(imdb_id, language)
      results = HTTParty.get(API_URL + imdb_id)

      if results['success'] && results['subtitles'] > 0
        BASE_URL + results['subs'][imdb_id][language][0]['url']
      end
    end

    def self.download_subtitles(url)
      HTTParty.get(url).body
    end

    def self.extract_zip(zip_body)
      sub_file = nil

      Zip::InputStream.open(StringIO.new(zip_body)) do |io|
        while (entry = io.get_next_entry)
          # Don't extract if not a subtitle file
          next unless entry.name =~ /\.(srt|sub|ass)\z/

          sub_file = entry.name
          open(sub_file, 'w') do |f|
            f << io.read
          end

          break # We found a subtitle file
        end
      end

      # return subtitle filename
      sub_file
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
peerflixrb-6.1.2 lib/peerflixrb/yify.rb
peerflixrb-6.1.1 lib/peerflixrb/yify.rb
peerflixrb-6.1.0 lib/peerflixrb/yify.rb
peerflixrb-6.0.5 lib/peerflixrb/yify.rb
peerflixrb-6.0.4 lib/peerflixrb/yify.rb
peerflixrb-6.0.3 lib/peerflixrb/yify.rb
peerflixrb-6.0.2 lib/peerflixrb/yify.rb
peerflixrb-6.0.1 lib/peerflixrb/yify.rb
peerflixrb-6.0.0 lib/peerflixrb/yify.rb
peerflixrb-5.2.2 lib/peerflixrb/yify.rb
peerflixrb-5.2.1 lib/peerflixrb/yify.rb
peerflixrb-5.2.0 lib/peerflixrb/yify.rb
peerflixrb-5.1.0 lib/peerflixrb/yify.rb
peerflixrb-5.0.3 lib/peerflixrb/yify.rb
peerflixrb-5.0.2 lib/peerflixrb/yify.rb
peerflixrb-5.0.1 lib/peerflixrb/yify.rb
peerflixrb-5.0.0 lib/peerflixrb/yify.rb
peerflixrb-4.0.0 lib/peerflixrb/yify.rb
peerflixrb-3.3.1 lib/peerflixrb/yify.rb
peerflixrb-3.3.0 lib/peerflixrb/yify.rb