Перейти к контенту

БорисБ

Пользователи
  • Число публикаций

    90
  • Регистрация

  • Последнее посещение

Весь контент пользователя БорисБ

  1. Должно быть заключено целиком в двойные кавычки: "МИ 2408-97 «ГСИ. Аппаратура пользователей космических навигационных систем геодезическая. Методика поверки»" Потому что есть переносы строк. Должно быть оформлено: Leica TM50 I 0,5"" R1000 Т.е. один символ двойной кавычки экранируем вторым символом двойной кавычки. Вставляем «как есть», то есть ничего не добавляем и не удаляем.
  2. «Аршин» вроде бы не совсем мёртв, но сведения о поверках не публикуются. Это у всех так?
  3. Это не они копят. Это мы копим. Обмениваемся в «Аршином» в пакетном режиме с использованием API. Так «Аршин» даже не регистрирует наши пакеты.
  4. Об этом прямо говорится в Руководстве:
  5. Может быть кому-то будет интересно. Мы начали передавать пакеты в АРШИН с помощью API, но в силу сложности обработки ответов полученных от вызова curl … >> result.txt , как это предлагается Инструкцией, мы используем встроенные в Windows Server функциональные возможности PowerShell. Здесь следует отметить, что функция формирования пакетов в формате CSV для ручной загрузки у нас уже была, поэтому роботом мы передаём пакеты тоже в формате CSV. Для формирования файла в кодировке base64 используется функция function toBase64 { param( [String]$Name ) $fileName = "{0}.csv" -f $Name $fileContent = Get-Content -Raw $fileName $fileContentBytes = [System.Text.Encoding]::Default.GetBytes($fileContent) $fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes) $fileBase64 = [System.IO.Path]::GetDirectoryName($fileName) + "\" + [System.IO.Path]::GetFileNameWithoutExtension($fileName) + ".base64" Set-Content -Path $fileBase64 -NoNewline -Value $fileContentEncoded return $fileBase64 } которая на вход принимает имя файла с пакетом в формате CSV без указания расширения, перекодированный файл кладёт рядышком, заменяя расширение на .base64. Неочевидные трудности, с которыми мы столкнулись. Важно использовать ключ -Raw у командлета Get-Content, который позволяет считать файл как одну большую строку, а не как массив строк. Если его не использовать, в перекодированном файле появляется пустая строка в конце и пакет отбрасывается при проверке. При перекодировании, чтобы не допустить двойной конвертации в utf-8 (напомню, что формирование пакетов в формате CSV в кодировке utf-8 без BOM у нас было уже реализовано ранее для загрузки пакетов в ручном режиме) при чтении содержимого необходимо использовать кодировку Default, а не UTF-8, как может показаться. $fileContentBytes = [System.Text.Encoding]::Default.GetBytes($fileContent) Уже отмечалось, что проверяющая сторона плохо относится к символам перевода строки внутри передаваемого файла, поэтому важно указать ключ -NoNewline при вызове командлета Set-Content. Когда файл получен, его можно передать для загрузки в АРШИН вызовом Invoke-RestMethod. try { $headers = @{ "X-API-KEY"="секретный_ключ" "Content-type"="application/csv" } $result = Invoke-RestMethod ` -Uri https://fgis.gost.ru/fundmetrology/pov/submit ` -Method POST ` -Headers $headers ` -InFile имя_файла } catch { $msg = "Server is unavailable" Write-Host $msg } Поскольку конвертация файла в кодировку base64 реализована в виде функции значение ключа -InFile можно оформить в виде вызова функции -InFile $(toBase64 имя_CSV_файла_в_кодировке_UTF) В результате вызова Invoke-RestMethod, если АРШИН не был на техническом обслуживании (поэтому всё оборачиваем в try - catch), получаем json-ответ вида registrationTime : 2019-10-30T09:31:10.507+03:00 summary : requestID : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx registrationNumber : 012345 description : Дата и время загрузки: 30.10.2019 09:31:10 status : Received Его можно анализировать прямо в сценарии PowerShell, что значительно упрощает разработку, так как исключает разбор текстового файла и позволяет максимально автоматизировать процесс загрузки. Но тут есть важное замечание: если утерять requestID, полученный в результате загрузки пакета, то его восстановить невозможно никаким образом. С помощью API нельзя посмотреть requestID всех пакетов, переданных с помощью робота. Совершенно аналогично (пере-)проверяются пакеты со статусом Received. try { $headers = @{ "X-API-Key"="секретный_ключ" } $result = Invoke-RestMethod ` -Uri https://fgis.gost.ru/fundmetrology/pov/check/уникальный_ключ_пакета ` -Headers $headers } catch { $msg = "Server is unavailable" Write-Host $msg } Только надо уникальный_ключ_пакета заменить на полученный ранее requestID. Именно поэтому так важно его не потерять. Может быть, наш опыт кому-нибудь пригодится. PS Поле description в ответе может быть произвольно большой длины, переносы строк оформлены в unix-стиле. Чтобы привести их в стиль Windows можно применить такую конструкцию $result = Invoke-RestMethod … $description = $result.description -replace [char]10,([char]13+[char]10).ToString()
  6. Спасибо, так даже лучше. А это документированная возможность?
  7. Может кто-нибудь знает, может ли робот запросить список всех своих requestID?
  8. Во ФГИСе обновили список эталонов единиц величин.В наш локальный справочник обновленная версия не загружается по причине задвоения ключей. Небольшое исследование показало, что номера эталонов в государственном реестре могут повторяться, а мы полагали, что они являются ключом. Таких записей 71, некоторые из них встречаются аж по четыре раза. По большей части один и тот же эталон из одного и того же приказа вносится несколько раз, но есть и вопиющие случаи, когда совершенно разным эталонам, даже эталонам разных физических единиц, присвоены одинаковые номера. Так что будьте бдительны! При этом версия от 2018-12-05T16:30:34.494+03:00 была загружена без ошибок. К слову, из xml убрали дату и время обновления справочника (тэг Date), так что теперь неясно, когда пришла пора обновлять локальный справочник эталонов.
  9. Возможно я неточно выразился. Я говорю от имени одного из региональных ЦСМов. Ключик и право на передачу сведений конечно есть, я подозреваю, что и доступ в реальную базу «аршина» тоже есть (но это не точно). Нет доступа именно к тестовой среде, которую должна выдавать техподдержка по запросу, но не выдает. И по второму пункту тоже хочу сразу прояснить. Вот, скажем, у нас в организации есть двое ответственных за передачу данных в фонд. Каждый из них видит только то, что сам и загрузил, потому что входят они каждый со своими данными с портала госуслуг. Страшно то, что никто не имеет даже теоретической возможности увидеть что каждый из передаёт, кроме них самих. А если человек уволился? И вот в этом ключе, собственно, и вопрос - не случается ли так, что только робот видит то, что передал робот?
  10. Для начала расскажите как получить доступ к API. Очень хотим, хотя бы попробовать, но техподдержка на запрос подключения «тестового доступа» молчит, а в «нетестовый» доступ так сразу писать не хочется. И второе. Когда грузит сведения о поверке человек - то он в своём кабинете видит эти поверки и может, теоретически, внести исправления. Это страшный бред, конечно, но с этим пока поделать ничего нельзя. А кто видит, что грузит робот?
  11. У вас столбцы отделены друг от друга запятыми. А надо - точками с запятыми. Во вложении Ваш файл с нужными разделителями. пример.csv
  12. Было такое. Расшифровку пустого лога прислали по запросу на адрес fgis2@gost.ru. В запросе сообщите регистрационные номера интересующих Вас заявок.
  13. А как быть, если «Ошибка в данных (см. лог обработки)», а в «полном логе» ничего, кроме «Даты и времени загрузки»?
×
×
  • Создать...