RBTV API

Was ist das hier?

Dies ist eine inoffizielle RBTV API die die funktionen der offiziellen API wiederspiegelt allerdings auch eigene Funktionen mitliefert.
Zu diesen gehören u.a. das abfragen historischer Daten sowie eine einfache Suchfunktion.


Funktionen

Die Suchfunktion ist auf 10 Anfragen pro Minute limitiert. Wenn du mehr brauchst wende dich an mich im RBTV Forum.

In Planung:


API Dokumentation

Endpunkte

Die basis-URL für alle Anfragen sollte http://api.rbtv.rodney.io/api/1.0/. HTTPS wird aktuell noch nicht unterstützt.

Endpunkt Beschreibung
GET /schedule/schedule_linear.json Aktueller Sendeplan (Array)
GET /schedule/schedule.json Aktueller Sendeplan (Object)
GET /schedule/full_linear.json Vollständiger Sendeplan (Array)
GET /schedule/full.json Vollständiger Sendeplan (Object)
GET /schedule/:year_linear.json Jahr :year (Array)
GET /schedule/:year.json Jahr :year (Object)
GET /schedule/:year/:month_linear.json Monat :month in Jahr :year (Array)
GET /schedule/:year/:month.json Monat :monat in Jahr :year (Object)
GET /schedule/:year/weeks/:week_linear.json Woche :week in Jahr :year (Array)
GET /schedule/:year/weeks/:week.json Woche :week in Jahr :year (Object)
GET /schedule/:year/:month/:day.json Tag :day in Monat :month in Jahr :year (nur Array)
GET /query Suche
GET /podcasts.json Podcasts

Viele Endpunkte sind als “linear” Variante verfügbar. Bei dieser Variante wird ein Array mit allen Elementen (chronologisch sortiert) zurückgegeben (Siehe Schedule Array). Im normalfall wird ein Object mit dem Datum als Key und einem Array der einzelnen Elemente des Tages als Value zurückgegeben (Siehe Schedule Object). Je nach Anwendungsfall kann es vorteilhaft sein eine oder die andere Variante zu wählen.


Datenstrukturen

Schedule Array

{
  "schedule": [
    {
      "id": 11399767,
      "title": "Game Plus Daily",
      "topic": "Game Plus Daily #34 mit Budi, Colin & Jan: Adrift & Earth Defense Force",
      "show": "Game Plus Daily",
      "timeStart": "2016-07-20T01:00:00+02:00",
      "timeEnd": "2016-07-20T03:02:45+02:00",
      "length": 7365,
      "type": "",
      "game": ""
    },
    ...
    {
      "id": 11399775,
      "title": "Let’s Play",
      "topic": "",
      "show": "Let’s Play",
      "timeStart": "2016-07-20T03:00:00+02:00",
      "timeEnd": "2016-07-20T05:03:35+02:00",
      "length": 7415,
      "type": "",
      "game": "Odin Sphere"
    }
}

Schedule Object

{
  "schedule": {
    "18.07.2016": [
      {
        "id": 11403307,
        "title": "EM Interview mit Patrick Owomoyela",
        "topic": "",
        "show": "Event",
        "timeStart": "2016-07-18T01:25:00+02:00",
        "timeEnd": "2016-07-18T01:59:03+02:00",
        "length": 2043,
        "type": "",
        "game": ""
      },
      ...
      {
        "id": 11403450,
        "title": "Knallhart Durchgenommen",
        "topic": "Dark Souls III: Colin & Eddy auf dem Weg zum Ziel!",
        "show": "Knallhart Durchgenommen",
        "timeStart": "2016-07-18T22:15:00+02:00",
        "timeEnd": "2016-07-18T23:53:18+02:00",
        "length": 5898,
        "type": "premiere",
        "game": "Dark Souls III"
      }
    ],
    "23.07.2016": [
      {    },
    ]
}

Podcasts

{
	"podcasts": [
		{
			"description": "Folge 246",
			"title": "Serien #3",
			"url": "http://cdn.rocketmgmt.de/mp3/almost_daily/almostdaily_e246Serien.mp3",
			"image": "http://cdn.rocketmgmt.de/images/app/almost_daily.jpg",
			"length": "3231",
			"filesize": "49"
		},
		...
		{
			"description": "Folge 245",
			"title": "Mord & Verschw\u00f6rung",
			"url": "http://cdn.rocketmgmt.de/mp3/almost_daily/almostdaily_e245Mord.mp3",
			"image": "http://cdn.rocketmgmt.de/images/app/almost_daily.jpg",
			"length": "3569",
			"filesize": "54"
		}
	]
}

Query

Siehe Query/Suche.


Objekte

Show Item

{
    "id": 11402442,
    "title": "Knallhart Durchgenommen",
    "topic": "Dark Souls III: Colin & Eddy auf dem Weg zum Ziel!",
    "show": "Knallhart Durchgenommen",
    "timeStart": "2016-07-22T22:15:00+02:00",
    "timeEnd": "2016-07-22T23:53:18+02:00",
    "length": 5898,
    "type": "premiere",
    "game": "Dark Souls III"
}
Feld Typ Beschreibung
id integer Id, ändert sich alle paar Minuten und ist nicht eindeutig!
title string Titel der Show, niemals leer
topic string Thema der Show, kann leer sein
show string Name der Show. Niemals leer. Es gibt generische Namen wie Event oder Fremdcontent
game string Spiel der Show, kann leer sein
type string Leer für reruns, “premiere” für Premieren, “live” für Livecontent
length integer Länge der Sendung in Sekunden
timeStart string ISO 8601 Datum des Anfangs der Show
timeEnd string ISO 8601 Datum des Endes der Show

Podcast Item

{
    "title": "EM 2016 - Zu Gast bei Bohnen - Episode 5",
    "description": "Frisch auf den Tisch, die neue EM-Folge. [...]",
    "length": "3283",
    "url": "http://cdn.rocketmgmt.de/mp3/bohndesliga/EM2016_Epsiode5.mp3",
    "image": "http://cdn.rocketmgmt.de/images/app/bohndesliga.jpg",
    "filesize": "53"
}
Feld Typ Beschreibung
title string Titel des Podcasts, niemals leer
description string Beschreibung, kann leer sein
length string Länge in Sekdunden
url string URL der mp3/aac Datei
image string URL der cover Art des Podcasts
filesize string Dateigröße in Megabyte

Query/Suche

Der /query Endpunkt bietet eine einfach Suchfunktion.

Folgende Parameter werden unterstützt (es muss mindestens einer Angegeben sein!)

Parameter Beschreibung
type “live”, “premiere” oder “rerun”. Mehrere Optionen möglich (Kommagetrennt)
name Vollständiger oder Teil des Titels der Show, case sensitive.
show Vollständiger Name der Show, case sensitive. Mehrere Optionen möglich (Kommagetrennt)
indescription Teil des Themas der Show, bspw. “Simon” um nach Shows mit Simon zu Suchen. Case sensitive
game Vollständiger oder Teil des Namens des Spieles. Case sensitive

show unterstützt zusätzlich auch das ausschließen einer oder mehrere Shows durch das vorranstellen eines Ausrufezeichens.

Die folgenden Header werden vom Server gesendet und können benutzt werden um informationen über die Ratelimits zu bekommen.

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1469721124
Retry-Ater: 54

Beispiel Requests

Suche nach: Live Shows und Premieren mit Simon aber ohne Game Plus Daily

Request

curl "http://api.rbtv.rodney.io/api/1.0/query?type=live,premiere&show=!Game%20Plus%20Daily&indescription=Simon"

Response

{
  "meta": {
    "msg": "ok", 
    "results": 24, 
    "status": 200
  }, 
  "results": [
    {
      "game": "Dead Space", 
      "id": 10329452, 
      "length": 4860, 
      "show": "After Dark", 
      "timeEnd": "2016-07-04T21:36:00+02:00", 
      "timeStart": "2016-07-04T20:15:00+02:00", 
      "title": "After Dark", 
      "topic": "Dead Space mit Simon", 
      "type": "premiere"
    },
	...
    {
      "game": "Halo 5: Guardians", 
      "id": 12534009, 
      "length": 8490, 
      "show": "Let\u2019s Play", 
      "timeEnd": "2016-07-29T20:06:30+02:00", 
      "timeStart": "2016-07-29T17:45:00+02:00", 
      "title": "Let\u2019s Play", 
      "topic": "Matteo, Simon und Budi zocken Halo 5", 
      "type": "premiere"
    }
  ]
}

Beim Erreichen des Ratelimits

{
  "meta": {
    "error": "rate limit exceeded: 10 per 1 minute", 
    "msg": "rate limit exceeded. Please wait up to 60 seconds before making additional requests", 
    "results": 0, 
    "status": 429
  }, 
  "results": []
}