среда, 20 января 2016 г.

Программная отчистка корзины Яндекс.Диск

Вводная: Когда-то давно случился у Яндекс.Диска небольшой конфуз http://habrahabr.ru/post/204580/ после которого пользователям выдали 200 Гб места. Что сделало его очень удобным для удалённого бэкапа небольших баз. Но как всегда есть одно - НО. И но это заключается в методе удаления файлов с яндекс.диска. https://yandex.ru/support/disk/desktop/faq.xml#delete Грубо говоря, при удалении файлов, они не удаляются, а переносятся в корзину, где и хранятся 30 дней. Но если у вас бэкап занимает около 10 гигабайт и вы храните 10 предыдущих копий, то уже через дней 20 весь яндекс.диск будет у вас заполнен и после чего просто ПРЕКРАТИТ СИНХРОНИЗИРОВАТЬ. При этом выкидывая попап, что место на яндекс диске закончилось - но если это сервер, то на него могут месяцами не заходить и узнать об отсутствии бэкапов слишком поздно. Так что надо корзину чистить, но стандартными средствами есть два выбора - либо через сайт, либо через правую кнопку мыши на папке яндекс.корзины. И оба способа для сервера не очень подходят.

Решение: Создаём консольный проект. У меня имя проекта - clearYandexDiskTrash

Устанавливаем через NuGet библиотеку yandexdisk.client.
Или скачиваем с сайта https://github.com/raidenyn/yandexdisk.client и устанавливаем вручную.
Библиотека требует .NetFramework версии 4.6, так что нужно чтобы в свойствах проекта была именно она.

Заодно, также в свойствах проекта, перейдём на вкладку Settings и добавим настройку с именем yandexDiskToken.

Далее код -

using System;
using System.Threading;
using clearYandexDiskTrash.Properties;

using YandexDisk.Client;
using YandexDisk.Client.Http;

namespace clearYandexDiskTrash
{
  class Program
  {
    static void Main()
    {
      try
      {
        //You should have oauth token from Yandex Passport.
        //See https://tech.yandex.ru/oauth/
        string oauthToken = Settings.Default.yandexDiskToken;

        // Create a client instance
        using (IDiskApi diskApi = new DiskHttpApi(oauthToken))
        {
           var x = diskApi.Commands.EmptyTrashAsync("", CancellationToken.None);
        }
      }
      catch(Exception ex)
      {
         Console.WriteLine("Application clearYandexDiskTrash error." + " Message: " + ex.Message);
      }
    }
  }
}

Теперь запускаем и переходим в папку с скомпилированной программой. Там должен появится файл - clearYandexDiskTrash.exe.config. Открываем его блокнотом и изменяем параметр yandexDiskToken на наш. Который мы можем получить на сайте яндекса - https://tech.yandex.ru/oauth/ (но для быстроты и если нужно написать "для себя", то проще и быстрее получить токен на https://tech.yandex.ru/disk/poligon/ )

Далее не забываем поменять настройки бэкапов, чтобы программа запускалась перед выполнением бэкапа. И проверить выполнение. И ещё раз проверить через несколько дней.