{"record":{"id":"1f0f4a997446255b","repo":"ytdl-org/youtube-dl","slug":"no-login-info-available-needed-for-using-s","errorCode":null,"errorMessage":"No login info available, needed for using %s.","messagePattern":"No login info available, needed for using (.+?)\\.","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/tennistv.py","lineNumber":37,"sourceCode":"            'id': 'indian-wells-2018-verdasco-fritz',\n            'ext': 'mp4',\n            'title': 'Fernando Verdasco v Taylor Fritz',\n            'description': 're:^After his stunning victory.{174}$',\n            'thumbnail': 'https://atp-prod.akamaized.net/api/images/v1/images/112831/landscape/1242/0',\n            'timestamp': 1521017381,\n            'upload_date': '20180314',\n        },\n        'params': {\n            'skip_download': True,\n        },\n        'skip': 'Requires email and password of a subscribed account',\n    }\n    _NETRC_MACHINE = 'tennistv'\n\n    def _login(self):\n        username, password = self._get_login_info()\n        if not username or not password:\n            raise ExtractorError('No login info available, needed for using %s.' % self.IE_NAME, expected=True)\n\n        login_form = {\n            'Email': username,\n            'Password': password,\n        }\n        login_json = json.dumps(login_form).encode('utf-8')\n        headers = {\n            'content-type': 'application/json',\n            'Referer': 'https://www.tennistv.com/login',\n            'Origin': 'https://www.tennistv.com',\n        }\n\n        login_result = self._download_json(\n            'https://www.tennistv.com/api/users/v1/login', None,\n            note='Logging in',\n            errnote='Login failed (wrong password?)',\n            headers=headers,\n            data=login_json)","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/tennistv.py#L19-L55","documentation":"Raised by TennisTVIE._login when _get_login_info() returns no username or password (no --username/--password and no usable .netrc/_NETRC_MACHINE 'tennistv' entry). TennisTV requires a paid subscription login for every extraction, so missing credentials abort immediately with expected=True.","triggerScenarios":"Invoking the tennistv extractor without --username/--password, without --netrc, and without a .netrc file containing a 'machine tennistv' line.","commonSituations":"First-time users assuming highlights are free; CI jobs where $HOME/.netrc is absent; netrc file with wrong machine name or missing chmod 600 so it is ignored.","solutions":["Pass --username <email> --password <pass>, or better: add 'machine tennistv login <email> password <pass>' to ~/.netrc and chmod 600 it, then run with --netrc.","Confirm the account has an active TennisTV subscription — login alone does not grant video access (the extractor warns if entitlement != SUBSCRIBED).","For automated jobs, ensure HOME points at the directory containing .netrc."],"exampleFix":"# before\n# youtube-dl https://www.tennistv.com/videos/123456\n# after\nprintf 'machine tennistv login me@example.com password secret\\n' >> ~/.netrc\nchmod 600 ~/.netrc\nyoutube-dl --netrc https://www.tennistv.com/videos/123456","handlingStrategy":"validation","validationCode":"# Ensure credentials are discoverable before running\nimport os, netrc\nn = netrc.netrc() if os.path.exists(os.path.expanduser('~/.netrc')) else None\nif not n or 'tennistv' not in [h for h, _ in n.hosts.items()]:\n    fail('add: machine tennistv login EMAIL password PASS to ~/.netrc (chmod 600)')","typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if e.expected and 'No login info' in str(e):\n        fail('tennistv requires --netrc credentials')\n    raise","preventionTips":["Configure ~/.netrc with 'machine tennistv' and chmod 600; run with --netrc.","Ensure an active TennisTV subscription — login alone is not enough.","Point HOME correctly in CI so .netrc is found."],"tags":["login","credentials","subscription","expected-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}