{"record":{"id":"859dadda6c98a3f9","repo":"ytdl-org/youtube-dl","slug":"this-video-is-no-longer-available","errorCode":null,"errorMessage":"This video is no longer available.","messagePattern":"This video is no longer available\\.","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/teamcoco.py","lineNumber":131,"sourceCode":"        response = self._graphql_call('''{\n  %%s(slug: \"%%s\") {\n    ... on RecordSlug {\n      record {\n        %s\n      }\n    }\n    ... on PageSlug {\n      child {\n        id\n      }\n    }\n    ... on NotFoundSlug {\n      status\n    }\n  }\n}''' % self._RECORD_TEMPL, 'Slug', display_id)\n        if response.get('status'):\n            raise ExtractorError('This video is no longer available.', expected=True)\n\n        child = response.get('child')\n        if child:\n            record = self._graphql_call('''{\n  %%s(id: \"%%s\") {\n    ... on Video {\n      %s\n    }\n  }\n}''' % self._RECORD_TEMPL, 'Record', child['id'])\n        else:\n            record = response['record']\n        video_id = record['id']\n\n        info = {\n            'id': video_id,\n            'display_id': display_id,\n            'title': record['title'],","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/teamcoco.py#L113-L149","documentation":"Raised by TeamcocoIE._real_extract when the slug lookup POST to teamcoco.com/graphql returns the NotFoundSlug variant with a truthy status field — i.e. the Conan (Team Coco) site has no record for the display id parsed from the URL. The video page slug was removed, renamed, or never existed. Marked expected=True.","triggerScenarios":"Extracting a teamcoco.com URL whose slug query resolves to {... on NotFoundSlug { status }} with non-empty status; note the extractor's own test carries skip='This video is no longer available.' because the old test clip was taken down.","commonSituations":"Conan clips deleted or re-slugged after site redesigns (the source tree itself marks one test as permanently unavailable); stale links from forums/Reddit; typo'd slugs.","solutions":["Confirm the URL opens on teamcoco.com; if it 404s, search the site for the clip and use the current slug.","Find the clip on Team Coco's YouTube channel and extract from there instead.","In batch jobs, catch this expected error and mark the slug retired rather than retrying."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"# Optional: pre-validate the slug via the same GraphQL endpoint\nimport json, urllib.request\nq = '{ findSlug(slug: \"%s\") { ... on NotFoundSlug { status } } }' % slug\nreq = urllib.request.Request('https://teamcoco.com/graphql', data=json.dumps({'query': q}).encode(), headers={'Content-Type': 'application/json'})\nresp = json.load(urllib.request.urlopen(req))['data']['findSlug']\nif resp.get('status'):\n    print('slug retired:', slug)","typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    if e.expected and 'no longer available' in str(e):\n        mark_slug_retired(slug)\n    else:\n        raise","preventionTips":["Treat NotFoundSlug status as permanent — do not retry the URL.","Prefer current teamcoco.com slugs; old ones retire after site redesigns.","Keep Team Coco YouTube URLs as fallback for deleted clips."],"tags":["not-found","site-unavailable","expected-error","graphql"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}