• Регистрация
Павел Рословец
Павел Рословец +388.04
Инженер
  • Написать
  • Подписаться

MATLAB WEB API для работы с веб-сервисами

Другое,  Анализ данных или машинное обучение 
23.07.2019

Представляем вам фреймворк для работы с вебсервисами и соцсетями - MATLAB WEB API.

Он уже поддерживает работу с такими сервисами как Bing Maps, OpenWeatherMap, VK, порталом "Открытые данные России" и другими.

Кроме того фреймворк позволяет создавать библиотеки для работы с любыми другими веб-сервисами, в том числе с авторизацией через OAuth1.0/2.0.

Давайте подробнее разберем, зачем он нужен и как с ним работать

Полный список поддерживаемых сервисов (некоторые имеют частичную поддержку)

  • Bing Maps - картографический сервис
  • Data.gov.ru - открытые данные России
  • Flickr - фотохостинг OAuth logo
  • HeadHunter - сервис поиска работы
  • ip-api.com - геолокация оп IP
  • NetSuite - CRM-система OAuth logo
  • OpenWeatherMap - сервис погоды
  • REST Countries - информация о странах
  • uinames.com - генератор случайных имён
  • VK - российская социальная сеть OAuth 2.0 logo

Зачем это нужно?

Предположим, нам нужно провести глобальный анализ стран, но для этого нам сначала нужно получить подобную информацию обо всех странах в мире.

Для этого можно воспользоваться бесплатным веб-сервисом REST Countries. В его нехитрой документации подробно описано, как составлять запросы для получения нужных данных.

Например, чтобы получить информацию обо всех странах мира, надо выполнить GET-запрос по адресу https://restcountries.eu/rest/v2/all. Вы можете перейти по этому адресу в бразуере и увидите информацию обо всех странах и территориях в формате JSON.

Впрочем, намного эффективнее будет получить эти данные напрямую в MATLAB, поскольку он автоматически парсит JSON. Для этого можно воспользоваться стандартной функцией webread:

 

r1 = webread('https://restcountries.eu/rest/v2/all')

В переменную r будет записан большой массив структур из 250 элементов. Именно столько стран и территорий поддерживает сервис REST Countries.

r = 

  250×1 struct array with fields:

    name

    topLevelDomain

    alpha2Code

    alpha3Code

    callingCodes

    capital

    ...

На самом деле, работать с массивом структур не очень удобно, но все же можно. Например, вытащим информацию о площади для каждой страны:

 

area1 = [r1.area];

Интересен тот факт, что в векторе area1 получается 240 элементов (при 250 странах в исходных данных), а значит, для 10 стран информация о площади отсутствует.

Ну и построим гистограмму площадей всех стран:

 

histogram(area1)

Если нам нужно получить не всю информацию, а только определенные поля, мы должны передать список полей отдельным параметром запроса:

 

r2 = webread('https://restcountries.eu/rest/v2/all', 'fields', 'name;capital;region;population;area')

Интересно, что в этом случае мы получим на массив структур, а массив ячеек со структурами оО

r2 =

  250×1 cell array

    {1×1 struct}

    {1×1 struct}

    {1×1 struct}

    {1×1 struct}

...

Вот такой формат для работы совсем не удобен. Не конец света, конечно, но чтобы вытащить данные из ячеек, надо постараться. Возможно, самым простым вариантом будет написать цикл, который проходится по массиву и извлекает данные из каждой ячейки.

И на самом деле, вот такое непостоянство формата данных, которые возвращает webread - это проблема. То структуры, то ячейки... Приходится это учитывать в алгоритмах.

Благо, все уже учтено в MATLAB WEB API, который имеет библиотеку для работы с REST Countries.

Для начала создаем объект API WEB.RESTCountries

 

rc = WEB.RESTCountries;

Затем обращаемся к встоенному методу all для получения информации обо всех странах.

r3 = rc.all('fields', 'name;capital;region;population;area')

В результате мы получим не ячейки и даже не массив структур, а сразу таблицу MATLAB (table), с которой работать гораздо удобнее и приятнее.

r3 =

  250×5 table

                             name                                    capital                      region         population           area   

    ___________________________    _____________________    __________    __________    ________

    'Afghanistan'                                             'Kabul'                       'Asia'              2.7657e+07    6.5223e+05

    'Åland Islands'                                           'Mariehamn'              'Europe'           28875            1580

...

И построим гистограмму по регионам, посмотрим, где больше всего стран сосредоточилось:

histogram(categorical(r3.region))

MATLAB WEB API имеет и другие функции для работы с REST Countries: byCode(), byCurrency(), byName(), byRegion().

Как видите, работать с MATLAB WEB API намного удобнее, чем с использованием стандартной функции webread.

Оценить работу с другими сервисами вы можете благодаря встроенным примерам. Подробнее об установке и использовании читайте на странице проекта.

А также обязательно посмотрите видео о выгрузке и анализе данных из соцсети ВКонтакте (VK)

 

P.S. Приглашаем всех энтузиастов присоединиться к разработке MATLAB WEB API. Работы предстоит еще много - от улучшения поддержки имеющихся сервисов до добавления новых. Это отличный шанс для вас попрактиковаться в программировании в MATLAB на реальной интересной задаче вместе с инженерами ЦИТМ "Экспонента".

Теги

  • web
  • api
  • интернет
    23.07.2019

    Комментарии