Skip to content

MVKozlov/GMYandexDisk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yandex Disk rest api

Яндекс Диск позволяет управлять ресурсами Диска (файлами и папками) посредством HTTP-запросов REST API.

API Диска предназначен для приложений, которые работают с файлами пользователей Яндекс Диска или хранят на Диске собственные файлы и настройки.

Получение OAuth-токенов

Оригинальная документация

Яндекс Диск авторизует приложения с помощью OAuth-токенов. Каждый токен предоставляет определенному приложению доступ к данным определенного пользователя.

Чтобы использовать протокол OAuth при работе с Яндекс Диском:

  1. Зарегистрируйте свое OAuth-приложение.

    1. Войдите в аккаунт на Яндексе.

    2. Откройте страницу создания приложения. https://oauth.yandex.ru/client/new/
      Обратите внимание, на странице https://oauth.yandex.ru/ кнопка "Создать приложение" ведёт не туда, там лишний /id/ в url и она не позволяет указать доступы

    3. Укажите название вашего сервиса и при необходимости прикрепите иконку.

    4. Выберите платформу Веб-сервисы и в поле Redirect URI подставьте значение по умолчанию, которое появится в подсказке Подставить URL для отладки: https://oauth.yandex.ru/verification_code.

    5. В разделе Доступ к данным укажите необходимые права доступа (помимо доступа к файлам пользователя можно пользоваться папкой приложения):

      • Запись в любом месте на Диске — cloud_api:disk.write;
      • Чтение всего Диска — cloud_api:disk.read;
      • Доступ к папке приложения на Диске — cloud_api:disk.app_folder;
      • Доступ к информации о Диске — cloud_api:disk.info.
    6. Укажите электронную почту для связи.

    7. Внизу страницы нажмите Создать приложение. На экране появятся его описание.

    8. Скопируйте идентификатор приложения из поля ClientID — он потребуется для получения OAuth-токена. В дальнейшем открыть страницу со всеми вашими приложениями вы сможете по ссылке oauth.yandex.ru.

  2. Получите OAuth-токены для доступа к данным пользователей любым подходящим способом.

    Запрос OAuth-токена при помощи кода подтверждения

    Отладочный токен необходимо получить вручную:

    1. Перейдите по ссылке https://oauth.yandex.ru/authorize?response_type=token&client_id=<ClientID>

      Вместо "ClientID" подставьте значение из пункта 1.8.

    2. Если токен вашему приложению выдается впервые, откроется экран авторизации. После входа Яндекс OAuth перенаправит вас на страницу с токеном.

      На самом деле оно открывается всегда, так что код надо брать из браузера

    3. Можно воспользоваться Request-YDiskAuthorizationCode -ClientID <clientid> -TryAuto. Эта команда откроет "за вас" нужную страницу и попробует дождаться кода. Или просто выдаст ссылку на эту страницу без -TryAuto

  3. Для авторизации в модуле надо получить токены с помощью

    $token = Get-YDiskAccessToken -Code 123456 -ClientID $client_id -ClientSecret $client_secret

    Потом безопасно сохранить ClientID, ClientSecret, refresh_token

    И обновлять access_token через

    $token = Get-YDiskAccessToken -RefreshToken $token.refresh_token -ClientID $client_id -ClientSecret $client_secret

    Кстати, одновременно с access_token мы получаем и новый refresh_token, но старый продолжает действовать

Хранение ClientID, ClientSecret и Refresh_Token

ClientID, ClientSecret и Refresh_Token надо сохранить где-то в безопасном месте, напрямую в код их класть не надо

Для этого можно использовать модуль SecretManagement и его дополнения или хотя бы самописные функции типа

function Protect-String {
<#
.SYNOPSIS
    Convert String to textual form of SecureString
.PARAMETER String
    String to convert
.OUTPUTS
    String
.NOTES
    Author: MVKozlov
#>
param(
  [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
  [string]$String
)
PROCESS {
    $String | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString
}
}

function Unprotect-String {
<#
.SYNOPSIS
    Convert SecureString to string
.PARAMETER String
    String to convert (textual form of SecureString)
.PARAMETER SecureString
    SecureString to convert
.OUTPUTS
    String
.NOTES
    Author: MVKozlov
#>
[CmdletBinding(DefaultParameterSetName='s')]
param(
  [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0, ParameterSetName='s')]
  [string]$String,
  [Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0, ParameterSetName='ss')]
  [SecureString]$SecureString
)
PROCESS {
  if ($String) {
      $SecureString = $String | ConvertTo-SecureString
  }
  if ($SecureString) {
      (New-Object System.Net.NetworkCredential '', ($SecureString)).Password
  }
}
}

Использование

Get-YDiskSummary -AccessToken $token.access_token
Add-YDiskItem -AccessToken $token.access_token -Path '/myfile.txt' -InFile D:\MyFile.txt
Publish-YDiskItem  -AccessToken $token.access_token -Path '/myfile.txt'

About

Yandex Disk rest api Powershell module

Resources

License

Stars

Watchers

Forks

Packages

No packages published