forikal-uk/capture-lookups

此包已被弃用,不再维护。作者建议使用 https://github.com/xmlsquad/capture-lookups 包。

抓取 Google Sheets 并将它们的数据存储为 CSV 文件

v0.3.3 2018-10-15 06:44 UTC

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

使用命令

  1. 检出仓库
  2. 使用 composer install 安装依赖项
  3. 在项目根目录或任何 PHP 可访问的父目录中放置一个 gApiServiceAccountCredentials.json 文件
  4. 运行 bin/capture-lookups 以查看所有可用的映射
  5. 运行 bin/capture-lookups --sheet=LookupTableA 以交互方式运行命令
  6. 运行 bin/capture-lookups --sheet=LookupTableA --no-interaction 以无提示运行命令,跳过具有风险名称的文件或现有文件
  7. 运行 bin/capture-lookups --sheet=LookupTableA --no-interaction --force 以无提示运行命令,覆盖现有文件 并使用净化后的文件名

单元测试

  1. 安装依赖项
  2. 运行 ./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进行代码重用