create test, tweak config, add data

This commit is contained in:
Ismaël Moret
2025-09-25 17:08:18 +00:00
parent 09e5375a09
commit f04802d377
6 changed files with 4264 additions and 12 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,549 @@
{
"result": {
"objectType": "KalturaAssetListResponse",
"totalCount": 2,
"objects": [
{
"objectType": "KalturaProgramAsset",
"createDate": 1758758403,
"description": "Jorge Gabriel e Sónia Araújo dão-lhe as boas vindas à Praça da Alegria! Porque sabemos que gosta da nossa companhia, oferecemos boa disposição até à hora de almoço! De segunda a sexta-feira, a Praça da Alegria leva até si a melhor música, as últimas tendências da moda e conselhos úteis.",
"endDate": 1758715145,
"externalId": "588376035_imi:110_88376035",
"id": 201100899,
"images": [
{
"objectType": "KalturaMediaImage",
"id": "3001e4d3e5ef4fbdb702160fef74eea6",
"imageTypeId": 93,
"imageTypeName": "cc",
"ratio": "cc",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3001e4d3e5ef4fbdb702160fef74eea6/version/0",
"version": 0
},
{
"objectType": "KalturaMediaImage",
"id": "5c46aaaa49014c9c9c7dca2d1886031b",
"imageTypeId": 91,
"imageTypeName": "bg",
"ratio": "bg",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5c46aaaa49014c9c9c7dca2d1886031b/version/0",
"version": 0
}
],
"indexStatus": "Ok",
"metas": {
"onAir start time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 08:58:04"
},
"onAir end time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 11:59:05"
},
"channel ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "110"
},
"display duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT03H01M01S"
},
"actual duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT03H01M01S"
},
"sign language available": {
"objectType": "KalturaMultilingualStringValue",
"value": "true"
},
"series ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23284266"
},
"unifiedSeriesID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23284266"
},
"season ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23284266_1"
},
"season number": {
"objectType": "KalturaMultilingualStringValue",
"value": "1"
},
"year": {
"objectType": "KalturaMultilingualStringValue",
"value": "2025"
},
"episode name": {
"objectType": "KalturaMultilingualStringValue",
"value": "qua 24-set, 10:00"
},
"program unique ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "588376035"
},
"catchupInHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"catchupOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"startOver": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"allowRecording": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"downloadable": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"liveTVOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"timeShifting": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
}
},
"name": "Praça da Alegria",
"relatedEntities": {},
"startDate": 1758704284,
"tags": {
"genre": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Talk Show"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Entretenimento"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Série"
}
]
},
"genre_desc": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "3300"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "BF02"
}
]
},
"actors": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Jorge Gabriel"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Sónia Araújo"
}
]
},
"parental Rating": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "0"
}
]
},
"country of production": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "PT"
}
]
},
"contentTags": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_rec=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_cu_rb=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_npvr=1"
}
]
}
},
"type": 0,
"updateDate": 1758758403,
"enableCatchUp": true,
"enableCdvr": false,
"crid": "588376035",
"epgChannelId": 3028,
"epgId": "588376035_imi:110_88376035",
"externalOfferIds": "",
"linearAssetId": 636403,
"relatedMediaId": 0,
"enableStartOver": true,
"enableTrickPlay": false
},
{
"objectType": "KalturaProgramAsset",
"createDate": 1758758403,
"description": "Todos os dias, às 13 horas, a sua hora de almoço é completada com a atualização das notícias que marcam a atualidade nacional e mundial, desde a política, a economia, a sociedade e o desporto. Reportagens no local, entrevistas em direto e sempre a isenção e o respeito pela verdade.[S]",
"endDate": 1758720514,
"externalId": "588376037_imi:110_88376037",
"id": 201100900,
"images": [
{
"objectType": "KalturaMediaImage",
"id": "b0b25552f0144f1782381c7fa6d56d72",
"imageTypeId": 93,
"imageTypeName": "cc",
"ratio": "cc",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b0b25552f0144f1782381c7fa6d56d72/version/0",
"version": 0
},
{
"objectType": "KalturaMediaImage",
"id": "d49334a417d945cf8f651cfb044cda6e",
"imageTypeId": 91,
"imageTypeName": "bg",
"ratio": "bg",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d49334a417d945cf8f651cfb044cda6e/version/0",
"version": 0
}
],
"indexStatus": "Ok",
"metas": {
"onAir start time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 11:59:05"
},
"onAir end time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 13:28:34"
},
"channel ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "110"
},
"display duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT01H29M29S"
},
"actual duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT01H29M29S"
},
"sign language available": {
"objectType": "KalturaMultilingualStringValue",
"value": "true"
},
"series ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23319459"
},
"unifiedSeriesID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23319459"
},
"season ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23319459_1"
},
"season number": {
"objectType": "KalturaMultilingualStringValue",
"value": "1"
},
"year": {
"objectType": "KalturaMultilingualStringValue",
"value": "2025"
},
"episode name": {
"objectType": "KalturaMultilingualStringValue",
"value": "qua 24-set, 12:59"
},
"program unique ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "588376037"
},
"catchupInHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"catchupOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"startOver": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"allowRecording": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"downloadable": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"liveTVOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"timeShifting": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
}
},
"name": "Jornal da Tarde",
"relatedEntities": {},
"startDate": 1758715145,
"tags": {
"genre": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Notícias"
}
]
},
"genre_desc": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "2000"
}
]
},
"actors": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Carlos Daniel"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Hélder Silva"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Sandra Fernandes Pereira"
}
]
},
"subtitles available": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "POR"
}
]
},
"parental Rating": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "0"
}
]
},
"country of production": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "PT"
}
]
},
"contentTags": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_rec=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_cu_rb=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_npvr=1"
}
]
}
},
"type": 0,
"updateDate": 1758758403,
"enableCatchUp": true,
"enableCdvr": false,
"crid": "588376037",
"epgChannelId": 3028,
"epgId": "588376037_imi:110_88376037",
"externalOfferIds": "",
"linearAssetId": 636403,
"relatedMediaId": 0,
"enableStartOver": true,
"enableTrickPlay": false
}
]
}
}

View File

@@ -0,0 +1,845 @@
{
"result": {
"objectType": "KalturaAssetListResponse",
"totalCount": 3,
"objects": [
{
"objectType": "KalturaProgramAsset",
"createDate": 1758758403,
"description": "Violeta garante a Plínio que vai descobrir identidade de Marcelona. Norberto exige que Diva minta e diga a Isabel que é cúmplice de Eduardo há muito tempo. Dóris não gosta do plano. Eduardo vai a casa de Abigail, acompanhado pela polícia e por um oficial de justiça, e exige ver a sua filha.[S]",
"endDate": 1758723797,
"externalId": "223404039_imi:110_88376039",
"id": 201100901,
"images": [
{
"objectType": "KalturaMediaImage",
"id": "4b7924534a4d448d933dd91e5fed7378",
"imageTypeId": 93,
"imageTypeName": "cc",
"ratio": "cc",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4b7924534a4d448d933dd91e5fed7378/version/0",
"version": 0
},
{
"objectType": "KalturaMediaImage",
"id": "3647ca57ed0442ed967f822c72295543",
"imageTypeId": 91,
"imageTypeName": "bg",
"ratio": "bg",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3647ca57ed0442ed967f822c72295543/version/0",
"version": 0
}
],
"indexStatus": "Ok",
"metas": {
"onAir start time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 13:28:34"
},
"onAir end time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 14:23:17"
},
"channel ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "110"
},
"display duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT00H54M43S"
},
"actual duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT00H54M43S"
},
"sign language available": {
"objectType": "KalturaMultilingualStringValue",
"value": "false"
},
"episode num": {
"objectType": "KalturaMultilingualStringValue",
"value": "73"
},
"series ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "IPS1099983H"
},
"unifiedSeriesID": {
"objectType": "KalturaMultilingualStringValue",
"value": "IPS1099983H"
},
"season ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "IPS1099983H_152908"
},
"season number": {
"objectType": "KalturaMultilingualStringValue",
"value": "1"
},
"year": {
"objectType": "KalturaMultilingualStringValue",
"value": "2025"
},
"program unique ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "223404039"
},
"catchupInHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"catchupOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"startOver": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"allowRecording": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"downloadable": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"liveTVOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"timeShifting": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
}
},
"name": "Balacobaco",
"relatedEntities": {},
"startDate": 1758720514,
"tags": {
"genre": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Telenovela"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Filmes e séries"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Série"
}
]
},
"genre_desc": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "1510"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "BF02"
}
]
},
"actors": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Juliana Silveira"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Roger Gobeth"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Letícia Medina"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Bruno Ferrari"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Barbara Borges"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Roberta Gualda"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Victor Pecoraro"
}
]
},
"director": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Edson Spinello"
}
]
},
"subtitles available": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "POR"
}
]
},
"parental Rating": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "12"
}
]
},
"country of production": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "BR"
}
]
},
"contentTags": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_rec=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_cu_rb=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_npvr=1"
}
]
}
},
"type": 0,
"updateDate": 1758758403,
"enableCatchUp": true,
"enableCdvr": false,
"crid": "223404039",
"epgChannelId": 3028,
"epgId": "223404039_imi:110_88376039",
"externalOfferIds": "",
"linearAssetId": 636403,
"relatedMediaId": 0,
"enableStartOver": true,
"enableTrickPlay": false
},
{
"objectType": "KalturaProgramAsset",
"createDate": 1758758403,
"description": "Pensado a partir da essência da apresentadora, Tânia Ribas de Oliveira, o programa \"A Nossa Tarde\" tem, por isso, um lado mais emocional, com base em histórias com final feliz, e um lado muito divertido, ou não fosse a nossa Tânia uma pessoa que gosta de dar umas belas e sonoras gargalhadas.",
"endDate": 1758731404,
"externalId": "588376040_imi:110_88376040",
"id": 201100902,
"images": [
{
"objectType": "KalturaMediaImage",
"id": "def9b5a85bce4d089fec377039ddf0c5",
"imageTypeId": 93,
"imageTypeName": "cc",
"ratio": "cc",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/def9b5a85bce4d089fec377039ddf0c5/version/0",
"version": 0
},
{
"objectType": "KalturaMediaImage",
"id": "5843e2a8b8ba420683bbbbdcacf07370",
"imageTypeId": 91,
"imageTypeName": "bg",
"ratio": "bg",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5843e2a8b8ba420683bbbbdcacf07370/version/0",
"version": 0
}
],
"indexStatus": "Ok",
"metas": {
"onAir start time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 14:23:17"
},
"onAir end time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 16:30:04"
},
"channel ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "110"
},
"display duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT02H06M47S"
},
"actual duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT02H06M47S"
},
"sign language available": {
"objectType": "KalturaMultilingualStringValue",
"value": "true"
},
"series ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23312925"
},
"unifiedSeriesID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23312925"
},
"season ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "23312925_1"
},
"season number": {
"objectType": "KalturaMultilingualStringValue",
"value": "1"
},
"year": {
"objectType": "KalturaMultilingualStringValue",
"value": "2025"
},
"episode name": {
"objectType": "KalturaMultilingualStringValue",
"value": "qua 24-set, 15:22"
},
"program unique ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "588376040"
},
"catchupInHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"catchupOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"startOver": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"allowRecording": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"downloadable": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"liveTVOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"timeShifting": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
}
},
"name": "A Nossa Tarde",
"relatedEntities": {},
"startDate": 1758723797,
"tags": {
"genre": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Talk Show"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Entretenimento"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "Série"
}
]
},
"genre_desc": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "3300"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "BF02"
}
]
},
"actors": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Tânia Ribas de Oliveira"
}
]
},
"parental Rating": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "0"
}
]
},
"country of production": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "PT"
}
]
},
"contentTags": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_rec=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_cu_rb=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_npvr=1"
}
]
}
},
"type": 0,
"updateDate": 1758758403,
"enableCatchUp": true,
"enableCdvr": false,
"crid": "588376040",
"epgChannelId": 3028,
"epgId": "588376040_imi:110_88376040",
"externalOfferIds": "",
"linearAssetId": 636403,
"relatedMediaId": 0,
"enableStartOver": true,
"enableTrickPlay": false
},
{
"objectType": "KalturaProgramAsset",
"createDate": 1758758403,
"description": "A atualidade diária do nosso país. \"Portugal em Direto\" é um espaço de informação nacional apresentado pela jornalista Dina Aguiar, que aposta na atualidade nacional, sempre atenta aos problemas das populações, contando para isso com o empenhamento e colaboração dos centros regionais da RTP.[S]",
"endDate": 1758737231,
"externalId": "588376042_imi:110_88376042",
"id": 201100903,
"images": [
{
"objectType": "KalturaMediaImage",
"id": "2c2cccad63a84a0ea7b00b5110d6cca9",
"imageTypeId": 93,
"imageTypeName": "cc",
"ratio": "cc",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2c2cccad63a84a0ea7b00b5110d6cca9/version/0",
"version": 0
},
{
"objectType": "KalturaMediaImage",
"id": "171c2d78bf14495f9221844320d263ad",
"imageTypeId": 91,
"imageTypeName": "bg",
"ratio": "bg",
"url": "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/171c2d78bf14495f9221844320d263ad/version/0",
"version": 0
}
],
"indexStatus": "Ok",
"metas": {
"onAir start time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 16:30:04"
},
"onAir end time": {
"objectType": "KalturaMultilingualStringValue",
"value": "09/24/2025 18:07:11"
},
"channel ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "110"
},
"display duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT01H37M07S"
},
"actual duration": {
"objectType": "KalturaMultilingualStringValue",
"value": "PT01H37M07S"
},
"sign language available": {
"objectType": "KalturaMultilingualStringValue",
"value": "true"
},
"series ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "2326250"
},
"unifiedSeriesID": {
"objectType": "KalturaMultilingualStringValue",
"value": "2326250"
},
"season ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "2326250_1"
},
"season number": {
"objectType": "KalturaMultilingualStringValue",
"value": "1"
},
"year": {
"objectType": "KalturaMultilingualStringValue",
"value": "2025"
},
"episode name": {
"objectType": "KalturaMultilingualStringValue",
"value": "qua 24-set, 17:30"
},
"program unique ID": {
"objectType": "KalturaMultilingualStringValue",
"value": "588376042"
},
"catchupInHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"catchupOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"startOver": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"allowRecording": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"downloadable": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"liveTVOutOfHome": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
},
"timeShifting": {
"objectType": "KalturaMultilingualStringValue",
"value": "yes"
}
},
"name": "Portugal em Direto",
"relatedEntities": {},
"startDate": 1758731404,
"tags": {
"genre": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Notícias"
}
]
},
"genre_desc": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "2000"
}
]
},
"actors": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "Dina Aguiar"
}
]
},
"subtitles available": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "POR"
}
]
},
"parental Rating": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "0"
}
]
},
"country of production": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "PT"
}
]
},
"contentTags": {
"objectType": "KalturaMultilingualStringValueArray",
"objects": [
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_rec=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "g_cu_rb=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "s_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_live_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_restart_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_catchup_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "m_npvr_ooh=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_en=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_live=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_restart=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_catchup=1"
},
{
"objectType": "KalturaMultilingualStringValue",
"value": "w_npvr=1"
}
]
}
},
"type": 0,
"updateDate": 1758758403,
"enableCatchUp": true,
"enableCdvr": false,
"crid": "588376042",
"epgChannelId": 3028,
"epgId": "588376042_imi:110_88376042",
"externalOfferIds": "",
"linearAssetId": 636403,
"relatedMediaId": 0,
"enableStartOver": true,
"enableTrickPlay": false
}
]
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -3,15 +3,19 @@ const axios = require('axios')
const API_ENDPOINT = 'https://cdn.pt.vtv.vodafone.com/epg'
const headers = {
Origin: 'https://www.vodafone.pt',
Referer: 'https://www.vodafone.pt/',
'User-Agent': 'Mozilla/5.0 (compatible; tv_grab_pt_vodafone)',
Accept: 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'pt-PT,pt;q=0.9,en;q=0.8'
}
module.exports = {
site: 'vodafone.pt',
days: 2,
headers: {
Origin: 'https://www.vodafone.pt',
Referer: 'https://www.vodafone.pt/',
'User-Agent': 'Mozilla/5.0 (compatible; tv_grab_pt_vodafone)',
Accept: 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'pt-PT,pt;q=0.9,en;q=0.8'
request: {
headers
},
url: function ({ channel, date }) {
const datetime = DateTime.fromJSDate(date.toDate()).setZone('Europe/Lisbon')
@@ -22,16 +26,19 @@ module.exports = {
async parser({ content, date, channel }) {
let programs = []
let items = parseItems(content)
if (!items.length) return programs
if (items.length === 0) return programs
const datetime = DateTime.fromJSDate(date.toDate()).setZone('Europe/Lisbon')
const formattedMonth = datetime.month < 10 ? `0${datetime.month}` : datetime.month
const formattedDay = datetime.day < 10 ? `0${datetime.day}` : datetime.day
// map all periods of time to promises in order to get a full schedule in one row
// Fetch the remaining 3 periods to get a full day schedule
const promises = [
axios.get(`${API_ENDPOINT}${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/06-12`, { headers: this.headers }),
axios.get(`${API_ENDPOINT}${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/12-18`, { headers: this.headers }),
axios.get(`${API_ENDPOINT}${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/18-24`, { headers: this.headers })
axios.get(`${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/06-12`, { headers }),
axios.get(`${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/12-18`, { headers }),
axios.get(`${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/18-00`, { headers })
]
await Promise.allSettled(promises).then(results => {
results.forEach(r => {
if (r.status === 'fulfilled') {
@@ -39,8 +46,9 @@ module.exports = {
}
})
})
for (let item of items) {
if (!item.startDate || !item.endDate) return
if (!item.startDate || !item.endDate) continue
let start = DateTime.fromSeconds(item.startDate, { zone: 'UTC' }).toUTC()
let stop = DateTime.fromSeconds(item.endDate, { zone: 'UTC' }).toUTC()
if (stop < start) {

View File

@@ -1 +1,103 @@
import { parser, url, request } from './vodafone.pt.config.js'
const axios = require('axios')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-09-24', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '3028',
xmltv_id: 'RTP1.pt'
}
const headers = {
Origin: 'https://www.vodafone.pt',
Referer: 'https://www.vodafone.pt/',
'User-Agent': 'Mozilla/5.0 (compatible; tv_grab_pt_vodafone)',
Accept: 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'pt-PT,pt;q=0.9,en;q=0.8'
}
jest.mock('axios')
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://cdn.pt.vtv.vodafone.com/epg/3028/2025/09/24/00-06'
)
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject(headers)
})
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content_0006.json'), 'utf8')
axios.get.mockImplementation((url, config) => {
if (
url ===
'https://cdn.pt.vtv.vodafone.com/epg/3028/2025/09/24/06-12' &&
JSON.stringify(config.headers) === JSON.stringify(headers)
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/content_0612.json'), 'utf8')
})
} else if (
url ===
'https://cdn.pt.vtv.vodafone.com/epg/3028/2025/09/24/12-18' &&
JSON.stringify(config.headers) === JSON.stringify(headers)
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/content_1218.json'), 'utf8')
})
} else if (
url ===
'https://cdn.pt.vtv.vodafone.com/epg/3028/2025/09/24/18-00' &&
JSON.stringify(config.headers) === JSON.stringify(headers)
) {
return Promise.resolve({
data: fs.readFileSync(path.resolve(__dirname, '__data__/content_1824.json'), 'utf8')
})
} else {
return Promise.resolve({ data: '' })
}
})
let results = await parser({ content, channel, date })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
// first set has 15 programs, check first and last
expect(results).toHaveLength(15)
expect(results[0]).toMatchObject({
start: '2025-09-24T00:19:18.000Z',
stop: '2025-09-24T01:15:01.000Z',
title: 'Balacobaco',
description:
'Taís decide contar à avó a verdade sobre a morte de Teresa. Catarina aumenta a chantagem com Arthur e pede-lhe um apartamento em Nova Iorque para continuar a encontrar-se com ele. Arthur aceita a proposta. Lígia conta a Eduardo que a conta bancária de Arthur tem levantamentos astronómicos.[S]',
})
expect(results[14]).toMatchObject({
start: '2025-09-24T23:28:00.000Z',
stop: '2025-09-25T00:11:00.000Z',
title: 'Janela Indiscreta',
description: 'O Janela Indiscreta é o seu programa de cinema! Apresenta, em primeira mão, estreias cinematográficas e entrevistas exclusivas aos protagonistas das produções nacionais e internacionais, dando a conhecer curiosidades e histórias de bastidores.[S]',
})
})
it('can handle empty guide', done => {
parser({content:'{}', channel, date})
.then(result => {
expect(result).toMatchObject([])
done()
})
.catch(done)
})