forikal-uk / capture-lookups
此包已被弃用,不再维护。作者建议使用 https://github.com/xmlsquad/capture-lookups 包。
抓取 Google Sheets 并将它们的数据存储为 CSV 文件
v0.3.3
2018-10-15 06:44 UTC
Requires
- php: >=7.1
- google/apiclient: ^2.0
- symfony/console: ^3.4
- symfony/filesystem: ^3.4
- symfony/yaml: ^3.4
- xmlsquad/xml-authoring-library: 0.3.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.11
- phpunit/phpunit: ^7.1
This package is not auto-updated.
Last update: 2019-02-20 19:40:37 UTC
README
一个 Symfony 控制台命令。搜索配置文件,该文件列出 Google Sheets 的 URL,抓取表格并将它们的数据作为 CSV 文件存储在本地。
设计用于 https://github.com/xmlsquad/xml-authoring-tools 的 Symfony 控制台应用程序上下文,该应用程序反过来又用于基于 xml-authoring-project 的已知目录结构。
使用说明
指定要收集的查找表
我们假设此命令是在 xml-authoring-project 的上下文中运行的。即。目录结构的要点是已知的。
使用 mapping.yaml
配置文件,该文件定义了我们必须收集的 Google Sheets 的位置。
示例 mapping.yaml
LookupTableA: # (string) Specifies the URL of the sheet to look into url: "https://docs.google.com/spreadsheets/d/1jOfsClbTj15YUqE-X2Ai9cvyhP-GLvP8CGZPgD1TysI/edit#gid=0" # (int) Sets at what row number we'll start reading data - use if you want to skip the beginning of the sheet, for example a header startingFromRow: 2 # (bool) Enable or disable fetching data in a batch. Doing so is faster, but may fail if there is a lot of data to be fetched batchGet: true LookupTableB: url: "https://docs.google.com/spreadsheets/d/1jOfsClbTj15YUqE-X2Ai9cvyhP-GLvP8CGZPgD1TysI/edit#gid=0" startingFromRow: 2 batchGet: false
使用命令
- 检出仓库
- 使用
composer install
安装依赖项 - 在项目根目录或任何 PHP 可访问的父目录中放置一个
gApiServiceAccountCredentials.json
文件 - 运行
bin/capture-lookups
以查看所有可用的映射 - 运行
bin/capture-lookups --sheet=LookupTableA
以交互方式运行命令 - 运行
bin/capture-lookups --sheet=LookupTableA --no-interaction
以无提示运行命令,跳过具有风险名称的文件或现有文件 - 运行
bin/capture-lookups --sheet=LookupTableA --no-interaction --force
以无提示运行命令,覆盖现有文件 并使用净化后的文件名
单元测试
- 安装依赖项
- 运行
./vendor/bin/phpunit
跳过的标签 - 命名约定
通过 Google Sheet 标签,我指的是工作簿 内部 的其中一个工作表。
任何以尾随下划线结尾的 Google Sheet 标签都将被视为跳过。
foo_
会被跳过。foo
不会被跳过。_foo
也不会被跳过。
连接到 GSuite
Google Api 用于验证访问 GSuite 的文件应位于 xml-authoring-project 的根目录。
ping-drive 项目解释了如何设置以连接到 GSuite。
运行命令
当运行命令时,它将
- 在当前工作目录中搜索XmlAuthoringProjectSettings.yaml文件,如果没有找到,将递归地查找父目录,直到找到名为XmlAuthoringProjectSettings.yaml的文件。
- 确定要写入的
DestinationDirectory
目录- 如果命令中传递了
DestinationDirectory
选项,则使用该选项。 - 如果没有传递
DestinationDirectory
选项给命令,则将其设置为默认的DestinationDirectory
(见下文)。- 默认的
DestinationDirectory
是在调用命令的工作目录。
- 默认的
- 如果命令中传递了
- 对于配置文件中指定的每个查找表
- 转到GSuite上的Google表格
- 确定并记录Google表格的名称
- 对于该表格中的每个标签页
- 如果标签页的名称表示应该忽略(有尾随下划线),则忽略该标签页,跳过并移动到下一个标签页。
- 否则,记录标签页的名称
- 将Google表格名称与标签页名称结合,设置生成的CSV文件的名称:
<GoogleSheetName>-<TabName>.csv
。 - 检查名称,确保它只包含字母数字字符、点、连字符或下划线。(例如,如果用作Windows或MacOS上的文件名,则名称不太可能引起问题)
- 如果名称包含无效字符,则将一个有意义的错误信息写入STD_OUT和STD_ERR,并以错误代码退出。
- 检查是否已经在目标目录中存储了与此名称匹配的CSV文件
- 如果它已经存在,并且没有设置
-f
(--force)标志,则询问用户“允许覆盖文件 y/n?”。建议的默认提示为否,[n]
。 - 如果它已经存在,并且设置了-f (--force)标志,则不提示用户就覆盖现有文件。
- 否则,创建一个具有所选名称的CSV文件。
- 将Google表格标签的内容写入CSV文件。(逗号分隔,使用双引号封装字符串)
待办事项
- 使用
AbstractCommand
进行代码重用