Задача:
- Получить доступ к своему Yandex.Disk
- Написать приложение, которое сможет скачивать и закачивать файл на диск в среде разработки Visual Studio
Шаг 1. Получение токена для доступа
Заходим в свой аккаунт на Яндексе. Переходим по ссылке https://oauth.yandex.ru/client/new
Заполняем «Название вашего сервиса». Выбираем, что наше приложение будет Веб-сервис. В поле URL - http://127.0.0.1:123/test
Доступ к данным - Чтение всего Диска и Запись в любом месте на Диске. Указываем почту для связи. Нажимаем «Создать приложение».
Нам нужен ClientID. Копируем его. Вставляем в следующую строку
https://oauth.yandex.ru/authorize?response_type=token&client_id=305340b34d794203be69b38730f023bc
Вставляем в браузер.
Нажимаем вход. Происходит ошибка.
Копируем access_token. Он понадобится для доступа к нашему диску. Если вы меняете настройки своего приложения, всегда нужно получать новый token.
Шаг 2. Разрабатываем приложение.
Пускай это будет консольное приложение, со следующими ключами командной строки:
Key – token доступа к диску
Path – папка на диске
File – файл на диске
Proc – скачать или закачать файл на диск (Download/Upload)
В середе Visual Studio создаем «Консольное приложение (Майкрософт)» с именем AccessYA.
Теперь нужно подключить пакет для управления Яндекс диском. В обозревателе решений нажимаем правой кнопкой на своём приложении.
Выбираем «Управлениями пакетами NuGet…»
Находим пакет YandexDisk.Client от Yuiriy Nagaev. Подключаем.
Код с комментариями
namespace AccessYA { class Program {
// методы доступа к диску происходят в асинхронном режиме, поэтому добавляем async Task
static async Task Main(string[] args)
{
// объявляем ключи
String key = "";
String path = "";
String fl = "";
String proc = "";
//получаем ключи
foreach (string arg in args) { if (arg.IndexOf(":") > 0) {
switch ((arg.Substring(0, arg.IndexOf(":"))).ToUpper()) {
case "KEY":
key = arg.Substring(arg.IndexOf(":") + 1, arg.Length - arg.IndexOf(":") - 1);
break;
case "PATH":
path = arg.Substring(arg.IndexOf(":") + 1, arg.Length - arg.IndexOf(":") - 1);
break;
case "FILE":
fl = arg.Substring(arg.IndexOf(":") + 1, arg.Length - arg.IndexOf(":") - 1);
break;
case "PROC":
proc = arg.Substring(arg.IndexOf(":") + 1, arg.Length - arg.IndexOf(":") - 1);
break;
} } }
//если ключи пустые выводим справку
Console.OutputEncoding = System.Text.Encoding.UTF8;
if ((key == "") || (path == "") || (fl == "") || (proc == "")) {
Console.WriteLine("Параметры");
Console.WriteLine("key: - ключ для доступа к Yandex.Disk");
Console.WriteLine("path: - папка");
Console.WriteLine("file: - файл");
Console.WriteLine("proc: - Download илиUpload");
Console.ReadKey();
} else {
// подключаемся к диску по token
var api = new DiskHttpApi(key);
// загрузка файла на компьютер
if (proc.ToUpper() == "DOWNLOAD") {
//если такой файл существует, то удаляем его
if (File.Exists(Path.Combine(Environment.CurrentDirectory, fl))) {
File.Delete(Path.Combine(Environment.CurrentDirectory, fl)); }
//скачиваем файл
await api.Files.DownloadFileAsync("disk:/" + path + "/" + fl, Path.Combine(Environment.CurrentDirectory, fl)); }
//загрузка файла на диск
else if (proc.ToUpper() == "UPLOAD") {
//получаем ссылку на загрузку, указываем что можно перезаписать файл
var link = await api.Files.GetUploadLinkAsync("disk:/" + path + "/" + fl, overwrite: true);
//открываем файл на компьютере
using (var fs = File.OpenRead(Path.Combine(Environment.CurrentDirectory, fl))) {
//закачиваем файл
await api.Files.UploadAsync(link, fs); }}}}}}
Тест
Запускаем приложение. Выходит справка.
Теперь создаем папку на Яндекс диске с именем AccessYA. Внутрь кладем файл 1.docx. В меню Visual Studio Отладка -> Свойства отладки для проекта добавляем строку для отладки
cmd key:y0_AgAAAAANWS6WAAnaMAAAAADiXWMWEj_YG4QIQf27EmbI8hfimOT9qdA path:AccessYA file:1.docx proc:download
Запускаем приложение. В папке решения на компьютере должен появится файл 1.docx. Заменяем ключ proc на upload. Файл 1.docx запишется на диск.
Что можно из этого сделать?
Приложение «Облачный блокнот». Создаем текстовый редактор в любой среде разработки. Создаем текстовый файл на диске. Подключаем его к редактору через наше приложение. Получается переносное приложение, с помощью которого можно получить доступ к своим записям на любом компьютере, не показывая свой пароль.