{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Skurudo Blog(post): заметки с тегом api",
    "_rss_description": "Интерфейс программирования приложений (иногда интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай]",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/skurudo.ru\/tags\/api\/",
    "feed_url": "https:\/\/skurudo.ru\/tags\/api\/json\/",
    "icon": "https:\/\/skurudo.ru\/pictures\/userpic\/userpic@2x.jpg?1691593083",
    "authors": [
        {
            "name": "Pavel Galkin",
            "url": "https:\/\/skurudo.ru\/",
            "avatar": "https:\/\/skurudo.ru\/pictures\/userpic\/userpic@2x.jpg?1691593083"
        }
    ],
    "items": [
        {
            "id": "227",
            "url": "https:\/\/skurudo.ru\/all\/import-users-to-yandex-connect\/",
            "title": "Импорт пользователей в Яндекс.Коннект через API",
            "content_html": "<p>Возникла задача добавить несколько десятков пользователей в Яндекс.Коннект и сразу же начались поиски пути решения, чтобы избавиться от ручного труда и в дальнейшем облегчить жизнь. Решил попробовать вариант от <a href=\"https:\/\/habr.com\/ru\/users\/Energys\/\">Energys<\/a> — статья на <a href=\"https:\/\/habr.com\/ru\/post\/448036\/\">habr’e<\/a>. Почему попробовать? За пару лет что-то могло перестать работать, как говорится — «За время пути собака могла подрасти!»<\/p>\n<p>С первого взгляда не понравилось то, что пароли у сотрудников будущих одинаковые — это обязательно нужно было поменять, плюс не указана должность — потребовалось добавить. Однако для общего понимания статья подходит как нельзя лучше. К тому же изменения сравнительно не сложные — готовимся и применяем.<\/p>\n<p>Самое не простое в этой истории — возня с токеном от Яндекса. В статье она описана, пройдем по шагам для истории и чтобы ничего не забыть:<\/p>\n<ul>\n<li>* зайти в аккаунт яндекса под администратором домена;<\/li>\n<li>* в <a href=\"https:\/\/oauth.yandex.ru\/\">Я.OAuth<\/a> первым делом нужно создать приложение;<\/li>\n<li>* приложению даем права, в нашем случае — Яндекс.Коннект Directory API;<\/li>\n<li>* выбираем платформу «веб-сервисы» и нажимаем «подставить url для разработки»;<\/li>\n<li>* сохраняемся и получим ID приложения — именно оно понадобится для получения токене;<\/li>\n<li>* вставляем ID приложения и получаем токен:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">https:\/\/oauth.yandex.ru\/authorize?response_type=token&amp;client_id=&lt;ID приложения&gt;<\/code><\/pre><ul>\n<li>* именно этот токен и будет использоваться в скрипте;<\/li>\n<\/ul>\n<p>Идея сравнительно не сложная:<\/p>\n<ol start=\"1\">\n<li>готовим файл определенного образца;<\/li>\n<li>добавляем переменных;<\/li>\n<li>читаем список из файла;<\/li>\n<li>в запросе в цикле добавляем переменные;<\/li>\n<li>в каждой итерации ждем пару секунд.<\/li>\n<\/ol>\n<p>Сам скрипт выглядит следующим образом — он же на <a href=\"https:\/\/github.com\/skurudo\/usefulbash\/blob\/main\/yandex-connect-mass-user-add.sh\">GitHub<\/a>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\r\n# path to users list - путь к списку пользователей\r\nemployees=&#039;.\/usrlist&#039;\r\n# line example from users list - пример строки файла \r\n# usrlist: email_lastname_firstname_middlename_password_position\r\n# for example: petrova_Петрова_Авдотья_Федоровна_eeKrutoiparol23_Менеджер\r\n\r\n# OAuth_Token\r\n# link to material about token - ссылка на формирование отладочного токена\r\n# https:\/\/tech.yandex.ru\/oauth\/doc\/dg\/tasks\/get-oauth-token-docpage\/\r\n# link about our apps - список ваших приложений\r\n# https:\/\/oauth.yandex.ru\/\r\n# get token from apps id - получить токен из ID приложения\r\n# https:\/\/oauth.yandex.ru\/verification_code#access_token=435843755894374389\r\nTOKEN=&quot;token-here-and-there&quot;\r\n\r\n# read and trim user file - читаем и перебираем файл со списком пользователей\r\nfor i in $( cat $employees ); do\r\nvalue=($(echo $i | tr &quot;_&quot; &quot; &quot;))\r\n\r\n# make variables for api request from file - заводим переменные для запроса из файла\r\nemail=&quot;${value[0]}&quot;\r\nlastname=&quot;${value[1]}&quot;\r\nfirstname=&quot;${value[2]}&quot;\r\nmiddlename=&quot;${value[3]}&quot;\r\npassword=&quot;${value[4]}&quot;\r\nposition=&quot;${value[5]}&quot;\r\n\r\n# Make user for good - создаем сотрудника ради добра\r\n# department = 1 for default - департамент 1 умолчанию\r\n#only http answers, not full - только http ответы, не полный лог\r\ncurl -i -X POST -H &#039;Content-type: application\/json&#039; -d &#039;{&quot;department_id&quot;: 1, &quot;position&quot;: &quot;&#039;$position&#039;&quot;, &quot;password&quot;: &quot;&#039;$password&#039;&quot;, &quot;nickname&quot;: &quot;&#039;$email&#039;&quot;, &quot;name&quot;: {&quot;first&quot;: &quot;&#039;$firstname&#039;&quot;, &quot;last&quot;: &quot;&#039;$lastname&#039;&quot;, &quot;middle&quot;: &quot;&#039;$middlename&#039;&quot;}}&#039; -H &quot;Authorization: OAuth $TOKEN&quot; &#039;https:\/\/api.directory.yandex.net\/v6\/users\/&#039; | grep HTTP\r\n#full answers - полные ответы\r\n#curl -i -X POST -H &#039;Content-type: application\/json&#039; -d &#039;{&quot;department_id&quot;: 1, &quot;position&quot;: &quot;&#039;$position&#039;&quot;, &quot;password&quot;: &quot;&#039;$password&#039;&quot;, &quot;nickname&quot;: &quot;&#039;$email&#039;&quot;, &quot;name&quot;: {&quot;first&quot;: &quot;&#039;$firstname&#039;&quot;, &quot;last&quot;: &quot;&#039;$lastname&#039;&quot;, &quot;middle&quot;: &quot;&#039;$middlename&#039;&quot;}}&#039; -H &quot;Authorization: OAuth $TOKEN&quot; &#039;https:\/\/api.directory.yandex.net\/v6\/users\/&#039; \r\n# wait for 2 sec - ждем пару секунд\r\nwait 2\r\ndone<\/code><\/pre><p>C чем удалось столкнуться при отладке и работе скрипта? Буквально несколько моментов:<\/p>\n<ul>\n<li>* если посылать запросы слишком часто, часть может не сработать — нужно подбирать тайминги между запросами.. пауза в 1-2 секунды работает;<\/li>\n<li>* обязательно нужно смотреть на входные данные — аккуратность с символами в названиях важна;<\/li>\n<li>* моя частая ошибка — 422 Unprocessable Entity — при разборе оказалось, что пароль был слишком простой;<\/li>\n<\/ul>\n",
            "date_published": "2021-03-04T15:00:15+03:00",
            "date_modified": "2021-05-21T10:15:44+03:00",
            "tags": [
                "api",
                "bash",
                "почта",
                "скрипт",
                "Яндекс"
            ],
            "_date_published_rfc2822": "Thu, 04 Mar 2021 15:00:15 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "227",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "19",
            "url": "https:\/\/skurudo.ru\/all\/microsoft-closes-skype-desktop-api\/",
            "title": "Пришло время закрывать Skype Desktop API",
            "content_html": "<p>Ноябрьскую новость о намерениях Skype закрыть Desktop API как-то пропустил или пролистал, сейчас уже даже не помню точно. После декабрьского обновления программы появилось сообщение с информацией о том, что API более работать не будет и да пусть вас, вместе с вашей гарнитурой спасет ваш бог. Новость меня немного расстроила, поскольку гарнитура не сертифицированная, работает через BlueSoleil, соединяясь со скайпом через Desktop API. Будет ли работать связка хоть как-то или не будет вовсе — неизвестно. Есть опасения, что проблемы могут возникнуть и c сертифицированными устройствами. Хотя по утверждениям Microsoft работать перестанут только механические кнопки, ответить на звонок можно будет на экране в самом приложении. Как будет на деле — большой вопрос.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/skurudo.ru\/pictures\/skype-desktop-api-message.jpg\" width=\"466\" height=\"122\" alt=\"\" \/>\n<\/div>\n<p><i><b>Desktop API<\/b> (старое название — Skype Public API) позволяет сторонним продуктам взаимодействовать со Skype. Эти продукты могут быть программными или аппаратными, но для их разработки в любом случае применяется Desktop API, текстовый протокол взаимодействия с программным обеспечением Skype. Интерфейс Desktop API создан, чтобы помочь разработчикам управлять внешними вызовами в приложение Skype.<\/i> (с) <a href=\"https:\/\/sku.su\/lVDVm\">FAQ<\/a><\/p>\n<p>Мне понятно желание Microsoft прекратить тащить на себе поддержку старого кода, поддерживать множество устройств: skype-телефоны, плагины, телевизоры и камеры с поддержкой. Грубо говоря, сломать все старое и зажить по-новому: красиво, единообразно и с хорошей документацией, возможно новым API. Подход для смелых духом разработчиков и менеджеров со стальными яйцами. Учитываются ли при таком подходе пользователи? Сомнительно. В последние время редмондская компания работает непривычно быстро. Реакция на резкие изменения неоднозначная, местами скорее негативная. При большом количестве пользователей период «привыкания» и «перехода» хотелось бы видеть солиднее. Получилось: раз-раз и в дамках за два месяца.<\/p>\n<p><b>Для самостоятельного чтения:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/sku.su\/lVDVm\">Что такое Desktop API?<\/a><\/li>\n<li><a href=\"https:\/\/sku.su\/BXkPE\">Skype заявляет, что мои приложения перестанут работать со Skype в декабре 2013 г. Почему?<\/a><\/li>\n<li><a href=\"https:\/\/sku.su\/dAGou\">Что произойдет с гарнитурой, отмеченной логотипом Skype Certified, после прекращения поддержки Desktop API?<\/a><\/li>\n<\/ul>\n",
            "date_published": "2013-12-01T22:52:12+03:00",
            "date_modified": "2014-01-02T22:35:20+03:00",
            "tags": [
                "api",
                "bluesoleil",
                "Microsoft",
                "skype",
                "закрытие",
                "мессенджер"
            ],
            "image": "https:\/\/skurudo.ru\/pictures\/skype-desktop-api-message.jpg",
            "_date_published_rfc2822": "Sun, 01 Dec 2013 22:52:12 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "19",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/skurudo.ru\/pictures\/skype-desktop-api-message.jpg"
                ]
            }
        }
    ],
    "_e2_version": 4116,
    "_e2_ua_string": "Aegea 11.2 (v4116)"
}