Как получить более 1000 действий с доски Trello?

Я хочу запустить простой скрипт, который получает в формате 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 для его получения согласно этот вопрос. Этот вопрос не отвечает на мой вопрос, я хочу пройти мимо 1000 карточек, но если вы это сделаете, вы получите сообщение об ошибке.


person SomePerson    schedule 06.06.2020    source источник
comment
Найдите все имена для fields, actions или т. Д. И сделайте несколько запросов для каждого значения   -  person Alexey Larionov    schedule 07.06.2020
comment
Просто идеи, я не профессионал. Если экспорт ограничен 1000, обратитесь в службу поддержки Trello и / или в сообщество. Это также может быть проблема с лицензией, возможно, вам нужно обновить. Обходным решением может быть очистка сайта Trello или копирование проекта и попытка удаления тех действий, которые находятся в экспортированных 1000, а затем повторный экспорт, asf.   -  person questionto42    schedule 20.07.2020


Ответы (1)


РЕДАКТИРОВАТЬ 2: наконец-то получил это, я использовал API и генератор идентификаторов для HTTPS запросов и использовал предоставленный параметр &before=. Параметр &before= использует даты в качестве аргументов, поэтому мне пришлось взять последнее действие из одного запроса, получить из него дату и указать ее для параметра & before. Затем для каждого элемента массива, содержащего 1000 элементов, я вытащил последний элемент, потому что в итоге я получал повторяющиеся действия.

Теперь у меня появились действия, которые выглядят так: [[actions],[actions],[actions],[actions]] и так далее, поэтому я использовал Объедините / сгладьте массив массивов, чтобы сделать все [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)})
})
person SomePerson    schedule 19.07.2020