{"record":{"id":"1393e260f67a0f56","repo":"ytdl-org/youtube-dl","slug":"91-porn-says-daily-limit-10-videos-exceeded","errorCode":null,"errorMessage":"91 Porn says: Daily limit 10 videos exceeded","messagePattern":"91 Porn says: Daily limit 10 videos exceeded","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/porn91.py","lineNumber":36,"sourceCode":"        'md5': '7fcdb5349354f40d41689bd0fa8db05a',\n        'info_dict': {\n            'id': '7e42283b4f5ab36da134',\n            'title': '18岁大一漂亮学妹，水嫩性感，再爽一次！',\n            'ext': 'mp4',\n            'duration': 431,\n            'age_limit': 18,\n        }\n    }\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        self._set_cookie('91porn.com', 'language', 'cn_CN')\n\n        webpage = self._download_webpage(\n            'http://91porn.com/view_video.php?viewkey=%s' % video_id, video_id)\n\n        if '作为游客，你每天只可观看10个视频' in webpage:\n            raise ExtractorError('91 Porn says: Daily limit 10 videos exceeded', expected=True)\n\n        title = self._search_regex(\n            r'<div id=\"viewvideo-title\">([^<]+)</div>', webpage, 'title')\n        title = title.replace('\\n', '')\n\n        video_link_url = self._search_regex(\n            r'<textarea[^>]+id=[\"\\']fm-video_link[^>]+>([^<]+)</textarea>',\n            webpage, 'video link')\n        videopage = self._download_webpage(video_link_url, video_id)\n\n        info_dict = self._parse_html5_media_entries(url, videopage, video_id)[0]\n\n        duration = parse_duration(self._search_regex(\n            r'时长:\\s*</span>\\s*(\\d+:\\d+)', webpage, 'duration', fatal=False))\n\n        comment_count = int_or_none(self._search_regex(\n            r'留言:\\s*</span>\\s*(\\d+)', webpage, 'comment count', fatal=False))\n","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/porn91.py#L18-L54","documentation":"Porn91IE raises ExtractorError('91 Porn says: Daily limit 10 videos exceeded', expected=True) when the downloaded view_video.php page contains the Chinese notice '作为游客，你每天只可观看10个视频' ('as a guest you may only watch 10 videos per day'). The site rate-limits anonymous (cookie-less guest) viewers to 10 videos per day, and the extractor detects the notice text in the HTML. Expected=True means youtube-dl reports it as a site-side restriction, not a code bug.","triggerScenarios":"Downloading an 11th 91porn.com view_video.php page within a day from the same visitor identity (IP / default cookie jar) without an authenticated session; the extractor sets language=cn_CN cookie first, so the Chinese notice is what gets matched.","commonSituations":"Batch-downloading playlists or many single videos from 91porn in one run; sharing an IP (NAT/proxy) so the guest quota is consumed by others; no login credentials configured so every request counts against the guest limit.","solutions":["Wait until the daily quota resets (24h rolling window) before downloading more videos.","Authenticate so requests count against an account with a higher limit instead of the guest pool.","Throttle batch jobs to <=10 videos per day per IP, or split across days.","Use a different egress IP if the limit is IP-based and the quota was consumed elsewhere."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'Daily limit' in str(e):\n        queue.append(url)  # retry after quota reset\n        ...","preventionTips":["Cap batch jobs at 10 guest videos per day per IP.","Catch this expected error and reschedule the URL for the next day instead of failing the run.","Prefer authenticated sessions if supported to escape the guest pool."],"tags":["porn91","rate-limit","quota","expected-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}