Skip to content

Commit

Permalink
implement streams-api v2
Browse files Browse the repository at this point in the history
fixes voc#6
  • Loading branch information
MaZderMind committed Dec 20, 2016
1 parent 9f10efd commit 4a7a7ed
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 3 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ see [deploy.sh](deploy.sh)

## JSON-API

Unter der URL http://streaming.media.ccc.de/streams/v1.json bietet die
Unter der URL http://streaming.media.ccc.de/streams/v2.json bietet die
Steaming-Webseite eine Übersicht über alle konfigurierten Räume und Streams in
einem maschinenlesbaren Format an. Dieses kann z.B. genutzt werden, um in den
diversen Anwendungen, die sich rund um das Konferenzgeschehen entwickelt haben,
Player und Links zu Liveübertragungen anzubieten.

Wie die URL vermuten lässt, ist die API versioniert. Dies bedeutet, dass in
der `v1.json` keine Felder *entfernt werden* oder ihre *Bedeutung ändern* – es
der `v2.json` keine Felder *entfernt werden* oder ihre *Bedeutung ändern* – es
können aber durchaus *neue Felder* hinzukommen. Eine formalere Spezifikation
des JSON-Formats ist tbd. Ein Beispiel kann [hier
betrachtet](https://gist.github.com/MaZderMind/d5737ab867ade7888cb4) werden.
betrachtet](https://gist.github.com/MaZderMind/a91f242efb2f446a2237d4596896efd6) werden.
6 changes: 6 additions & 0 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@
exit;
}

else if($route == 'streams/v2.json')
{
require('view/streams-json-v2.php');
exit;
}

else if($route == 'about')
{
// global about-page
Expand Down
105 changes: 105 additions & 0 deletions view/streams-json-v2.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
<?php

header('Content-Type: application/json');

foreach (Conferences::getActiveConferences() as $conference)
{
$overview = $conference->getOverview();

$groupstruct = array();
foreach($overview->getGroups() as $group => $rooms)
{
$roomstruct = array();
foreach($rooms as $room)
{
$streams = array();
foreach($room->getStreams() as $stream)
{
$key = $stream->getSelection().'-'.$stream->getLanguage();

$urls = array();
switch($stream->getPlayerType())
{
case 'video':
foreach ($stream->getVideoProtos() as $proto => $display)
{
$urls[$proto] = array(
'display' => $display,
'tech' => $stream->getVideoTech($proto),
'url' => $stream->getVideoUrl($proto),
);
}
break;

case 'slides':
foreach ($stream->getSlidesProtos() as $proto => $display)
{
$urls[$proto] = array(
'display' => $display,
'tech' => $stream->getSlidesTech($proto),
'url' => $stream->getSlidesUrl($proto),
);
}
break;

case 'audio':
foreach ($stream->getAudioProtos() as $proto => $display)
{
$urls[$proto] = array(
'display' => $display,
'tech' => $stream->getAudioTech($proto),
'url' => $stream->getAudioUrl($proto),
);
}
break;

case 'music':
foreach ($stream->getMusicProtos() as $proto => $display)
{
$urls[$proto] = array(
'display' => $display,
'tech' => $stream->getMusicTech($proto),
'url' => $stream->getMusicUrl($proto),
);
}
break;
}

$streams[] = array(
'slug' => $key,
'display' => $stream->getDisplay(),
'type' => $stream->getPlayerType(),
'isTranslated' => $stream->isTranslated(),
'videoSize' => $stream->getVideoSize(),
'urls' => $urls,
);
}

$roomstruct[] = array(
'slug' => $room->getSlug(),
'schedulename' => $room->getScheduleName(),
'thumb' => forceslash(baseurl()).$room->getThumb(),
'link' => forceslash(baseurl()).$room->getLink(),
'display' => $room->getDisplay(),
'streams' => $streams,
);
}

$groupstruct[] = array(
'group' => $group,
'rooms' => $roomstruct,
);
}
$struct[] = array(
'conference' => $conference->getTitle(),
'slug' => $conference->getSlug(),
'author' => $conference->getAuthor(),
'description' => $conference->getDescription(),
'keywords' => $conference->getKeywords(),
'startsAt' => $conference->startsAt() ? $conference->startsAt()->format(DateTime::ISO8601) : null,
'endsAt' => $conference->endsAt() ? $conference->endsAt()->format(DateTime::ISO8601) : null,
'groups' => $groupstruct,
);
}

echo json_encode($struct, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

0 comments on commit 4a7a7ed

Please sign in to comment.