{"record":{"id":"9aa495768ddacc0d","repo":"soimort/you-get","slug":"nothing-to-download-here","errorCode":null,"errorMessage":"Nothing to download here","messagePattern":"Nothing to download here","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"src/you_get/extractors/vk.py","lineNumber":62,"sourceCode":"\n    title = (' ').join(page_of + photo_date)\n    image_link = r1(r'href=\"([^\"]+)\" class=\\\"mva_item\\\" target=\"_blank\">Download full size', image_page)\n    type, ext, size = url_info(image_link)\n    print_info(site_info, title, type, size)\n\n    return image_link, title, ext, size\n\n\ndef vk_download(url, output_dir='.', stream_type=None, merge=True, info_only=False, **kwargs):\n    link = None\n    if re.match(r'(.+)z\\=video(.+)', url):\n        link, title, ext, size = get_video_info(url)\n    elif re.match(r'(.+)vk\\.com\\/photo(.+)', url):\n        link, title, ext, size = get_image_info(url)\n    elif re.search(r'vk\\.com\\/video\\d+_\\d+', url):\n        link, title, ext, size = get_video_from_user_videolist(url)\n    else:\n        raise NotImplementedError('Nothing to download here')\n\n    if not info_only and link is not None:\n        download_urls([link], title, ext, size, output_dir, merge=merge)\n\n\nsite_info = \"VK.com\"\ndownload = vk_download\ndownload_playlist = playlist_not_supported('vk')\n","sourceCodeStart":44,"sourceCodeEnd":71,"githubUrl":"https://github.com/soimort/you-get/blob/049548f3f3f35e67ba8d3181c71fdc71d11cf260/src/you_get/extractors/vk.py#L44-L71","documentation":"vk_download routes by three URL patterns: (.+)z=video(.+) (video with hash param), vk.com/photo(.+), and vk.com/video<owner>_<id>. Any VK URL matching none — clips, m.vk.com mobile links, short vk.cc links, wall posts — hits the else and raises NotImplementedError('Nothing to download here').","triggerScenarios":"Passing 'https://vk.com/clip-123_456', 'https://m.vk.com/video123_456' (matched: the video\\d+_\\d+ search actually hits here since it's re.search without https anchor — but z=video via re.match requires the URL to start with arbitrary chars then 'z=video', which ordinary https URLs never satisfy at position 0), playlist/album links, or vk.cc shortened share links.","commonSituations":"Users pasting mobile or clip URLs; VK changing URL structure; the first pattern using re.match so only URLs beginning with something followed immediately by 'z=video' qualify, which breaks normal browser URLs.","solutions":["Use the canonical desktop video URL form https://vk.com/video<owner_id>_<video_id>","For photo downloads use the vk.com/photo<owner>_<id> form","If you rely on the z=video hash form, ensure the URL literally contains z=video... and starts appropriately — or patch re.match to re.search at src/you_get/extractors/vk.py:58","For clip/other formats, resolve the final video URL in a browser first, then hand that to the extractor"],"exampleFix":"# before\nif re.match(r'(.+)z\\=video(.+)', url):\n    link, title, ext, size = get_video_info(url)\n\n# after\nif re.search(r'z\\=video(.+)', url):\n    link, title, ext, size = get_video_info(url)","handlingStrategy":"validation","validationCode":"import re\n\ndef vk_url_supported(url):\n    return bool(re.search(r'z=video', url)\n                or re.search(r'vk\\.com/photo', url)\n                or re.search(r'vk\\.com/video\\d+_\\d+', url))","typeGuard":null,"tryCatchPattern":"try:\n    vk_download(url, ...)\nexcept NotImplementedError:\n    print('use https://vk.com/video<owner>_<id> or a z=video/photo URL')","preventionTips":["Convert clip/mobile/short links to the canonical vk.com/video<owner>_<id> form first","Do not rely on the z=video form unless the URL literally starts per re.match semantics","Resolve redirects (vk.cc) before handing the URL to the extractor"],"tags":["vk","url-validation","unsupported-link","regex"],"backgroundTag":null,"analyzedSha":"049548f3f3f35e67ba8d3181c71fdc71d11cf260","analyzedAt":"2026-08-15T03:58:15.069Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}