Skip to content
  • Kategorien
  • World
  • Aktuell
  • Tags
  • Beliebt
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
linux-nerds.org

linux-nerds.org

  1. Übersicht
  2. Linux
  3. Mastodon - Beiträge des NodeBB-Forums automatisiert posten

Mastodon - Beiträge des NodeBB-Forums automatisiert posten

Geplant Angeheftet Gesperrt Verschoben Linux
mastodonlinux
9 Beiträge 1 Kommentatoren 672 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • FrankMF Offline
    FrankMF Offline
    FrankM
    schrieb am zuletzt editiert von
    #1

    Ein Anfang 🙂

    2ac64792-48eb-443f-954e-9bc868cf4b82-grafik.png

    wird noch ausführlicher, aber jetzt ist Feierabend für heute.

    Im Fediverse -> @FrankM@nrw.social

    1. NanoPi R5S
    2. Quartz64 Model B, 4GB RAM
    3. Quartz64 Model A, 4GB RAM
    4. RockPro64 v2.1
    1 Antwort Letzte Antwort
    0
    • FrankMF Offline
      FrankMF Offline
      FrankM
      schrieb am zuletzt editiert von
      #2

      Das Beispiel oben habe ich mit curl gesendet.

      curl -H 'Authorization: Bearer <Zugangs-Token>' https://nrw.social/api/v1/statuses -F 'status=Just posted a new blog: {{EntryTitle}} - {{EntryUrl}}'
      

      Den Token kann man sich hier erzeugen.

      5490f35d-27c7-4d85-a00a-c19785fb608a-grafik.png

      Jetzt suche ich noch nach einer praktikablen Lösung, das ganze zu automatisieren.

      Im Fediverse -> @FrankM@nrw.social

      1. NanoPi R5S
      2. Quartz64 Model B, 4GB RAM
      3. Quartz64 Model A, 4GB RAM
      4. RockPro64 v2.1
      1 Antwort Letzte Antwort
      0
      • FrankMF Offline
        FrankMF Offline
        FrankM
        schrieb am zuletzt editiert von
        #3

        Mal OpenAI gefragt 🙂

        import requests
        import json
        
        if __name__ == '__main__':
        
            # Replace these with your actual Mastodon credentials and access token
            MASTODON_INSTANCE = 'https://nrw.social'
            ACCESS_TOKEN = 'ACCESS-TOKEN'
        
            def send_to_mastodon(topic_title, topic_content):
                try:
                    mastodon_api = f"{MASTODON_INSTANCE}/api/v1/statuses"
                    status = f"New Topic: {topic_title}\n\n{topic_content}\n\n#Python #NewTopic"
        
                    # Use the Mastodon access token for authorization
                    headers = {'Authorization': f'Bearer {ACCESS_TOKEN}'}
                    data = {'status': status}
        
                    # Send the status update to Mastodon
                    response = requests.post(mastodon_api, headers=headers, data=data)
                    response.raise_for_status()
                    print('Posted to Mastodon:', response.json())
                except requests.exceptions.RequestException as e:
                    print('Error posting to Mastodon:', e)
        
        
            # Example usage when creating a new topic in Python
            topic_title = 'Hello Mastodon'
            topic_content = 'This is my first post from Python to Mastodon!'
        
            send_to_mastodon(topic_title, topic_content)
        

        Im Fediverse -> @FrankM@nrw.social

        1. NanoPi R5S
        2. Quartz64 Model B, 4GB RAM
        3. Quartz64 Model A, 4GB RAM
        4. RockPro64 v2.1
        1 Antwort Letzte Antwort
        0
        • FrankMF Offline
          FrankMF Offline
          FrankM
          schrieb am zuletzt editiert von FrankM
          #4

          Und dann mal gefragt, wie ich an die letzte Topic ID komme.

          import redis
          
          # Replace these with your actual Redis configuration
          REDIS_HOST = 'localhost'
          REDIS_PORT = 6379
          REDIS_DB = 0
          
          def get_last_topic_id():
              try:
                  # Connect to the Redis database
                  r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB)
          
                  # Get the last Topic ID from the Redis list
                  last_topic_id = r.lindex('topics:tid', -1)
                  
                  if last_topic_id is not None:
                      last_topic_id = int(last_topic_id.decode())
                      return last_topic_id
                  else:
                      print('No Topics found in Redis database.')
                      return None
              except redis.exceptions.RedisError as e:
                  print('Error connecting to Redis:', e)
                  return None
          
          # Example usage
          last_topic_id = get_last_topic_id()
          if last_topic_id is not None:
              print('Last Topic ID:', last_topic_id)
          

          Ok, das werde ich dann am WE mal testen und in was Brauchbares umsetzen.

          Im Fediverse -> @FrankM@nrw.social

          1. NanoPi R5S
          2. Quartz64 Model B, 4GB RAM
          3. Quartz64 Model A, 4GB RAM
          4. RockPro64 v2.1
          1 Antwort Letzte Antwort
          0
          • FrankMF Offline
            FrankMF Offline
            FrankM
            schrieb am zuletzt editiert von
            #5

            Ok, das OpenAI muss auch gefüttert werden, sonst kommt man da auch nicht weiter.

            Das obere Beispiel muss erst mal um eine Authentifizierung erweitert werden.

            # Replace these with your actual Redis configuration
            REDIS_HOST = 'localhost'
            REDIS_PORT = 6380
            REDIS_DB = 0
            REDIS_PASSWORD =  "<PASSWORD>"
            

            und

            # Connect to the Redis database with authentication (if required)
            r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, password=REDIS_PASSWORD)
            

            Ok, war einfach. Danach kam folgende Fehlermeldung.

            :~/mastodon$ python3 main.py 
            Erfolg Redis<ConnectionPool<Connection<host=localhost,port=6380,db=0>>>
            Error connecting to Redis: WRONGTYPE Operation against a key holding the wrong kind of value
            

            Was das sein soll kann ich mir vorstellen, aber was nun? OK, OpenAI bitte arbeiten 🙂

            Darf man das von OpenAI einfach posten? Ach, da die auch keinen Quellenangaben haben und alles nur geklaut ist, kann ich das auch machen 🙂

            The error message "WRONGTYPE Operation against a key holding the wrong kind of value" in Redis typically occurs when you try to perform an operation on a key with a data type that is incompatible with that operation. In the context of NodeBB, this error might occur if the 'topics:tid' key is expected to be a Redis list, but it contains data of a different type.
            
            To investigate and resolve this issue, you can take the following steps:
            
                Check the data type of the 'topics:tid' key: Use the Redis CLI to inspect the data type of the key to verify if it is indeed a list. Open a terminal or command prompt and run the following command:
            
                bash
            
            redis-cli
            
            Then, in the Redis CLI, check the data type of the key:
            
            bash
            
                TYPE topics:tid
            
                The response should be "list" if the key is of the correct type. If it is not a list, this could be the cause of the error.
            
                Confirm NodeBB's usage of the key: Ensure that NodeBB is using the 'topics:tid' key as a list and not attempting to use it as a different data type. Check your NodeBB codebase or any plugins that might interact with this key to ensure that they treat it as a list.
            
                Clean up the incorrect data: If you find that the data in the 'topics:tid' key is of the wrong type, you might need to clean up the data. Be cautious when doing this to avoid data loss. If you are not sure about the correct approach, consider seeking help from NodeBB community forums or relevant documentation.
            
                Re-populate the correct data: After resolving any data type issues, you may need to re-populate the 'topics:tid' key with the correct data. NodeBB should handle this automatically when users create new topics, but if necessary, you can manually set the key to the correct value.
            
                Restart NodeBB: After making any changes, be sure to restart your NodeBB server to ensure that the changes take effect.
            
            Remember that modifying the Redis data directly can be risky, so it's essential to have backups and exercise caution while making any changes. If you are uncertain about how to proceed, seeking assistance from experienced NodeBB developers or the community can be beneficial.
            

            Ok, testen wir den Typ auf der Konsole.

            redis-cli -p 6380
            127.0.0.1:6380> AUTH default <PASSWORD>
            127.0.0.1:6380> OK
            127.0.0.1:6380> TYPE topics:tid
            zset
            127.0.0.1:6380> exit
            

            Ok, nun weiß ich das der Datensatz vom Type zset ist. Wir füttern wieder die Maschine.

            If the Redis key 'topics:tid' is of type "zset" (sorted set), the "WRONGTYPE Operation against a key holding the wrong kind of value" error could occur if you're trying to perform an operation on it that's only applicable to lists or other data types.
            
            In a sorted set, the elements are stored in such a way that they are ordered based on a score. Each element has a score associated with it, and the elements are sorted based on this score. This data structure is quite different from a list, which stores elements in a specific order without any associated scores.
            
            To resolve the issue, you need to ensure that the operations you perform on the 'topics:tid' key are appropriate for a sorted set data type.
            
            If you intended to use the sorted set for holding the topic IDs, here's how you can get the last topic ID from a sorted set in Python using the redis library:
            
            python
            
            import redis
            
            # Replace these with your actual Redis configuration and password (if any)
            REDIS_HOST = 'localhost'
            REDIS_PORT = 6379
            REDIS_DB = 0
            REDIS_PASSWORD = 'your-redis-password'  # Set to None if no password is used
            
            def get_last_topic_id():
                try:
                    # Connect to the Redis database with authentication (if required)
                    r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB, password=REDIS_PASSWORD)
            
                    # Get the last Topic ID from the sorted set
                    last_topic_id = r.zrange('topics:tid', -1, -1, withscores=True)
            
                    if last_topic_id:
                        last_topic_id = int(last_topic_id[0][0].decode())
                        return last_topic_id
                    else:
                        print('No Topics found in the sorted set.')
                        return None
                except redis.exceptions.RedisError as e:
                    print('Error connecting to Redis:', e)
                    return None
            
            # Example usage
            last_topic_id = get_last_topic_id()
            if last_topic_id is not None:
                print('Last Topic ID:', last_topic_id)
            
            In this code, we use the zrange command to retrieve the last element (topic ID) from the sorted set 'topics:tid' with the optional withscores=True parameter to also get the score associated with it (although in this case, the score might not be used).
            
            Make sure to replace 'localhost' and 6379 with the appropriate host and port where your Redis server is running, and set REDIS_DB to the appropriate database number used by NodeBB (usually 0). Also, replace 'your-redis-password' with the actual password used for authentication, or set it to None if no password is required.
            

            Das danach in mein Python Script eingefügt und ausprobiert.

            ~/mastodon$ python3 main.py 
            Last Topic ID: 1456
            

            Kontrolle, der letzte Beitrag in meinem Forum ist folgender.

            Link Preview Image
            Mastodon - Beiträge des NodeBB-Forums automatisiert posten

            Ein Anfang wird noch ausführlicher, aber jetzt ist Feierabend für heute.

            favicon

            linux-nerds.org (linux-nerds.org)

            Passt 🙂 Jetzt kann ich weitermachen.

            Im Fediverse -> @FrankM@nrw.social

            1. NanoPi R5S
            2. Quartz64 Model B, 4GB RAM
            3. Quartz64 Model A, 4GB RAM
            4. RockPro64 v2.1
            1 Antwort Letzte Antwort
            0
            • FrankMF FrankM hat am auf dieses Thema verwiesen
            • FrankMF FrankM hat am auf dieses Thema verwiesen
            • FrankMF Offline
              FrankMF Offline
              FrankM
              schrieb am zuletzt editiert von
              #6

              Das kleine Projekt ist erfolgreich beendet.

              ba0fddff-8579-42f7-9391-cac6f05e5912-grafik.png

              So bald ich den Code bereinigt habe, werde ich den bei gitlab.com einstellen, das es sich jeder Interessierte dort kopieren kann. Es kommt auch noch eine ausführliche Anleitung dazu.

              Im Fediverse -> @FrankM@nrw.social

              1. NanoPi R5S
              2. Quartz64 Model B, 4GB RAM
              3. Quartz64 Model A, 4GB RAM
              4. RockPro64 v2.1
              1 Antwort Letzte Antwort
              0
              • FrankMF Offline
                FrankMF Offline
                FrankM
                schrieb am zuletzt editiert von
                #7

                Das versprochene Gitlab Repository https://gitlab.com/Bullet64/nodebb_post_to_mastodon

                Viel Spaß beim Testen 🙂

                Im Fediverse -> @FrankM@nrw.social

                1. NanoPi R5S
                2. Quartz64 Model B, 4GB RAM
                3. Quartz64 Model A, 4GB RAM
                4. RockPro64 v2.1
                1 Antwort Letzte Antwort
                0
                • FrankMF Offline
                  FrankMF Offline
                  FrankM
                  schrieb am zuletzt editiert von
                  #8

                  Uupps, da hat noch ein Test auf nicht erlaubte Kategorien gefehlt. Ich habe hier z.B. einen privaten Bereich, blöd wenn man das dann nach Mastodon schiebt, es aber niemand lesen kann weil ihm die Rechte fehlen.

                  Die Kategorien kann man in der config.py eintragen.

                  Im Fediverse -> @FrankM@nrw.social

                  1. NanoPi R5S
                  2. Quartz64 Model B, 4GB RAM
                  3. Quartz64 Model A, 4GB RAM
                  4. RockPro64 v2.1
                  1 Antwort Letzte Antwort
                  0
                  • FrankMF Offline
                    FrankMF Offline
                    FrankM
                    schrieb am zuletzt editiert von
                    #9

                    Ergänzt um eine automatische Übernahme der Tags aus dem Forum. Man muss den Beiträgen in Mastodon ja auch Reichweite geben 🙂

                    Im Fediverse -> @FrankM@nrw.social

                    1. NanoPi R5S
                    2. Quartz64 Model B, 4GB RAM
                    3. Quartz64 Model A, 4GB RAM
                    4. RockPro64 v2.1
                    1 Antwort Letzte Antwort
                    0
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    • FrankMF

                      Debian 12 & fail2ban

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux debian linux fail2ban
                      1
                      0 Stimmen
                      1 Beiträge
                      125 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      Plasma 6

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux kde plasma6 linux manjaro
                      1
                      1
                      0 Stimmen
                      1 Beiträge
                      171 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      Happy Birthday Debian

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Allgemeine Diskussionen debian linux
                      1
                      1
                      0 Stimmen
                      1 Beiträge
                      129 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      Linux Mint 20.3 Cinnamon & Scannen mit HP LaserJet Pro MFP M28a

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux linux linuxmint 20.3
                      1
                      2
                      0 Stimmen
                      1 Beiträge
                      332 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      Ansible - ein kurzer Test

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux ansible linux
                      1
                      0 Stimmen
                      1 Beiträge
                      192 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      Debian Buster 10.7 released

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux debian linux
                      1
                      0 Stimmen
                      1 Beiträge
                      246 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      Wireguard 1.0.0

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Wireguard linux wireguard
                      1
                      0 Stimmen
                      1 Beiträge
                      550 Aufrufe
                      Niemand hat geantwortet
                    • FrankMF

                      IPFire Orange DHCP

                      Beobachtet Ignoriert Geplant Angeheftet Gesperrt Verschoben Linux ipfire linux
                      1
                      0 Stimmen
                      1 Beiträge
                      1k Aufrufe
                      Niemand hat geantwortet
                    Powered by NodeBB | Contributors
                    © 2022 frank-mankel.de
                    Fediverse
                    • Anmelden

                    • Du hast noch kein Konto? Registrieren

                    • Anmelden oder registrieren, um zu suchen
                    • Erster Beitrag
                      Letzter Beitrag
                    0
                    • Kategorien
                    • World
                    • Aktuell
                    • Tags
                    • Beliebt