csv的即时json api

csvapi的Python项目详细描述


CSVAPI

“立即”发布一个在互联网上任何地方托管的csv的api。也支持Excel文件。

安装

需要python 3.6+和一个带有file命令的unix操作系统。

python3 -m venv pyenv && . pyenv/bin/activate
pip install csvapi

用于开发:

pip install -r requirements/develop.pip
pip install -e .

快速启动

csvapi serve -h 0.0.0.0 -p 8000

命令行选项

$ csvapi serve --help
Usage: csvapi serve [OPTIONS]

Options:
    --ssl-key TEXT             Path to SSL key
    --ssl-cert TEXT            Path to SSL certificate
    -w, --max-workers INTEGER  Max number of ThreadPoolExecutor workers
    --cache / --no-cache       Do not parse CSV again if DB already exists
    --reload                   Automatically reload if code change detected
    --debug                    Enable debug mode - useful for development
    -p, --port INTEGER         port for server, defaults to 8001
    -h, --host TEXT            host for server, defaults to 127.0.0.1
    --dbs DIRECTORY            Where to store sqlite DBs
    --help                     Show this message and exit.

展开

使用ssl,使用Hypercorn

hypercorn csvapi.webservice:app -b 0.0.0.0:443 --keyfile key.pem --ca-certs cert.pem

有关更多选项,请参见the documentation

可以使用环境变量CSVAPI_CONFIG_FILE指向自定义配置文件。

API使用

转换

/apify?url=http://somewhere.com/a/file.csv

这会将csv转换为sqlite数据库(w/agate),并返回以下响应:

{"ok":true,"endpoint":"http://localhost:8001/api/cde857960e8dc24c9cbcced673b496bb"}

参数

查询字符串中可以使用一些参数。

encoding

默认值自动检测

您可以使用此参数强制编码(例如utf-8),而不是依赖于自动检测。

数据api

这是前一个响应的endpoint属性。

/api/<md5-url-hash>

这将查询先前转换的api文件并返回前100行,如下所示:

{"ok":true,"rows":[[],[]],"columns":[],"query_ms":1}

参数

查询字符串中可以使用一些参数。

_size

默认值100

这会将查询限制为一定数量的行。例如,仅获取250行:

/api/<md5-url-hash>?_size=250

_sort_sort_desc

使用它们按列排序。sort将按升序排序,sort_desc按降序排序。

/api/<md5-url-hash>?_sort=<column-name>

_offset

使用此选项可添加偏移量。它与_size结合使用,允许分页。

/api/<md5-url-hash>?_size=1&_offset=1

_shape

默认值lists

参数_shape用于指定json的格式输出。它可以使用值objects来获取对象数组,而不是数组数组:

/api/<md5-url-hash>?_shape=objects

例如,不返回:

{"ok":true,"query_ms":0.4799365997,"rows":[[1,"Justice","0101",57663310],[2,"Justice","0101",2255129],[3,"Justice","0101",36290]],"columns":["rowid","Mission","Programme","Consommation de CP"]}

它将返回:

{"ok":true,"query_ms":2.681016922,"rows":[{"rowid":1,"Mission":"Justice","Programme":"0101","Consommation de CP":57663310},{"rowid":2,"Mission":"Justice","Programme":"0101","Consommation de CP":2255129},{"rowid":3,"Mission":"Justice","Programme":"0101","Consommation de CP":36290}],"columns":["rowid","Mission","Programme","Consommation de CP"]}

_rowid

默认值show

参数_rowid用于显示或隐藏返回数据中的行ID。使用_rowid=hide隐藏。

/api/<md5-url-hash>?_shape=objects&_rowid=hide

{"ok":true,"query_ms":2.681016922,"rows":[{"Mission":"Justice","Programme":"0101","Consommation de CP":57663310},{"Mission":"Justice","Programme":"0101","Consommation de CP":2255129},{"Mission":"Justice","Programme":"0101","Consommation de CP":36290}],"columns":["Mission","Programme","Consommation de CP"]}

_total

默认值show

参数_total用于显示或隐藏返回数据中的总行数(与分页无关)。使用_total=hide隐藏。

{"ok":true,"query_ms":2.681016922,"rows":[{"Mission":"Justice","Programme":"0101","Consommation de CP":57663310},{"Mission":"Justice","Programme":"0101","Consommation de CP":2255129},{"Mission":"Justice","Programme":"0101","Consommation de CP":36290}],"columns":["Mission","Programme","Consommation de CP"],"total":3}

学分

灵感来自优秀的Datasette

更改日志

0.0.9(2019-01-18)

  • 升级至quart-0.6.6和hypercorn-0.4.6#16

0.0.8(2018-10-04)

  • 如果CSV嗅探失败,请尝试在嗅探后解析CSV w/o嗅探(Excel方言)

0.0.7(2018-09-17)

  • MAX_FILE_SIZE配置变量#13
  • 添加按引用者筛选功能(引用者筛选)#14

0.0.6(2018-09-10)

  • 计算表中的行总数#12

0.0.5(2018-09-10)

  • 将csv sniff limit设为配置变量并提高默认值#11
  • 正确处理未找到(404)错误

0.0.4(2018-09-04)

  • 强制SSL配置变量

0.0.3(2018-08-31)

  • 通过SENTRY DSN配置变量提供的岗哨支持

0.0.2(2018-08-30)

  • csvapi_config_file env var支持

0.0.1(2018-08-30)

  • 初始版本

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

推荐PyPI第三方库


热门话题
java减去日期得到昨天的日期   在Eclipse中打开包资源管理器和尝试打开java类时出错   无法使用java连接到远程mysql服务器   java如何关闭打开另一个框架的JFrame?   使用jsoup爬行的java linkedin页面不会返回正文信息   浮点Java双比较ε   forloop中的Java数组最小元素   注册清理后java Eclipse不工作   java对threadsafe函数的调用也需要同步吗?   java排队网络与均值分析   接收*。Java客户端应用程序中来自PHP服务器的pdf文件   解析将前导零添加到已转换的整数Java   java如何在JPA Hibernate中定义实体之间的“OneToMany”关系?   网格上求交点四边形的java算法   java如何向字符串中添加另一个?