Skip to content

A minimal social network with bot friendly API for educational purposes.

Notifications You must be signed in to change notification settings

Knorrke/socialbotnet

Repository files navigation

SonarCloud Quality Gate SonarCloud Maintainability Rating SonarCloud Reliability Rating

SocialBotNet

SocialBotNet.de ist ein didaktisches, soziales Netzwerk mit einer einfachen API speziell für Bots für den Einsatz im Unterricht. Der Code baut auf eh3rrera/minitwit auf und verwendet das Javalin Framework.

Table of Contents generated with DocToc

Material

Auf der Webseite gibt es Projektvorlagen und Handouts sowie Beispielprojekte und didaktische Informationen.

Eigener Server

Mit einem Account bei Render lässt sich der Server mit nur einem Klick selbst bereitstellen:

Deploy to Render

Einschränkungen:

  • Nach 15 Minuten Inaktivität wird die App in einen Ruhezustand versetzt, sodass der erste Seitenaufruf eine gewisse Zeit dauert.
  • Ausgehende Bandbreite beschränkt auf 100 GB pro Monat
  • Die kostenlose Datenbank wird nach 90 Tagen gelöscht
  • Weitere Einschränkungen https://render.com/docs/free

Alternativ: Lokaler Server

Um den Server lokal laufen zu lassen, muss die .jar-Datei aus den releases heruntergeladen und über den folgenden Befehl gestartet werden.

$ java -jar pfad/zur/socialbotnet-4.2-jar-with-dependencies.jar

Dieser Befehlt startet einen jetty-Server auf localhost:30003, jedoch ohne persistente Datenbank. Diese müsste extra über die Umgebungsvariablen JDBC_DATABASE_URL, JDBC_DATABASE_USERNAME und JDBC_DATABASE_PASSWORD konfiguriert werden.

Es ist auch möglich, das SocialBotNet komplett auf einem eigenen remote Server mittels Dokku zu hosten. Details zur Einrichtung sind unten im Abschnitt "Server einrichten".

API

Das Netzwerk bietet eine leicht zu bedienende API um User- und Postdaten abzurufen und Beiträge zu schreiben oder liken.

Daten abrufen

Mit HTTP-GET können User- und Post-Daten abgerufen werden. Alle Anfragen können mit den GET-Parametern sortby nach jedem Attribut sortiert werden (default: id, mit order kann die Reihenfolge auf-/absteigend (asc/desc) sortiert werden und die Anzahl kann mit limit verändert werden (default ist 50)

Die folgenden HTTP-GET Schnittstellen werden unterstützt:

/api/users - Alle registrierten Nutzer abrufen

Parameter: sortby (optional), order (optional) limit (optional)
Beispiel Ergebnis: Anfrage an /api/users

[
  {
    "id":1,
    "username":"root",
    "hobbies":"doing stuff",
    "about":"I am root"
  },
  {
    "id":2,
    "username":"user002",
    "hobbies":"",
    "about":""
  }
]

/api/posts - Alle Posts abrufen

Parameter: sortby (optional), order (optional) limit (optional)
Beispiel Ergebnis: Anfrage an/api/posts?sortby=likes&limit=1

[
  {
    "id": 3,
    "message": "This is a post written by user user001 to user004",
    "user": { "id": 1, "username": "user001", "hobbies": "", "about": "" },
    "wall": { "id": 4, "username": "user004", "hobbies": "", "about": "" },
    "publishingDate": "2014-07-14 09:46:28",
    "likedBy": [
      { "id": 1, "username": "user001", "hobbies": "", "about": "" },
      { "id": 5, "username": "user005", "hobbies": "", "about": "" },
      { "id": 6, "username": "user006", "hobbies": "", "about": "" },
      { "id": 7, "username": "user007", "hobbies": "", "about": "" }
    ]
  }
]

/api/pinnwand/:username - Posts der Pinnwand eines Users

Parameter: sortby (optional), order (optional) limit (optional)
Beispiel Ergebnis: Genau wie bei /api/posts nur gefiltert nach der korrekten wall.

Daten senden

Hinweis: Um diese Schnittstelle nutzen zu können, benötigst du Logindaten des Users. Du musst daher bei allen Anfragen immer username und password mitsenden.

Die folgenden HTTP-Post Anfragen werden unterstützt:

  • /api/user/update: Aktualisiere das Nutzerprofil
    Parameter: username, password, newUsername (optional), hobbies (optional), about (optional)

  • /api/post: Erstelle einen neuen Post an deiner Pinnwand.
    Parameter: username, password, message

  • /api/post/:username: Erstelle einen neuen Post an der Pinnwand von :username
    Parameter: username, password, message

  • /api/like: Like einen Post
    Parameter: username, password, postid

  • /api/unlike: Ent-Like einen Post
    Parameter: username, password, postid

Server einrichten

Um das SocialBotNet komplett selbst zu hosten, benötigst du nur einen Server mit ssh-Zugriff.

  1. (SERVER) Installiere dokku. Folge dabei der Installationsanleitung.
    Hinweis: Vergiss nicht, die web-basierte Installation durchzuführen!
  2. (SERVER) Erstelle die Dokku app:
$ dokku apps:create socialbotnet
  1. (SERVER) Installiere das Plugin für PostgreSQL:
$ sudo dokku plugin:install https://github.com/dokku/dokku-postgres.git postgre
  1. (SERVER) Erstelle die Postgres Datenbank und Verbinde dich zur App
$ dokku postgres:create socialbotnet-db
$ dokku postgres:link socialbotnet-db socialbotnet
  1. (LOCAL) Klone das Repository und füge den Remote für Dokku hinzu:
$ git clone https://github.com/Knorrke/socialbotnet.git
$ cd socialbotnet
$ git remote add dokku dokku@ip.or.domain:socialbotnet
  1. (LOCAL) Deploye die Anwendung
$ git push dokku