Найти в Дзене
Паяльник и код

Пишем приложение для доступа к Yandex.Disk на C#. Облачный блокнот.

Оглавление

Задача:

  1. Получить доступ к своему Yandex.Disk
  2. Написать приложение, которое сможет скачивать и закачивать файл на диск в среде разработки Visual Studio

Шаг 1. Получение токена для доступа

Заходим в свой аккаунт на Яндексе. Переходим по ссылке https://oauth.yandex.ru/client/new

-2

Заполняем «Название вашего сервиса». Выбираем, что наше приложение будет Веб-сервис. В поле URL - http://127.0.0.1:123/test

-3

Доступ к данным - Чтение всего Диска и Запись в любом месте на Диске. Указываем почту для связи. Нажимаем «Создать приложение».

-4

Нам нужен ClientID. Копируем его. Вставляем в следующую строку

https://oauth.yandex.ru/authorize?response_type=token&client_id=305340b34d794203be69b38730f023bc

Вставляем в браузер.

-5

Нажимаем вход. Происходит ошибка.

-6

Копируем access_token. Он понадобится для доступа к нашему диску. Если вы меняете настройки своего приложения, всегда нужно получать новый token.

Шаг 2. Разрабатываем приложение.

Пускай это будет консольное приложение, со следующими ключами командной строки:

Key – token доступа к диску

Path – папка на диске

File – файл на диске

Proc – скачать или закачать файл на диск (Download/Upload)

В середе Visual Studio создаем «Консольное приложение (Майкрософт)» с именем AccessYA.

Теперь нужно подключить пакет для управления Яндекс диском. В обозревателе решений нажимаем правой кнопкой на своём приложении.

-7

Выбираем «Управлениями пакетами NuGet…»

-8

Находим пакет 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); }}}}}}

Тест

Запускаем приложение. Выходит справка.

-9

Теперь создаем папку на Яндекс диске с именем AccessYA. Внутрь кладем файл 1.docx. В меню Visual Studio Отладка -> Свойства отладки для проекта добавляем строку для отладки

cmd key:y0_AgAAAAANWS6WAAnaMAAAAADiXWMWEj_YG4QIQf27EmbI8hfimOT9qdA path:AccessYA file:1.docx proc:download

Запускаем приложение. В папке решения на компьютере должен появится файл 1.docx. Заменяем ключ proc на upload. Файл 1.docx запишется на диск.

Что можно из этого сделать?

Приложение «Облачный блокнот». Создаем текстовый редактор в любой среде разработки. Создаем текстовый файл на диске. Подключаем его к редактору через наше приложение. Получается переносное приложение, с помощью которого можно получить доступ к своим записям на любом компьютере, не показывая свой пароль.

-10