如何通过 API 获取 dev.to 帖子列表
概述
我决定下载我在dev.to上的文章,以便将它们存储在 Git 中。这意味着即使网站宕机,我也有博客内容的备份。第一步是获取我的文章列表。
dev.to API
API 文档在此处。
以下接口将显示指定用户的最新文章列表:
https://dev.to/api/articles/latest?username=melvincarvalho
它支持分页,默认情况下每页包含 30 篇文章。可以通过per_page查询参数增加页数,我们将其设置为 1000。这对于大多数用户来说应该足够了。
请将“用户名”替换melvincarvalho为您自己的用户名。
代码
所以我编写了一个 JavaScript 脚本,用于提取我的文章列表。
#!/usr/bin/env node
// requires
const argv = require('minimist')(process.argv.slice(2))
const fs = require('fs')
const path = require('path')
const $ = require('child_process').execSync
// data
globalThis.data = {
api: 'https://dev.to/api/articles/latest',
dataDir: path.join(__dirname, '..', 'posts'),
filename: 'index.json',
perPage: 1000,
user: 'melvincarvalho'
}
// init
data.api = argv.api || data.api
data.dataDir = argv.dataDir || data.dataDir
data.filename = argv.filename || data.filename
data.perPage = argv.perPage || data.perPage
data.user = argv._[0] || data.user
console.log('data', data)
// main
let postsUri = `${data.api}`
postsUri += `?per_page=${data.perPage}`
postsUri += `&username=${data.user}`
const cmd = `curl '${postsUri}'`
console.log('cmd', cmd)
const json = JSON.parse($(cmd).toString())
// output
if (!fs.existsSync(data.dataDir)) {
fs.mkdirSync(data.dataDir, { recursive: true })
}
const output = JSON.stringify(json, null, 2)
const outFile = path.join(data.dataDir, data.filename)
console.log('output', output)
fs.writeFileSync(outFile, output)
Usage: ./getposts.js [username]
代码详解
首先,我们初始化端点和用户名。然后,我们运行 curl 命令获取结果,最后将其格式化并写入文件。
输出
运行此代码将获取文章列表并将其保存到名为“”的文件中。posts/index.json
现在我已经有了文章列表,应该也可以下载每篇文章的 Markdown 代码了。我希望能在以后的文章中介绍这部分内容。