В этой статье мы рассмотрим простой скрипт на языке Bash для загрузки файлов на Яндекс.Диск с использованием их API. Этот скрипт может быть полезен для автоматизации процесса резервного копирования или синхронизации файлов с вашим аккаунтом на Яндекс.Диске.
Подготовка к работе
Прежде чем начать использовать скрипт, убедитесь, что у вас есть:
- Токен доступа OAuth к API Яндекс.Диска.
- Установленные утилиты
curl
иjq
для выполнения HTTP-запросов и обработки JSON-ответов соответственно.
Создание скрипта
Ниже приведен пример скрипта на языке Bash для загрузки файла на Яндекс.Диск:
#!/bin/bash
# Токен доступа к API Яндекс.Диска
accessToken=""
# Путь к файлу, который нужно загрузить на Яндекс.Диск
fileToUpload=""
# Путь, по которому следует загрузить файл на Яндекс.Диск
uploadDir="/"
# Получаем имя файла из пути
fileName=$(basename "$fileToUpload")
# Формируем полный путь загрузки файла
uploadPath="$uploadDir$fileName"
# Временное расширение файла для ускорения загрузки (почему-то некоторые файлы на яндекс грузятся медленно)
tmpExt=".tmp"
# URL для запроса загрузки файла
uploadRequestUrl="https://cloud-api.yandex.net/v1/disk/resources/upload?path=$uploadPath$tmpExt&overwrite=true"
# Максимальное количество попыток загрузки файла
maxRetryAttempts=3
retryCount=0
while [ $retryCount -lt $maxRetryAttempts ]; do
# GET-запрос для получения URL загрузки
response=$(curl -s -X GET -H "Authorization: OAuth $accessToken" "$uploadRequestUrl")
# Получаем URL для загрузки файла
uploadUrl=$(echo $response | jq -r '.href')
# Попытка загрузить файл на Яндекс.Диск
curl -s -X PUT -T "$fileToUpload" "$uploadUrl"
if [ $? -eq 0 ]; then
echo "Файл успешно загружен на Яндекс.Диск."
# Переименование файла на сервере Яндекс.Диска
moveResponse=$(curl -s -X POST \
-H "Authorization: OAuth $accessToken" \
"https://cloud-api.yandex.net/v1/disk/resources/move?path=$uploadPath&from=$uploadPath$tmpExt&overwrite=true")
break
else
echo "Произошла ошибка при загрузке файла на Яндекс.Диск."
if [[ $response == *"Precondition Failed"* ]]; then
range=$(echo "$response" | jq -r '.Range')
startByte=$(echo "$range" | awk -F'-' '{print $2}' | awk '{print $1 + 1}')
# Догружаем недостающие части файла
curl -s -X PUT -H "Content-Range: bytes $startByte-" --data-binary "@$fileToUpload" "$uploadUrl"
echo "Файл успешно догружен на Яндекс.Диск."
break
else
echo "Не удалось обработать ошибку загрузки файла."
retryCount=$((retryCount+1))
if [ $retryCount -lt $maxRetryAttempts ]; then
echo "Повторная попытка загрузки файла ($retryCount из $maxRetryAttempts)."
else
echo "Достигнуто максимальное количество попыток загрузки файла."
fi
fi
fi
done
Использование скрипта
- Замените переменную
$accessToken
на ваш токен доступа OAuth к API Яндекс.Диска. - Укажите путь к файлу, который вы хотите загрузить, в переменной
fileToUpload
. - Укажите путь, по которому вы хотите загрузить файл на Яндекс.Диск, в переменной
uploadDir
.
После этого просто запустите скрипт, и он загрузит указанный файл на ваш аккаунт на Яндекс.Диск
Добавить комментарий