1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-06-27 08:58:30 +00:00
This commit is contained in:
doe1080 2025-06-26 17:23:19 +03:00 committed by GitHub
commit 6cfccc8812
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 71 additions and 6 deletions

View File

@ -224,8 +224,15 @@ def test_search_json_ld_realworld(self):
} }
</script>''', </script>''',
{ {
'timestamp': 1636523400,
'title': 'md5:91fe569e952e4d146485740ae927662b', 'title': 'md5:91fe569e952e4d146485740ae927662b',
'categories': ['Κοινωνία'],
'creators': ['Ant1news'],
'description': 'md5:16756d0a18f33bf550e683d134a72f3c',
'modified_timestamp': 1636523573,
'release_timestamp': 1636523400,
'tags': 'count:6',
'thumbnails': [{'url': 'https://ant1media.azureedge.net/imgHandler/1100/a635c968-be71-447c-bf9c-80d843ece21e.jpg'}],
'uploader': 'Ant1news',
}, },
{'expected_type': 'NewsArticle'}, {'expected_type': 'NewsArticle'},
), ),
@ -328,6 +335,54 @@ def test_search_json_ld_realworld(self):
}, },
{}, {},
), ),
(
r'''
<script type="application/ld+json">
{"@context":"https://schema.org",
"@type":"NewsArticle",
"mainEntityOfPage":{
"@type":"WebPage",
"@id":"https://www.telemb.be/actu/frameries-un-concours-pour-conducteurs-dengins-de-chantier/37879"
},
"headline":"Frameries - Un concours pour conducteurs d'engins de chantier",
"image":[
"//www.telemb.be/cdn/ff/pKwkkhB7a5GqSf98QdDUcn9WlvGTYyilvXisHO3fHpI/1747320854/public/2025-05/00006554_avc-tmb-093031.jpeg"
],
"articleSection":"Reportages",
"keywords":"enseignement secondaire",
"datePublished":"2025-05-15T16:32:00+02:00",
"dateCreated":"2025-05-15T16:32:00+02:00",
"dateModified":"2025-05-15T16:32:00+02:00",
"author":{
"@type":"Person",
"name":"Sabine Dupont"
},
"publisher":{
"@type":"Organization",
"name":"Tele MB",
"logo":{
"@type":"ImageObject",
"url":"https://www.telemb.be/modules/custom/local_tvs/modules/tele_mb/assets/logoTLMB_BE_2022.svg"
}
},
"description":"Conduire des engins de chantier c'est un métier! Ce métier s'apprend dans 7 écoles techniques en Wallonie. 6 dentre elles se sont retrouvées au centre de compétence du Forem à Sars-la-Bruyère pour une première édition d'un concours baptisé Engin Défi. ",
"articleBody":"Creuser une tranchée, charger un camion, niveler un terrain, quelques-uns des défis proposés aux écoles techniques de Wallonie qui participent à ce premier concours Engin Défi. Par binôme, les 26 élèves sélectionnés doivent réaliser différentes tâches et démontrer ainsi leur savoir-faire en matière de manipulation dengins de chantier.« On devait charger le gros dumper. Ca sest bien passé mais je ne sais pas encore ce que le jury en pense » explique Clément Hennuy, Elève en 6ème conducteur dengins de chantier aux Instituts Saint-Luc.Car Engin Defi est un concours ! A chaque épreuve, des professionnels sont là pour coter individuellement les élèves mais surtout pour les encadrer.« Ils sont évalués par poste de travail. Il y a des cotes de 5 à 20 mais on nest pas là pour les casser. On est là pour leur donner des conseils avant et pendant lépreuve » sourit Guy Laidoum, Conseiller en prévention et jury dEngin Défi.Les professeurs des élèves choisis sont également présents pour les coacher.« Ils sont à lépreuve de la tranchée quils doivent faire bien plate, bien propre avec des bords bien tranchants. Quelque chose de nickel comme on leur a appris » insiste Loïc Cimino, professeur au Lycée Technique Hornu-Colfontaine. Engin Défi est une première organisation mise sur pied par plusieurs partenaires du secteur de la construction. Tous nont quun but, valoriser des métiers très recherchés et demandés.« On veut leur montrer que derrière lécole, il y a un secteur dactivités à la recherche de main dœuvre qualifiée. Ils seront bientôt qualifiés, on veut leur montrer quon a besoin deux » insiste Xavier Maes, Manager chez Constructiv. Et pour susciter des vocations, une centaine délèves de deuxième secondaire viennent aussi découvrir, de manière plus ludique, ces métiers du secteur de la construction. Certains sont plus intéressés que dautres…« Je ne ferais pas ces métiers là, non. Ce nest pas dans mes délires ! » sourit Alissa, élève de 2ème secondaire à la Sainte-Union.« Moi jaime les métiers manuels. Travailler dans la mécanique, cest ce qui me passionne » souligne Mohamed, un autre élève. Des passionnés, cest ce que le secteur recherche. Clément en tout cas semble avoir trouvé sa voie.« Je suis en 6ème. Je vais faire une 7ème pour mon diplôme et ma gestion, puis je vais travailler dans une entreprise. Plus tard, jaimerais créer ma propre entreprise »"
}</script>
''',
{
'title': 'md5:3f077843a74f01f768bbf0853c210855',
'categories': ['Reportages'],
'creators': ['Sabine Dupont'],
'description': 'md5:1dc04a3aa56c5228503071baa8b4cc97',
'modified_timestamp': 1747319520,
'release_timestamp': 1747319520,
'tags': 'count:1',
'timestamp': 1747319520,
'thumbnails': [{'url': 'https://www.telemb.be/cdn/ff/pKwkkhB7a5GqSf98QdDUcn9WlvGTYyilvXisHO3fHpI/1747320854/public/2025-05/00006554_avc-tmb-093031.jpeg'}],
'uploader': 'Tele MB',
},
{},
),
] ]
for html, expected_dict, search_json_ld_kwargs in _TESTS: for html, expected_dict, search_json_ld_kwargs in _TESTS:
expect_dict( expect_dict(

View File

@ -1742,11 +1742,21 @@ def traverse_json_ld(json_ld, at_top_level=True):
'timestamp': unified_timestamp(e.get('dateCreated')), 'timestamp': unified_timestamp(e.get('dateCreated')),
}) })
elif is_type(e, 'Article', 'NewsArticle'): elif is_type(e, 'Article', 'NewsArticle'):
info.update({ info.update(**traverse_obj(e, {
'timestamp': parse_iso8601(e.get('datePublished')), 'title': ('headline', {clean_html}, filter),
'title': unescapeHTML(e.get('headline')), 'alt_title': ('alternativeHeadline', {clean_html}, filter),
'description': unescapeHTML(e.get('articleBody') or e.get('description')), 'categories': ('articleSection', {clean_html}, filter, all, filter),
}) 'creators': ('author', (None, 'name'), {clean_html}, filter, all, filter),
'description': (('description', 'articleBody'), {clean_html}, filter, any),
'modified_timestamp': ('dateModified', {parse_iso8601}),
'release_timestamp': ('datePublished', {parse_iso8601}),
'tags': ('keywords', {clean_html}, {lambda x: x.split(',')}, ..., {str.strip}, filter, all, filter),
'thumbnails': ('image', ..., {
'url': ({str}, {unescapeHTML}, {self._proto_relative_url}, {url_or_none}),
}),
'timestamp': ('dateCreated', {parse_iso8601}),
'uploader': ('publisher', 'name', {clean_html}, filter),
}))
if is_type(traverse_obj(e, ('video', 0)), 'VideoObject'): if is_type(traverse_obj(e, ('video', 0)), 'VideoObject'):
extract_video_object(e['video'][0]) extract_video_object(e['video'][0])
elif is_type(traverse_obj(e, ('subjectOf', 0)), 'VideoObject'): elif is_type(traverse_obj(e, ('subjectOf', 0)), 'VideoObject'):