Ich hoffe, dass das hier passt: Ich würde gerne diverse Links automatisiert in /c/geschichte posten. Die Links habe ich, ich hab für Reddit auch einen passenden Workflow zum Suchen von neuen Geschichts-Links, ich kann etwas Python und hier anscheinend auch mein Profil als Bot markieren. Und wenn man googlet, gibt es anscheinend auch einen Javascript-basierten AI-Art-Bot, eine Javascript-Library und eine etwas spartanische offizielle API-Doku.

Aber ich steh total auf dem Schlauch. Hat jemand den richtigen Tipp, wie ich hier per Python ganz banal einen Link in eine Community einreiche?

    • @mettwurstkaninchen@feddit.deOPB
      link
      fedilink
      211 months ago

      Den Account habe ich eben als Bot gekennzeichnet. Aber ansonsten - ich steh gerade auf einem Programmierlevel, bei dem ich mithilfe der entsprechenden API-Libraries mit diversen APIs kommunizieren kann, aber wenn ich in die Doku da schaue, bin ich komplett lost. Wie authentifiziere ich mich? Wo sind hier die Endpoints? Wie muss ein Post dann aussehen? Wie sag ich dem Ding jetzt, was der Link ist und was der Linktext?

      (Und dich mal etwas anders gefragt: Ist das überhaupt erwünscht hier?)

      • @Knusper@feddit.de
        link
        fedilink
        English
        111 months ago

        Puzzle-Lösen gehört zum Programmieren dazu, daher kann ich dir das jetzt nicht vollkommen vorkauen (ohne es nicht direkt selbst zu implementieren), aber ich würde versuchen anhand der TypeScript-API hier zu adaptieren: https://join-lemmy.org/api/classes/LemmyHttp.html#login

        Also z.B. bei der login-Methode, das will einen Parameter form vom Typ Login. Wenn du dann in der Doku auf Login draufklickst, siehst du, dass es ein Typ mit zwei Feldern ist:

        • username_or_email: string
        • password: string

        Ich gehe davon aus, dass die API JSONs frisst, daher das Ganze in einem JSON kodiert:

        {
            "username_or_email": "mettwurstkaninchen",
            "password": "123456"
        }
        

        Dann wieder bei der Login-Methode geschaut, da steht: HTTP.POST /user/login
        D.h. deiner Python HTTP-Client-Bibliothek sagen, sie soll das JSON mittels post-HTTP-Methode (und daher im HTTP-Body) an die URL https://feddit.de/user/login schicken.
        Als Antwort wirst du dann vermutlich wieder irgendein JSON bekommen, mit vermutlich einem auth-Feld dessen Inhalt mit ey beginnt.¹

        Diesen Inhalt kannst du dann in das auth-Feld bei der createPost-Methode stopfen. Und das Ganze eben wieder nach dem gleichen Schema befüllen, wie die login-Methode.

        ¹ Das auth-Feld beginnt mit ey, weil darin ein Base64-kodiertes JSON ist, und das Zeichen { in Base64 eben als ey kodiert wird.

    • @mettwurstkaninchen@feddit.deOPB
      link
      fedilink
      111 months ago

      Die Idee war gut, aber es scheitert bereits am Login :(

      Enter instance URL: https://www.feddit.de Looking up instance info… Request failed: HTTPSConnectionPool(host=‘www.feddit.de’, port=443): Max retries exceeded with url: /api/v1/instance (Caused by NewConnectionError(‘: Failed to establish a new connection: [Errno 11001] getaddrinfo failed’))

          • @mettwurstkaninchen@feddit.deOPB
            link
            fedilink
            211 months ago

            Ich hab’s eben mal von Mastodon aus probiert - grundsätzlich funktioniert es, aber es ist nicht wirklich hübsch. Hier wird ja zwischen Titel und URL unterschieden, im Toot halt nicht und daher bekomme ich dann einen Beitrag raus, in dem im Titel die volle URL steht und in dem dann z.B. kein Thumbnail zu sehen ist.