b3co / notion-mirror
一个 Notion 镜像
0.1.5
2022-08-29 05:38 UTC
Requires
- php: >7.3
- aws/aws-sdk-php: ^3.231
- guzzlehttp/guzzle: ^7.4
README
一个用于读取 Notion 页面(可选)并将图像和视频上传到 S3 存储桶(并相应链接)的 PHP 方法。
这是我通过 composer 分发的第一个包,请多关照。
操作
准备服务
Notion
- 您必须在以下位置创建一个 Notion 集成 这里。
- 因为我们目前没有向 Notion 写入,所以现在只需要
read访问权限 - 获取
notion_token,类似于secret_xxxxxxxxxx - 对于您希望脚本读取的每个页面,您需要像图中所示将其与集成共享,这部分相当简单,但不易找到
我的 Notion 集成称为 page mirror,使用您自己的,即第一步中创建的 ☝️
S3
- 创建一个 AWS S3 存储桶
- 获取
AWS_KEY,AWS_SECRET,AWS_REGION和BUCKET_NAME注意默认情况下,图像将使用以下结构上传:s3.AWS_REGION.amazonaws.com/BUCKET_NAME/PAGE_ID/public/image/IMAGE_ID.jpg
CLI 调用
您必须创建一个 $config 对象,其中包含先前创建的服务访问变量,如下所示
$config = [ 'notion_token' => 'NOTION_TOKEN', 'aws_key' => 'AWS_KEY', 'aws_secret' => 'AWS_SECRET', 'aws_region' => 'AWS_REGION', 'bucket_name' => 'BUCKET_NAME', ];
现在您可以调用 Notion 对象。
$notion = new \b3co\notion\Notion($config); $page = $notion->getPage(PAGE_ID); echo $page->toHtml();
Yii 调用
首先,在配置文件 web.php 或 console.php 中添加
$config = [ ... 'components' => [ ... 'notion' => [ 'class' => 'b3co\notion\YiiNotion', 'config' => [ 'notion_token' => getenv('notion_token'), 'aws_key' => getenv('aws_key'), 'aws_secret' => getenv('aws_secret'), 'bucket_name' => getenv('aws_bucket'), 'aws_region' => getenv('aws_region'), ] ], ... ] ... ];
其次,使用 YiiNotion 对象获取一个 Notion 对象并执行相应操作。
class NotionController extends Controller { public function actionIndex($id) { define('VERBOSE', false); $notion = Yii::$app->get('notion')->getNotion(); $page = $notion->getPage($id); echo $page->toHtml(); return ExitCode::OK; } }
模板(进行中)
默认情况下,为每个对象设置三个不同的导出模板
- 使用
$page→toHtml()的 HTML - 使用
$page→toMd()的 Markdown - 使用
$page→toString()的纯文本
模板系列
您可以选择使用模板工厂,并在 $config->templates_dir/TEMPLATE_FAMILY/ 下创建一个模板系列。如果调用 $page->toTemplate(TEMPLATE_FAMILY)
系统将检查每个块类型模板,命名为 BLOCK_TYPE.template。例如,对于一个名为 basic 的模板系列,您将得到
其中 image 和 page 是 块类型。
每个模板可以使用任何给定的格式/语言,并使用对象的属性进行打印,例如 [:ATTRIBUTE],例如一个具有 url 和 caption 的图像。
<div><img src='[:url]'> <div>[:caption]</div> </div>
对象和属性的完整列表可在以下位置找到 这里。
重要 🚨:如果找不到模板文件,则不会处理该块。
关于 toHtml 方法的说明
可以通过创建一个名为 html 的模板系列来覆盖 HTML 模板,如果找到块项模板,将使用该模板;如果没有,将回退到硬编码的 HTML 模板。
Notion 对象
支持的对象列表
- 段落块
- 一级标题块
- 二级标题块
- 三级标题块
- 图像块
- 待办事项块
- 列列表和列块
- 引用块
- 项目符号列表项块
- 代码块
- 切换块
- 分隔符块
- 视频块
- 编号列表项块(复杂,进行中)
- 嵌入块
- 方程式块
- 表格行块
- 表格块
- 突出显示块
- 子页面块
范围之外
- 子数据库块
- 文件块
- PDF 块
- 书签块
- 目录块
- 面包屑块
- 链接预览块
- 模板块
- 页面链接块
- 同步块
这个README文件是在Notion中创建和存储的,并使用此脚本转换为MD格式,最后更新时间2022-08-24 → .