Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Download file from cloud.mail.ru from linux console with bash script
#!/usr/bin/env bash
# Скрипт по загрузке публичных файлов с Облака mail.ru. Поддерживается докачка.
# v1.0.4 от 2021-05-27
#
# ЕСЛИ СКРИПТ НЕ РАБОТАЕТ
#
# 1. Убедитесь, что файл доступен публично. Возможна загрузка только публичных файлов.
# 2. Mail.ru время от времени меняет внутрянку, не очень сильно, но требуется адаптация скрипта.
# Если скрипт не работает, просьба сделать работающий форк и скинуть ссылку в комментарии.
# Спасибо.
#
# КАК ПОЛЬЗОВАТЬСЯ
#
# 1. Скачать скрипт.
# 2. Сделать его исполняемым:
# chmod +x dl-cloud-mail-ru.sh
# 3. Скачать файл из облака можно так:
# ./dl-cloud-mail-ru.sh ссылка_на_файл локальный_путь
# Например (пример рабочий, файл существует, можно потестировать скрипт):
# ./dl-cloud-mail-ru.sh https://cloud.mail.ru/public/Y5C8/KRwhz4JHW/linux-5.12.7.tar.xz linux-kernel.tar.xz
#
# КАК ПОЛУЧИТЬ ССЫЛКУ НА СКАЧИВАНИЕ ФАЙЛА В ПАПКЕ
#
# Если у вас есть ссылка на папку, и нужно скачать файл оттуда:
#
# 1. Два раза кликнуть на файл в папке. Появится всплывающее окно с кнопкой "Скачать".
# 2. В это время в адресной строке браузера будет отображаться ссылка на файл. Это и есть ссылка для скрипта.
# ENGLISH
#
# IMPORTANT: mail.ru sometimes changes internals, not too much, but script must be changed.
#
# If this script does not work:
# - see forks, may be there is a fix already,
# - if not, please post patch in comments or create a working fork of this gist.
# Thank you!
# ИСТОРИЯ И БЛАГОДАРНОСТИ
#
# 2021-05-27 дополнена документация
# 2021-05-26 изменения со стороны mail.ru, плюс теперь определяем url к файлу проще без обращения к api,
# спасибо kerastinell https://gist.github.com/kerastinell/badbd1da6a76a6c77a15661bf0f1e288
# 2018-06-18 mail.ru изменил формат страницы
# 2017-09-22 исходная идея: https://novall.net/itnews/bash-skript-dlya-skachivaniya-fajlov-s-mail-ru-cherez-konsol-linux.html
URL="$1"
DST_FILE="$2"
[ -z "$DST_FILE" ] && {
echo "Syntax: `basename $0` <url> <dst_file>" >&2
echo "Example: `basename $0` https://cloud.mail.ru/public/BeAr/3s8QfYgLj /path/to/my/file.rar" >&2
echo "Test: `basename $0` https://cloud.mail.ru/public/Y5C8/KRwhz4JHW/linux-5.12.7.tar.xz linux-5.12.7.tar.xz" >&2
exit 1
}
function getPageInformation() {
local pageUrl="$1"
wget --quiet -O - "$pageUrl" | sed -n "/window.cloudSettings/,/};<\/script>/p"
}
function ensureFileExists() {
local pageInformation="$1"
echo "$pageInformation" | grep -q '"not_exists"' && {
echo "Error: file does not exist" >&2
exit 1
}
}
function extractDownloadUrl() {
local pageUrl="$1" pageInformation="$2" storageUrl filePath
storageUrl=$(echo "$pageInformation" | sed -n "/weblink_get/,/]/p" | fgrep -m 1 "url" | cut -d "\"" -f 4)
filePath=$(echo "$pageUrl" | awk -F '/public/' '{print $2}')
[ -z "$storageUrl" ] || [ -z "$filePath" ] && {
echo "Error: failed to extract storage's url or file path" >&2
exit 1
}
echo "$storageUrl/$filePath"
}
pageInformation=$(getPageInformation "$URL")
ensureFileExists "$pageInformation"
downloadUrl=$(extractDownloadUrl "$URL" "$pageInformation")
wget --continue --no-check-certificate --referer="$URL" "$downloadUrl" -O "$DST_FILE"
@Magisdn

This comment has been minimized.

Copy link

@Magisdn Magisdn commented Oct 14, 2017

Не работает :( Всегда 404 . Например https://cloud.mail.ru/public/4oy4/2qQLMMj77

@vtyrtov

This comment has been minimized.

Copy link

@vtyrtov vtyrtov commented Nov 14, 2017

Отлично работает с файлами.
Не работает с папками.

@cronfy

This comment has been minimized.

Copy link
Owner Author

@cronfy cronfy commented Dec 27, 2017

@Magisdn сорри, не увидел сразу комментарий. Ваша ссылка на cloud уже не работает, не посмотреть.

@vtyrtov да, работа с папками не предполагалась. Если найдете решение, просьба скинуть сюда.

@mirkhamidov

This comment has been minimized.

Copy link

@mirkhamidov mirkhamidov commented Jan 29, 2018

есть возможность вообще просто проверить, это ссылка на файл или на директорию (без скачивания)?

@Adeykin

This comment has been minimized.

Copy link

@Adeykin Adeykin commented Feb 22, 2019

Now it doesn't work.
Example file: https://cloud.mail.ru/public/A9cF/bVSWJCJgt/imagesThumbnails/trainThumbnails.tar

Run: $ ./downloader.sh https://cloud.mail.ru/public/A9cF/bVSWJCJgt/imagesThumbnails/trainThumbnails.tar trainThumbnails.tar

Output:
--2019-02-23 02:23:31-- https://cloclo4.cldmail.ru/2yaEyUBxrvyHQUvxr9m7/G%0Ahttps://cloclo4.cldmail.ru/2yaEyUBxrvyHQUvxr9m7/G/A9cF/bVSWJCJgt/imagesThumbnails/trainThumbnails.tar?key=d0793366a34822a5a925d401574b2646809ffb0a
Resolving cloclo4.cldmail.ru (cloclo4.cldmail.ru)... 217.69.142.204
Connecting to cloclo4.cldmail.ru (cloclo4.cldmail.ru)|217.69.142.204|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2019-02-23 02:23:31 ERROR 404: Not Found.

@MrSparklle

This comment has been minimized.

Copy link

@MrSparklle MrSparklle commented Aug 5, 2020

Anybody can help with this error?

user@user-MacBook-Pro ~ % ./dl-cloud-mail-ru.sh https://cloud.mail.ru/public/A9cF/bVSWJCJgt/imagesThumbnails/trainThumbnails.tar test.tar
--2020-08-05 16:25:10--  ftp://%22weblink_get%22/[%7B%22count%22:1,%22url%22:%22https://cloclo21.cloud.mail.ru/public/2vQm7rqQsvZfagvKfDwH/G%22%7D]%0A%22weblink_get%22:[%7B%22count%22:1,%22url%22:%22https://cloclo21.cloud.mail.ru/public/2vQm7rqQsvZfagvKfDwH/G%22%7D]/A9cF/bVSWJCJgt/imagesThumbnails/trainThumbnails.tar?key=
           => ‘.listing’
Resolving "weblink_get" ("weblink_get")... failed: nodename nor servname provided, or not known.
wget: unable to resolve host address ‘"weblink_get"’
@muralivijay

This comment has been minimized.

Copy link

@muralivijay muralivijay commented Jan 24, 2021

ERROR 404: Not Found

@roman-4erkasov

This comment has been minimized.

Copy link

@roman-4erkasov roman-4erkasov commented May 2, 2021

Error 404 Not found (T_T)

@cronfy

This comment has been minimized.

Copy link
Owner Author

@cronfy cronfy commented May 15, 2021

В настоящий момент скрипт не работает, т. к. mail.ru опять поменяли внутрянку. Если вы пофиксили или нашли работающую версию, просьба скинуть в комментарии ссылку на форк/скрипт. Спасибо!

@kerastinell

This comment has been minimized.

Copy link

@kerastinell kerastinell commented May 25, 2021

@kerastinell

This comment has been minimized.

Copy link

@kerastinell kerastinell commented May 26, 2021

Я ещё малость поковырялся и выяснил, что стягивать файл можно без лишнего запроса к API. В html-странице уже содержится очень подробный JSON со всеми настройками (поиск по файлу: window.cloudSettings), там есть и детальная информация о файле, и адрес сервера для скачивания. В течение дня доделаю, если меня никто не опередит :)

@cronfy

This comment has been minimized.

Copy link
Owner Author

@cronfy cronfy commented May 26, 2021

@kerastinell супер! Будем ждать итоговый вариант! 👍

@kerastinell

This comment has been minimized.

Copy link

@kerastinell kerastinell commented May 26, 2021

@cronfy готово, и ещё я добавил проверку на существование файла: https://gist.github.com/kerastinell/badbd1da6a76a6c77a15661bf0f1e288

@cronfy

This comment has been minimized.

Copy link
Owner Author

@cronfy cronfy commented May 27, 2021

@kerastinell спасибо! Обновил скрипт.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment