Importa domande in blocco

Ciao

Ho le mie domande e risposte in formato JSON:

esempio di documento JSON qui
{
    "id": "x017c4h221p7T8sboHglB-7kQ==",
    "created": "2018-05-09T20:13:23Z",
    "title": "Errore I/O di Docker",
    "body": "<p>Ehi Stephane, devo riavviare Docker per eseguire Kafka ogni volta che esco, poiché si verifica un errore nel binding della porta TCP. La mia comprensione è che quando fermo i servizi Kafka ed esco, la porta viene rilasciata.</p>",
    "course": {
        "_class": "course",
        "id": "x0190RCkGpZ6FMe4CPAF8aOoQ==",
        "title": "Serie Apache Kafka - Impara Apache Kafka per Principianti v2",
        "url": "/apache-kafka/"
    },
    "replies": [{
            "_class": "answer",
            "id": "x01Qx2rNaX48kxP4NFFSSCK7g==",
            "created": "2018-05-10T07:04:10Z",
            "user": {
                "_class": "user",
                "id": "x01N-Fup_OULjTEtHPLwc8JSQ==",
                "name": "Ivan",
                "locale": "en_US"
            },
            "is_top_answer": null,
            "body": "<p>Ciao Nandini, </p><p>Puoi per favore spiegare in modo più dettagliato qual è il tuo problema? Se fermi i servizi Kafka, le porte utilizzate da Kafka verranno ovviamente rilasciate.</p><p>Cordiali saluti,</p><p>Ivan</p>",
        },
        {
            "_class": "answer",
            "id": "x01bLG2QPhyLwZ_RJsbMge16A==",
            "created": "2018-05-10T20:45:39Z",
            "user": {
                "_class": "user",
                "id": "x01oX4mwhRQoLXKuhHXDHg3zg==",
                "name": "Nandini",
                "locale": "en_US"
            },
            "is_top_answer": null,
            "body": "<p>Fermo i servizi Kafka e quando riavvio, le porte di Docker non vengono rilasciate e ottengo un errore di binding TCP sulle porte 2181 e 3030</p>",
            "is_upvoted": false,
            "num_upvotes": 0
        },
        {
            "_class": "answer",
            "id": "x01yL8D1-inVZE3njAo08-uMw==",
            "created": "2018-05-11T00:32:46Z",
            "user": {
                "_class": "user",
                "id": "x01lNfqEyIqBf47SM76dxq0rw==",
                "name": "Stephane Maarek",
                "locale": "en_US"
            },
            "is_top_answer": true,
            "body": "<p>Riavvia il motore Docker se puoi, oppure il tuo computer. Vedi se questo aiuta! </p><p>Altrimenti c'è qualcosa in esecuzione sulla porta 2181. Controlla la lezione FAQ (lezione 22) poiché molti studenti hanno affrontato questi problemi in precedenza </p>",
            "is_upvoted": false,
            "num_upvotes": 0
        }
    ],
    "user": {
        "_class": "user",
        "id": "x01oX4mwhRQoLXKuhHXDHg3zg==",
        "name": "Nandini",
        "locale": "en_US"
    }
}

Ho sviluppato uno script Python per chiamare l’API, ma sto ricevendo diversi errori relativi al throttling dell’API… :

Hai eseguito questa azione troppe volte. Attendi X secondi prima di riprovare.

Devo importare circa 3000 domande in totale (con una media di 2 risposte ciascuna), quindi penso che il percorso dell’API potrebbe essere troppo lungo.

Esiste un modo per disabilitare questo problema di throttling dell’API?

C’è un altro modo per importare i miei dati? Sono collegati solo a due utenti (quindi non è necessario creare utenti). Sto anche utilizzando un Discourse ospitato, quindi non so se ho accesso diretto al database sottostante.

Sono disponibile a condividere il codice Python che ho scritto o ad aprire una bounty se ciò richiede molto lavoro.

Make sure the user performing the actions via the API key has staff privileges, even if only temporary.

That will help with some of the rate limits.

An easy approach I used was to add
sleep(0.7)
inside the Ruby loop. (you may need to tweak that)

For 3000 requests it would take 35 minutes to complete. A bit painful, but for a once off I don’t think it would be all that bad.

I have admin permissions (using my own API key) and I still get a throttle it seems every 60 API calls. I tried to change things in settings > Rate limits but doesn’t seem to help

Lo ricevo anch’io.

Se aggiungo artificialmente un ritardo di 1 secondo, non lo ricevo più.

Ok, il limite di 60 chiamate al minuto può essere evitato come segue:

Sul server

cd /var/discourse

Apri containers/app.yml con un editor (io uso vi), aggiungi la riga seguente alla sezione env

DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE : 6000

e salva

Ricostruisci (riavviare semplicemente non avrà alcun effetto)
./launcher rebuild app