Как скачать файл из публичной папки Яндекс.Диск

Есть приложение с фронтом на Vue и с бэком на Firebase и есть публичная папка на Яндекс Диске, с задачей вывода папок и файлов справился с помощью REST API. Но со скачиванием файлов есть проблемы.

Делаю запрос на https://cloud-api.yandex.net/v1/disk/public/resources получаю папки и файлы, у файлов есть поле file со ссылкой на скачивание, но при попытке скачать получаю 403.


Ответы (3 шт):

Автор решения: Анонимный дурачек

тебе не даст это сделать политика конфиденциальности Яндекса скорее всего

→ Ссылка
Автор решения: quessy-dev

Рабочий код выглядит так:

import requests

base_url = 'https://cloud-api.yandex.net/v1/disk/public/resources/download?'
link = 'https://disk.yandex.ru/d/SvcMXspUAGSb6Q'  # Сюда вписываете вашу ссылку

# Получаем загрузочную ссылку
final_url = base_url + 'public_key=' + link
response = requests.get(final_url)
download_url = response.json()['href']

# Загружаем файл и сохраняем его
download_response = requests.get(download_url)
with open('downloaded_file.txt', 'wb') as f:   # Здесь укажите нужный путь к файлу
    f.write(download_response.content)```
→ Ссылка
Автор решения: Valery Yu

100% рабочий вариант на данный момент на JS:

const BASE_PUBLIC_YANDEX_DISK_URL_PREFIX = 
    'https://cloud-api.yandex.net/v1/disk/public/resources/download?public_key='
    
async function getYandexPublicFile(url) {
    try {
        let response = await fetch(BASE_PUBLIC_YANDEX_DISK_URL_PREFIX + url, { referrerPolicy: 'no-referrer' })
        const json = await response.json()
        response = await fetch(json.href)
    
        const fileContent = await response.text() // для плоского текста
        // или response.json() для плоского текста в формате JSON
        // или response.arrayBuffer() для бинарных данных
        
        // далее делаем с содержимым файла, что нужно, например возвращаем
        return fileContent
    } catch (error) {
        console.error('Load error', error)
    }
}

В параметре url передаём публичную ссылку на файл в Яндекс Disk, полученную путём нажатия на "Поделиться", при условии, что к файлу не применялись специальные права доступа для конкретных юзеров Яндекса, т.е. файл по ссылке может скачать любой, кто её знает.

Небольшое уточнение: Если сайт, на котором размещен данный скрипт, НЕ HTTPS (т.е. небезопасное подключение), важно отключить проверку referrer, иначе будет возвращена ошибка 403 с сообщением "Invalid referrer". Вероятно, если всё ок, т.е. подключение безопасное, скрипт размещен на сайте https://..., отключение заголовка Referer не потребуется.

→ Ссылка