从geonames.org查询数据并返回rdf/semantic web数据。
geonames_rdf的Python项目详细描述
简介
这是与Geonamesrdf兼容的web-services的客户端库。此时,只有Search API提供rdf响应,因此是唯一可用的适配器。
rdf通常与Semantic Web和/或IoT结合使用。
要求
- 请求
- python 2.x或3.x
安装
通过PYPI:
$ sudo pip install geonames_rdf
用法
作为库:
import geonames.adapters.search _USERNAME = 'your_username' sa = geonames.adapters.search.Search(_USERNAME) result = sa.query('detroit').country('us').max_rows(5).execute() for id_, name in result.get_flat_results(): # make_unicode() is only used here for Python version-compatibility. print(geonames.compat.make_unicode("[{0}]: [{1}]").format(id_, name))
当用作库时,结果对象将从execute()方法返回。以下是读取结果的方法(获取平面结果在上面使用):
- 原始lxml对象通过xml属性公开。
- get_xml_nodes方法将从生成的文档中返回一个featurelxml.etree对象列表,表示每个结果。
- 如果您对其他内容不感兴趣,get_flat_results方法只会生成(id,name)2元组的列表。默认情况下,这也是从命令行实用程序返回的内容。
作为命令行实用程序:
$ gn_search dsoprea -p query detroit -p country us -p max_rows 5 [http://sws.geonames.org/4990729/]: [Detroit] [http://sws.geonames.org/6955112/]: [Detroit-Warren-Livonia] [http://sws.geonames.org/5024238/]: [Detroit Lakes Airport] [http://sws.geonames.org/4990733/]: [Detroit City Airport] [http://sws.geonames.org/4990742/]: [Detroit Metropolitan Wayne County Airport]
只能向命令行实用程序提供字符串(非布尔)参数。
注意:您还可以通过传递“-x”参数来获得完整的rdf响应。
无论您使用的是库还是工具,可用的参数是:
Library Parameter Name | API Parameter Name |
---|---|
query | q |
place_name_like | name |
place_name_equals | name_equals |
place_name_starts_with | name_startsWith |
max_rows | maxRows |
start_row | startRow |
country | country |
show_country_first | countryBias |
continent | continentCode |
admin_code1 | adminCode1 |
admin_code2 | adminCode2 |
admin_code3 | adminCode3 |
feature_class | featureClass |
feature_code | featureCode |
population_class | cities |
language | lang |
verbosity | style |
force_matching_name | isNameRequired |
tag | tag |
operator | operator |
charset | charset |
fuzzy | fuzzy |
east_west_north_south_box | east,west,north,south |
place_name_language | searchlang |
order_by | orderby |
某些参数可以指定多次。有关更多信息,请参阅api文档。
设计说明
- 请注意,库中的大多数参数的命名与api不同。通常这是违反我的策略的,但是我发现很多参数都是模棱两可的,以至于我将这些参数重命名为更清晰的参数,并在使用时将其余参数重命名为下划线分隔命名。
- 我们主要依靠api来针对错误的参数进行正确的验证。我们不喜欢在客户机中任意验证参数,因为服务器中的规则可能会更改,而且这可能会干扰您的实现。但是,如果有一种验证,出于某种原因,是有意义的和/或会使开发更容易反对的,请告诉我。