Новость из категории: Информация

Начинаем работать с REST и PowerShell

Построение URL-адресов REST

Начинаем работать с REST и PowerShell

Чтобы сформировать такой URL-адрес, на сайте службы геологической съемки США (USGS) я выполнил поиск по контексту RESTful services и вышел на страницу (http://waterservices.usgs.gov/rest/), где перечислены все возможности, реализуемые с помощью этой вебслужбы. Здесь пользователю предлагается инструмент, который после выбора нужного элемента меню формирует URL-адрес запроса для получения необходимой информации. Это отличный пример удобной документации, открывающей доступ к данным. Следует, однако, понимать, что некоторые веб-службы имеют более сложный интерфейс (например, требуют аутентификации), а у некоторых просто плохая документация. Запрос состоит из двух частей. Сначала идет указатель на информационный ресурс (http://waterservices.usgs.gov/nwis/iv/), за которым следует строка (?sites=02313098¶meterCd=00065). Знатокам веб-технологий уже известно, что это HTTP-запрос типа GET, содержащий две пары ‘имя=значение’: sites=02313098 (указатель на запрашиваемый измеряемый ресурс) и parameterCd=00065 (в данном случае означает вопрос «какова глубина реки?», а не «какова температура?» или «какова скорость течения?» и т. д.). Обратите внимание на первую строчную букву р. Вспомним, что XML различает верхний и нижний регистры.

Мы видим, что первой парс ‘имя=значение’ предшествует знак вопроса (?), а следующей паре — символ (&). Если бы у нас была третья пара 'имя=значение', например format=XML, то URL-адрес выглядел бы так: http://waterservices.usgs.gov/nwis/iv/?sites=02313098¶meterCd=00065?format=XML.



Начинаем работать с REST и PowerShell

Передача выходных данных веб-службы переменной с помощью Invoke-WebRequest

Теперь оставим браузер и обратимся к PowerShell. Ранее мы уже применяли Invoke-WebRequest, поэтому синтаксис нам знаком. Запрос к веб-службе построим из двух операторов:
$URI = "http://waterservices.usgs.gov/nwis/iv/?sites=02313098&parameterCd=00065"
[string]$MyResult=(Invoke-WebRequest $URI)

Отметим, что имени переменной SMyResult предшествует string. Это метод, называемый приведением типа. PowerShell исходит из того, что на входе — текст XML, поэтому по умолчанию будет осуществлять его синтаксический анализ для преобразования в объект XML. Однако в нашем случае этого делать не нужно, поэтому я даю указание сохранить данные как строку, что занимает меньше времени и больше подходит для следующей команды, которую мы будем использовать.

Начинаем работать с REST и PowerShell

Извлечение данных с помощью XPath и Select-XML

Значение переменной SMyResult представляет собой сложный текст XML, который я всегда перенаправляю в бесплатную утилиту XML Explorer для преобразования в более удобную для чтения форму. Чтобы с помощью PowerShell выделить из текста всего одно значение (в нашем случае 6.23), воспользуемся языком запросов к элементам ХМ L текста под названием XPath и командой Select-XML.

XPath позволяет с минимальными затратами выделить нужные данные из сложного текста XML, каковым в нашем случае является возвращаемый результат запроса. Плавное, что нам известно имя элемента, содержащего нужные данные, а именно value, которому предшествует пространство имен (namespace) по имени nsl. Приведенный ниже оператор PowerShell с помощью XPath находит элемент value независимо от пространства имен, а затем извлекает текст, содержащийся в этом элементе, который и представляет собой искомое значение:
$WaterHeight = (Select-XML -content $result -XPath "//*[local-name()='value']").node.'#text'

Мы еще вернемся к XPath, но пока просто следует уяснить, что, для того чтобы применить этот оператор, надо всего лишь найти имя элемента и указать его вместо value. Например, если в вашем случае веб-служба помешает интересующее вас значение в элемент по имени OutVal, то оператор будет выглядеть так:
$Webdata = (select-xml -content $result -xpath "//*[local-name()='OutVal']").node.'#text'

Опробуйте такой способ на нескольких веб-службах, и в следующий раз мы продолжим эту тему.

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх