shin 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75593124b977e12576cd7cc859216eb6d3d5d3dc
4
- data.tar.gz: d2940ba29adeff8c32faf158bf268a54deb3d6a9
3
+ metadata.gz: 9c016c0787c6b653275ff7617bc9c91e1fe63bbc
4
+ data.tar.gz: f2a6b501aa0e7db1dd6e03b2f42fa5d46b82b8d0
5
5
  SHA512:
6
- metadata.gz: 6340c7d4d97b5e22a1c9153df2d21babec9fb502fdc912977ce287eb3d42f2224110dab61594dbcf4900f1dda55c01ba895ba6a1deba5ac5e2359ca58e0a4cbc
7
- data.tar.gz: 6020e9a25cc8da2d2d1d480f9a58a58418c4af5600d0f8f25480a62a84f18d54c4514e5c6e939dc46228eb3fd5c842dd7bf8b2733c8d67c94b2ba3b8a351ee46
6
+ metadata.gz: d6e61a9e6bae07ae46fdda9192500ad2092ab24643eaa51656417a86c61b6e1ca1bafcc2edd19753d88059fde25a72ecb6e88d1dbe170b5cc26ef7e60b086a97
7
+ data.tar.gz: 2f15aa1623a2f07946e890de499ae577ead857c431d309ec0ca2215b68d8bff0832b3f8e645b4d333fb0b324fb75ee90d6c2cc3013f81117827ff54bd193c4e0
data/lib/shin/data/dfi.rb CHANGED
@@ -12,11 +12,11 @@ module Shin
12
12
  # Search (on title)
13
13
  def search(params={})
14
14
  raise MissingArgument, "You are missing the argument 'title' which is required to use this source." unless params[:title] != ""
15
- year = params[:year] != "" ? params[:year] : nil
15
+ params[:year] ||= nil
16
16
 
17
17
  # Response
18
- if year != nil
19
- response = Base.get('http://nationalfilmografien.service.dfi.dk/movie.svc/list?titlecontains=' + URI.encode(params[:title]) + '&startyear='+(year - 1).to_s+'&endyear='+(year + 1).to_s)
18
+ if params[:year] != nil
19
+ response = Base.get('http://nationalfilmografien.service.dfi.dk/movie.svc/list?titlecontains=' + URI.encode(params[:title]) + '&startyear='+(params[:year] - 1).to_s+'&endyear='+(params[:year] + 1).to_s)
20
20
  else
21
21
  response = Base.get('http://nationalfilmografien.service.dfi.dk/movie.svc/list?titlecontains=' + URI.encode(params[:title]))
22
22
  end
@@ -34,7 +34,7 @@ module Shin
34
34
  doc.xpath("//MovieListItems/MovieListItem").each do |item|
35
35
 
36
36
  # If year is nil then return all
37
- if year != nil
37
+ if params[:year] != nil
38
38
  return {id: item.xpath('./ID').text.to_i, name: item.xpath('./Name').text, url: item.xpath('./Url').text}.to_hashugar
39
39
  else
40
40
  @array << {id: item.xpath('./ID').text.to_i, name: item.xpath('./Name').text, url: item.xpath('./Url').text}
@@ -0,0 +1,64 @@
1
+ # DFI provides an OPEN API
2
+ require 'date'
3
+
4
+ module Shin
5
+ module Data
6
+ class Previewnetworks
7
+
8
+ def new
9
+ self
10
+ end
11
+
12
+ # Fix these before running
13
+ def before(params={})
14
+ raise MissingArgument, "You are missing the argument 'previewnetworks_key' which is required to use this source." unless Shin.get[:previewnetworks_key] != nil
15
+
16
+ # Timestamp
17
+ Shin.get[:previewnetworks_country] ||= "se"
18
+
19
+ "http://" + Shin.get[:previewnetworks_country] + ".feed.previewnetworks.com"
20
+ end
21
+
22
+ # Search (on title)
23
+ def search(params={})
24
+ url = before()
25
+
26
+ # Response
27
+ response = Base.get(url + '/v3.1/all/search-2/' + Shin.get[:previewnetworks_key] + '/?' + URI.encode_www_form(params))
28
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
29
+
30
+ # Data, it can be multiple reviews for a single movie from different reviewers
31
+ doc = Nokogiri::XML(response.body)
32
+
33
+ doc.remove_namespaces!
34
+ data = []
35
+ doc.xpath("//previewnetworks/movies/movie").each do |d|
36
+ data << Hash.from_xml(d.to_xml)[:movie]
37
+ end
38
+
39
+ data.to_hashugar
40
+ end
41
+
42
+ # Info
43
+ def info(params={})
44
+ url = before()
45
+
46
+ # Response
47
+ response = Base.get(url + '/v3.1/all/' + params[:id].to_s + '/' + Shin.get[:previewnetworks_key] + '/?' + URI.encode_www_form(params))
48
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
49
+
50
+ # Data, it can be multiple reviews for a single movie from different reviewers
51
+ doc = Nokogiri::XML(response.body)
52
+
53
+ doc.remove_namespaces!
54
+ data = {}
55
+ doc.xpath("//previewnetworks/movies/movie").each do |d|
56
+ data = Hash.from_xml(d.to_xml)[:movie]
57
+ end
58
+
59
+ data.to_hashugar
60
+ end
61
+
62
+ end
63
+ end
64
+ end
data/lib/shin/data/sfi.rb CHANGED
@@ -13,12 +13,12 @@ module Shin
13
13
  def search(params={})
14
14
  raise MissingArgument, "You are missing the argument 'title' which is required to use this source." unless params[:title] != ""
15
15
 
16
- type = params[:type] == "" ? params[:type] : "MovieTitle"
17
- match = params[:match] == "" ? params[:match] : "Begin"
18
- year = params[:year] != "" ? params[:year] : nil
16
+ params[:type] ||= "MovieTitle"
17
+ params[:match] ||= "Begin"
18
+ params[:year] ||= nil
19
19
 
20
20
  # Response
21
- response = Base.get('http://www.sfi.se/sv/svensk-filmdatabas/sokresultat/?searchword=' + URI.encode(params[:title]) + '&type=' + type + '&match=' + match + '&prom=False')
21
+ response = Base.get('http://www.sfi.se/sv/svensk-filmdatabas/sokresultat/?searchword=' + URI.encode(params[:title]) + '&type=' + params[:type] + '&match=' + params[:match] + '&prom=False')
22
22
  raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
23
23
 
24
24
  # Nokogiri parse
@@ -36,9 +36,9 @@ module Shin
36
36
  @country = e.text[/\((\d+), (.*)\)/, 2].to_s rescue nil
37
37
 
38
38
  # Find one or get all? (Allow years to be one less or one more aswell)
39
- if year == nil
39
+ if params[:year] == nil
40
40
  @array << {id: @id.to_i, title: @title, year: @year, country: @country}
41
- elsif @year == year or (@year - 1) == year or (@year + 1) == year
41
+ elsif @year == params[:year] or (@year - 1) == params[:year] or (@year + 1) == params[:year]
42
42
  # It should only return a single one if you have specified a year
43
43
  return {id: @id.to_i, title: @title, year: @year, country: @country}.to_hashugar
44
44
  end
data/lib/shin/data.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require_relative 'data/sfi'
2
2
  require_relative 'data/dfi'
3
3
  require_relative 'data/viasat'
4
+ require_relative 'data/previewnetworks'
5
+ require_relative 'hash'
4
6
 
5
7
  module Shin
6
8
  module Data
@@ -10,17 +12,26 @@ module Shin
10
12
  self
11
13
  end
12
14
 
15
+ # SFI HTML
13
16
  def sfi
14
17
  @sfi ||= Sfi.new
15
18
  end
16
19
 
20
+ # DFI API
17
21
  def dfi
18
22
  @dfi ||= Dfi.new
19
23
  end
20
24
 
25
+ # Viasat API (Images only atm)
21
26
  def viasat
22
27
  @viasat ||= Viasat.new
23
28
  end
29
+
30
+ # Previewnetworks API
31
+ def previewnetworks
32
+ @previewnetworks ||= Previewnetworks.new
33
+ end
34
+
24
35
  end
25
36
  end
26
37
  end
data/lib/shin/hash.rb ADDED
@@ -0,0 +1,63 @@
1
+ # USAGE: Hash.from_xml:(YOUR_XML_STRING)
2
+ require 'nokogiri'
3
+ # modified from http://stackoverflow.com/questions/1230741/convert-a-nokogiri-document-to-a-ruby-hash/1231297#1231297
4
+
5
+ class Hash
6
+ class << self
7
+ def from_xml(xml_io)
8
+ begin
9
+ result = Nokogiri::XML(xml_io)
10
+ return { result.root.name.to_sym => xml_node_to_hash(result.root)}
11
+ rescue Exception => e
12
+ # raise your custom exception here
13
+ end
14
+ end
15
+
16
+ def xml_node_to_hash(node)
17
+ # If we are at the root of the document, start the hash
18
+ if node.element?
19
+ result_hash = {}
20
+ if node.attributes != {}
21
+ result_hash[:attributes] = {}
22
+ node.attributes.keys.each do |key|
23
+ result_hash[:attributes][node.attributes[key].name.to_sym] = prepare(node.attributes[key].value)
24
+ end
25
+ end
26
+ if node.children.size > 0
27
+ node.children.each do |child|
28
+ result = xml_node_to_hash(child)
29
+
30
+ if child.name == "text"
31
+ unless child.next_sibling || child.previous_sibling
32
+ return prepare(result)
33
+ end
34
+ elsif result_hash[child.name.to_sym]
35
+ if result_hash[child.name.to_sym].is_a?(Object::Array)
36
+ result_hash[child.name.to_sym] << prepare(result)
37
+ else
38
+ result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << prepare(result)
39
+ end
40
+ else
41
+ result_hash[child.name.to_sym] = prepare(result)
42
+ end
43
+ end
44
+
45
+ return result_hash
46
+ else
47
+ return result_hash
48
+ end
49
+ else
50
+ return prepare(node.content.to_s)
51
+ end
52
+ end
53
+
54
+ def prepare(data)
55
+ (data.class == String && data.to_i.to_s == data) ? data.to_i : data
56
+ end
57
+ end
58
+
59
+ def to_struct(struct_name)
60
+ Struct.new(struct_name,*keys).new(*values)
61
+ end
62
+ end
63
+
@@ -168,7 +168,7 @@ module HTTParty #:nodoc:
168
168
 
169
169
  # ===== Store objects in memory
170
170
  #
171
- Struct.new("TvdbResponse", :code, :body, :headers) { def to_s; self.body; end }
171
+ Struct.new("ShinResponse", :code, :body, :headers) { def to_s; self.body; end }
172
172
  class MemoryStore < AbstractStore
173
173
  def initialize(options={})
174
174
  super; @store = {}; self
@@ -0,0 +1,52 @@
1
+ ## Apple Provides a OPEN API
2
+ ## Docs: https://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html
3
+ module Shin
4
+ module Play
5
+ class Apple
6
+
7
+ def new
8
+ self
9
+ end
10
+
11
+ # Search
12
+ def search(params={})
13
+ # Response
14
+ response = Base.get('https://itunes.apple.com/search?' + URI.encode_www_form(params))
15
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
16
+
17
+ # Data
18
+ data = Oj.load(response.body) rescue nil
19
+ d2 = data['results'] rescue nil
20
+
21
+ if d2 != nil
22
+ d2.to_hashugar
23
+ else
24
+ raise NotValid, "Couldn't find any responses/results please check again."
25
+ end
26
+
27
+ end
28
+
29
+ # Find
30
+ def find(params={})
31
+ # Response
32
+ response = Base.get('https://itunes.apple.com/lookup?' + URI.encode_www_form(params))
33
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
34
+
35
+ # Data
36
+ data = Oj.load(response.body) rescue nil
37
+ d2 = data['results'] rescue nil
38
+
39
+ if d2 != nil
40
+ d2.first.to_hashugar
41
+ else
42
+ raise NotValid, "Couldn't find any responses/results please check again."
43
+ end
44
+ end
45
+
46
+ # Errors
47
+ class NotValid < StandardError; end
48
+ class MissingArgument < StandardError; end
49
+ class HTTPError < StandardError; end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,42 @@
1
+ ## HBO Nordic have a REST API but isn't for public use
2
+ module Shin
3
+ module Play
4
+ class Hbonordic
5
+
6
+ def new
7
+ self
8
+ end
9
+
10
+ # Category
11
+ def all(params={})
12
+ raise NotValid, "Not a valid category. Please check again." unless ["movies", "series"].include?(params[:category])
13
+
14
+ # Response
15
+ response = Base.get('http://hbonordic.se/rest-services-hook/' + params[:category])
16
+
17
+ # They place movies in a "entry" tag somehow
18
+ if params[:category] == "movies"
19
+ response.parsed_response['entry'].to_hashugar
20
+ else
21
+ response.parsed_response.to_hashugar
22
+ end
23
+ end
24
+
25
+ # Info
26
+ def info(params={})
27
+ raise NotValid, "Not a valid category. Please check again." unless ["movies", "series"].include?(params[:category])
28
+
29
+ # Response
30
+ response = Base.get('http://hbonordic.se/rest-services-hook/' + params[:category] + '/' + params[:id])
31
+
32
+ # Data
33
+ response.parsed_response.to_hashugar
34
+ end
35
+
36
+ # Errors
37
+ class NotValid < StandardError; end
38
+ class MissingArgument < StandardError; end
39
+ class HTTPError < StandardError; end
40
+ end
41
+ end
42
+ end
@@ -34,7 +34,7 @@ module Shin
34
34
 
35
35
  # Channels
36
36
  def channels(params={})
37
- page = params[:page] == "" ? params[:type] : 1
37
+ params[:page] ||= 1
38
38
 
39
39
  # Response
40
40
  response = Base.get('http://playapi.mtgx.tv/v3/channels?' + URI.encode_www_form(params))
data/lib/shin/play.rb CHANGED
@@ -10,7 +10,12 @@ require_relative 'play/viasat'
10
10
  #require_relative 'play/headweb'
11
11
  #require_relative 'play/film2home'
12
12
  #require_relative 'play/plejmo'
13
- #require_relative 'play/hbonordic'
13
+ #require_relative 'play/sfanytime'
14
+ require_relative 'play/apple'
15
+ #require_relative 'play/cmore'
16
+ #require_relative 'play/filmnet'
17
+ #require_relative 'play/discshop'
18
+ require_relative 'play/hbonordic'
14
19
 
15
20
  module Shin
16
21
  module Play
@@ -55,6 +60,16 @@ module Shin
55
60
  @viasat ||= Viasat.new
56
61
  end
57
62
 
63
+ # HBO Nordic (NORDIC CONTENT)
64
+ def hbonordic
65
+ @hbonordic ||= Hbonordic.new
66
+ end
67
+
68
+ # Apple iTunes (WORLDWIDE CONTENT)
69
+ def apple
70
+ @apple ||= Apple.new
71
+ end
72
+
58
73
  end
59
74
  end
60
75
  end
data/lib/shin/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Shin
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joakim Nylen
@@ -96,10 +96,14 @@ files:
96
96
  - lib/shin/base.rb
97
97
  - lib/shin/data.rb
98
98
  - lib/shin/data/dfi.rb
99
+ - lib/shin/data/previewnetworks.rb
99
100
  - lib/shin/data/sfi.rb
100
101
  - lib/shin/data/viasat.rb
102
+ - lib/shin/hash.rb
101
103
  - lib/shin/httparty_icebox.rb
102
104
  - lib/shin/play.rb
105
+ - lib/shin/play/apple.rb
106
+ - lib/shin/play/hbonordic.rb
103
107
  - lib/shin/play/oppetarkiv.rb
104
108
  - lib/shin/play/sbstv.rb
105
109
  - lib/shin/play/svtplay.rb