Module: Peerflixrb::YifySubtitles

Defined in:
lib/peerflixrb/yify.rb

Constant Summary collapse

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

Class Method Summary collapse

Class Method Details

.download(imdb_id, language = 'english') ⇒ Object



9
10
11
12
13
14
15
# File 'lib/peerflixrb/yify.rb', line 9

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

.download_subtitles(url) ⇒ Object



26
27
28
# File 'lib/peerflixrb/yify.rb', line 26

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

.extract_zip(zip_body) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/peerflixrb/yify.rb', line 30

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

.get_subtitles_url(imdb_id, language) ⇒ Object

Helper methods (private)



18
19
20
21
22
23
24
# File 'lib/peerflixrb/yify.rb', line 18

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