Socrata开放数据API的Python库

sodap的Python项目详细描述


pypi version构建状态

苏打皮

Socrata开放数据API的Python绑定

安装

您可以使用pip install sodapy安装

如果要从源代码安装,请克隆此存储库并从项目根目录运行python setup.py install

要求

在其核心,这个库在很大程度上依赖于请求包。所有其他需求都可以在requirements.txt中找到。sodapy当前与python 2.7、3.4、3.5和3.6兼容。

文档

正式的socrata api文档提供了可用方法以及其他客户端库的完整文档。可在这里获得与API一起使用的合格域的快速列表

示例

在示例目录中有一些笔记本,其中有一些sodapy的使用示例。

接口

目录

客户机

导入库并建立连接以开始使用。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")

用户名密码仅在创建或修改数据时才需要。应用程序令牌不是严格必需的(可以是none),但是从没有应用程序令牌的客户端执行的查询将受到严格的限制。要创建裸体客户端:

>>> client = Socrata("sandbox.demo.socrata.com", None)

还可以使用上下文管理器创建客户机,以避免拆卸:

α-αα3

默认情况下,客户端通过https发出请求。若要修改此行为或通过代理发出请求,请在此处查看

数据集(限制=0,偏移=0)

检索与特定域关联的数据集。可选的limitoffset关键字参数可用于检索数据集的子集。默认情况下,返回所有数据集。

>>> client.datasets()
[{"resource" : {"name" : "Approved Building Permits", "id" : "msk6-43c6", "parent_fxf" : null, "description" : "Data of approved building/construction permits",...}, {resource : {...}}, ...]

获取(数据集标识符,内容类型="json",**kwargs)

从请求的资源中检索数据。按字段名、id或使用soql关键字筛选和查询数据

>>> client.get("nimj-3ivp", limit=2)
[{u'geolocation': {u'latitude': u'41.1085', u'needs_recoding': False, u'longitude': u'-117.6135'}, u'version': u'9', u'source': u'nn', u'region': u'Nevada', u'occurred_at': u'2012-09-14T22:38:01', u'number_of_stations': u'15', u'depth': u'7.60', u'magnitude': u'2.7', u'earthquake_id': u'00388610'}, {...}]

>>> client.get("nimj-3ivp", where="depth > 300", order="magnitude DESC", exclude_system_fields=False)
[{u'geolocation': {u'latitude': u'-15.563', u'needs_recoding': False, u'longitude': u'-175.6104'}, u'version': u'9', u':updated_at': 1348778988, u'number_of_stations': u'275', u'region': u'Tonga', u':created_meta': u'21484', u'occurred_at': u'2012-09-13T21:16:43', u':id': 132, u'source': u'us', u'depth': u'328.30', u'magnitude': u'4.8', u':meta': u'{\n}', u':updated_meta': u'21484', u'earthquake_id': u'c000cnb5', u':created_at': 1348778988}, {...}]

>>> client.get("nimj-3ivp/193", exclude_system_fields=False)
{u'geolocation': {u'latitude': u'21.6711', u'needs_recoding': False, u'longitude': u'142.9236'}, u'version': u'C', u':updated_at': 1348778988, u'number_of_stations': u'136', u'region': u'Mariana Islands region', u':created_meta': u'21484', u'occurred_at': u'2012-09-13T11:19:07', u':id': 193, u'source': u'us', u'depth': u'300.70', u'magnitude': u'4.4', u':meta': u'{\n}', u':updated_meta': u'21484', u':position': 193, u'earthquake_id': u'c000cmsq', u':created_at': 1348778988}

>>> client.get("nimj-3ivp", region="Kansas")
[{u'geolocation': {u'latitude': u'38.10', u'needs_recoding': False, u'longitude': u'-100.6135'}, u'version': u'9', u'source': u'nn', u'region': u'Kansas', u'occurred_at': u'2010-09-19T20:52:09', u'number_of_stations': u'15', u'depth': u'300.0', u'magnitude': u'1.9', u'earthquake_id': u'00189621'}, {...}]

获取元数据(数据集标识符,content_type="json")

检索与特定数据集关联的元数据。

>>> client.get_metadata("nimj-3ivp")
{"newBackend": false, "licenseId": "CC0_10", "publicationDate": 1436655117, "viewLastModified": 1451289003, "owner": {"roleName": "administrator", "rights": [], "displayName": "Brett", "id": "cdqe-xcn5", "screenName": "Brett"}, "query": {}, "id": "songs", "createdAt": 1398014181, "category": "Public Safety", "publicationAppendEnabled": true, "publicationStage": "published", "rowsUpdatedBy": "cdqe-xcn5", "publicationGroup": 1552205, "displayType": "table", "state": "normal", "attributionLink": "http://foo.bar.com", "tableId": 3523378, "columns": [], "metadata": {"rdfSubject": "0", "renderTypeConfig": {"visible": {"table": true}}, "availableDisplayTypes": ["table", "fatrow", "page"], "attachments": ... }}

更新元数据(数据集标识符、更新字段、内容类型="json")

更新特定数据集的元数据。更新字段应该是一个只包含要覆盖的元数据键的字典。

注意:此方法的无效有效负载可能会损坏数据集或可视化效果。有关详细信息,请参见此评论。

>>> client.update_metadata("nimj-3ivp", {"attributionLink": "https://anothertest.com"})
{"newBackend": false, "licenseId": "CC0_10", "publicationDate": 1436655117, "viewLastModified": 1451289003, "owner": {"roleName": "administrator", "rights": [], "displayName": "Brett", "id": "cdqe-xcn5", "screenName": "Brett"}, "query": {}, "id": "songs", "createdAt": 1398014181, "category": "Public Safety", "publicationAppendEnabled": true, "publicationStage": "published", "rowsUpdatedBy": "cdqe-xcn5", "publicationGroup": 1552205, "displayType": "table", "state": "normal", "attributionLink": "https://anothertest.com", "tableId": 3523378, "columns": [], "metadata": {"rdfSubject": "0", "renderTypeConfig": {"visible": {"table": true}}, "availableDisplayTypes": ["table", "fatrow", "page"], "attachments": ... }}

下载附件(数据集标识符,content_type="json",下载目录="~/sodapy_downloads")

下载与数据集关联的所有附件。返回下载文件的路径列表。

>>> client.download_attachments("nimj-3ivp", download_dir="~/Desktop")
    ['/Users/xmunoz/Desktop/nimj-3ivp/FireIncident_Codes.PDF', '/Users/xmunoz/Desktop/nimj-3ivp/AccidentReport.jpg']

创建(名称,**kwargs)

创建新数据集。(可选)指定关键字参数,例如:

  • 说明数据集的说明
  • 字段列表
  • 类别数据集类别(必须存在于/admin/metadata中)
  • 标记标记字符串列表
  • 行标识符主键的字段名
  • 新建后端是否在新后端中创建数据集

示例用法:

>>> columns = [{"fieldName": "delegation", "name": "Delegation", "dataTypeName": "text"}, {"fieldName": "members", "name": "Members", "dataTypeName": "number"}]
>>> tags = ["politics", "geography"]
>>> client.create("Delegates", description="List of delegates", columns=columns, row_identifier="delegation", tags=tags, category="Transparency")
{u'id': u'2frc-hyvj', u'name': u'Foo Bar', u'description': u'test dataset', u'publicationStage': u'unpublished', u'columns': [ { u'name': u'Foo', u'dataTypeName': u'text', u'fieldName': u'foo', ... }, { u'name': u'Bar', u'dataTypeName': u'number', u'fieldName': u'bar', ... } ], u'metadata': { u'rowIdentifier': 230641051 }, ... }

发布(dataset_identifier,content_type="json")

创建数据集后发布该数据集,即使其脱离"工作副本"模式。从create返回的数据集idid将用于发布。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
0

设置权限(数据集标识符,permission="private",content\u type="json")

将数据集的权限设置为public或private。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
1

upsert(dataset_identifier,payload,content_type="json")

在现有数据集中创建新行。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
2

更新/删除数据集中的行。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
3

upsert甚至可以用csv文件执行。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
4

替换(数据集标识符,有效负载,内容类型="json")

用法与upsert类似,但覆盖现有数据。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
5

创建非数据文件(参数,文件对象)

使用文件中提供的名称创建新的基于文件的数据集 元组。有效的文件输入是:

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
6
>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
7

替换非数据文件(数据集标识符、参数、文件对象)

与创建非数据文件相同,但替换已存在于 基于文件的数据集。

注意:基于表的数据集不能替换为基于文件的数据集。使用"创建非数据文件"进行替换。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
8

删除(dataset_identifier,row_id=none,content_type="json")

删除单个行。

>>> from sodapy import Socrata
>>> client = Socrata("sandbox.demo.socrata.com", "FakeAppToken", username="fakeuser@somedomain.com", password="ndKS92mS01msjJKs")
9

删除整个数据集。

>>> client = Socrata("sandbox.demo.socrata.com", None)
0

关闭()

完成后关闭会话。

>>> client = Socrata("sandbox.demo.socrata.com", None)
1

运行测试

>>> client = Socrata("sandbox.demo.socrata.com", None)
2

贡献

参见贡献.md

此软件包使用语义版本控制。

pypi上提供了源和轮分布。以下是我如何创建这些版本。

AAAAAAAAA 23

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用java Rmi服务器端口alrady   java无法通过netbean IDE连接到mysql数据库   java继承实现   java如何使用threadpool executor重新实现此功能?   JavaTomcat自动关闭   java是否避免使用状态变量副本阻塞?   将json数据发布到URL时发生java错误   用java螺旋打印mxn矩阵   java Android使用RecyclerView滚动时,列表可以容纳多少项   使用JProfiler评测Java mongodb查询,“检索数据”和“查询”有什么区别   java将BLOB转换为PDF   带完成检查的java cron解决方案   jrecorder如何在windows8中将javamail api与jdk8结合使用。1.我正在使用cmd来编译Java文件   用Java计算标准差和方差的数学方法   java如何在spring中将模型作为重定向属性传递   JavaIceFaces2.0.0+视图范围+绑定