shin 0.0.1 → 0.1.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: f2ef70e3ad1839ae50cc03c83431bd39b8cfa8a1
4
- data.tar.gz: d524891b2e7af3b26a0d615b87066e0b0e4d715b
3
+ metadata.gz: 75593124b977e12576cd7cc859216eb6d3d5d3dc
4
+ data.tar.gz: d2940ba29adeff8c32faf158bf268a54deb3d6a9
5
5
  SHA512:
6
- metadata.gz: 644597661ad4e7af9ced7c8e1cad51517ad853add7b3be3e98a273384c20006cf1c55f404d7434a7eaf211bd022396abc7aa6eabebcd4b29ed59269aaf88f8fd
7
- data.tar.gz: 5e3b98bb07b9c513c350db0451633ac6ea5f30e4102247ca6f5b9d9672bbc520bbcf20a1dd482ca8ca5ffa434b0dee6f3107aeccec7f289936a2a80b0837bc7f
6
+ metadata.gz: 6340c7d4d97b5e22a1c9153df2d21babec9fb502fdc912977ce287eb3d42f2224110dab61594dbcf4900f1dda55c01ba895ba6a1deba5ac5e2359ca58e0a4cbc
7
+ data.tar.gz: 6020e9a25cc8da2d2d1d480f9a58a58418c4af5600d0f8f25480a62a84f18d54c4514e5c6e939dc46228eb3fd5c842dd7bf8b2733c8d67c94b2ba3b8a351ee46
@@ -0,0 +1,77 @@
1
+ # DFI provides an OPEN API
2
+ require 'date'
3
+
4
+ module Shin
5
+ module Data
6
+ class Dfi
7
+
8
+ def new
9
+ self
10
+ end
11
+
12
+ # Search (on title)
13
+ def search(params={})
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
16
+
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)
20
+ else
21
+ response = Base.get('http://nationalfilmografien.service.dfi.dk/movie.svc/list?titlecontains=' + URI.encode(params[:title]))
22
+ end
23
+
24
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
25
+
26
+ # Nokogiri parse
27
+ doc = Nokogiri::XML(response.body) rescue nil
28
+
29
+ # Can't be nil
30
+ if doc != nil
31
+ doc.remove_namespaces!
32
+
33
+ @array = []
34
+ doc.xpath("//MovieListItems/MovieListItem").each do |item|
35
+
36
+ # If year is nil then return all
37
+ if year != nil
38
+ return {id: item.xpath('./ID').text.to_i, name: item.xpath('./Name').text, url: item.xpath('./Url').text}.to_hashugar
39
+ else
40
+ @array << {id: item.xpath('./ID').text.to_i, name: item.xpath('./Name').text, url: item.xpath('./Url').text}
41
+ end
42
+
43
+ end
44
+
45
+ @array.to_hashugar
46
+ else
47
+ raise NotValid, "Nokogiri failed to parse the XML."
48
+ end
49
+
50
+ end
51
+
52
+ # Info
53
+ def info(params={})
54
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
55
+
56
+ # Response
57
+ response = Base.get('http://nationalfilmografien.service.dfi.dk/movie.svc/' + params[:id].to_s)
58
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
59
+
60
+ # Nokogiri parse
61
+ data = response.parsed_response['MovieItem'] rescue nil
62
+
63
+ if data != nil
64
+ {id: data['ID'].to_i, title: data['Title'], original_title: data['OriginalTitle'].strip, age_limit: data['Censorship'], url: data['Url'], description: data['Description']}.to_hashugar
65
+ else
66
+ raise NotValid, "Nokogiri failed to parse the XML."
67
+ end
68
+ end
69
+
70
+ # Errors
71
+ class NotValid < StandardError; end
72
+ class HTTPError < StandardError; end
73
+ class MissingArgument < StandardError; end
74
+
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,117 @@
1
+ ## SFI doesn't have a public API but uses a very easy to import HTML.
2
+ require 'date'
3
+
4
+ module Shin
5
+ module Data
6
+ class Sfi
7
+
8
+ def new
9
+ self
10
+ end
11
+
12
+ # Search (on title)
13
+ def search(params={})
14
+ raise MissingArgument, "You are missing the argument 'title' which is required to use this source." unless params[:title] != ""
15
+
16
+ type = params[:type] == "" ? params[:type] : "MovieTitle"
17
+ match = params[:match] == "" ? params[:match] : "Begin"
18
+ year = params[:year] != "" ? params[:year] : nil
19
+
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')
22
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
23
+
24
+ # Nokogiri parse
25
+ @main_noko = Nokogiri::HTML response.body rescue nil
26
+
27
+ # Can't be nil
28
+ if @main_noko != nil
29
+ @array = []
30
+
31
+ @main_noko.css('div.search_result > div.search_heading').map do |e|
32
+ @id = e.css('a')[0]['href'][/itemid\=(\d+)/, 1].to_i rescue nil
33
+
34
+ @title = e.css('a').text.strip rescue nil
35
+ @year = e.text[/\((\d+)/, 1].to_i rescue nil
36
+ @country = e.text[/\((\d+), (.*)\)/, 2].to_s rescue nil
37
+
38
+ # Find one or get all? (Allow years to be one less or one more aswell)
39
+ if year == nil
40
+ @array << {id: @id.to_i, title: @title, year: @year, country: @country}
41
+ elsif @year == year or (@year - 1) == year or (@year + 1) == year
42
+ # It should only return a single one if you have specified a year
43
+ return {id: @id.to_i, title: @title, year: @year, country: @country}.to_hashugar
44
+ end
45
+
46
+ end
47
+
48
+ # Return
49
+ @array.to_hashugar
50
+ else
51
+ raise NotValid, "Nokogiri failed to parse the HTML."
52
+ end
53
+
54
+
55
+ end
56
+
57
+ # Info
58
+ def info(params={})
59
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
60
+
61
+ # Response
62
+ response = Base.get('http://www.sfi.se/sv/svensk-filmdatabas/Item/?type=MOVIE&itemid=' + params[:id].to_s)
63
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
64
+
65
+ # Nokogiri parse
66
+ @main_noko = Nokogiri::HTML response.body rescue nil
67
+
68
+ # Can't be nil
69
+ if @main_noko != nil
70
+ # Data
71
+ @swedish_title = @main_noko.css('td#ctl00_Full_Main_ctl00_SwedishTitleCell').text.gsub(/Mer$/, "").strip rescue nil
72
+ @description = @main_noko.css('div#ctl00_Full_Main_ctl00_StorySummary').text.strip rescue nil
73
+ @swedish_premiere = @main_noko.css('td#ctl00_Full_Main_ctl00_SwedishPremiereCell').text rescue nil
74
+ @age_limit = @main_noko.css('span#ctl00_Full_Main_ctl00_AgeLimitContent').text.strip rescue nil
75
+
76
+ {id: params[:id].to_i, swedish_title: @swedish_title, swedish_premiere: @swedish_premiere, description: @description, age_limit: @age_limit}.to_hashugar
77
+ else
78
+ raise NotValid, "Nokogiri failed to parse the HTML."
79
+ end
80
+ end
81
+
82
+ # Titles
83
+ def titles(params={})
84
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
85
+
86
+ # Response
87
+ response = Base.get('http://www.sfi.se/en-GB/svensk-filmdatabas/Item/?type=MOVIE&iv=Titles&itemid=' + params[:id].to_s)
88
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
89
+
90
+ # Nokogiri parse
91
+ @main_noko = Nokogiri::HTML response.body rescue nil
92
+
93
+ # Can't be nil
94
+ if @main_noko != nil
95
+ @array = []
96
+
97
+ @main_noko.css('table#ctl00_Full_Main_ctl00_TitlesTable > tr').map do |e|
98
+ @type = e.css('th').text.strip.gsub(/\:$/, "") rescue nil
99
+ @title = e.css('td').text.strip rescue nil
100
+
101
+ @array << {type: @type, title: @title}
102
+ end
103
+
104
+ @array.to_hashugar
105
+ else
106
+ raise NotValid, "Nokogiri failed to parse the HTML."
107
+ end
108
+ end
109
+
110
+
111
+ # Errors
112
+ class NotValid < StandardError; end
113
+ class HTTPError < StandardError; end
114
+ class MissingArgument < StandardError; end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,52 @@
1
+ ## Viasat provide an API to fetch images for the programmes in their TV Guide
2
+
3
+ module Shin
4
+ module Data
5
+ class Viasat
6
+
7
+ def new
8
+ self
9
+ end
10
+
11
+ #
12
+ def images(params={})
13
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
14
+
15
+ # Response
16
+ response = Base.get('http://se.press.viasat.tv/export?id=' + params[:id].to_s + '&enhancedinfo=true')
17
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
18
+
19
+ # Its splitted by newlines
20
+ data = response.body.split( /\r?\n/ ) rescue nil
21
+
22
+ # Just check to be sure
23
+ if data != nil and data != "" and data.kind_of?(Array)
24
+ # For each do this
25
+ array = {portrait: nil, landscape: nil, all: []}
26
+
27
+ data.each do |d|
28
+ url, width, height, image_type, removed = d.split(",")
29
+ # Just return one
30
+ if image_type == 'portrait' and array[:portrait] == nil
31
+ array[:portrait] = url
32
+ elsif image_type == 'landscape' and array[:landscape] == nil
33
+ array[:landscape] = url
34
+ else
35
+ # We don't add the ones already specified above.
36
+ array[:all] << {url: url, width: width, height: height, type: image_type}
37
+ end
38
+ end
39
+
40
+ array.to_hashugar
41
+ else
42
+ raise NotValid, "We failed to parse the document."
43
+ end
44
+
45
+ end
46
+
47
+ # Error
48
+ class NotValid < StandardError; end
49
+ class HTTPError < StandardError; end
50
+ end
51
+ end
52
+ end
data/lib/shin/data.rb ADDED
@@ -0,0 +1,26 @@
1
+ require_relative 'data/sfi'
2
+ require_relative 'data/dfi'
3
+ require_relative 'data/viasat'
4
+
5
+ module Shin
6
+ module Data
7
+ class << self
8
+ # I don't know why I need this
9
+ def new
10
+ self
11
+ end
12
+
13
+ def sfi
14
+ @sfi ||= Sfi.new
15
+ end
16
+
17
+ def dfi
18
+ @dfi ||= Dfi.new
19
+ end
20
+
21
+ def viasat
22
+ @viasat ||= Viasat.new
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,100 @@
1
+ ## OppetArkiv doesn't have an open API so let's parse their HTML
2
+ require 'date'
3
+ require 'time'
4
+
5
+ module Shin
6
+ module Play
7
+ class Oppetarkiv
8
+
9
+ def new
10
+ self
11
+ end
12
+
13
+ # Episodes
14
+ def episodes(params={})
15
+ raise MissingArgument, "You are missing the argument 'slug' which is required to use this source." unless params[:slug] != ""
16
+
17
+ # What to return
18
+ array = {title: nil, episodes: []}
19
+
20
+ total_pages = 999
21
+ (1..total_pages).each do |page_num|
22
+ # Response
23
+ response = Base.get('http://www.oppetarkiv.se/etikett/titel/' + params[:slug].to_s + '/?sida=' + page_num.to_s + '&sort=tid_stigande')
24
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
25
+
26
+ # Nokogiri parse
27
+ @main_noko = Nokogiri::HTML response.body rescue nil
28
+
29
+ # Can't be nil
30
+ if @main_noko != nil
31
+ # Title
32
+ array[:title] = @main_noko.css('span.svt-heading-l').text.strip rescue nil
33
+
34
+ # Episodes
35
+ @main_noko.css('div.svtoa-js-searchlist > article').map do |e|
36
+ @video_id = e.css('a')[0]['href'][/\/video\/(\d+)\//, 1].to_i rescue nil
37
+ @url = e.css('a')[0]['href'] rescue nil
38
+ @season = e.css('h2.svt-text-margin-small').text[/S.song\s+(\d+)/, 1].to_i rescue nil
39
+ @episode = e.css('h3.svt-heading-xs.svt-text-margin-medium').text[/Avsnitt\s+(\d+)/, 1].to_i rescue nil
40
+ @of_episode = e.css('h3.svt-heading-xs.svt-text-margin-medium').text[/Avsnitt\s+(\d+)\s+av\s+(\d+)/, 2].to_i rescue nil
41
+ @image = e.css('img.svtHide-No-Js')[0]['data-imagename'].gsub("ALTERNATES/medium", "ALTERNATES/extralarge") rescue nil
42
+
43
+ # Parse published_to
44
+ if e.css('time') != nil and e.css('time') != "" and pat = e.css('time')[0]['datetime']
45
+ @published_on = Time.parse(pat) rescue nil
46
+ end
47
+
48
+ # No episode info? Possible a subtitle
49
+ if @season < 1 and @episode < 1
50
+ @subtitle = e.css('h3.svt-heading-xs.svt-text-margin-medium > a')[0]['title'].strip
51
+ else
52
+ @subtitle = e.css('h3.svt-heading-xs.svt-text-margin-medium > a')[0]['title'].gsub("Avsnitt " + @episode.to_s + ' av ' + @of_episode.to_s + ':', '').gsub("Avsnitt " + @episode.to_s + ' av ' + @of_episode.to_s, '').strip
53
+ end
54
+
55
+ array[:episodes] << {id: @video_id, subtitle: @subtitle, image: @image, season: @season, episode: @episode, of_episodes: @of_episode, url: @url, published_on: @published_on}
56
+
57
+ end
58
+
59
+ # No more pages, break.
60
+ if @main_noko.css('a.svtoa-js-search-step-button').to_s == ""
61
+ break
62
+ end
63
+ else
64
+ raise NotValid, "Nokogiri failed to parse the HTML."
65
+ end
66
+ end
67
+
68
+ array.to_hashugar
69
+ end
70
+
71
+ # Programs
72
+ def programs
73
+ # Response
74
+ response = Base.get('http://www.oppetarkiv.se/kategori/titel')
75
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
76
+
77
+ # Nokogiri parse
78
+ @main_noko = Nokogiri::HTML response.body rescue nil
79
+
80
+ # Foreach programs
81
+ @array = []
82
+ if @main_noko != nil
83
+ @main_noko.css('ul.svtoa-anchor-list.svtColumns-1-2-3-4 > li').map do |p|
84
+ sluge = p.css('a')[0]['href'].strip[/titel\/(.*)\//, 1]
85
+ titlee = p.css('a').text
86
+ @array << {slug: sluge, title: titlee}
87
+ end
88
+ end
89
+
90
+ @array.to_hashugar
91
+ end
92
+
93
+
94
+ # Errors
95
+ class MissingArgument < StandardError; end
96
+ class HTTPError < StandardError; end
97
+ class NotValid < StandardError; end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,84 @@
1
+ ## SBSTV have an API but it isn't for public use
2
+ ## - Requires an domainname as they limit the programs for some
3
+ ## Docs: http://www.kanal5play.se/api
4
+ module Shin
5
+ module Play
6
+ class Sbstv
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 'sbstv_domain' which is required to use this source." unless Shin.get[:sbstv_domain] != nil
15
+
16
+ "http://www." + Shin.get[:sbstv_domain]
17
+ end
18
+
19
+ # Programs
20
+ def programs
21
+ domain = before()
22
+
23
+ # Response
24
+ response = Base.get(domain + '/api/listPrograms?format=FLASH')
25
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
26
+
27
+ # Data
28
+ data = Oj.load(response.body) rescue nil
29
+
30
+ # Multiple
31
+ if data != nil
32
+ data.to_hashugar
33
+ else
34
+ raise NotValid, "Couldn't parse the JSON"
35
+ end
36
+ end
37
+
38
+ # Videos
39
+ def videos(params={})
40
+ domain = before(params)
41
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
42
+
43
+ # Response
44
+ response = Base.get(domain + '/api/listVideos?format=FLASH&programId=' + params[:id].to_s )
45
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
46
+
47
+ # Data
48
+ data = Oj.load(response.body) rescue nil
49
+
50
+ # Multiple
51
+ if data != nil
52
+ data.to_hashugar
53
+ else
54
+ raise NotValid, "Couldn't parse the JSON"
55
+ end
56
+ end
57
+
58
+ # Video
59
+ def video(params={})
60
+ domain = before(params)
61
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
62
+
63
+ # Response
64
+ response = Base.get(domain + '/api/getVideo?format=FLASH&videoId=' + params[:id].to_s )
65
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
66
+
67
+ # Data
68
+ data = Oj.load(response.body) rescue nil
69
+
70
+ # Can't be nil
71
+ if data != nil
72
+ data.to_hashugar
73
+ else
74
+ raise NotValid, "Couldn't parse the JSON"
75
+ end
76
+ end
77
+
78
+ # Errors
79
+ class NotValid < StandardError; end
80
+ class MissingArgument < StandardError; end
81
+ class HTTPError < StandardError; end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,78 @@
1
+ ## TV4 Play have an API but it isn't for public use
2
+ module Shin
3
+ module Play
4
+ class Tv4play
5
+
6
+ def new
7
+ self
8
+ end
9
+
10
+ # Programs
11
+ def programs
12
+ # Response
13
+ response = Base.get('http://webapi.tv4play.se/play/programs?per_page=900&page=1')
14
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
15
+
16
+ # Data
17
+ data = Oj.load(response.body) rescue nil
18
+
19
+ # Can't be nil
20
+ if data != nil
21
+ data['results'].to_hashugar
22
+ else
23
+ raise NotValid, "Couldn't parse the JSON"
24
+ end
25
+
26
+ end
27
+
28
+ # Videos
29
+ def videos(params={})
30
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
31
+
32
+ # Response
33
+ response = Base.get('http://webapi.tv4play.se/play/video_assets?type=episode&is_live=false&platform=web&per_page=99999&node_nids=' + params[:id].to_s)
34
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
35
+
36
+ # Data
37
+ data = Oj.load(response.body) rescue nil
38
+
39
+ # Can't be nil
40
+ if data != nil
41
+ data['results'].to_hashugar
42
+ else
43
+ raise NotValid, "Couldn't parse the JSON"
44
+ end
45
+
46
+ end
47
+
48
+ # Video
49
+ def video(params={})
50
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
51
+
52
+ # Response
53
+ response = Base.get('http://webapi.tv4play.se/play/video_assets?id=' + params[:id].to_s)
54
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
55
+
56
+ # Data
57
+ data = Oj.load(response.body) rescue nil
58
+
59
+ # Can't be nil
60
+ if data != nil
61
+ if data['total_hits'] == 0
62
+ raise NotValid, "No results"
63
+ else
64
+ data['results'].first.to_hashugar
65
+ end
66
+
67
+ else
68
+ raise NotValid, "Couldn't parse the JSON"
69
+ end
70
+ end
71
+
72
+ # Errors
73
+ class NotValid < StandardError; end
74
+ class MissingArgument < StandardError; end
75
+ class HTTPError < StandardError; end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,42 @@
1
+ ## UR Play doesn't have an open API so let's parse their HTML
2
+
3
+ module Shin
4
+ module Play
5
+ class Urplay
6
+
7
+ def new
8
+ self
9
+ end
10
+
11
+ # Programs
12
+ def programs
13
+ # Response
14
+ response = Base.get('http://www.urplay.se/A-O')
15
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
16
+
17
+ # Nokogiri parse
18
+ @main_noko = Nokogiri::HTML response.body rescue nil
19
+
20
+ if @main_noko != nil
21
+ @array = []
22
+ @main_noko.css('section#alphabet > ul > li').map do |p|
23
+ sluge = p.css('a')[0]['href'].strip.gsub("/Produkter/", '')
24
+ p.css('a > span').remove
25
+ titlee = p.css('a').text.strip
26
+ ide = sluge[/^(\d+)/, 1]
27
+ @array << {id: ide.to_i, slug: sluge, title: titlee}
28
+ end
29
+
30
+ @array.to_hashugar
31
+ else
32
+ raise NotValid, "Nokogiri failed to parse the HTML."
33
+ end
34
+
35
+ end
36
+
37
+ # Errors
38
+ class NotValid < StandardError; end
39
+ class HTTPError < StandardError; end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,87 @@
1
+ ## Viasat (Play) have an API but it isn't for public use
2
+ module Shin
3
+ module Play
4
+ class Viasat
5
+
6
+ def new
7
+ self
8
+ end
9
+
10
+ # Videos
11
+ def videos(params={})
12
+ # Response
13
+ response = Base.get('http://playapi.mtgx.tv/v3/videos?' + URI.encode_www_form(params))
14
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
15
+
16
+ # Return this
17
+ ret = {page: nil, total_pages: nil, results: []}
18
+
19
+ # Data
20
+ data = Oj.load(response.body) rescue nil
21
+
22
+ # Can't be nil
23
+ if data != nil
24
+ ret[:page] = data['count']['page'].to_i
25
+ ret[:total_pages] = data['count']['total_pages'].to_i
26
+ ret[:results] = data["_embedded"]['videos']
27
+
28
+ ret.to_hashugar
29
+ else
30
+ raise NotValid, "Couldn't parse the JSON"
31
+ end
32
+
33
+ end
34
+
35
+ # Channels
36
+ def channels(params={})
37
+ page = params[:page] == "" ? params[:type] : 1
38
+
39
+ # Response
40
+ response = Base.get('http://playapi.mtgx.tv/v3/channels?' + URI.encode_www_form(params))
41
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
42
+
43
+ # Return this
44
+ ret = {page: nil, total_pages: nil, results: []}
45
+
46
+ # Data
47
+ data = Oj.load(response.body) rescue nil
48
+
49
+ # Can't be nil
50
+ if data != nil
51
+ ret[:page] = data['count']['page'].to_i
52
+ ret[:total_pages] = data['count']['total_pages'].to_i
53
+ ret[:results] = data["_embedded"]['channels']
54
+
55
+ ret.to_hashugar
56
+ else
57
+ raise NotValid, "Couldn't parse the JSON"
58
+ end
59
+
60
+ end
61
+
62
+ # Video
63
+ def video(params={})
64
+ raise MissingArgument, "You are missing the argument 'id' which is required to use this source." unless params[:id] != ""
65
+
66
+ # Response
67
+ response = Base.get('http://playapi.mtgx.tv/v3/videos/' + params[:id].to_s)
68
+ raise HTTPError, "The response didn't have a 200 HTTP Code. It had #{response.code}." unless response.code == 200
69
+
70
+ # Data
71
+ data = Oj.load(response.body) rescue nil
72
+
73
+ # Can't be nil
74
+ if data != nil
75
+ data.to_hashugar
76
+ else
77
+ raise NotValid, "Couldn't parse the JSON"
78
+ end
79
+ end
80
+
81
+ # Errors
82
+ class NotValid < StandardError; end
83
+ class MissingArgument < StandardError; end
84
+ class HTTPError < StandardError; end
85
+ end
86
+ end
87
+ end
data/lib/shin/play.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  require_relative 'play/svtplay'
2
2
  require_relative 'play/viki'
3
- #require_relative 'play/tv4play'
4
- #require_relative 'play/urplay'
3
+ require_relative 'play/oppetarkiv'
4
+ require_relative 'play/tv4play'
5
+ require_relative 'play/urplay'
6
+ require_relative 'play/sbstv'
5
7
  #require_relative 'play/viaplay'
6
8
  #require_relative 'play/netflix'
7
- #require_relative 'play/viasat'
9
+ require_relative 'play/viasat'
8
10
  #require_relative 'play/headweb'
9
11
  #require_relative 'play/film2home'
10
12
  #require_relative 'play/plejmo'
13
+ #require_relative 'play/hbonordic'
11
14
 
12
15
  module Shin
13
16
  module Play
@@ -17,13 +20,41 @@ module Shin
17
20
  self
18
21
  end
19
22
 
23
+ # SVTPLAY.SE (SWEDISH CONTENT)
20
24
  def svtplay
21
25
  @svtplay ||= Svtplay.new
22
26
  end
23
27
 
28
+ # VIKI.COM (ASIAN CONTENT)
24
29
  def viki
25
30
  @viki ||= Viki.new
26
31
  end
32
+
33
+ # OPPETARKIV.SE (SWEDISH CONTENT)
34
+ def oppetarkiv
35
+ @oppetarkiv ||= Oppetarkiv.new
36
+ end
37
+
38
+ # URPLAY.SE (SWEDISH CONTENT)
39
+ def urplay
40
+ @urplay ||= Urplay.new
41
+ end
42
+
43
+ # TV4PLAY.SE (SWEDISH CONTENT)
44
+ def tv4play
45
+ @tv4play ||= Tv4play.new
46
+ end
47
+
48
+ # SBSTV (K5, K9, K11) (SWEDISH CONTENT)
49
+ def sbstv
50
+ @sbstv ||= Sbstv.new
51
+ end
52
+
53
+ # Viasat (TV3 etc) (NORDIC CONTENT)
54
+ def viasat
55
+ @viasat ||= Viasat.new
56
+ end
57
+
27
58
  end
28
59
  end
29
60
  end
data/lib/shin/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Shin
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/shin.rb CHANGED
@@ -8,6 +8,7 @@ require_relative 'shin/httparty_icebox'
8
8
  require_relative 'shin/base'
9
9
  require_relative 'shin/reviews'
10
10
  require_relative 'shin/play'
11
+ require_relative 'shin/data'
11
12
 
12
13
  module Shin
13
14
  class Error < RuntimeError
@@ -39,5 +40,9 @@ module Shin
39
40
  def reviews
40
41
  @reviews ||= Reviews.new
41
42
  end
43
+
44
+ def data
45
+ @data ||= Data.new
46
+ end
42
47
  end
43
48
  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.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joakim Nylen
@@ -94,9 +94,18 @@ files:
94
94
  - README.textile
95
95
  - lib/shin.rb
96
96
  - lib/shin/base.rb
97
+ - lib/shin/data.rb
98
+ - lib/shin/data/dfi.rb
99
+ - lib/shin/data/sfi.rb
100
+ - lib/shin/data/viasat.rb
97
101
  - lib/shin/httparty_icebox.rb
98
102
  - lib/shin/play.rb
103
+ - lib/shin/play/oppetarkiv.rb
104
+ - lib/shin/play/sbstv.rb
99
105
  - lib/shin/play/svtplay.rb
106
+ - lib/shin/play/tv4play.rb
107
+ - lib/shin/play/urplay.rb
108
+ - lib/shin/play/viasat.rb
100
109
  - lib/shin/play/viki.rb
101
110
  - lib/shin/reviews.rb
102
111
  - lib/shin/reviews/kritiker.rb