{"record":{"id":"495c5e63d15ca112","repo":"ytdl-org/youtube-dl","slug":"this-video-is-not-available-in-your-country","errorCode":null,"errorMessage":"This video is not available in your country.","messagePattern":"This video is not available in your country\\.","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/trilulilu.py","lineNumber":57,"sourceCode":"            'upload_date': '20151204',\n            'uploader': 'VEVOmixt',\n            'timestamp': 1449187937,\n            'view_count': int,\n            'like_count': int,\n            'comment_count': int,\n        },\n    }]\n\n    def _real_extract(self, url):\n        display_id = self._match_id(url)\n        media_info = self._download_json('http://m.trilulilu.ro/%s?format=json' % display_id, display_id)\n\n        age_limit = 0\n        errors = media_info.get('errors', {})\n        if errors.get('friends'):\n            raise ExtractorError('This video is private.', expected=True)\n        elif errors.get('geoblock'):\n            raise ExtractorError('This video is not available in your country.', expected=True)\n        elif errors.get('xxx_unlogged'):\n            age_limit = 18\n\n        media_class = media_info.get('class')\n        if media_class not in ('video', 'audio'):\n            raise ExtractorError('not a video or an audio')\n\n        user = media_info.get('user', {})\n\n        thumbnail = media_info.get('cover_url')\n        if thumbnail:\n            thumbnail.format(width='1600', height='1200')\n\n        # TODO: get correct ext for audio files\n        stream_type = media_info.get('stream_type')\n        formats = [{\n            'url': media_info['href'],\n            'ext': stream_type,","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/trilulilu.py#L39-L75","documentation":"Raised by TriluliluExtractor when the media JSON's 'errors' map contains a truthy 'geoblock' key: the media is restricted to Romanian IPs. Expected=True; distinct from the friends-only case and the adult (xxx_unlogged) case handled just below.","triggerScenarios":"Extracting a geoblocked trilulilu.ro media id from outside Romania; the JSON API returns errors.geoblock instead of stream data.","commonSituations":"Downloading Romanian-hosted content from abroad; local-licensing restrictions on music clips.","solutions":["Use a Romanian VPN/exit IP and retry","Verify the media plays in a browser from Romania","In batch jobs, catch this expected error and tag the URL geo-blocked","If the whole site is unresponsive, trilulilu may be offline — check the domain first"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"info = json.load(urllib.request.urlopen('http://m.trilulilu.ro/%s?format=json' % display_id))\nif info.get('errors', {}).get('geoblock'):\n    use_ro_exit()  # needed before extraction will succeed","typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if e.expected and 'not available in your country' in str(e):\n        retry_with_ro_exit(url)","preventionTips":["Use a Romanian IP for Romanian-hosted media","Cache geoblock verdicts so crawlers do not re-attempt from wrong regions"],"tags":["extractor","geo-restriction","expected"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}