WebSync – REST API

WebSync – REST API

Der WebSync hat eine REST API Schnittstelle, die es dem Kunden ermöglicht verschiedene Aspekte seiner Serien zu verwalten.
Neben dem Indizieren der Serien, können ausgewählte Einstellungen der Serien angezeigt und bearbeitet werden. Dadurch ist es dem Kunden z.B.  möglich, automatisiert neuen Content auf den Sync Server zu laden und die betroffene(n) Serie(n) in Anschluß per REST API to indizieren.

Um die REST API nutzen zu können, müssen Sie zuvor beim Support einen API-Key und einen API-Secret beantragen. Zudem müssen Sie in der Lage sein über Ihre Programmiersprache GET und POST Befehle an den Server zu senden.

REST API

Die Basis URL der REST API lautet: https://websync.simsync.de/api/v1/

Die Endpunkte basieren auf folgendem Schema: <Bereich>/<Aktion>[/<id>]?key=<api-key>[&fields=<field-list>]

Aktuell sind die folgenden Endpunkte verfügbar

Bereich Aktion Id Key Fields Methode Beschreibung
games list ungenutzt erforderlich ungenutzt GET Unterstützte Spiele auflisten
series list ungenutzt erforderlich optional GET Serien auflisten
series view erforderlich erforderlich optional GET Serie anzeigen
series edit erforderlich erforderlich ungenutzt POST Serie bearbeiten
series index erforderlich erforderlich optional GET Serien Indizierungsstatus abfragen
series index erforderlich erforderlich ungenutzt POST Serie indizieren

Beispiel: Anzeige der Serie 571.
Endpunkt: series/view/571
Vollständige Url: https://websync.simsync.de/api/v1/series/view/571?key=<use-your-key-here>

Bei jeder Abfrage oder Updaten von Daten, wird ein JSON Objekt mit der folgenden Struktur zurückgegeben:

{
  "success":true,
  "msg":"",
  "data": {}
}
Eigenschaft Typ Beschreibung
success bool True: Abfrage erfolgreich
False: Abfrage fehlgeschlagen
msg string Success = false: Die Fehlermeldung, ansonsten leer.
data object|array Success = true: Die zurückgegebenen Daten der Abfrage als JSON Object oder Array. Ansonsten ein leeres Objekt.

Spiele

Eine Liste der Spiele kann unter folgendem Endpunkt abgerufen werden: games/list?key=<api-key>
Die Liste ist als JSON Objekt aufgebaut, das der Schlüssel die Spiel ID und der Wert den jeweiligen Namen des Spiels entält.

Beispiel:
https://websync.simsync.de/api/v1/games/list?key=<use-your-key-here>

{
  "success":true,
  "msg":"",
  "data":{
    "acc":"Assetto Corsa Competizione (requires SimSync PRO 8.0.3+)",
    "actc":"ACTC Simulador de Turismo Carretera",
    "actc3":"ACTC v3 Simulador de Turismo Carretera",
    "arca":"ARCA Sim Racing",
    ...
   }
}

Serien

Auflisten

Endpunkt: series/list?key=<api-key>

Beispiel:
https://websync.simsync.de/api/v1/series/list?key=<use-your-key-here>

{
  "success":true,
  "msg":"",
  "data": 
  [
    {
      "id": 8098,
      "name": "Series 1",
      "enabled": 1
    },
    {
      "id": 8298,
      "name": "Series 2",
      "enabled": 0
    },
  ]  
}

 

Felder
Feldname Typ Beschreibung
id integer Serien ID
seriesname string Name der Serie
game string Kürzel des Spiels
enabled integer Serie aktiviert/deaktiviert (1 / 0)
pw string Serienkennwort
size integer Größe der Serie [bytes]
indexdate datetime Datum/Zeit (UTC) der letzten Indizierung
steamids array Liste der SteamIDs

 

Editierbare Felder
Feldname Typ Format
enabled integer 0 oder 1
pw string Alphanumerisch incl. Sonderzeichen; 2 bis 255 Zeichen;
steamids string Max. 3000 komma-separierte SteamID64 Ids

 

Serie bearbeiten

Während die beiden vorigen Beispiele noch mit der HTTP GET Methode funktioniert haben, müssen sämtliche Aktionen, bei denen Daten geändert werden, wie z.B. Serie indizieren oder bearbeiten, per HTTP POST ausgeführt werden.

Der Aufbau der Endpunkte ist dabei so wie bei den beiden vorigen Beipielen: <Bereich>/<Aktion>[/<id>]?key=<api-key>. Also z.B. für das ändern/bearbeiten der Serie 571: series/edit/571?key=<use-you-key-here>.
Im “Körper” der POST Methode müssen die folgenden Daten als URL-kodierte Abfragezeichenfolge an den Server übergeben werden, damit auf diese Weise sichergestellt werden kann, das die übergebenden Daten wirklich vom richtigen Absender kommen und nicht von einer 3. Person, die den Api-Key abgefangen hat.

data=<url-encoded data>&key=<api-key>&checksum=<url-encoded checksum>

Data ist assoziatives Array (php) oder ein Object (JS).
Beispiel PHP: $data = array('id' => 571, 'pw' => 'NewSeriesPassword', 'enabled' => 0);
Beipiel JS: var data = {'id': 571, 'pw': 'NewSeriesPassword', 'enabled': 0};

Die Checksumme ist ein Sha256 Hash aus der folgenden Url-kodierten Abfrage:
data=<url encoded data>&key=<api-key>&secret=<api-secret>

Hier ein Beispiel wie das Ganze in PHP gemacht wird:

<?php
// define url to post the data to
$url = 'https://websync.simsync.de/api/v1/series/index/571?key=<use-you-key-here>';

// Setup array for checksum 
$check = array(
  'data' => $data,
  'key' => $api_key,
  'secret' => $api_secret 
); 
// calculate sha256 checksum 
$checksum = hash('sha256', http_build_query($check), false); 

// create url-encode query string for post 
$post_data = http_build_query(
  array(
    'data' => $data,
    'key' => $api_key,
    'checksum' => $checksum
  ) 
); 

// Setup curl to send the post request 
$crl = curl_init(); 
curl_setopt($crl, CURLOPT_URL, $url); 
curl_setopt($crl, CURLOPT_POST, true); 
curl_setopt($crl, CURLOPT_POSTFIELDS, $post_data); 
curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($crl, CURLOPT_SSL_VERIFYPEER, false);  // Can/Should be true for https connections

// Post the data and get the result from the server 
$result = curl_exec($crl); 
curl_close($crl);
?>

Serie indizieren

Aktueller Indizierungsstatus

Um den aktuellen Indizierungstatus abzufragen (und das sollte man VOR dem Indizieren immer erstmal tun), verwenden sie per GET den folgenden Endpunkt: series/index/<series-id>?key=<api-key>

Sofern kein Fehler auftritt erhalten Sie eine Antwort in der Form:

{
  "success":true,
  "msg":"",
  "data":{
    "id":3385,
    "indexdate":"2019-10-23 13:59:54",
    "indexstatus":2,
    "indexresult":"OK"
  }
}
Feldname Bedeutung
id Serien-ID der abgefragten Serie
indexdate UTC Dateum der letzten Indizierung
indexstatus 0 = Noch nicht indiziert
1 = 1. Indizierung erfolgreich
2 = 2. Indizierung incl. Checksumme erfolgreich
3 = Indizierung fehlgeschlagen
indexresult indexstatus 0: Leer
indexstatus 1: First run complete
indexstatus 2: Finished
indexstatus 3: Fehlermeldung

 

Serie indizieren

Das Indizieren einer Serie wird per Post gestartet. Der Endpunkt hierzu lautet: /series/index/<series-id>?key=<api-key>

Im “Körper” der Nachricht muss eine Zeichenfolge für den “Changelog” übergeben werden, die auch leer sein darf.

data=<url-encoded data>&key=<api-key>&checksum=<url-encoded checksum>

Data ist assoziatives Array (php) oder ein Object (JS).
Beispiel PHP: $data = array('id' => 571, 'changelog' => 'New skin added');
Beipiel JS: var data = {'id': 571, 'changelog': 'New skin added'};

Die Checksumme ist ein Sha256 Hash aus der folgenden Url-kodierten Abfrage:
data=<url encoded data>&key=<api-key>&secret=<api-secret>

Als Antwort erhältman eine Antwort wie beim Abfragen des Index Status.

{
 "success":true,
 "msg":"",
 "data":{
   "id":3385,
   "indexdate":"2019-10-23 13:59:54",
   "indexstatus":2,
   "indexresult":"OK"
 } 
}