soimort/you-get · error · NotImplementedError

Nothing to download here

Error message

Nothing to download here

What it means

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').

Source

Thrown at src/you_get/extractors/vk.py:62

    title = (' ').join(page_of + photo_date)
    image_link = r1(r'href="([^"]+)" class=\"mva_item\" target="_blank">Download full size', image_page)
    type, ext, size = url_info(image_link)
    print_info(site_info, title, type, size)

    return image_link, title, ext, size


def vk_download(url, output_dir='.', stream_type=None, merge=True, info_only=False, **kwargs):
    link = None
    if re.match(r'(.+)z\=video(.+)', url):
        link, title, ext, size = get_video_info(url)
    elif re.match(r'(.+)vk\.com\/photo(.+)', url):
        link, title, ext, size = get_image_info(url)
    elif re.search(r'vk\.com\/video\d+_\d+', url):
        link, title, ext, size = get_video_from_user_videolist(url)
    else:
        raise NotImplementedError('Nothing to download here')

    if not info_only and link is not None:
        download_urls([link], title, ext, size, output_dir, merge=merge)


site_info = "VK.com"
download = vk_download
download_playlist = playlist_not_supported('vk')

View on GitHub (pinned to 049548f3f3)

Solutions

  1. Use the canonical desktop video URL form https://vk.com/video<owner_id>_<video_id>
  2. For photo downloads use the vk.com/photo<owner>_<id> form
  3. 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
  4. For clip/other formats, resolve the final video URL in a browser first, then hand that to the extractor

Example fix

# before
if re.match(r'(.+)z\=video(.+)', url):
    link, title, ext, size = get_video_info(url)

# after
if re.search(r'z\=video(.+)', url):
    link, title, ext, size = get_video_info(url)
Defensive patterns

Strategy: validation

Validate before calling

import re

def vk_url_supported(url):
    return bool(re.search(r'z=video', url)
                or re.search(r'vk\.com/photo', url)
                or re.search(r'vk\.com/video\d+_\d+', url))

Try / catch

try:
    vk_download(url, ...)
except NotImplementedError:
    print('use https://vk.com/video<owner>_<id> or a z=video/photo URL')

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of soimort/you-get@049548f3f3 (2026-08-15). Data as JSON: /api/errors/9aa495768ddacc0d. Report an issue: GitHub.