Fragen im Bulk importieren

Hallo

Ich habe meine Fragen und Antworten in einem JSON-Format:

Beispiel-JDokument hier
{
    "id": "x017c4h221p7T8sboHglB-7kQ==",
    "created": "2018-05-09T20:13:23Z",
    "title": "Docker i/o error",
    "body": "<p>Hallo Stephane, ich muss Docker jedes Mal neu starten, um Kafka auszuführen, sobald ich beende, da es bei der TCP-Portbindung zu einem Fehler kommt. Mein Verständnis ist, dass der Port freigegeben wird, wenn ich die Kafka-Dienste stoppe und beende.</p>",
    "course": {
        "_class": "course",
        "id": "x0190RCkGpZ6FMe4CPAF8aOoQ==",
        "title": "Apache Kafka Series - Learn Apache Kafka for Beginners 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>Hallo Nandini,</p><p>Könntest du dein Problem bitte genauer erläutern? Wenn du die Kafka-Dienste stoppst, werden die von Kafka genutzten Ports natürlich freigegeben.</p><p>Mit freundlichen Grüßen,</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>Ich stoppe die Kafka-Dienste, und wenn ich neu starte, werden die Docker-Ports nicht freigegeben, und ich erhalte einen TCP-Binding-Fehler bei den Ports 2181 und 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>Starte die Docker-Engine neu, falls möglich, oder deinen Computer. Schau, ob das hilft!</p><p>Ansonsten läuft etwas auf Port 2181. Bitte überprüfe den FAQ-Vortrag (Vortrag 22), da viele Studierende bereits diese Probleme hatten.</p>",
            "is_upvoted": false,
            "num_upvotes": 0
        }
    ],
    "user": {
        "_class": "user",
        "id": "x01oX4mwhRQoLXKuhHXDHg3zg==",
        "name": "Nandini",
        "locale": "en_US"
    }
}

Ich habe ein Python-Skript entwickelt, um die API aufzurufen, bekomme aber eine Reihe von Fehlern in Bezug auf Drosselung (Throttling) von der API:

Sie haben diese Aktion zu oft durchgeführt. Bitte warten Sie X Sekunden, bevor Sie es erneut versuchen.

Ich muss insgesamt etwa 3000 Fragen importieren (zusammen mit durchschnittlich 2 Antworten), daher habe ich das Gefühl, dass die API-Route zu langsam sein könnte.

Gibt es eine Möglichkeit, dieses API-Drosselungsproblem zu deaktivieren?

Gibt es eine andere Möglichkeit, meine Daten zu importieren? Sie sind nur mit zwei Benutzern verknüpft (also keine Notwendigkeit, Benutzer zu erstellen). Ich verwende auch einen gehosteten Discourse-Server, daher weiß ich nicht, ob ich direkten Zugriff auf die zugrunde liegende Datenbank habe.

Ich bin gerne bereit, meinen Python-Code zu teilen oder ein Bounty auszusetzen, wenn dies viel Aufwand erfordert.

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

Das habe ich auch.

Wenn ich künstlich eine Verzögerung von 1 Sekunde hinzufüge, tritt das Problem nicht mehr auf.

Okay, das Limit von 60 Aufrufen pro Minute kann wie folgt umgangen werden:

Auf dem Server

cd /var/discourse

Öffnen Sie containers/app.yml in einem Editor (ich verwende vi) und fügen Sie im Abschnitt env folgende Zeile hinzu:

DISCOURSE_MAX_ADMIN_API_REQS_PER_KEY_PER_MINUTE : 6000

und speichern Sie die Datei.

Erstellen Sie neu (ein einfaches Neustarten hat keine Wirkung)
./launcher rebuild app