Importer des questions en masse

Bonjour

J’ai mes questions et réponses dans un format JSON :

exemple de document JSON ici
{
    "id": "x017c4h221p7T8sboHglB-7kQ==",
    "created": "2018-05-09T20:13:23Z",
    "title": "Erreur Docker i/o",
    "body": "<p>Hé Stephane, je dois redémarrer Docker pour exécuter Kafka à chaque fois que je sors, car il génère une erreur lors de la liaison du port TCP. Ma compréhension est que lorsque j'arrête les services Kafka et que je sors, le port est libéré.</p>",
    "course": {
        "_class": "course",
        "id": "x0190RCkGpZ6FMe4CPAF8aOoQ==",
        "title": "Apache Kafka Series - Apprendre Apache Kafka pour les débutants 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>Bonjour Nandini, </p><p>Pourriez-vous s'il vous plaît élaborer plus en détail quel est votre problème ? Si vous arrêtez les services Kafka, les ports utilisés par Kafka seront bien sûr libérés.</p><p>Cordialement,</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>J'arrête les services Kafka et lorsque je redémarre, les ports Docker ne sont pas libérés et j'obtiens une erreur de liaison TCP sur les ports 2181 et 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>Redémarrez le moteur Docker si vous le pouvez, ou votre ordinateur. Voyez si cela aide ! </p><p>Autrement, quelque chose s'exécute sur le port 2181. Veuillez consulter le cours de la FAQ (cours 22) car de nombreux étudiants ont déjà rencontré ces problèmes </p>",
            "is_upvoted": false,
            "num_upvotes": 0
        }
    ],
    "user": {
        "_class": "user",
        "id": "x01oX4mwhRQoLXKuhHXDHg3zg==",
        "name": "Nandini",
        "locale": "en_US"
    }
}

J’ai développé un script Python pour appeler l’API, mais je rencontre de nombreuses erreurs liées à la limitation de débit (throttling) de l’API :

Vous avez effectué cette action trop de fois. Veuillez attendre X secondes avant de réessayer.

Je dois importer environ 3000 questions au total (avec en moyenne 2 réponses chacune), donc je pense que la route de l’API est peut-être trop longue.

Existe-t-il un moyen de désactiver ce problème de limitation de débit de l’API ?

Y a-t-il une autre façon d’importer mes données ? Elles sont uniquement liées à deux utilisateurs (donc pas besoin de créer des utilisateurs). J’utilise également un Discourse hébergé, donc je ne sais pas si j’ai un accès direct à la base de données sous-jacente.

Je suis prêt à partager mon code Python ou à ouvrir une récompense si cela nécessite beaucoup d’efforts.

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.

5 « J'aime »

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

3 « J'aime »

Je rencontre le même problème.

Si j’ajoute artificiellement un délai d’une seconde, le problème ne se produit plus.

Voici comment éviter la limite de 60 appels par minute :

Sur le serveur

cd /var/discourse

Ouvrez containers/app.yml dans un éditeur (j’utilise vi), ajoutez la ligne suivante dans la section env :

DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE : 6000

Puis enregistrez.

Reconstruisez (un simple redémarrage n’aura aucun effet) :
./launcher rebuild app

2 « J'aime »