atlas-utils 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bae9a183af4b390a18da60041426509857f69542f049544386c5b43aa2688569
4
+ data.tar.gz: 94c0efd9dc8c238d89fa52e8a82c17017072306f26d9ff9513378237dc1fd709
5
+ SHA512:
6
+ metadata.gz: f274726b8d638091376725d976434b467744cf964eba9e4ea9706fb477c3dffbe38245d0181d7d777813d104b0bbaa06d863dfe11b4656283ecf767e705a11a0
7
+ data.tar.gz: b61556b17264354e265c8991418eb74fbe46cb528bf54b9ece003aeff38ca666300abdd779afe0143638708d25ee54c6dffa07213e2baf021c73d1d175d3f6fb
@@ -0,0 +1,115 @@
1
+ module AtlasUtils
2
+ class Menu
3
+ def initialize(base_menu_url, base_pcms_url)
4
+ puts base_menu_url
5
+ puts base_pcms_url
6
+ puts "******"
7
+ @root_menu_url = base_menu_url
8
+ @root_pcms_url = base_pcms_url
9
+ end
10
+
11
+ def root_menu_collection
12
+ RestHelper.get_from_api(@root_menu_url)
13
+ end
14
+
15
+ def menu_json
16
+ api_response(@root_menu_url)
17
+ end
18
+
19
+ def sub_menu_json
20
+ menu_json['relationships']['items']['data'][1]['relationships']['items']['data']
21
+ end
22
+
23
+ def sub_menu_titles
24
+ sub_menu_json.map { |menu| menu['attributes']['title'] }
25
+ end
26
+
27
+ def api_response(url)
28
+ RestHelper.get_from_api(url)
29
+ end
30
+
31
+ def sub_menu_item_json(menu)
32
+ sub_menu_item_json = nil
33
+ sub_menu_json.each do |collection|
34
+ sub_menu_item_json = collection['relationships']['items']['data'] if collection['attributes']['alias'] == menu
35
+ end
36
+ sub_menu_item_json
37
+ end
38
+
39
+ def catalogue_group_json(menu, menu_item)
40
+ catalogue_group_json = nil
41
+ sub_menu_item_json = sub_menu_item_json(menu)
42
+ sub_menu_item_json.each do |sub_collection|
43
+ if sub_collection['attributes']['alias'].eql? menu_item
44
+ catalogue_group_json = sub_collection['relationships']['items']['data']
45
+ end
46
+ end
47
+ catalogue_group_json
48
+ end
49
+
50
+ def sub_menu_url(menu, menu_item)
51
+ return_url = nil
52
+ catalogue_group_json = catalogue_group_json(menu, menu_item)
53
+ catalogue_group_json.each do |catalogue_group_collection|
54
+ catalogue_collection_json = api_response(@root_pcms_url
55
+ .+ catalogue_group_collection['links']['self']
56
+ .+ '?represent=(items)')
57
+ return_url = catalogue_collection_json['relationships']['items']['data'][0]['links']['self']
58
+ return_url += '?represent=(items[take=50,skip=0])'
59
+ end
60
+ return_url
61
+ end
62
+
63
+ # possible to set asset as an integer (position) or a string (title) to get the attributes of a specific asset
64
+ # default is 1 (first asset in the view)
65
+ def movie_attributes(menu, sub_menu, asset = 1)
66
+ asset = get_asset_api_position(menu, sub_menu, asset) if asset.is_a? String
67
+ movies_details_from_api = api_response(@root_pcms_url + sub_menu_url(menu, sub_menu))
68
+ movies_details_from_api['relationships']['items']['data'][asset - 1]['attributes']
69
+ end
70
+
71
+ def movie_items_data(menu, sub_menu, movie_number = 1)
72
+ movies_details_from_api = api_response(@root_pcms_url + sub_menu_url(menu, sub_menu))
73
+ movie_url = movies_details_from_api['relationships']['items']['data'][movie_number - 1]['links']['self']
74
+ movie_data = api_response(@root_pcms_url + movie_url + '?represent=(items,recs)')
75
+ movie_data
76
+ end
77
+
78
+ def get_asset_api_position(menu, sub_menu, title)
79
+ all_titles_from_api = api_response(@root_pcms_url
80
+ .+ sub_menu_url(menu, sub_menu))['relationships']['items']['data']
81
+ all_titles_from_api.map! { |v| v['attributes']['title'] }
82
+ all_titles_from_api.index(title) + 1
83
+ end
84
+
85
+ def get_menu_title(menu_alias)
86
+ menu_title = nil
87
+ sub_menu_json.each do |collection|
88
+ menu_title = collection['attributes']['title'] if collection['attributes']['alias'] == menu_alias
89
+ end
90
+ menu_title
91
+ end
92
+
93
+ def get_menu_item_title(menu_alias, menu_item_alias)
94
+ menu_item_title = nil
95
+ sub_menu_item_json = sub_menu_item_json(menu_alias)
96
+ sub_menu_item_json.each do |sub_collection|
97
+ if sub_collection['attributes']['alias'].eql? menu_item_alias
98
+ menu_item_title = sub_collection['attributes']['title']
99
+ end
100
+ end
101
+ menu_item_title
102
+ end
103
+ end
104
+
105
+
106
+ def self.menu_api_helper
107
+ base_menu_url = "https://ie.api.atom.nowtv.com/adapter-atlas/v3/query/node/group_id/Home?represent=(items[where=(type=CATALOGUE/COLLECTION),take=1](items[where=(type=ASSET/PROGRAMME%7CCATALOGUE/SERIES%7CASSET/LINEAR%7CASSET/EPISODE%7CCATALOGUE/SEASON)]),items[where=(type=CATALOGUE/LINK)],items[where=(type=CATALOGUE/GROUP)](items[where=(type=CATALOGUE/COLLECTION),take=1](items[take=10]))))"
108
+ base_pcms_url = "http://ie.api.atom.nowtv.com"
109
+ puts "In MAH"
110
+ @menu_api_helper ||= AtlasUtils::Menu.new(base_menu_url, base_pcms_url)
111
+ end
112
+ end
113
+
114
+ require 'atlas_utils/rest_helper.rb'
115
+ require 'atlas_utils/test'
@@ -0,0 +1,107 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+
4
+ class RestHelper
5
+ def self.get_from_api(url, additional_headers = {})
6
+ headers = json_headers
7
+ headers.merge!(additional_headers)
8
+
9
+ puts "URL: #{url}"
10
+ puts "HEADERS: #{headers}"
11
+ puts "!!!!!!!!!!!!!!!!!!!!!!"
12
+ # $LOG.debug("URL: #{url}")
13
+ # $LOG.debug("HEADERS: #{headers}")
14
+
15
+ begin
16
+ tries ||= 3
17
+ api_response = RestClient.get(url, headers) { |response, _request| response }
18
+ puts "RESPONSE CODE: #{api_response.code}"
19
+ api_response.code.should be == 200
20
+ respo = JSON.parse(api_response)
21
+
22
+ pcms_pattern = %r{\/adapter-atlas\/v3\/query\/node\/(.*)}
23
+ if url.match(pcms_pattern)
24
+ puts "NODE ID FROM RESPONSE: #{respo['id']}"
25
+ expect(respo['id']).to eq(url.match(pcms_pattern)[1].split('?').first)
26
+ end
27
+ rescue
28
+ puts'RESCUE in get_from_api'
29
+ if (tries -= 1) > 0
30
+ puts'RETRY REQUEST'
31
+ retry
32
+ else
33
+ puts'REQUEST FAILED 3 TIMES'
34
+ raise 'REST HELPER - get_from_api error'
35
+ end
36
+ end
37
+ respo
38
+ end
39
+
40
+ def self.json_headers
41
+ headers = { 'Content-Type' => 'application/json',
42
+ 'x-skyott-proposition' => 'NOWTV',
43
+ 'x-skyott-language' => 'en',
44
+ 'x-skyott-territory' => 'GB',
45
+ 'x-skyott-platform' => 'APPLETV',
46
+ 'x-skyott-device' => 'IPSETTOPBOX' }
47
+
48
+ # headers['sky-resiliency'] = ENV['RESILIENCY_HEADER'] if ENV['RESILIENCY_HEADER']
49
+ headers
50
+ end
51
+
52
+ def self.get_from_api_search(url)
53
+ api_response = RestClient.get(url, json_headers_search) { |response, _request| response }
54
+ api_response.code.should be == 200
55
+ JSON.parse(api_response)
56
+ end
57
+
58
+ def self.json_headers_search
59
+ headers = { 'x-skyott-proposition' => 'NOWTV',
60
+ 'x-skyott-language' => 'en',
61
+ 'x-skyott-territory' => 'GB' }
62
+
63
+ # headers['sky-resiliency'] = ENV['RESILIENCY_HEADER'] if ENV['RESILIENCY_HEADER']
64
+ headers
65
+ end
66
+
67
+ # captcha
68
+ def self.clear_captcha_if_presented(sign_in_url, username, password)
69
+ sign_in_payload = 'userIdentifier='"#{username}"'&password='"#{password}"
70
+ api_response = RestClient.post(sign_in_url, sign_in_payload, rango_headers) { |response, _request| response }
71
+ puts "API Response: \n #{api_response}"
72
+ clear_captcha(JSON.parse(api_response)) unless api_response.code.eql?(201)
73
+ end
74
+
75
+ def self.clear_captcha(api_response)
76
+ captcha_url = 'https://uiapi.id.stage.nowtv.com/signin/securitycheck/service/international'
77
+ puts "Captcha URL: #{captcha_url}"
78
+ captcha_session_id = api_response['actions'][0]['fields'][2]['value']
79
+ captcha_id, captcha_value = get_captcha(captcha_url)
80
+ puts "captchaid, value : #{captcha_id}, #{captcha_value}"
81
+ send_captcha(captcha_url, captcha_id, captcha_value, captcha_session_id)
82
+ end
83
+
84
+ def self.send_captcha(captcha_url, captcha_id, captcha_value, captcha_session_id)
85
+ payload = 'captcha='"#{captcha_value}"'&captchaId='"#{captcha_id}"'&captchaSessionId='"#{captcha_session_id}"
86
+ puts "send captcha payload #{payload}"
87
+ api_response = RestClient.post(captcha_url, payload, rango_headers) { |response, _request| response }
88
+ puts "response code : #{api_response.code}"
89
+ puts "response : #{api_response}"
90
+ end
91
+
92
+ def self.get_captcha(captcha_url)
93
+ api_response = RestClient.post(captcha_url, '', rango_headers) { |response, _request| response }
94
+ captcha_id = JSON.parse(api_response)['properties']['captchaId']
95
+ captcha_value = api_response.cookies['captchaValue']
96
+ [captcha_id, captcha_value]
97
+ end
98
+
99
+ def self.rango_headers
100
+ {
101
+ 'content-type' => 'application/x-www-form-urlencoded',
102
+ 'x-skyott-provider' => 'NOWTV',
103
+ 'x-skyott-territory' => 'GB'
104
+ }
105
+ end
106
+ # end of captcha
107
+ end
@@ -0,0 +1,7 @@
1
+ module AtlasUtils
2
+ class WhoIs
3
+ def self.awesome?
4
+ puts "PRIYA IS AWESOME!!"
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: atlas-utils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Sripriya Raghunatha
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-08-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: sripriya.raghunatha@sky.uk
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/atlas_utils.rb
20
+ - lib/atlas_utils/rest_helper.rb
21
+ - lib/atlas_utils/test.rb
22
+ homepage:
23
+ licenses: []
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.7.7
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: atlas-utils is the best
45
+ test_files: []