Этот репозиторий включает в себя две вещи:
(A) Код Python 3.x, примеры и сценарии для тестирования веб-служб One Scotland Gazetteer (OSG) и загрузки по FTP.
(B) Общая документация по веб-службам OSG и FTP.
(A) В вашей операционной системе (ОС) установлен Python 3.x.
(B) Вы зарегистрировались в One Scotland Gazetteer (OSG) и имеете ли вы право использовать веб-службу OSG или FTP OSG. Чтобы узнать больше, посетите веб-сайт One Scotland Gazetteer.
(A) Отредактируйте файл development.ini
:
В корневой папке этого репозитория отредактируйте файл development.ini и добавьте свое имя пользователя и пароль для FTP OSG и веб-служб OSG. Эти учетные данные предоставляются хранителем справочника One Scotland Gazetteer, и у вас могут быть разные учетные данные для FTP и веб-служб.
(Б) Используйте примеры веб-сервисов:
python rest.py
(C) Используйте функцию FTP, выполнив следующую команду:
python download_osg_using_ftp.py
Обзор: В этой документации представлена информация о том, как программно использовать две службы One Scotland Gazetteer (OSG):
(1) Веб-сервис; Веб-сервис напрямую взаимодействует с базой данных OSG и позволяет получить доступ к справочнику в режиме реального времени, предоставляя самую актуальную информацию. OSG поддерживает два типа услуг; «Передача репрезентативного состояния» (REST) и «Простой протокол доступа к объектам» (SOAP).
(2) Экспорт файлов; Экспорт может быть предоставлен в шотландском формате передачи данных (SDTF) в виде файла CSV. Экспорт будет осуществляться с заранее определенной частотой. Также может быть предоставлен подмножество данных в соответствии с вашими требованиями.
Для получения дополнительной информации посетите веб-сайт One Scotland Gazetteer.
Веб-службы OSG структурированы вокруг наборов данных , которые содержат поля , которые, в свою очередь, содержат фактические данные . Каждый набор данных веб-сервиса возвращает разные поля и данные, а также может поддерживать разные функции. OSG имеет две веб-службы: sendNGListDataSetsMessage
(далее — список ), который возвращает наборы данных, доступные для запроса, и sendNGSearchMessage
(далее — поиск ), который позволяет выполнять запросы к этим наборам данных. Максимальное количество записей, возвращаемых веб-службами OSG, не может превышать 250 . Описания служб OSG можно найти на сайтах REST и SOAP соответственно.
Аутентификация: Все веб-службы OSG требуют аутентификации с использованием username
и password
. username
и password
должны быть указаны в HTTP request headers
для каждого запроса, отправляемого веб-службе. Пример заголовков запроса аутентификации для REST и SOAP с использованием поддельных учетных данных можно найти ниже:
ОТДЫХ
Content-Type:application/json
Accept:application/json
username:Alice
password:secret
МЫЛО
<soapenv:Header>
<v0:HeaderLogin>
<username>Alice</username>
<password>secret</password>
</v0:HeaderLogin>
</soapenv:Header>
Авторизация. Аутентификация с помощью веб-службы OSG с использованием вашего username
и password
не означает, что у вас есть доступ ко всем доступным наборам данных OSG. Доступом к наборам данных управляет хранитель OSG, и если необходим доступ к дополнительным наборам данных, пользователям необходимо посетить веб-сайт One Scotland Gazetteer и подать запрос. Например, успешно аутентифицированному пользователю может быть разрешен доступ к веб-службе поиска ( sendNGSearchMessage
) только с набором данных EST_STANDARD_SEARCH
, но не с набором данных ADDRESS_SEARCH
.
Наборы данных: веб-служба списка может возвращать все доступные наборы данных OSG. Список наборов данных OSG может быть динамическим, поскольку хранитель OSG может легко создавать новые, если они имеют ценность. Чтобы получить список всех доступных наборов данных , включая поля для каждого набора данных, к которым можно запросить, можно использовать следующий запрос:
ОТДЫХ
Тело запроса
{"listdatasets":{}}
Тело ответа
"ListDataSetsResponseMessage":{
"Header":{
"ResultCount":8,
"ReturnCount":8,
"ErrorCode":0,
"ErrorMessage":"Success"
},
"NGListDataSetsResponseData":[
{"DataSet":"EST_STANDARD_SEARCH","Col":["Address_One_Line","Custodian","Easting","Northing","Parent_UPRN","Postcode","Search_Building_Name","Search_Building_No","Search_Postcode_No_Space","Search_Street_Name","Search_Town","Status","UPRN","USRN"]},
{"DataSet":"FVGIS_STANDARD_SEARCH","Col":["Address_One_Line","address_one_line_custom","County_Name","Custodian","Easting","Locality_Name","Northing","paon","PAO_NO","Postcode","Post_Town","p_text","record_type_id","saon","SAO_NO","search_building","search_building_name","search_building_no","search_street_name","search_town","Status","s_text","Street_Descriptor","Town","uprn","usrn","x_coordinate","y_coordinate"]},
{"DataSet":"FVGIS_STREET_SEARCH","Col":["Custodian","End_Easting","End_Northing","Local_Authority","Locality","search_street_name","search_street_town","Start_Easting","Start_Northing","Street_Name","street_one_line","Town","usrn"]},
{"DataSet":"GLASGOW_ACCESS_SAP","Col":["ADDRESS_ONE_LINE","ADR03","ADR04","FLOOR","LAND1","LOCALITY","ORT01","ORT02","PAO_NO","PSTLZ","P_TEXT","SAO_NO","search_line_one","search_postcode_no_space","STATE","S_TEXT","STREET_DESCRIPTOR","UPRN"]},
{"DataSet":"STANDARD_SEARCH","Col":["ADDRESS_ONE_LINE","Custodian","Easting","Northing","Postcode","search_building_name","search_building_no","search_street_name","search_town","Status","UPRN"]},
{"DataSet":"STANDARD_SEARCH_OLDP","Col":["address_one_line","Custodian","Easting","Northing","Postcode","search_building_name","search_building_no","search_postcode_no_space","search_street_name","search_town","Status","uprn"]},
{"DataSet":"STD_ADDRESS_SEARCH","Col":["ADD_LINE_1","ADD_LINE_2","ADD_LINE_3","address_string","la_code","POST_CODE","start_date","TOWN","UPRN","USRN","x_coord","y_coord"]},
{"DataSet":"WLC_SEARCH","Col":["Address_One_Line","address_one_line_custom","County_Name","Custodian","Easting","Locality_Name","Northing","paon","PAO_NO","Postcode","Post_Town","p_text","record_type_id","saon","SAO_NO","search_building","search_building_name","search_building_no","search_street_name","search_town","Status","s_text","Street_Descriptor","Town","uprn","usrn","x_coordinate","y_coordinate"]}
]
}
}
Запрос. Запрос данных OSG включает использование веб-службы поиска и полей и/или геометрии. Веб-служба поиска может получать следующие входные данные:
Примеры REST
(1) Вернуть записи OSG из набора данных EST_STANDARD_SEARCH
.
Тело запроса
{"query":{
"dataset":"EST_STANDARD_SEARCH",
"type":"full"
}}
Тело ответа
{
"SearchResponseMessage": {
"NGSearchResponseData": {
"Header": {
"ResultCount": 3296208,
"ReturnCount": 250,
"ErrorCode": 0,
"ErrorMessage": "Success"
},
"Result": {
"any": [
[CONTENT OMITTED DUE TO DATA LENGTH]
]
}
}
}
}
Таблица 1. Данные HTTP-запроса, которые могут быть включены в запрос, отправленный веб-службе.
Ценить | Описание | Обязательный | Тип |
---|---|---|---|
dataset | Имя набора данных, который будет запрошен веб-сервисом. | Да | string |
attribute | Один или несколько атрибутов набора данных, которые можно использовать для фильтрации возвращаемых результатов. Указанные атрибуты должны быть из полей набора данных. Также можно указать тип соответствия. Все сравнения нечувствительны к регистру. Для указанного атрибута необходимо указать имя (поля) и одно или несколько значений. Несколько атрибутов применяются поочередно для получения меньших наборов возвращаемых результатов (т. е. они логически объединяются). | Нет | AttributeType |
area | При этом принимается имя предварительно загруженного многоугольника, которое можно использовать для ограничения результатов элементами с UPRN в географической области, определенной этим многоугольником. | Нет | string |
within | Если этот элемент указан, он должен содержать три подэлемента: восточное положение, северное положение и расстояние. Эти элементы определяют область, и возвращаются только элементы с UPRN в этой области. | Нет | WithinType |
sortField | Это позволяет сортировать результаты по одному из полей набора данных. Указанное для этого значение должно быть одним из полей набора данных. | Нет | string |
sortOrder | Применяется к sortField | Нет | SortOrderType |
Таблица 2. Определение AttributeType
Ценить | Тип | Параметры |
---|---|---|
matchtype | string | equal to (default) greater than greater than or equal to less than less than or equal to not equal to contains between in not in |
name | string | |
value | string |
Таблица 3. Определение WithinType
Ценить | Тип | Параметры |
---|---|---|
easting | unsignedLong | 0 - 500000 |
northing | unsignedLong | 500000 - 1300000 |
distance | decimal |
Таблица 4. Определение SortOrderType
Ценить | Тип | Параметры |
---|---|---|
asc | string | |
desc | string |
Таблица 5. Текст ответа HTTP: включает данные, возвращаемые в тексте ответа сервера.
Ценить | Описание | Параметры |
---|---|---|
ResultCount | Количество найденных элементов данных, соответствующих запросу. | |
ReturnCount | Количество элементов данных, возвращаемых веб-службой (минимум ResultCount и 250). | |
ErrorCode | Ноль в случае успеха или ненулевое значение в случае неудачи (см. ниже) | См. таблицу «Коды ошибок». |
ErrorMessage | Сообщение с описанием произошедшей ошибки (см. далее) | См. таблицу «Коды ошибок». |
Result | Элементы данных, соответствующие запросу. Фактический формат будет зависеть от запрашиваемого набора данных, но он будет состоять из набора элементов с тем же именем, что и набор данных, причем каждый элемент содержит элемент для каждого поля в наборе данных (названного так же, как это поле). |
Таблица 6. Коды ошибок HTTP-ответа. Включает все возможные коды ошибок, возвращаемые сервером в теле ответа.
Веб-служба может возвращать четыре возможных кода ошибок:
Код | Объяснение | Сообщение(я) |
---|---|---|
0 | Успешная отправка в веб-сервис | |
1 | Ошибка с данными, опубликованными на веб-сервисе. | Invalid Value - Schema validation error : <error msg> |
2 | Проблема возникла во время обработки запроса (например, запрос несуществующего набора данных). | Invalid dataset [<dataset>] Invalid attribute name for dataset <dataset> [<attr_name>] <attr_name>: Invalid Date [<value>] expected format YYYY-MM-DD <attr_name>: Invalid Number [<value>] Invalid area [<area>] The dataset <dataset> does not support filtering on area polygon (<area>) awaiting initial index build - please try again later Invalid sort_field for dataset <dataset> [<sort_field>] |
3 | Ошибка аутентификации/авторизации | Invalid Username/Password The address your computer is accessing this site from (xxx.xxx.xxx.xxx) has been blocked due to excessive failed login attempts. To have this block removed, please contact <contact email>. Alternatively, the block will be automatically removed in two hours time An unknown login failure occurred. The administrators have been notified of the event You do not have permission to use this service Missing authentication header in soap request |