Este repositório inclui duas coisas:
(A) Código Python 3.x, exemplos e scripts para testar os serviços da web One Scotland Gazetteer (OSG) e download de FTP.
(B) Documentação geral para os serviços web OSG e FTP.
(A) Você instalou o python 3.x em seu sistema operacional (SO)
(B) Você se registrou no One Scotland Gazetteer (OSG) e está autorizado a usar o serviço web OSG ou o FTP OSG. Para saber mais, visite o site do One Scotland Gazetteer.
(A) Edite o development.ini
:
Na pasta raiz deste repositório edite o arquivo development.ini e adicione seu nome de usuário e senha para o OSG FTP e os serviços web OSG. Essas credenciais são fornecidas pelo One Scotland Gazetteer Custodian e você pode ter diferentes para FTP e serviços da Web.
(B) Use os exemplos de serviços da web:
python rest.py
(C) Use a funcionalidade FTP executando o seguinte
python download_osg_using_ftp.py
Visão geral: esta documentação fornece informações sobre como usar programaticamente dois dos serviços "One Scotland Gazetteer" (OSG):
(1) serviço web; O serviço web se comunica diretamente com o banco de dados OSG e permite acessar o dicionário geográfico em tempo real, fornecendo as informações mais atualizadas. OSG oferece suporte a dois tipos de serviços; a "transferência de estado representacional" (REST) e o "Protocolo Simples de Acesso a Objetos" (SOAP).
(2) Exportar arquivos; Uma exportação pode ser fornecida no Scottish Data Transfer Format (SDTF) como um arquivo CSV. As exportações serão programadas para serem executadas em uma frequência pré-determinada. Um subconjunto de dados também pode ser fornecido para atender às suas necessidades.
Para obter informações adicionais, visite o site do One Scotland Gazetteer.
Os serviços web OSG são estruturados em torno de conjuntos de dados , que contêm campos que, por sua vez, contêm os dados reais. Cada conjunto de dados de serviço da web retorna campos e dados diferentes e também pode oferecer suporte a funcionalidades diferentes. O OSG possui dois serviços web sendNGListDataSetsMessage
(doravante list ) que retorna os conjuntos de dados disponíveis para consulta, e sendNGSearchMessage
(doravante search ) que permite que consultas sejam realizadas nesses conjuntos de dados. A contagem máxima de registros retornados pelos serviços web OSG não pode exceder 250 . As descrições dos serviços OSG podem ser encontradas em REST e SOAP respectivamente.
Autenticação: Todos os serviços web OSG requerem autenticação usando um username
e uma password
. Tanto username
quanto a password
devem ser fornecidos nos HTTP request headers
para cada solicitação enviada ao serviço da web. Um exemplo de cabeçalhos de solicitação de autenticação para REST e SOAP usando credenciais falsas pode ser encontrado abaixo:
DESCANSAR
Content-Type:application/json
Accept:application/json
username:Alice
password:secret
SABÃO
<soapenv:Header>
<v0:HeaderLogin>
<username>Alice</username>
<password>secret</password>
</v0:HeaderLogin>
</soapenv:Header>
Autorização: autenticar-se no serviço web OSG usando seu username
e password
não significa que você tenha acesso a todos os conjuntos de dados OSG disponíveis. O acesso aos conjuntos de dados é administrado pelo custodiante do OSG e, se for necessário acesso para conjuntos de dados adicionais, os usuários precisam visitar o site do One Scotland Gazetteer e fazer uma solicitação. Por exemplo, um usuário autenticado com sucesso pode ser autorizado a acessar o serviço web de pesquisa ( sendNGSearchMessage
) apenas com o conjunto de dados EST_STANDARD_SEARCH
, mas não com o conjunto de dados ADDRESS_SEARCH
.
Conjuntos de dados: o serviço web de lista pode retornar todos os conjuntos de dados OSG disponíveis. A lista de conjuntos de dados OSG pode ser dinâmica, pois o custodiante do OSG pode facilmente criar novos se houver valor para eles. Para obter uma lista de todos os conjuntos de dados disponíveis, incluindo os campos de cada conjunto de dados que podem ser consultados, a seguinte solicitação pode ser usada:
DESCANSAR
Solicitar corpo
{"listdatasets":{}}
Corpo de resposta
"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"]}
]
}
}
Consulta: a consulta dos dados OSG inclui o uso do serviço web de pesquisa e campos e/ou geometrias. O serviço web de pesquisa pode receber as seguintes entradas:
Exemplos REST
(1) Retorna registros OSG do conjunto de dados EST_STANDARD_SEARCH
.
Solicitar corpo
{"query":{
"dataset":"EST_STANDARD_SEARCH",
"type":"full"
}}
Corpo de resposta
{
"SearchResponseMessage": {
"NGSearchResponseData": {
"Header": {
"ResultCount": 3296208,
"ReturnCount": 250,
"ErrorCode": 0,
"ErrorMessage": "Success"
},
"Result": {
"any": [
[CONTENT OMITTED DUE TO DATA LENGTH]
]
}
}
}
}
Tabela 1. Dados de solicitação HTTP que podem ser incluídos na consulta postada no serviço da web.
Valor | Descrição | Obrigatório | Tipo |
---|---|---|---|
dataset | O nome do conjunto de dados a ser consultado pelo serviço web | Sim | string |
attribute | Um ou mais atributos do conjunto de dados que podem ser usados para filtrar os resultados a serem retornados. Os atributos especificados devem ser provenientes dos campos do conjunto de dados. Um matchtype também pode ser especificado. Todas as comparações não diferenciam maiúsculas de minúsculas. Para o atributo ser especificado, um nome (do campo) e um ou mais valores devem ser fornecidos. Vários atributos são aplicados sucessivamente para produzir conjuntos menores de resultados a serem retornados (ou seja, eles são marcados logicamente juntos). | Não | AttributeType |
area | Isso leva o nome de um polígono pré-carregado que pode ser usado para restringir resultados a itens com UPRN em uma área geográfica definida por esse polígono. | Não | string |
within | Se este elemento for fornecido, ele deverá conter três subelementos, um leste, um norte e uma distância. Esses elementos definem uma área e apenas os itens com UPRN nessa área são retornados. | Não | WithinType |
sortField | Isso permite que os resultados sejam classificados em um dos campos do conjunto de dados. O valor fornecido para isso deve ser um dos campos do conjunto de dados. | Não | string |
sortOrder | Aplicado ao sortField | Não | SortOrderType |
Tabela 2. Definição do AttributeType
Valor | Tipo | Opções |
---|---|---|
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 |
Tabela 3. Definição do WithinType
Valor | Tipo | Opções |
---|---|---|
easting | unsignedLong | 0 - 500000 |
northing | unsignedLong | 500000 - 1300000 |
distance | decimal |
Tabela 4. Definição do SortOrderType
Valor | Tipo | Opções |
---|---|---|
asc | string | |
desc | string |
Tabela 5. Corpo de resposta HTTP: Inclui os dados que são retornados no corpo de resposta do servidor.
Valor | Descrição | Opções |
---|---|---|
ResultCount | O número de itens de dados encontrados que correspondem à consulta | |
ReturnCount | O número de itens de dados retornados pelo serviço web (o mínimo de ResultCount e 250) | |
ErrorCode | Zero para sucesso ou diferente de zero para falha (veja mais tarde) | Consulte a tabela "Códigos de erro" |
ErrorMessage | Uma mensagem descrevendo um erro que ocorreu (veja mais tarde) | Consulte a tabela "Códigos de erro" |
Result | Os itens de dados que correspondem à consulta. O formato real dependerá do conjunto de dados que está sendo consultado, mas consistirá em um conjunto de elementos com o mesmo nome do conjunto de dados, cada elemento contendo um elemento para cada campo no conjunto de dados (com o mesmo nome desse campo). |
Tabela 6. Códigos de erro de resposta HTTP: Inclui todos os possíveis códigos de erro retornados pelo servidor no corpo da resposta
O serviço da web pode retornar quatro códigos de erro possíveis, que são os seguintes:
Código | Explicação | Mensagem(ões) |
---|---|---|
0 | Envio bem-sucedido ao serviço da web | |
1 | Erro com os dados postados no serviço web | Invalid Value - Schema validation error : <error msg> |
2 | O problema foi encontrado durante o processamento da solicitação (por exemplo, solicitação de um conjunto de dados que não existe) | 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 | Erro de autenticação/autorização | 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 |