poms 1.2.2 → 2.0.0.a

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +17 -0
  3. data/.rubocop.yml +24 -0
  4. data/.ruby-version +1 -0
  5. data/.todo.reek +50 -0
  6. data/CHANGELOG.md +1 -0
  7. data/Gemfile +4 -0
  8. data/README.md +54 -6
  9. data/bin/ci-run +57 -0
  10. data/bin/ci-setup +46 -0
  11. data/bin/reek +16 -0
  12. data/bin/rspec +16 -0
  13. data/bin/rubocop +16 -0
  14. data/examples/fetch.rb +16 -0
  15. data/examples/search.rb +17 -0
  16. data/lib/poms.rb +84 -156
  17. data/lib/poms/api/auth.rb +42 -22
  18. data/lib/poms/api/client.rb +58 -0
  19. data/lib/poms/api/drivers/net_http.rb +69 -0
  20. data/lib/poms/api/json_client.rb +35 -0
  21. data/lib/poms/api/pagination_client.rb +67 -0
  22. data/lib/poms/api/request.rb +29 -31
  23. data/lib/poms/api/response.rb +31 -0
  24. data/lib/poms/api/search.rb +38 -0
  25. data/lib/poms/api/uris.rb +10 -0
  26. data/lib/poms/api/uris/media.rb +41 -0
  27. data/lib/poms/api/uris/schedule.rb +28 -0
  28. data/lib/poms/configuration.rb +59 -0
  29. data/lib/poms/errors.rb +26 -0
  30. data/lib/poms/fields.rb +26 -3
  31. data/lib/poms/timestamp.rb +10 -3
  32. data/lib/poms/version.rb +1 -1
  33. data/poms.gemspec +10 -11
  34. metadata +59 -128
  35. data/Gemfile.lock +0 -120
  36. data/lib/poms/base.rb +0 -8
  37. data/lib/poms/broadcast.rb +0 -55
  38. data/lib/poms/builder.rb +0 -92
  39. data/lib/poms/builderless/broadcast.rb +0 -37
  40. data/lib/poms/builderless/clip.rb +0 -36
  41. data/lib/poms/connect.rb +0 -11
  42. data/lib/poms/has_ancestors.rb +0 -54
  43. data/lib/poms/has_base_attributes.rb +0 -29
  44. data/lib/poms/merged_series.rb +0 -28
  45. data/lib/poms/poms_error.rb +0 -5
  46. data/lib/poms/schedule_event.rb +0 -34
  47. data/lib/poms/season.rb +0 -13
  48. data/lib/poms/series.rb +0 -12
  49. data/lib/poms/views.rb +0 -52
  50. data/spec/fabricators/poms_fabricator.rb +0 -44
  51. data/spec/fixtures/poms_broadcast.json +0 -318
  52. data/spec/fixtures/poms_broadcast_multiple_schedule_events.json +0 -354
  53. data/spec/fixtures/poms_broadcast_pippi.json +0 -180
  54. data/spec/fixtures/poms_group.json +0 -1087
  55. data/spec/fixtures/poms_series.json +0 -49
  56. data/spec/fixtures/poms_single_broadcast_by_channel.json +0 -136
  57. data/spec/fixtures/poms_zapp.json +0 -47363
  58. data/spec/fixtures/vcr_cassettes/poms/builderless/broadcast_starts_at/returns_a_datetime.yml +0 -53
  59. data/spec/fixtures/vcr_cassettes/poms/builderless/clip/has_a_position.yml +0 -43
  60. data/spec/fixtures/vcr_cassettes/poms/builderless/clip/has_a_title.yml +0 -43
  61. data/spec/fixtures/vcr_cassettes/poms/builderless/clip/has_a_video_url.yml +0 -43
  62. data/spec/fixtures/vcr_cassettes/poms/builderless/clip/has_an_image_id.yml +0 -43
  63. data/spec/fixtures/vcr_cassettes/poms/fetch_broadcasts_fetch_current_broadcast_fetches_the_current_broadcast.yml +0 -60
  64. data/spec/fixtures/vcr_cassettes/poms/fetch_broadcasts_fetch_next_broadcast_and_key_fetches_the_current_broadcast.yml +0 -68
  65. data/spec/fixtures/vcr_cassettes/poms/fetch_broadcasts_fetch_next_broadcast_and_key_returns_the_key.yml +0 -68
  66. data/spec/fixtures/vcr_cassettes/poms/merged_series/turns_the_json_into_a_hash.yml +0 -46
  67. data/spec/fixtures/vcr_cassettes/poms_fetch/a_broadcast_has_scheduled_events_with_last_with_starts_at.yml +0 -43
  68. data/spec/fixtures/vcr_cassettes/poms_fetch/a_clip_has_a_title.yml +0 -43
  69. data/spec/fixtures/vcr_cassettes/poms_fetch/an_aankeiler_has_images.yml +0 -43
  70. data/spec/fixtures/vcr_cassettes/poms_fetch_broadcasts_for_serie/returns_nil_when_a_broadcast_does_not_exist.yml +0 -42
  71. data/spec/fixtures/vcr_cassettes/poms_fetch_current_broadcast/has_a_mid.yml +0 -51
  72. data/spec/fixtures/vcr_cassettes/poms_fetch_current_broadcast/has_a_title.yml +0 -51
  73. data/spec/fixtures/vcr_cassettes/poms_fetch_current_broadcast/has_scheduled_events_with_last_with_starts_at.yml +0 -51
  74. data/spec/fixtures/vcr_cassettes/poms_fetch_current_broadcast_and_key/has_a_broadcast_with_a_mid.yml +0 -51
  75. data/spec/fixtures/vcr_cassettes/poms_fetch_current_broadcast_and_key/has_a_key.yml +0 -51
  76. data/spec/fixtures/vcr_cassettes/poms_fetch_descendant_mids/returns_a_list_of_mids.yml +0 -42
  77. data/spec/fixtures/vcr_cassettes/poms_fetch_descendants_for_serie/builds_a_list_of_broadcasts.yml +0 -102755
  78. data/spec/fixtures/vcr_cassettes/poms_fetch_group/has_a_child_with_a_media_type.yml +0 -448
  79. data/spec/fixtures/vcr_cassettes/poms_fetch_group/has_a_child_with_a_title.yml +0 -448
  80. data/spec/fixtures/vcr_cassettes/poms_fetch_playlist_clips/creates_an_array_of_clips.yml +0 -1051
  81. data/spec/integration/poms_spec.rb +0 -87
  82. data/spec/lib/poms/api/auth_spec.rb +0 -34
  83. data/spec/lib/poms/api/request_spec.rb +0 -30
  84. data/spec/lib/poms/broadcast_spec.rb +0 -49
  85. data/spec/lib/poms/builder_spec.rb +0 -53
  86. data/spec/lib/poms/builderless/broadcast_spec.rb +0 -11
  87. data/spec/lib/poms/builderless/clip_spec.rb +0 -20
  88. data/spec/lib/poms/fields_spec.rb +0 -63
  89. data/spec/lib/poms/merged_series_spec.rb +0 -26
  90. data/spec/lib/poms/schedule_event_spec.rb +0 -15
  91. data/spec/lib/poms/timestamp_spec.rb +0 -13
  92. data/spec/lib/poms/views_spec.rb +0 -38
  93. data/spec/lib/poms_spec.rb +0 -137
  94. data/spec/spec_helper.rb +0 -32
@@ -1,28 +0,0 @@
1
- require 'poms/api/request'
2
- require 'timeout'
3
-
4
- module Poms
5
- # Methods for working with the merged series api from NPO.
6
- module MergedSeries
7
- extend self
8
-
9
- TEST_URL = 'https://rs-test.poms.omroep.nl/v1/api/media/redirects/'.freeze
10
- PRODUCTION_URL = 'https://rs.poms.omroep.nl/v1/api/media/redirects/'.freeze
11
-
12
- # Gets the merged serie mids as a hash. Expects a JSON response from
13
- # the server with a `map` key.
14
- # Throws a PomsError if the call timeouts, has an HTTP error or JSON parse
15
- # error.
16
- #
17
- # @param api_url the API url to query
18
- # @return [Hash] a hash with old_mid => new_mid pairs
19
- def serie_mids(api_url = PRODUCTION_URL, key = '', secret = '', origin = '')
20
- Timeout.timeout(3) do
21
- data = Poms::Api::Request.new(api_url, key, secret, origin).call.read
22
- JSON.parse(data).fetch('map')
23
- end
24
- rescue OpenURI::HTTPError, JSON::ParserError, Timeout::Error => e
25
- raise Poms::PomsError, e.message
26
- end
27
- end
28
- end
@@ -1,5 +0,0 @@
1
- module Poms
2
- # A generic error for things that go wrong inside Poms.
3
- class PomsError < StandardError
4
- end
5
- end
@@ -1,34 +0,0 @@
1
- module Poms
2
- # POMS wrapper for a single scheduled broadcast.
3
- class ScheduleEvent < Poms::Builder::NestedOpenStruct
4
- def initialize(hash)
5
- @hash = hash
6
- set_start_and_end_times
7
- super @hash
8
- end
9
-
10
- private
11
-
12
- def set_start_and_end_times
13
- set_starts_at
14
- set_ends_at
15
- end
16
-
17
- def set_starts_at
18
- @hash[:starts_at] = case @hash[:start]
19
- when String, Integer
20
- Time.at @hash[:start] / 1000
21
- when Time
22
- @hash[:start]
23
- end
24
- end
25
-
26
- def set_ends_at
27
- @hash['ends_at'] = @hash[:starts_at] + duration
28
- end
29
-
30
- def duration
31
- (@hash[:duration].to_i / 1000).seconds
32
- end
33
- end
34
- end
data/lib/poms/season.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'poms/has_ancestors'
2
-
3
- module Poms
4
- # Poms wrapper for a season of a serie.
5
- class Season < Poms::Builder::NestedOpenStruct
6
- include Poms::HasBaseAttributes
7
- include Poms::HasAncestors
8
-
9
- def related_group_mids
10
- descendant_of.map(&:mid_ref)
11
- end
12
- end
13
- end
data/lib/poms/series.rb DELETED
@@ -1,12 +0,0 @@
1
- require 'poms/has_base_attributes'
2
-
3
- module Poms
4
- # POMS wrapper for a TV Serie.
5
- class Series < Poms::Builder::NestedOpenStruct
6
- include Poms::HasBaseAttributes
7
-
8
- def related_group_mids
9
- Poms.fetch_descendants_for_serie(mid, 'SEASON').map(&:mid)
10
- end
11
- end
12
- end
data/lib/poms/views.rb DELETED
@@ -1,52 +0,0 @@
1
- require 'poms/connect'
2
-
3
- module Poms
4
- # Views constructs the urls that can be used to access specific views in POMS.
5
- module Views
6
- include Poms::Connect
7
- extend self
8
-
9
- BASE_URL = 'http://docs.poms.omroep.nl'.freeze
10
- DEFAULT_OPTIONS = { reduce: false, include_docs: true }.freeze
11
- VIEW_PATH = '/media/_design/media/_view/'.freeze
12
-
13
- def get(mid)
14
- uri = "#{BASE_URL}/media/#{mid}"
15
- get_json(uri)
16
- end
17
-
18
- def by_group(mid)
19
- args = DEFAULT_OPTIONS.merge(key: "\"#{mid}\"")
20
- construct_view_url('by-group', args)
21
- end
22
-
23
- # Constructs a url using the by-ancestor-and-type view of Poms.
24
- def descendants_by_type(mid, type = 'BROADCAST', options = {})
25
- args = DEFAULT_OPTIONS.merge(key: "[\"#{mid}\", \"#{type}\"]")
26
- .merge(options)
27
- construct_view_url('by-ancestor-and-type', args)
28
- end
29
-
30
- def broadcasts_by_channel_and_start(channel, start_time = Time.now,
31
- end_time = 1.day.ago, limit = 1,
32
- descending = true)
33
- args = DEFAULT_OPTIONS.merge(
34
- startkey: "[\"#{channel}\", #{to_poms_timestamp(start_time)}]",
35
- endkey: "[\"#{channel}\", #{to_poms_timestamp(end_time)}]",
36
- limit: limit,
37
- descending: descending
38
- )
39
- construct_view_url('broadcasts-by-channel-and-start', args)
40
- end
41
-
42
- private
43
-
44
- def construct_view_url(view, args)
45
- "#{BASE_URL}#{VIEW_PATH}#{view}?#{args.to_query}"
46
- end
47
-
48
- def to_poms_timestamp(timestamp)
49
- timestamp.to_i * 1000
50
- end
51
- end
52
- end
@@ -1,44 +0,0 @@
1
- Fabricator(:poms_broadcast, class_name: :"Poms::Broadcast") do
2
- initialize_with do
3
- Poms::Builder.process_hash(
4
- JSON.parse File.read('spec/fixtures/poms_broadcast.json')
5
- )
6
- end
7
- end
8
-
9
- Fabricator(:poms_broadcast_pippi_langkous, class_name: :"Poms::Broadcast") do
10
- initialize_with do
11
- Poms::Builder.process_hash(
12
- JSON.parse File.read('spec/fixtures/poms_broadcast_pippi.json')
13
- )
14
- end
15
- end
16
-
17
- Fabricator(:poms_broadcast_multiple_schedule_events,
18
- class_name: :"Poms::Broadcast") do
19
- initialize_with do
20
- Poms::Builder.process_hash(
21
- JSON.parse(
22
- File.read('spec/fixtures/poms_broadcast_multiple_schedule_events.json')
23
- )
24
- )
25
- end
26
- end
27
-
28
- Fabricator(:poms_series, class_name: :"Poms::Series") do
29
- initialize_with do
30
- Poms::Builder.process_hash(
31
- JSON.parse File.read('spec/fixtures/poms_series.json')
32
- )
33
- end
34
- end
35
-
36
- Fabricator(:zapp_broadcasts, class_name: :array) do
37
- initialize_with do
38
- hash = JSON.parse File.read('spec/fixtures/poms_zapp.json')
39
- array = hash['rows'].take(10).map do |item|
40
- Poms::Builder.process_hash item['doc']
41
- end
42
- array
43
- end
44
- end
@@ -1,318 +0,0 @@
1
- {
2
- "_id": "KRO_1614405",
3
- "_rev": "60-77ca9ba680a9bf9f5215137163eb3a14",
4
- "avAttributes": {
5
- "audioAttributes": {
6
- "numberOfChannels": 2
7
- },
8
- "videoAttributes": {
9
- "aspectRatio": "16:9",
10
- "color": "BLACK_AND_WHITE_AND_COLOR"
11
- }
12
- },
13
- "avType": "VIDEO",
14
- "broadcasters": [
15
- "KRO",
16
- "Zapp"
17
- ],
18
- "creationDate": 1367962602891,
19
- "credits": [],
20
- "crids": [
21
- "crid://tmp.program.omroep.nl/15641304"
22
- ],
23
- "descendantOf": [
24
- {
25
- "midRef": "KRO_1521173",
26
- "type": "SEASON",
27
- "urnRef": "urn:vpro:media:group:15084154"
28
- },
29
- {
30
- "midRef": "POMS_S_KRO_059857",
31
- "type": "SERIES",
32
- "urnRef": "urn:vpro:media:group:5346131"
33
- }
34
- ],
35
- "descriptions": [
36
- {
37
- "owner": "BROADCASTER",
38
- "type": "MAIN",
39
- "value": "Li biedt Barry een baantje aan bij de uitdragerij en vraagt zich meteen af of dat wel zo slim was. Timon en Joep zien de criminele organisatie de Rijland Angels. Timon wil naar hun loods, maar is dat wel een goed idee?"
40
- },
41
- {
42
- "owner": "MIS",
43
- "type": "MAIN",
44
- "value": "Dramaserie voor de jeugd over liefde, kattenkwaad en avontuur."
45
- },
46
- {
47
- "owner": "CERES",
48
- "type": "MAIN",
49
- "value": "Li biedt Barry een baantje aan bij de uitdragerij en vraagt zich meteen af of dat wel zo slim was. Timon en Joep zien de criminele organisatie de Rijland Angels. Timon wil naar hun loods, maar is dat wel een goed idee?\n\t&nbsp;"
50
- },
51
- {
52
- "owner": "WHATS_ON",
53
- "type": "MAIN",
54
- "value": "Dramaserie voor de jeugd over liefde, kattenkwaad en avontuur."
55
- },
56
- {
57
- "owner": "CERES",
58
- "type": "SHORT",
59
- "value": "Li biedt Barry een baantje aan bij de uitdragerij en vraagt zich meteen af of dat wel zo slim was. Timon en Joep zien de criminele organisatie de Rijland Angels. Timon wil naar hun loods, maar is dat wel een goed idee?\n\t&nbsp;"
60
- }
61
- ],
62
- "duration": 1080000,
63
- "embeddable": true,
64
- "episodeOf": [
65
- {
66
- "added": 1369773120772,
67
- "highlighted": false,
68
- "index": 64,
69
- "midRef": "KRO_1521173",
70
- "type": "SEASON",
71
- "urnRef": "urn:vpro:media:group:15084154"
72
- }
73
- ],
74
- "images": [
75
- {
76
- "creationDate": 1368815299665,
77
- "description": "VRijland",
78
- "highlighted": false,
79
- "imageUri": "urn:vpro:image:184169",
80
- "lastModified": 1368815299705,
81
- "owner": "BROADCASTER",
82
- "title": "VRijland",
83
- "type": "PICTURE",
84
- "urn": "urn:vpro:media:image:25765753",
85
- "workflow": "PUBLISHED"
86
- },
87
- {
88
- "creationDate": 1369760424862,
89
- "description": "Li biedt Barry een baantje aan bij de uitdragerij en vraagt zich meteen af of dat wel zo slim was. Timon en Joep zien de criminele organisatie de Rijland Angels. Timon wil naar hun loods, maar is dat wel een goed idee?\n\t&nbsp;",
90
- "highlighted": false,
91
- "imageUri": "urn:vpro:image:187003",
92
- "lastModified": 1369760431467,
93
- "owner": "NEBO",
94
- "title": "VRijland",
95
- "type": "STILL",
96
- "urn": "urn:vpro:media:image:26079440",
97
- "workflow": "PUBLISHED"
98
- },
99
- {
100
- "creationDate": 1369760428232,
101
- "description": "Li biedt Barry een baantje aan bij de uitdragerij en vraagt zich meteen af of dat wel zo slim was. Timon en Joep zien de criminele organisatie de Rijland Angels. Timon wil naar hun loods, maar is dat wel een goed idee?\n\t&nbsp;",
102
- "highlighted": false,
103
- "imageUri": "urn:vpro:image:187004",
104
- "lastModified": 1369760431467,
105
- "owner": "NEBO",
106
- "title": "VRijland",
107
- "type": "STILL",
108
- "urn": "urn:vpro:media:image:26079441",
109
- "workflow": "PUBLISHED"
110
- },
111
- {
112
- "creationDate": 1369760431388,
113
- "description": "Li biedt Barry een baantje aan bij de uitdragerij en vraagt zich meteen af of dat wel zo slim was. Timon en Joep zien de criminele organisatie de Rijland Angels. Timon wil naar hun loods, maar is dat wel een goed idee?\n\t&nbsp;",
114
- "highlighted": false,
115
- "imageUri": "urn:vpro:image:187005",
116
- "lastModified": 1369760431468,
117
- "owner": "NEBO",
118
- "title": "VRijland",
119
- "type": "STILL",
120
- "urn": "urn:vpro:media:image:26079442",
121
- "workflow": "PUBLISHED"
122
- }
123
- ],
124
- "lastModified": 1369859493926,
125
- "locations": [
126
- {
127
- "avAttributes": {
128
- "avFileFormat": "HASP"
129
- },
130
- "creationDate": 1369760183309,
131
- "lastModified": 1369760183436,
132
- "owner": "CERES",
133
- "programUrl": "odip+http://odi.omroep.nl/video/adaptive/KRO_1614405",
134
- "type": "INTERNAL",
135
- "publishStop": 1369758599000,
136
- "urn": "urn:vpro:media:location:26079425",
137
- "workflow": "PUBLISHED"
138
- },
139
- {
140
- "avAttributes": {
141
- "avFileFormat": "MP4",
142
- "bitrate": 204800,
143
- "videoAttributes": {
144
- "aspectRatio": "16:9",
145
- "videoCoding": "WM"
146
- }
147
- },
148
- "creationDate": 1369765721479,
149
- "lastModified": 1369765721611,
150
- "owner": "NEBO",
151
- "programUrl": "odi+http://odi.omroep.nl/video/h264_sb/KRO_1614405",
152
- "publishStart": 1369758589000,
153
- "type": "EXTERNAL",
154
- "urn": "urn:vpro:media:location:26079907",
155
- "workflow": "PUBLISHED"
156
- },
157
- {
158
- "avAttributes": {
159
- "avFileFormat": "MP4",
160
- "bitrate": 512000,
161
- "videoAttributes": {
162
- "aspectRatio": "16:9",
163
- "videoCoding": "WM"
164
- }
165
- },
166
- "creationDate": 1369765721480,
167
- "lastModified": 1369765721613,
168
- "owner": "NEBO",
169
- "programUrl": "odi+http://odi.omroep.nl/video/h264_bb/KRO_1614405",
170
- "publishStart": 1369758589000,
171
- "type": "EXTERNAL",
172
- "urn": "urn:vpro:media:location:26079910",
173
- "workflow": "PUBLISHED"
174
- },
175
- {
176
- "avAttributes": {
177
- "avFileFormat": "MP4",
178
- "bitrate": 1024000,
179
- "videoAttributes": {
180
- "aspectRatio": "16:9",
181
- "videoCoding": "WM"
182
- }
183
- },
184
- "creationDate": 1369765721480,
185
- "lastModified": 1369765721614,
186
- "owner": "NEBO",
187
- "programUrl": "odi+http://odi.omroep.nl/video/h264_std/KRO_1614405",
188
- "publishStart": 1369758589000,
189
- "type": "EXTERNAL",
190
- "urn": "urn:vpro:media:location:26079913",
191
- "workflow": "PUBLISHED"
192
- },
193
- {
194
- "avAttributes": {
195
- "avFileFormat": "WVC1",
196
- "bitrate": 1024000,
197
- "videoAttributes": {
198
- "aspectRatio": "16:9",
199
- "videoCoding": "WM"
200
- }
201
- },
202
- "creationDate": 1369765721480,
203
- "lastModified": 1369765721615,
204
- "owner": "NEBO",
205
- "programUrl": "odi+http://odi.omroep.nl/video/wvc1_std/KRO_1614405",
206
- "publishStart": 1369758589000,
207
- "type": "EXTERNAL",
208
- "urn": "urn:vpro:media:location:26079916",
209
- "workflow": "PUBLISHED"
210
- },
211
- {
212
- "avAttributes": {
213
- "avFileFormat": "WM",
214
- "bitrate": 204800,
215
- "videoAttributes": {
216
- "aspectRatio": "16:9",
217
- "videoCoding": "WM"
218
- }
219
- },
220
- "creationDate": 1369765721479,
221
- "lastModified": 1369765721617,
222
- "owner": "NEBO",
223
- "programUrl": "odi+http://odi.omroep.nl/video/wmv_sb/KRO_1614405",
224
- "publishStart": 1369758589000,
225
- "type": "EXTERNAL",
226
- "urn": "urn:vpro:media:location:26079919",
227
- "workflow": "PUBLISHED"
228
- },
229
- {
230
- "avAttributes": {
231
- "avFileFormat": "WM",
232
- "bitrate": 512000,
233
- "videoAttributes": {
234
- "aspectRatio": "16:9",
235
- "videoCoding": "WM"
236
- }
237
- },
238
- "creationDate": 1369765721479,
239
- "lastModified": 1369765721618,
240
- "owner": "NEBO",
241
- "programUrl": "odi+http://odi.omroep.nl/video/wmv_bb/KRO_1614405",
242
- "publishStart": 1369758589000,
243
- "type": "EXTERNAL",
244
- "urn": "urn:vpro:media:location:26079922",
245
- "workflow": "PUBLISHED"
246
- }
247
- ],
248
- "mid": "KRO_1614405",
249
- "poProgID": "KRO_1614405",
250
- "poSeriesID": "KRO_1521173",
251
- "predictions": [
252
- {
253
- "state": "REALIZED",
254
- "publishStart": 1434172368000,
255
- "publishStop": 1435381968000,
256
- "platform": "INTERNETVOD"
257
- },
258
- {
259
- "state": "REALIZED",
260
- "publishStart": 1434172368000,
261
- "publishStop": 1435381968000,
262
- "platform": "TVVOD"
263
- }
264
- ],
265
- "scheduleEvents": [
266
- {
267
- "channel": "NED3",
268
- "duration": 1049000,
269
- "midRef": "KRO_1614405",
270
- "poProgID": "KRO_1614405",
271
- "poSeriesID": "KRO_1521173",
272
- "start": 1369757335000,
273
- "urnRef": "urn:vpro:media:program:25215266"
274
- }
275
- ],
276
- "segments": [],
277
- "sortDate": 1369757335000,
278
- "titles": [
279
- {
280
- "owner": "BROADCASTER",
281
- "type": "MAIN",
282
- "value": "VRijland"
283
- },
284
- {
285
- "owner": "NEBO",
286
- "type": "MAIN",
287
- "value": "VRijland"
288
- },
289
- {
290
- "owner": "MIS",
291
- "type": "MAIN",
292
- "value": "VRijland"
293
- },
294
- {
295
- "owner": "CERES",
296
- "type": "MAIN",
297
- "value": "VRijland"
298
- },
299
- {
300
- "owner": "WHATS_ON",
301
- "type": "MAIN",
302
- "value": "VRijland"
303
- },
304
- {
305
- "owner": "BROADCASTER",
306
- "type": "SUB",
307
- "value": "VRijland afl.64 & 65 (herhaling)"
308
- },
309
- {
310
- "owner": "CERES",
311
- "type": "EPISODE",
312
- "value": "VRijland afl.64 & 65 (herhaling)"
313
- }
314
- ],
315
- "type": "BROADCAST",
316
- "urn": "urn:vpro:media:program:25215266",
317
- "workflow": "PUBLISHED"
318
- }