iltalehti.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from .common import InfoExtractor
  2. from ..utils import js_to_json, traverse_obj
  3. class IltalehtiIE(InfoExtractor):
  4. _VALID_URL = r'https?://(?:www\.)?iltalehti\.fi/[^/?#]+/a/(?P<id>[^/?#])'
  5. _TESTS = [
  6. # jwplatform embed main_media
  7. {
  8. 'url': 'https://www.iltalehti.fi/ulkomaat/a/9fbd067f-94e4-46cd-8748-9d958eb4dae2',
  9. 'md5': 'af12d42c539f1f49f0b62d231fe72dcd',
  10. 'info_dict': {
  11. 'id': 'gYjjaf1L',
  12. 'ext': 'mp4',
  13. 'title': 'Sensuroimaton Päivärinta, jakso 227: Vieraana Suomen Venäjän ex-suurlähettiläs René Nyberg ja Kenraalimajuri evp Pekka Toveri',
  14. 'description': '',
  15. 'upload_date': '20220928',
  16. 'timestamp': 1664360878,
  17. 'duration': 2089,
  18. 'thumbnail': r're:^https?://.*\.jpg',
  19. },
  20. },
  21. # jwplatform embed body
  22. {
  23. 'url': 'https://www.iltalehti.fi/politiikka/a/1ce49d85-1670-428b-8db8-d2479b9950a4',
  24. 'md5': '9e50334b8f8330ce8828b567a82a3c65',
  25. 'info_dict': {
  26. 'id': '18R6zkLi',
  27. 'ext': 'mp4',
  28. 'title': 'Pekka Toverin arvio: Näin Nord Stream -kaasuputken räjäyttäminen on saatettu toteuttaa',
  29. 'description': 'md5:3d1302c9e17e7ffd564143ff58f8de35',
  30. 'upload_date': '20220929',
  31. 'timestamp': 1664435867,
  32. 'duration': 165.0,
  33. 'thumbnail': r're:^https?://.*\.jpg',
  34. },
  35. },
  36. ]
  37. def _real_extract(self, url):
  38. article_id = self._match_id(url)
  39. webpage = self._download_webpage(url, article_id)
  40. info = self._search_json(
  41. r'<script>\s*window.App\s*=', webpage, 'json', article_id,
  42. transform_source=js_to_json)
  43. props = traverse_obj(info, (
  44. 'state', 'articles', ..., 'items', (('main_media', 'properties'), ('body', ..., 'properties'))))
  45. video_ids = traverse_obj(props, (lambda _, v: v['provider'] == 'jwplayer', 'id'))
  46. return self.playlist_from_matches(
  47. video_ids, article_id, ie='JWPlatform', getter=lambda video_id: f'jwplatform:{video_id}',
  48. title=traverse_obj(info, ('state', 'articles', ..., 'items', 'canonical_title'), get_all=False))