{"record":{"id":"7a36c816fa9d352b","repo":"ytdl-org/youtube-dl","slug":"video-s-is-not-available-7a36c8","errorCode":null,"errorMessage":"Video %s is not available","messagePattern":"Video (.+?) is not available","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/francetv.py","lineNumber":499,"sourceCode":"            'title': 'Cantates BWV 4, 106 et 131 de Bach par Raphaël Pichon 5/7',\n            'description': 'md5:19c44af004b88219f4daa50fa9a351d4',\n            'upload_date': '20180206',\n            'timestamp': 1517945220,\n            'duration': 5981,\n        },\n        'params': {\n            'skip_download': True,\n        },\n        'add_ie': [FranceTVIE.ie_key()],\n    }]\n\n    def _real_extract(self, url):\n        display_id = self._match_id(url)\n\n        webpage = self._download_webpage(url, display_id)\n\n        if \">Ce live n'est plus disponible en replay<\" in webpage:\n            raise ExtractorError(\n                'Video %s is not available' % display_id, expected=True)\n\n        video_id, catalogue = self._search_regex(\n            r'[\"\\'>]https?://videos\\.francetv\\.fr/video/([^@]+@.+?)[\"\\'<]',\n            webpage, 'video id').split('@')\n\n        return self._make_url_result(video_id, catalogue)\n\n\nclass FranceTVJeunesseIE(FranceTVBaseInfoExtractor):\n    _VALID_URL = r'(?P<url>https?://(?:www\\.)?(?:zouzous|ludo)\\.fr/heros/(?P<id>[^/?#&]+))'\n\n    _TESTS = [{\n        'url': 'https://www.zouzous.fr/heros/simon',\n        'info_dict': {\n            'id': 'simon',\n        },\n        'playlist_count': 9,","sourceCodeStart":481,"sourceCodeEnd":517,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/francetv.py#L481-L517","documentation":"Raised by FranceTVSiteIE (france.tv pages) when the downloaded webpage contains the marker \\\">Ce live n'est plus disponible en replay<\\\", i.e. the live stream ended and its replay was never published. The expected error names the display id so the user can identify which page failed. This is a permanent availability condition, not transient.","triggerScenarios":"_real_extract downloads the page for display_id and the literal French replay-unavailable marker is found before the video id regex runs. Occurs for france.tv live pages after the broadcast ends when rights prevent a replay, or for events that were live-only.","commonSituations":"Automated recording of France TV live events where replay rights differ from broadcast rights; users returning to a live URL hours later expecting a VOD; sports/news content with strict replay windows.","solutions":["Check the show's page on france.tv for a separately published replay URL and use that instead","For future live events, record during the broadcast rather than relying on replay","Accept permanent unavailability for live-only rights (sports, licensed events)","Update youtube-dl/yt-dlp in case page markers changed and detection is stale"],"exampleFix":"# before\nyoutube_dl 'https://www.france.tv/direct/live-event-page.html'\n# ERROR: Video live-event-page is not available\n\n# after\nyt-dlp 'https://www.france.tv/replay/published-replay-page.html'","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'is not available' in str(e) and 'replay' in str(e).lower():\n        search_for_published_replay(url)","preventionTips":["Record France TV live streams during broadcast instead of relying on replays","Do not schedule replay fetches immediately after live end — rights checks decide availability"],"tags":["francetv","extractor","expired-content","live"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}