Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
valen13
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 18
1

Yandex api.directory.yandex.net создание почтового ящика

24.05.2018, 10:25. Просмотров 3288. Ответов 6
Метки нет (Все метки)

Добрый день.

Пишу скрипт для создания почтовых ящиков на Яндекс.Коннект с использованием API https://tech.yandex.ru/connect/directory/api/about-docpage/

Запросить данные о существующих п.я. или отделах у меня получилось (пример для п.я.):
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Function Get-YandexConnectEmailList {
<# 
   https://tech.yandex.ru/connect/directory/api/concepts/users/read-users-list-docpage/
#>
    [CmdletBinding()]
    param(
        [string]$Token,
        [string]$FieldsToGet,
        [int]$page,
        [int]$per_page
    )
    if($Verbose){$VerbosePreference = "Continue"}
    $pddimpUrl = 'https://api.directory.yandex.net'
    $api = '/v6/users/?fields=id,name,email'
    $URL = "$pddimpUrl"+"$api"+",$FieldsToGet"
    $Headers = @{}
    $Headers.Authorization = 'OAuth ' + $Token
    $Body = @{}
        $Body.page = $page
    $Body.per_page = $per_page
    $InvokeWebRequest = Invoke-WebRequest -URI $URL -Method GET -Headers $Headers -Body $Body
    $InvokeWebRequest.Content | ConvertFrom-Json
    
}
А вот создать п.я. или отдел не получается.
Пробую так:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
cls
 
[string]$Token = "..."
 
$pddimpUrl = 'https://api.directory.yandex.net'
$api = '/v6/departments/'
$URL = "$pddimpUrl"+"$api"
$Headers = @{}
$Headers.Authorization = 'OAuth ' + $Token
 
$Body = @{}
$Body.description = 'Test_dept_descr'
$Body.name = 'Test_dept'
$Body.label = 'Test_dept_2'
$Body.parent_id = 1
 
$JHead = ConvertTo-Json $Headers
$JBody = ConvertTo-Json $Body
 
$InvokeWebRequest = Invoke-WebRequest -URI $URL -Method POST -Headers $Headers -Body $Body -ContentType 'Application/json'
$InvokeWebRequest.Content | ConvertFrom-Json
 
$Body = ''
$Headers = ''
Получаю ошибку:
PowerShell
1
2
3
4
5
6
Invoke-WebRequest : { "message": "Bad request", "code": "bad_request" }
строка:20 знак:21
+ ... ebRequest = Invoke-WebRequest -URI $URL -Method POST -Headers $Header ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Если из вызова командлета Invoke-WebRequest , убрать -ContentType 'Application/json', получаю другую ошибку:
PowerShell
1
2
3
4
5
6
Invoke-WebRequest : { "message": "Unhandled exception: {error}", "code": "unhandled_exception", "params": { "error": "error" } }
строка:20 знак:21
+ ... ebRequest = Invoke-WebRequest -URI $URL -Method POST -Headers $Header ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
С предыдущей версией Яндекс почты для домена (Yandex.PDD) проблем не возникало.

Буду рад любой помощи.
Спасибо!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2018, 10:25
Ответы с готовыми решениями:

Экспорт содержимого почтового ящика в pst-файл
Доброго времени суток! Требуется помощь коллективного разума. Имеем Office 365, т.е. exchange...

Перенаправление почтового ящика на другой Exchange
Доброго дня. Прошу совета. Есть один Exchange (exc1.dc1). на него на даный момент приходят...

Не могу зайти на почтовые сервисы. Mail и Yandex
Извиняюсь если пишу не туда. Проблема заключается в том, что не могу зайти на почтовые сервисы....

(Yandex)Directory API / ASP.NET MVC
Доброго времени суток! Столкнулся с проблемой: Код получения данных от API Паспорт: ...

Чем отличается http://yandex.ru и buki.yandex.ru
В чем особенность буки, для чего он служить. Что хотели до нас донести работники яндекса.

6
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
24.05.2018, 13:46 2
valen13, а с чего Вы решили что заголовки передаются как JSON? Параметр -Headers - это IDictionary.
0
valen13
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 18
24.05.2018, 14:02  [ТС] 3
В приведённых примерах я не использую $JHead.
0
v_svitere
700 / 410 / 135
Регистрация: 03.06.2009
Сообщений: 1,197
Записей в блоге: 4
24.05.2018, 14:19 4
valen13, Может быть в структуре запроса что-то поменялось?
Надо смотреть документацию к API
Беглым взглядом на документацию к этому методу вижу что в заголовке нужно передавать не только токен
Код
 headers = {
        'Authorization': 'OAuth ' + TOKEN,
        'User-Agent': USER_AGENT,
    }
Также вижу что в теле тоже передается немного другая структура, отличная от того что у вас в коде.
Код
payload = {
        'label': label,
        'name': name,
        'parent_id': parent_id,
    }
Но, это только беглый взгляд, лучше основательно прочитать документацию, и провести тесты.
0
greg zakharov
Покинул форум
2401 / 991 / 281
Регистрация: 07.05.2015
Сообщений: 1,991
24.05.2018, 14:29 5
Цитата Сообщение от valen13
Получаю ошибку:...
Исходя из ошибки (400) - "Один из параметров запроса имеет недопустимое значение или формат данных." v_svitere возможно прав, что может что-то поменялось в API, но скорее всего банально где-то затесалось нечто. А так как времени на изучение чего-то со стороны по не имеется, может кто другой поможет и подскажет.
0
valen13
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 18
24.05.2018, 18:39  [ТС] 6
PowerShell
1
$InvokeWebRequest = Invoke-WebRequest -URI $URL -Method POST -Headers $Headers -Body ($Body | ConvertTo-Json) -ContentType 'Application/json; charset=utf-8'
Эта строка всё решила.
Всем спасибо.
0
Garry Galler
26.05.2018, 01:50     Yandex api.directory.yandex.net создание почтового ящика
  #7

Не по теме:

Цитата Сообщение от valen13 Посмотреть сообщение
ConvertTo-Json
Ну да, примеры использования API только на python, а в python юзается human requests, в котором вручную практически ничего делать нужно (даже про многие заголовки можно забыть): передал словарь body в параметре json - и все само в json сконвертировалось :-) и заголовок Content-Type: 'application/json; charset=utf-8' автоматом ушел. Удобно...

0
26.05.2018, 01:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2018, 01:50
Привет! Вот еще темы с ответами:

В чем различие Yandex от XML.Yandex
Собственно сабж... и адд: Различия порой бывают существенные в СЕРПе Яндекса и если обращаться к...

Yandex API
Добрый день форумчанам! Просьба откликнуться имеющим опыт в написании Яндекс API приложений. Ну...

Создание почтового ящика без обратного адрема
Доброго времени суток! Необходимо для работы создать ящик без обратного адреса, чтобы отвечать на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.