【问题标题】:How to get more than 1000 actions from a Trello board?如何从 Trello 看板获得 1000 多个操作?
【发布时间】:2020-07-20 14:11:13
【问题描述】:

我想运行一个简单的脚本,它以 JSON 格式从 Trello 获取所有卡片等,其数据和 URL 如下所示:https://trello.com/b/Vqrkz3KO.json。我想自动化导出板的过程。

但 Trello 不允许我这样做,所以我必须从 API 中进行,如下所示:

`/1/boards/${board.id}`, {fields: "all",actions: "all",action_fields: "all",activities_limit: 1000,cards: "all",card_fields: "all",card_attachments: true,labels: "all",lists: "all",list_fields: "all",members: "all",member_fields: "all",checklists: "all",checklist_fields: "all", organization: false

它做了我想要它做的事情,但是我想从中获取卡片的板上有超过 1000 个活动。那么我如何获得所有的活动呢?它只获取 1000 个活动/卡片。另外,我不能只获取上面的 URL,因为由于某种原因,您不能使用 api 按照this question 获取它。这个问题没有回答我的问题,我想超过 1000 张卡片,但如果你这样做,你会收到一个错误,说你不能。

【问题讨论】:

  • 查找fieldsactions等的所有名称,并对每个值进行多次请求
  • 只是一些想法,我不是专业人士。如果导出限制为 1000,请联系 Trello 支持和/或社区。这也可能是许可证问题,也许您需要升级。解决方法可能是抓取 Trello 站点,或复制项目并尝试删除 1000 个导出中的那些操作,然后再次导出,asf。

标签: trello


【解决方案1】:

编辑 2:终于明白了,我使用 API 和 ID 生成器来处理 HTTPS 请求并使用提供的 &before= 参数。 &before= 参数使用日期作为参数,因此我必须从一个请求中获取最后一个操作,从中获取日期,并将其提供给 &before 参数。然后对于每个包含 1000 个元素的数组元素,我弹出最后一个元素,因为我最终会得到重复的操作。

现在,我最终得到了如下所示的操作:[[actions],[actions],[actions],[actions]] 等等,所以我使用了Merge/flatten an array of arrays 的答案来完成[actions]。然后我使用括号符号object["key"] = value 来设置/用我的HTTPS 请求中的操作替换操作,它变成了一个非常大的文件,生成这个文件花了很长时间,它出来了99.5 MB.

这是我的整个 index.js 测试文件:

const https = require('https');
const fs = require('fs');
var boardinfo = "";
https.get({
    hostname: 'trello.com',
    path: `/b/Vqrkz3KO.json`,
    headers: {'User-Agent': `${Math.random().toString(16).substring(2,16)}`}
}, (r) => {
    var data = "";
    r.on('data', (d) => {
        data+=d;
    })
    r.on('close', () => {
        boardinfo = JSON.parse(data);
    });
})

var actions = [];

(function untilDeath(beforeval) {
https.get({
    hostname: 'api.trello.com',
    path: `/1/boards/Vqrkz3KO/actions?limit=1000${beforeval ? `&before=${beforeval}` : ``}`,
    headers: {'User-Agent': `${Math.random().toString(16).substring(2,16)}`}
}, (r) => {
    var cmpdta = "";
    r.on('data', (d) => {
        cmpdta+=d;
    })
    r.on('close', () => {
        cmpdta = JSON.parse(cmpdta);
        if(cmpdta.length < 1000) {
            if(cmpdta.length) actions.push(cmpdta);
            return makeFile(info, [].concat.apply([], actions), fileName);
        } else
        untilDeath(cmpdta[999].date);
        cmpdta.pop();
        actions.push(cmpdta);
    });

    r.on('error', () => {
        throw new Error('-----HTTPS Error Occurred, Please retry :(');
    });
});
})();

function makeFile(trelloBoard, actions) {
    trelloBoard["actions"] = actions;
    fs.createWriteStream('./full-board.json');
    fs.writeFile(`./full-board.json`, JSON.stringify(trelloBoard, null, `\t`), (c) => {
        if(c) console.log(c);
    });
}

编辑:令人失望的是,这也只能获取 1000 个操作,即使手动保存 JSON 文件,它仍然提供 1000 个操作。

我使用 HTTPS User-Agent 标头轻松解决了这个问题。

const https = require('https');
https.get({
    hostname: 'trello.com',
    path: '/b/Vqrkz3KO.json',
    headers: {'User-Agent': 'some-random-user-agent'}
}, (r) => {
    var str = "";
    r.on('data', (d) => {str+=d});
    r.on('close', () => {console.log(str)})
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2014-12-20
    • 2020-08-31
    相关资源
    最近更新 更多