如何通过Zendesk API分页获取全部帮助中心文章?
解决Zendesk帮助中心文章分页获取问题
要获取全部164篇文章,需要利用Zendesk API的分页机制——API返回结果里的next_page字段会提供下一页的完整请求地址,我们只需要循环请求直到next_page为空,就能收集所有文章。
以下是修改后的完整代码:
const https = require('https'); const { Textify } = require('../common/Textify'); const fs = require('fs'); const path = require('path'); async function GetZDeskArticles() { let allArticles = []; // 初始请求URL,设置每页最大100条(Zendesk允许的单页最大值) let currentUrl = 'https://example.zendesk.com/api/v2/help_center/en-us/articles.json?page[size]=100'; while (currentUrl) { await new Promise((resolve, reject) => { const request = https.request(currentUrl, (response) => { let data = ''; response.on('data', (chunk) => { data += chunk.toString(); }); response.on('end', () => { const body = JSON.parse(data); // 合并当前页的文章到总数组 allArticles = [...allArticles, ...body.articles]; // 更新为下一页URL,无后续页面时next_page为null currentUrl = body.next_page; resolve(); }); }); request.on('error', (error) => { reject(error); }); request.end(); }); } return allArticles; } async function StoreZDeskArticles() { try { const zdeskArticles = await GetZDeskArticles(); let arts = []; zdeskArticles.forEach((art) => { if (art.draft) return; art.body = Textify(art.body); arts.push(art); }); let storagePath = path.resolve( __dirname, '../', '_data', 'ZenDeskArticles.json' ); fs.writeFileSync(storagePath, JSON.stringify(arts), 'utf8'); console.log('所有文章已成功存储'); } catch (error) { console.error('获取或存储文章失败:', error); } } StoreZDeskArticles();
关键修改说明
- 将
GetZDeskArticles改为异步函数,通过while循环处理分页请求 - 每次请求后解析返回的
next_page字段,作为下一次请求的地址,直到该字段为null - 用扩展运算符将每一页的文章合并到总数组中
- 给
StoreZDeskArticles添加了错误捕获,方便排查问题
内容的提问来源于stack exchange,提问作者mtdev88
相关产品推荐
相关产品推荐

