从 Medium 迁移——开发者指南
stackbit-medium-importer
演示
安装
如何使用
导入器输出
从 Medium 大规模迁移到其他平台,催生了许多实用工具,可以帮助您完成迁移。
这些工具主要依赖以下几种方法从 Medium 获取内容:
RSS订阅
Medium 提供官方支持的RSS 源,只需/feed/在源 URL 前添加前缀即可访问。
例如 - https://medium.com/feed/@prashantramnyc。
<item>
<title><![CDATA[Difference between var, let and const in Javascript.]]></title>
<description><![CDATA[<div class="medium-feed-item">...</div>]]></description>
<link>https://codeburst.io/difference-between-var-let-and-const-in-javascript-fbce2fba7b4?source=rss-eeafca132b1e------2</link>
<guid isPermaLink="false">https://medium.com/p/fbce2fba7b4</guid>
<category><![CDATA[codingbootcamp]]></category>
<category><![CDATA[coding]]></category>
<category><![CDATA[javascript-tips]]></category>
<category><![CDATA[programming]]></category>
<category><![CDATA[javascript]]></category>
<dc:creator><![CDATA[Prashant Ram]]></dc:creator>
<pubDate>Tue, 21 May 2019 18:59:39 GMT</pubDate>
<atom:updated>2019-05-22T14:18:46.943Z</atom:updated>
</item>
优点:
缺点:
- 仅提供最新文章——这不是检索所有文章的好方法。
- RSS订阅源不一定包含文章的全部内容——由于RSS的特性,有些文章可能只显示摘要,并提供指向全文的链接。
使用此方法的工具:DEV feed import
JSON API
对于更喜欢冒险的用户,可以检索源和帖子的底层 JSON 结构。
这是通过使用format=jsonurl 参数实现的:
{
"success":true,
"payload":{
"value":{
"content":{
"subtitle":"Full code example: combining images, watermarking, fonts and text",
"bodyModel":{
"paragraphs":[
{
"name":"2e10",
"type":3,
"text":"Image Processing in NodeJS with Jimp",
"markups":[ ]
},
...
]
}
}
}
}
}
请注意,返回的 JSON 数据包含while(1)Medium 设置的防止JSON 劫持的机制。
优点:
缺点:
- 未记录在案,且可能随时发生重大变更
- 复杂的 JSON 结构
- 可能受 Medium 付费墙的限制
使用此方法的工具:gatsby-source-medium、mediumexporter
导出文件
您可以申请下载您在 Medium 上的所有信息。提交申请后,您将收到一个链接,指向一个包含以下目录结构的 zip 文件:
blocks
bookmarks
claps
highlights
interests
posts
profile
pubs-following
sessions
topics-following
users-following
每个目录都包含样式和结构都非常简单的 HTML 文件。
该posts目录包含您的所有帖子,包括草稿和评论。
优点:
- 官方支持
- 将您的所有帖子集中在一个易于访问的地方。
- 还包含用户在迁移到新平台时可能需要的许多其他信息
缺点:
- 需要手动请求 Zip 文件(尽管根据我们的经验,包含链接的电子邮件发送速度非常快)——无法轻易实现自动化。
- 帖子缺少一些信息——帖子标签不可用,而且很难判断帖子是完整的帖子还是评论。
使用这种方法的工具有:medium-2-md、medium_to_ghost、medium-to-own-blog、export-medium-to-gatsby、Stackbit!
由于每种方法都有其自身的缺点,工具通常会将它们结合起来以获取所需的所有内容。例如,先导出 zip 文件,然后通过 JSON API 获取更多信息。
在 Stackbit
Stackbit 让创建由包括 Medium 在内的各种数据源支持的现代网站变得极其容易。
在 Stackbit,我们开发了一个工具,用于处理从 Medium 获取的导出文件。它将文章转换为 Markdown 文件,其结构便于我们将其转译成我们支持的任何 SSG 格式。
进口流程如下:
- 从每篇文章的 HTML 代码中提取信息——标题、缩略图、摘要、图片等。我们使用cheerio直接从 HTML 代码中解析出信息:
get title() {
return this.$('title').text().trim();
}
get subtitle() {
return this.$('h4[class*="graf--subtitle"]').text().trim();
}
- 下载图片- 按帖子别名分组,并存储在本地
- 简化 HTML——导出的 HTML 文件非常冗余。我们使用sanitize-html 工具移除不必要的属性和结构元素。这简化了下一步的工作,并有助于我们避免将来对文件格式进行更改。部分信息会被保留并进行处理,以辅助后续步骤。
- 将文章内容转换为 Markdown 格式,并结合提取的信息导出包含 Markdown 内容的 front matter。我们将外部图片替换为已下载的图片。我们使用Turndown并利用自定义规则来保留 iFrame,例如 Twitter 嵌入:
turndownService.addRule('twitter-tweet', {
filter: (node) => {
return node.nodeName === 'BLOCKQUOTE' &&
node.getAttribute('class') === 'twitter-tweet';
},
replacement: (innerHTML, node) => node.outerHTML
});
- 提取用户资料信息——该
profile.html文件包含用户的姓名、电子邮件地址以及已关联到 Medium 的社交媒体账号。我们将这些信息整理成 JSON 结构,以便于使用。
在 Stackbit,输出结果可以合并到我们现有的主题中,并转译为用户选择的 SSG。
该工具已在 GitHub 上发布,并在Stackbit 网站上线。我们一直在努力改进,欢迎您的反馈。
stackbit-medium-importer
一个小型库,用于将中等大小的导出zip 文件转换为静态站点生成器 (SSG) 友好的 Markdown 文件。
演示
您可以在Stackbit 网站上看到 Medium 导入器的实际运行效果。
安装
npm install @stackbit/stackbit-medium-importer
如何使用
该模块附带一个实用程序,可以直接调用导入器。
$ medium-importer
Usage: medium-importer --input-file=<input-file> --output-dir=<output-dir> --concurrency=<concurrency> --download-images=<download-images> --import-drafts=<import-drafts>
Options
--help Show help [boolean]
--version Show version number [boolean]
--input-file, -i medium export zip file [required]
--output-dir, -o target folder for the converted files [required]
--concurrency, -c number of posts to process in parallel [default: 1]
--download-images, -d should images be downloaded [default: true]
--import-drafts, -r should drafts be imported [default: true]
Examples:
medium-importer -i medium-export.zip -o output/
导入器输出
输出目录会填充导入的数据,其结构便于后续与静态站点生成器 (SSG) 配合使用。对于某些 SSG(例如 Hugo),可以指定……
期待了解你是如何从 Medium 迁移过来的。
文章来源:https://dev.to/stackbit/migration-from-medium-a-developer-s-guide-3djh