sectsect/google-spreadsheet-to-db

通过Google的API获取Google电子表格数据并将其保存到WordPress数据库中。

安装: 13

依赖: 0

建议: 0

安全: 0

星标: 3

关注者: 3

分支: 1

公开问题: 2

类型:wordpress-plugin


README

PHP Unit Tests PHPStan PHP Coding Standards Latest Stable Version

"Google Spreadsheet to DB"插件是为WordPress设计的,它通过使用Google的Sheets API (v4)将数据从Google表格导入WordPress数据库。它支持在保存之前进行数据处理,并且可以通过WordPress管理界面进行配置。

特性

  • 数据导入:从Google表格中拉取数据并将其直接保存到WordPress数据库中。
  • 自定义:提供定义常量、电子表格ID、名称以及配置数据格式的设置。
  • 管理界面:提供了一个管理页面,方便管理和配置插件设置。

要求

  • PHP版本8.0或更高。
  • 使用Composer管理PHP依赖。

开始使用

1. 将此存储库克隆到您的wp-content/plugins目录中。
cd /path-to-your/wp-content/plugins/
git clone git@github.com:sectsect/google-spreadsheet-to-db.git
2. 从.gitignore文件中删除vendor/
cd google-spreadsheet-to-db
nano .gitignore
- vendor/
3. 安装composer包。
cd functions/composer/
composer install
4. 通过WordPress中的“插件”菜单激活插件。

设置

为程序访问准备您的电子表格

默认情况下,新的电子表格无法通过Google的API访问。我们需要前往Google API控制台创建一个新项目并设置以公开电子表格的数据。

  1. 前往Google API控制台
  2. 创建一个新项目。
  3. 点击启用API。搜索并启用Google Sheets API。
  4. 为Web服务器创建用于访问应用程序数据的凭据。
  5. 命名服务帐户并授予它编辑项目角色的项目角色。
  6. 下载JSON文件。
  7. 将JSON文件复制到您的应用目录并将它重命名为client_secret.json
  8. ⚠️ 在服务器上设置client_secret.json的位置以拒绝Web访问。

我们现在有一大块身份验证信息,包括Google所说的client_email,它唯一地表示了这个OAuth服务帐户。
从您的client_secret.json中获取client_email的值,然后回到您的电子表格。点击右上角的共享按钮,并将client_email值粘贴到字段中以赋予它编辑权限。
发送。这就完成了!👌

  1. wp-config.php中设置client_secret.json的define()常量。
define( 'GOOGLE_SS2DB_CLIENT_SECRET_PATH', '/path/to/your/client_secret.json' );
  1. 前往WordPress管理面板中的设置 -> Google Spreadsheet to DB
  2. 设置以下值并保存。
  • 要存储在数据库中的数据格式
    • json_encode
    • json_encode (JSON_UNESCAPED_UNICODE)
  1. 点击从Google电子表格导入按钮。🎉
  • 电子表格ID
  • 电子表格名称(可选)
  • 单个电子表格名称
  • 顶部标题行
  • 标题(可选)

过滤器

过滤数组

您可以在将数据保存到数据库之前使用add_filter( 'google_ss2db_before_save', $function_to_add )在您的functions.php中编辑从Google API获取的数组。

add_filter( 'google_ss2db_before_save', function ( $row, $worksheet_id, $worksheet_name, $sheet_name ) {
  // Example
  if ( $worksheet_name === 'My Spreadsheet' && $sheet_name === 'Sheet1' ) {
    // Do something.

    return $something;
  }

  return $row;
}, 10, 3 );

并且也可以使用add_filter('google_ss2db_after_save', $return_array )对返回值进行任何处理。

add_filter( 'google_ss2db_after_save', function ( $data ) {
  if ( 'My Spreadsheet' === $data['worksheet_name'] ) {
    // $id              = $data['id'];
    // $date            = $data['date'];
    // $title           = $data['title'];
    // $value           = $data['value'];
    // $work_sheet_id   = $data['worksheet_id'];
    // $work_sheet_name = $data['worksheet_name'];
    // $sheet_name      = $data['sheet_name'];
    // $result          = $data['result']; // `int|false` The number of rows inserted, or false on error.

    // Example
    my_callback( $data );
  }
});

API

new Google_Spreadsheet_To_DB_Query();

参数

使用示例

获取所有行

$sheet = new Google_Spreadsheet_To_DB_Query();
$rows  = $sheet->getrow();
foreach ( $rows as $row ) {
  $id   = $row->id;
  $date = $row->date;
  $val  = json_decode( $row->value );
}

按ID升序从第4行获取3行数据

$args = array(
  'orderby' => 'id',
  'order'   => 'ASC',
  'limit'   => 3,
  'offset'  => 3,
);
$sheet = new Google_Spreadsheet_To_DB_Query( $args );
$rows  = $sheet->getrow();
foreach ( $rows as $row ) {
  $id   = $row->id;
  $date = $row->date;
  $val  = json_decode( $row->value );
}

获取特定ID的行

$args = array(
  'where' => array(
    array(
      'key'   => 'id',
      'value' => 3,
    )
  ),
);

按ID排序获取特定工作表中的3行数据

$args = array(
  'orderby' => 'id',
  'order'   => 'ASC',
  'limit'   => 3,
  'where'   => array(
    array(
      'key'     => 'worksheet_name',
      'value'   => 'My Spreadsheet',
      'compare' => '='
    ),
  ),
);

获取大于或等于指定日期时间的行

$args = array(
  'where' => array(
    array(
      'key'     => 'date',
      'value'   => '2020-08-01 12:34:56',
      'compare' => '>=',
    )
  ),
);

获取满足多个条件的行

$args = array(
  'orderby' => 'id',
  'order'   => 'DESC',
  'limit'   => 10,
  'offset'  => 10,
  'where'   => array(
    'relation' => 'AND', // or 'OR'
    array(
      'key'     => 'date',
      'value'   => '2020-08-01 12:34:56',
      'compare' => '>='
    ),
    array(
      'key'     => 'worksheet_name',
      'value'   => 'My Spreadsheet',
      'compare' => '='
    ),
  ),
);

注意

  • 在WordPress v6.3.1上测试过

开发者

  • 此插件将电子表格数据保存到全局区域,而不是每个帖子。如果您想要为单独的帖子拥有电子表格数据,可以将数据 ID 与自定义字段关联。

  • 数据以JSON编码数组的形式添加并存储在 wp_google_ss2db 表中。

  • 为了防止大量来自广大受众的支持请求,此插件不在 wordpress.org 仓库中托管。

故障排除

未捕获错误:调用未定义的方法 GuzzleHttp\Utils::chooseHandler()

您正在使用的某些WordPress插件或Composer包依赖于HTTP客户端 Guzzle 版本6(旧版)。
您可以通过更新到 版本7 相关版本来解决此错误。

变更日志

查看 CHANGELOG 文件。

许可协议

查看 LICENSE 文件。

✌️

@sectsect 执行的小项目