From b64ec5f11b70a3c9d0505fdfaf518c45810580b3 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 00:09:22 +0200 Subject: [PATCH 01/52] add client cert upload --- contrib/www/index.html | 2 +- include/handler_api.h | 1 + include/net_config.h | 2 + include/settings.h | 1 + src/handler_api.c | 275 +++++++++++++++++++++++++++++++++++++++++ src/server.c | 1 + src/settings.c | 1 + 7 files changed, 282 insertions(+), 1 deletion(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index 34093526..249342f3 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -515,7 +515,7 @@

Settings

}); try { - const response = await fetch('/api/upload', { + const response = await fetch('/api/uploadCert', { method: 'POST', body: formData, }); diff --git a/include/handler_api.h b/include/handler_api.h index 75c31bc1..07c3d600 100644 --- a/include/handler_api.h +++ b/include/handler_api.h @@ -8,6 +8,7 @@ #include "http/http_server_misc.h" void stats_update(const char *item, int count); +error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri); error_t handleApiStats(HttpConnection *connection, const char_t *uri); error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri); error_t handleApiGet(HttpConnection *connection, const char_t *uri); diff --git a/include/net_config.h b/include/net_config.h index 7c014682..1898a445 100644 --- a/include/net_config.h +++ b/include/net_config.h @@ -175,4 +175,6 @@ typedef struct #define HTTP_SERVER_TLS_SUPPORT ENABLED +#define HTTP_SERVER_MULTIPART_TYPE_SUPPORT ENABLED + #endif diff --git a/include/settings.h b/include/settings.h index e2f07e0c..edb2473b 100644 --- a/include/settings.h +++ b/include/settings.h @@ -79,6 +79,7 @@ typedef struct { uint32_t http_port; uint32_t https_port; + char *certdir; settings_cert_opt_t server_cert; settings_cert_opt_t client_cert; } settings_core_t; diff --git a/src/handler_api.c b/src/handler_api.c index aa002696..c34c1365 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -3,13 +3,27 @@ #include #include #include +#include +#include +#include "fs_port.h" #include "handler_api.h" #include "handler_cloud.h" #include "settings.h" #include "stats.h" #include "returncodes.h" +typedef enum +{ + PARSE_FILENAME, + PARSE_BODY +} eMultipartState; + +/* multipart receive buffer */ +#define DATA_SIZE 1024 +#define SAVE_SIZE 80 +#define BUFFER_SIZE (DATA_SIZE + SAVE_SIZE) + error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri) { char *json = strdup("{\"options\": ["); @@ -388,3 +402,264 @@ error_t handleApiStats(HttpConnection *connection, const char_t *uri) return NO_ERROR; } + +FsFile *multipartStart(const char *rootPath, const char *filename, char *message, size_t message_max) +{ + // Ensure filename does not contain any directory separators + if (strchr(filename, '\\') || strchr(filename, '/')) + { + snprintf(message, message_max, "Filename '%s' contains directory separators!", filename); + TRACE_ERROR("Filename '%s' contains directory separators!\r\n", filename); + return NULL; + } + + char fullPath[1024]; // or a sufficiently large size for your paths + snprintf(fullPath, sizeof(fullPath), "%s/%s", rootPath, filename); + + if (fsFileExists(fullPath)) + { + TRACE_INFO("Filename '%s' already exists, overwriting\r\n", filename); + } + FsFile *file = fsOpenFile(fullPath, FS_FILE_MODE_WRITE | FS_FILE_MODE_CREATE | FS_FILE_MODE_TRUNC); + + return file; +} + +error_t multipartAdd(FsFile *file, uint8_t *data, size_t length) +{ + if (fsWriteFile(file, data, length) != NO_ERROR) + { + return ERROR_FAILURE; + } + + return NO_ERROR; +} + +void multipartEnd(FsFile *file) +{ + if (!file) + { + return; + } + fsCloseFile(file); +} + +int find_string(const void *haystack, size_t haystack_len, size_t haystack_start, const char *str) +{ + size_t str_len = strlen(str); + + if (str_len > haystack_len) + { + return -1; + } + + for (size_t i = haystack_start; i <= haystack_len - str_len; i++) + { + if (memcmp((uint8_t *)haystack + i, str, str_len) == 0) + { + return i; + } + } + + return -1; +} + +error_t parse_multipart_content(HttpConnection *connection, const char *rootPath, char *message, size_t message_max, void (*fileUploaded)(const char *)) +{ + char buffer[BUFFER_SIZE]; + char filename[64]; + FsFile *file = NULL; + size_t packet_size; + eMultipartState state = PARSE_FILENAME; + char *boundary = connection->request.boundary; + + size_t leftover = 0; + do + { + error_t error = httpReceive(connection, &buffer[leftover], DATA_SIZE - leftover, &packet_size, 0x00); + if (error != NO_ERROR) + { + TRACE_ERROR("httpReceive failed\r\n"); + return error; + } + + int save_start = 0; + int save_end = packet_size; + int payload_size = leftover + packet_size; + + switch (state) + { + case PARSE_FILENAME: + { + int fn_start = find_string(buffer, payload_size - SAVE_SIZE, 0, "filename=\""); + if (fn_start < 0) + { + TRACE_ERROR("No filename found\r\n"); + break; + } + + fn_start += strlen("filename=\""); + int fn_end = find_string(buffer, payload_size - SAVE_SIZE, fn_start, "\"\r\n"); + if (fn_end < 0) + { + TRACE_ERROR("No filename end found\r\n"); + break; + } + + int len = fn_end - fn_start; + strncpy(filename, &buffer[fn_start], len); + filename[len] = '\0'; + + file = multipartStart(rootPath, filename, message, message_max); + if (file == NULL) + { + TRACE_ERROR("Failed to open file\r\n"); + return ERROR_INVALID_PATH; + } + + state = PARSE_BODY; + save_start = find_string(buffer, payload_size - SAVE_SIZE, fn_end, "\r\n\r\n"); + if (save_start < 0) + { + TRACE_ERROR("Failed parse multipart content\r\n"); + return ERROR_FAILURE; + } + + save_start += 4; + save_end = payload_size; + break; + } + + case PARSE_BODY: + { + int data_end = find_string(buffer, payload_size - SAVE_SIZE, 0, boundary); + if (data_end >= 0) + { + // We've found a boundary, let's finish up the current file + if (multipartAdd(file, (uint8_t *)buffer, data_end - 4) != NO_ERROR) + { + TRACE_ERROR("Failed to open file\r\n"); + return ERROR_FAILURE; + } + multipartEnd(file); + file = NULL; + + TRACE_INFO("Received file '%s'\r\n", filename); + if (fileUploaded) + { + fileUploaded(filename); + } + + if (strncmp(&buffer[data_end + strlen(boundary)], "--", 2) == 0) + { + return NO_ERROR; // no more data to process, so return + } + else + { + // Prepare for next file + state = PARSE_FILENAME; + // Position 'start' at the end of the boundary plus "--\r\n" + save_start = data_end + strlen(boundary) + 4; + save_end = payload_size; + } + } + else + { + // No boundary found, this is just more file content + if (payload_size < SAVE_SIZE) + { + save_start = payload_size; + save_end = payload_size; + multipartAdd(file, (uint8_t *)buffer, payload_size); + } + else + { + save_start = payload_size - SAVE_SIZE; + save_end = payload_size; + multipartAdd(file, (uint8_t *)buffer, payload_size - SAVE_SIZE); + } + } + } + break; + } + + leftover = save_end - save_start; + if (leftover > 0) + { + memmove(buffer, &buffer[save_start], leftover); + } + } while (packet_size > 0); + + return NO_ERROR; +} + +void fileUploaded(const char *filename) +{ + /* rootpath must be valid, which is ensured by upload handler */ + const char *rootPath = settings_get_string("core.certdir"); + + char *path = malloc(strlen(rootPath) + strlen(filename) + 3); + osSprintf(path, "%s/%s", rootPath, filename); + + if (!osStrcasecmp(filename, "ca.der")) + { + TRACE_INFO("Set ca.der to %s\r\n", path); + settings_set_string("core.client_cert.file.ca", path); + } + else if (!osStrcasecmp(filename, "client.der")) + { + TRACE_INFO("Set client.der to %s\r\n", path); + settings_set_string("core.client_cert.file.crt", path); + } + else if (!osStrcasecmp(filename, "private.der")) + { + TRACE_INFO("Set private.der to %s\r\n", path); + settings_set_string("core.client_cert.file.key", path); + } + else + { + TRACE_INFO("Unknown file type %s\r\n", filename); + } + + free(path); +} + +error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri) +{ + uint8_t data[8192]; + + if (sizeof(data) <= connection->request.byteCount) + { + TRACE_ERROR("Body size %zu bigger than buffer size %zu bytes", connection->request.byteCount, sizeof(data)); + return NO_ERROR; + } + + uint_t statusCode = 500; + char message[128]; + const char *rootPath = settings_get_string("core.certdir"); + + if (rootPath == NULL || !fsDirExists(rootPath)) + { + statusCode = 500; + snprintf(message, sizeof(message), "core.certdir not set to a valid path"); + TRACE_ERROR("core.certdir not set to a valid path\r\n"); + } + else + { + switch (parse_multipart_content(connection, rootPath, message, sizeof(message), &fileUploaded)) + { + case NO_ERROR: + statusCode = 200; + snprintf(message, sizeof(message), "OK"); + break; + default: + statusCode = 500; + break; + } + } + + httpPrepareHeader(connection, "text/plain; charset=utf-8", osStrlen(message)); + connection->response.statusCode = statusCode; + + return httpWriteResponse(connection, message, false); +} diff --git a/src/server.c b/src/server.c index d68c15e0..24388af0 100644 --- a/src/server.c +++ b/src/server.c @@ -59,6 +59,7 @@ request_type_t request_paths[] = { /* web interface directory */ {REQ_GET, "/www", &handleWww}, /* custom API */ + {REQ_POST, "/api/uploadCert", &handleApiUploadCert}, {REQ_GET, "/api/stats", &handleApiStats}, {REQ_GET, "/api/trigger", &handleApiTrigger}, {REQ_GET, "/api/getIndex", &handleApiGetIndex}, diff --git a/src/settings.c b/src/settings.c index 26e9801d..f6314ef3 100644 --- a/src/settings.c +++ b/src/settings.c @@ -19,6 +19,7 @@ OPTION_UNSIGNED("log.level", &Settings.log.level, 4, 0, 6, "0=off - 6=verbose") /* settings for HTTPS server */ OPTION_UNSIGNED("core.server.https_port", &Settings.core.http_port, 443, 1, 65535, "HTTPS port") OPTION_UNSIGNED("core.server.http_port", &Settings.core.https_port, 80, 1, 65535, "HTTP port") +OPTION_STRING("core.certdir", &Settings.core.certdir, "certs/client", "Directory where to upload genuine client certs to") OPTION_STRING("core.server_cert.file.ca", &Settings.core.server_cert.file.ca, "certs/server/ca-root.pem", "Server CA") OPTION_STRING("core.server_cert.file.crt", &Settings.core.server_cert.file.crt, "certs/server/teddy-cert.pem", "Server certificate") From 2c7b955b32fe4f7b42e39b3ef7347a16159c8cbb Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 11:45:37 +0200 Subject: [PATCH 02/52] added primitive file management for CONTENT folder --- contrib/www/index.html | 144 ++++++++++++++++++++++ include/handler_api.h | 2 + include/settings.h | 1 + src/handler_api.c | 264 ++++++++++++++++++++++++++++++++++++++--- src/handler_cloud.c | 1 + src/server.c | 2 + src/settings.c | 1 + 7 files changed, 400 insertions(+), 15 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index 249342f3..391ace75 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -557,6 +557,149 @@

Client certificate upload

); } } + class FileViewerTile extends React.Component { + constructor(props) { + super(props); + this.state = { + path: '/', + files: [], + }; + this.fetchFileIndex = this.fetchFileIndex.bind(this); + this.uploadFile = this.uploadFile.bind(this); + this.createDirectory = this.createDirectory.bind(this); + this.fileInputRef = React.createRef(); + } + + componentDidMount() { + this.fetchFileIndex(this.state.path); + } + + async fetchFileIndex(path) { + try { + const response = await fetch(`/api/fileIndex?path=${encodeURIComponent(path)}`); + + if (response.ok) { + const files = await response.json(); + this.setState({ files, path }); + } else { + console.error('Failed to fetch file index'); + } + } catch (err) { + console.error('There was an error!', err); + } + } + + async uploadFile() { + const file = this.fileInputRef.current.files[0]; + if (!file) { + return; + } + + const formData = new FormData(); + formData.append(file.name, file); + + try { + const response = await fetch(`/api/fileUpload?path=${encodeURIComponent(this.state.path)}`, { + method: 'POST', + body: formData, + }); + + if (response.ok) { + alert('File uploaded successfully'); + this.fetchFileIndex(this.state.path); // Refresh files + } else { + alert('File upload failed'); + } + } catch (err) { + console.error('There was an error!', err); + } + } + + async createDirectory() { + const name = window.prompt('Enter the new directory name'); + if (!name) { + return; + } + + try { + const response = await fetch('/api/createDirectory', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ path: `${this.state.path}${name}` }), + }); + + if (response.ok) { + alert('Directory created successfully'); + this.fetchFileIndex(this.state.path); // Refresh files + } else { + alert('Failed to create directory'); + } + } catch (err) { + console.error('There was an error!', err); + } + } + + getParentPath(path) { + const trimmedPath = path.endsWith('/') ? path.slice(0, -1) : path; + const parts = trimmedPath.split('/'); + parts.pop(); + return parts.join('/') || '/'; + } + + render() { + return ( +
+

File Viewer

+ +

+ + + + +

+ + {this.state.path !== '/' && ( +

+ +

+ )} + +
+                            Index of {this.state.path}
+                        
+ + {this.state.files.map(({ name, date, size, isDirectory }, index) => ( +
+                                {isDirectory ? (
+                                    
+                                         { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${name}/`); }}>
+                                            {name}
+                                        
+                                        {' '.repeat(32 - name.length)}
+                                        {date}
+                                        {size}
+                                    
+                                ) : (
+                                    
+                                        {name.padEnd(32)}
+                                        {date}
+                                        {size}
+                                    
+                                )}
+                            
+ ))} + + + + +
+ ); + } + } class App extends React.Component { constructor(props) { @@ -647,6 +790,7 @@

TeddyCloud administration interface

+ diff --git a/include/handler_api.h b/include/handler_api.h index 07c3d600..df7270cc 100644 --- a/include/handler_api.h +++ b/include/handler_api.h @@ -14,3 +14,5 @@ error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri); error_t handleApiGet(HttpConnection *connection, const char_t *uri); error_t handleApiSet(HttpConnection *connection, const char_t *uri); error_t handleApiTrigger(HttpConnection *connection, const char_t *uri); +error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri); +error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri); \ No newline at end of file diff --git a/include/settings.h b/include/settings.h index edb2473b..398a7086 100644 --- a/include/settings.h +++ b/include/settings.h @@ -80,6 +80,7 @@ typedef struct uint32_t http_port; uint32_t https_port; char *certdir; + char *contentdir; settings_cert_opt_t server_cert; settings_cert_opt_t client_cert; } settings_core_t; diff --git a/src/handler_api.c b/src/handler_api.c index c34c1365..15401013 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -343,6 +343,178 @@ error_t handleApiSet(HttpConnection *connection, const char_t *uri) return httpWriteResponse(connection, response, false); } +int urldecode(char *dest, const char *src) +{ + char a, b; + while (*src) + { + if ((*src == '%') && + ((a = src[1]) && (b = src[2])) && + (isxdigit(a) && isxdigit(b))) + { + if (a >= 'a') + a -= 'a' - 'A'; + if (a >= 'A') + a -= ('A' - 10); + else + a -= '0'; + if (b >= 'a') + b -= 'a' - 'A'; + if (b >= 'A') + b -= ('A' - 10); + else + b -= '0'; + *dest++ = 16 * a + b; + src += 3; + } + else if (*src == '+') + { + *dest++ = ' '; + src++; + } + else + { + *dest++ = *src++; + } + } + *dest++ = '\0'; + return dest - src; +} + +bool queryGet(const char *query, const char *key, char *data, size_t data_len) +{ + const char *q = query; + size_t key_len = strlen(key); + while ((q = strstr(q, key))) + { + if (q[key_len] == '=') + { + // Found the key, let's start copying the value + q += key_len + 1; // Skip past the key and the '=' + char buffer[1024]; // Temporary buffer for decoding + char *b = buffer; + while (*q && *q != '&') + { + if (b - buffer < sizeof(buffer) - 1) + { // Prevent buffer overflow + *b++ = *q++; + } + else + { + // The value is too long, truncate it + break; + } + } + *b = '\0'; // Null-terminate the buffer + urldecode(data, buffer); // Decode and copy the value + return true; + } + q += key_len; // Skip past the key + } + return false; // Key not found +} + +error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri) +{ + char *query = connection->request.queryString; + + const char *rootPath = settings_get_string("core.contentdir"); + + if (rootPath == NULL || !fsDirExists(rootPath)) + { + TRACE_ERROR("core.certdir not set to a valid path\r\n"); + return ERROR_FAILURE; + } + TRACE_INFO("Query: '%s'\r\n", query); + + char path[128]; + + if (!queryGet(connection->request.queryString, "path", path, sizeof(path))) + { + strcpy(path, "/"); + } + if (strstr(path, "..")) + { + TRACE_INFO("Path does not allow '..': '%s'\r\n", query); + strcpy(path, "/"); + } + char pathAbsolute[256]; + + strcpy(pathAbsolute, rootPath); + strcat(pathAbsolute, "/"); + strcat(pathAbsolute, path); + + int pos = 0; + char *json = strdup("["); + FsDir *dir = fsOpenDir(pathAbsolute); + + json = realloc(json, osStrlen(json) + 128); + + while (true) + { + char buf[1024]; + FsDirEntry entry; + + if (fsReadDir(dir, &entry) != NO_ERROR) + { + fsCloseDir(dir); + break; + } + + if (!osStrcmp(entry.name, ".") || !osStrcmp(entry.name, "..")) + { + continue; + } + + if (pos != 0) + { + strcat(json, ","); + } + char dateString[64]; + + osSprintf(dateString, " %04" PRIu16 "-%02" PRIu8 "-%02" PRIu8 ", %02" PRIu8 ":%02" PRIu8 ":%02" PRIu8, + entry.modified.year, entry.modified.month, entry.modified.day, + entry.modified.hours, entry.modified.minutes, entry.modified.seconds); + + sprintf(buf, "{\"name\": \"%s\", \"date\": \"%s\", \"size\": \"%d\", \"isDirectory\": %s }", + entry.name, dateString, entry.size, (entry.attributes & FS_FILE_ATTR_DIRECTORY) ? "true" : "false"); + + json = realloc(json, osStrlen(json) + osStrlen(buf) + 10); + strcat(json, buf); + + pos++; + } + strcat(json, "]"); + httpInitResponseHeader(connection); + connection->response.contentType = "text/json"; + connection->response.contentLength = osStrlen(json); + + error_t error = httpWriteHeader(connection); + if (error != NO_ERROR) + { + free(json); + TRACE_ERROR("Failed to send header\r\n"); + return error; + } + + error = httpWriteStream(connection, json, connection->response.contentLength); + free(json); + if (error != NO_ERROR) + { + TRACE_ERROR("Failed to send header\r\n"); + return error; + } + + error = httpCloseStream(connection); + if (error != NO_ERROR) + { + TRACE_ERROR("Failed to close: %d\r\n", error); + return error; + } + + return NO_ERROR; +} + error_t handleApiStats(HttpConnection *connection, const char_t *uri) { char *json = strdup("{\"stats\": ["); @@ -464,7 +636,7 @@ int find_string(const void *haystack, size_t haystack_len, size_t haystack_start return -1; } -error_t parse_multipart_content(HttpConnection *connection, const char *rootPath, char *message, size_t message_max, void (*fileUploaded)(const char *)) +error_t parse_multipart_content(HttpConnection *connection, const char *rootPath, char *message, size_t message_max, void (*fileCertUploaded)(const char *)) { char buffer[BUFFER_SIZE]; char filename[64]; @@ -476,7 +648,8 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath size_t leftover = 0; do { - error_t error = httpReceive(connection, &buffer[leftover], DATA_SIZE - leftover, &packet_size, 0x00); + error_t error = httpReceive(connection, &buffer[leftover], DATA_SIZE - leftover, &packet_size, SOCKET_FLAG_DONT_WAIT); + bool partial = (DATA_SIZE - leftover) != packet_size; if (error != NO_ERROR) { TRACE_ERROR("httpReceive failed\r\n"); @@ -532,7 +705,9 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath case PARSE_BODY: { - int data_end = find_string(buffer, payload_size - SAVE_SIZE, 0, boundary); + int searchLen = (partial || payload_size <= SAVE_SIZE) ? payload_size : payload_size - SAVE_SIZE; + + int data_end = find_string(buffer, searchLen, 0, boundary); if (data_end >= 0) { // We've found a boundary, let's finish up the current file @@ -545,9 +720,9 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath file = NULL; TRACE_INFO("Received file '%s'\r\n", filename); - if (fileUploaded) + if (fileCertUploaded) { - fileUploaded(filename); + fileCertUploaded(filename); } if (strncmp(&buffer[data_end + strlen(boundary)], "--", 2) == 0) @@ -593,7 +768,7 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath return NO_ERROR; } -void fileUploaded(const char *filename) +void fileCertUploaded(const char *filename) { /* rootpath must be valid, which is ensured by upload handler */ const char *rootPath = settings_get_string("core.certdir"); @@ -626,14 +801,6 @@ void fileUploaded(const char *filename) error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri) { - uint8_t data[8192]; - - if (sizeof(data) <= connection->request.byteCount) - { - TRACE_ERROR("Body size %zu bigger than buffer size %zu bytes", connection->request.byteCount, sizeof(data)); - return NO_ERROR; - } - uint_t statusCode = 500; char message[128]; const char *rootPath = settings_get_string("core.certdir"); @@ -646,7 +813,7 @@ error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri) } else { - switch (parse_multipart_content(connection, rootPath, message, sizeof(message), &fileUploaded)) + switch (parse_multipart_content(connection, rootPath, message, sizeof(message), &fileCertUploaded)) { case NO_ERROR: statusCode = 200; @@ -663,3 +830,70 @@ error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri) return httpWriteResponse(connection, message, false); } + +void fileUploaded(const char *filename) +{ + TRACE_INFO("Received new file '%s'\r\n", filename); +} + +error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri) +{ + char *query = connection->request.queryString; + + const char *rootPath = settings_get_string("core.contentdir"); + + if (rootPath == NULL || !fsDirExists(rootPath)) + { + TRACE_ERROR("core.certdir not set to a valid path\r\n"); + return ERROR_FAILURE; + } + TRACE_INFO("Query: '%s'\r\n", query); + + char path[128]; + + if (!queryGet(connection->request.queryString, "path", path, sizeof(path))) + { + strcpy(path, "/"); + } + if (strstr(path, "..")) + { + TRACE_INFO("Path does not allow '..': '%s'\r\n", query); + strcpy(path, "/"); + } + char pathAbsolute[256]; + + strcpy(pathAbsolute, rootPath); + strcat(pathAbsolute, "/"); + strcat(pathAbsolute, path); + + uint_t statusCode = 500; + char message[256]; + + snprintf(message, sizeof(message), "OK"); + + if (!fsDirExists(pathAbsolute)) + { + statusCode = 500; + snprintf(message, sizeof(message), "invalid path: '%s'", path); + TRACE_ERROR("invalid path: '%s'\r\n", path); + } + else + { + switch (parse_multipart_content(connection, pathAbsolute, message, sizeof(message), &fileUploaded)) + { + case NO_ERROR: + statusCode = 200; + break; + default: + statusCode = 500; + break; + } + } + + httpPrepareHeader(connection, "text/plain; charset=utf-8", osStrlen(message)); + connection->response.statusCode = statusCode; + + TRACE_INFO("chunked: '%s'\r\n", connection->response.chunkedEncoding ? "true" : "false"); + + return httpWriteResponse(connection, message, false); +} diff --git a/src/handler_cloud.c b/src/handler_cloud.c index 7fe23030..be8be74a 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -296,6 +296,7 @@ error_t httpWriteResponse(HttpConnection *connection, void *data, bool_t freeMem return NO_ERROR; } + void httpPrepareHeader(HttpConnection *connection, const void *contentType, size_t contentLength) { httpInitResponseHeader(connection); diff --git a/src/server.c b/src/server.c index 1f31272e..96819fac 100644 --- a/src/server.c +++ b/src/server.c @@ -60,6 +60,8 @@ request_type_t request_paths[] = { {REQ_GET, "/www", &handleWww}, /* custom API */ {REQ_POST, "/api/uploadCert", &handleApiUploadCert}, + {REQ_POST, "/api/fileUpload", &handleApiFileUpload}, + {REQ_GET, "/api/fileIndex", &handleApiFileIndex}, {REQ_GET, "/api/stats", &handleApiStats}, {REQ_GET, "/api/trigger", &handleApiTrigger}, {REQ_GET, "/api/getIndex", &handleApiGetIndex}, diff --git a/src/settings.c b/src/settings.c index acc7b625..a36bffcc 100644 --- a/src/settings.c +++ b/src/settings.c @@ -20,6 +20,7 @@ OPTION_UNSIGNED("log.level", &Settings.log.level, 4, 0, 6, "0=off - 6=verbose") OPTION_UNSIGNED("core.server.https_port", &Settings.core.http_port, 443, 1, 65535, "HTTPS port") OPTION_UNSIGNED("core.server.http_port", &Settings.core.https_port, 80, 1, 65535, "HTTP port") OPTION_STRING("core.certdir", &Settings.core.certdir, "certs/client", "Directory where to upload genuine client certs to") +OPTION_STRING("core.contentdir", &Settings.core.contentdir, "www/CONTENT", "Directory where cloud content is placed") OPTION_STRING("core.server_cert.file.ca", &Settings.core.server_cert.file.ca, "certs/server/ca-root.pem", "Server CA") OPTION_STRING("core.server_cert.file.crt", &Settings.core.server_cert.file.crt, "certs/server/teddy-cert.pem", "Server certificate") From a591977d2e83fb2c3b2ddb6eb625a96ec7d1643b Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 11:45:57 +0200 Subject: [PATCH 03/52] start valgrind for make auto --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 0f47407e..b6dc001b 100644 --- a/Makefile +++ b/Makefile @@ -244,7 +244,7 @@ auto: echo "[ ${CYAN}AUTO${NC} ] Build"; \ make --no-print-directory -j; \ screen -S teddycloud_auto -dm; \ - screen -S teddycloud_auto -X screen bash -c '$(BINARY); exec sh'; \ + screen -S teddycloud_auto -X screen bash -c 'valgrind $(BINARY); exec sh'; \ while true; do \ modified_time=$$(stat -c "%Y" $(SOURCES) $(HEADERS) $(PROTO_FILES) $(THIS_MAKEFILE) | sort -r | head -n 1); \ if [ "$$modified_time" -gt "$$last_build_time" ]; then \ @@ -253,7 +253,7 @@ auto: echo "[ ${CYAN}AUTO${NC} ] Rebuild"; \ make --no-print-directory -j; \ last_build_time=$$(date +%s); \ - screen -S teddycloud_auto -X screen bash -c '$(BINARY); exec sh'; \ + screen -S teddycloud_auto -X screen bash -c 'valgrind $(BINARY); exec sh'; \ echo "[ ${CYAN}AUTO${NC} ] Done"; \ fi; \ sleep 1; \ From 6fbe792e5722bf7d1416d96783a331483981b9ec Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 11:19:42 +0000 Subject: [PATCH 04/52] passthrough queryString --- include/cloud_request.h | 6 ++--- include/handler_api.h | 16 ++++++------- include/handler_cloud.h | 16 ++++++------- include/handler_reverse.h | 2 +- src/cloud_request.c | 11 +++++---- src/handler_api.c | 16 ++++++------- src/handler_cloud.c | 50 ++++++++++++++++++++------------------- src/handler_reverse.c | 6 +++-- src/main.c | 4 ++-- src/server.c | 7 +++--- 10 files changed, 70 insertions(+), 64 deletions(-) diff --git a/include/cloud_request.h b/include/cloud_request.h index 0c4b6595..5b1ace8c 100644 --- a/include/cloud_request.h +++ b/include/cloud_request.h @@ -13,8 +13,8 @@ typedef struct void (*disconnect)(void *src_ctx, void *cloud_ctx); } req_cbr_t; -int_t cloud_request_get(const char *server, int port, const char *uri, const uint8_t *hash, req_cbr_t *cbr); -int_t cloud_request_post(const char *server, int port, const char *uri, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr); -int_t cloud_request(const char *server, int port, bool https, const char *uri, const char *method, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr); +int_t cloud_request_get(const char *server, int port, const char *uri, const char *queryString, const uint8_t *hash, req_cbr_t *cbr); +int_t cloud_request_post(const char *server, int port, const char *uri, const char *queryString, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr); +int_t cloud_request(const char *server, int port, bool https, const char *uri, const char *queryString, const char *method, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr); #endif diff --git a/include/handler_api.h b/include/handler_api.h index df7270cc..69239db4 100644 --- a/include/handler_api.h +++ b/include/handler_api.h @@ -8,11 +8,11 @@ #include "http/http_server_misc.h" void stats_update(const char *item, int count); -error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri); -error_t handleApiStats(HttpConnection *connection, const char_t *uri); -error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri); -error_t handleApiGet(HttpConnection *connection, const char_t *uri); -error_t handleApiSet(HttpConnection *connection, const char_t *uri); -error_t handleApiTrigger(HttpConnection *connection, const char_t *uri); -error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri); -error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri); \ No newline at end of file +error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiStats(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiGet(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiSet(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiTrigger(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri, const char_t *queryString); \ No newline at end of file diff --git a/include/handler_cloud.h b/include/handler_cloud.h index c8c54755..4ad1833d 100644 --- a/include/handler_cloud.h +++ b/include/handler_cloud.h @@ -24,11 +24,11 @@ tonie_info_t getTonieInfo(char contentPath[30]); error_t httpWriteResponse(HttpConnection *connection, void *data, bool_t freeMemory); void httpPrepareHeader(HttpConnection *connection, const void *contentType, size_t contentLength); -error_t handleCloudTime(HttpConnection *connection, const char_t *uri); -error_t handleCloudOTA(HttpConnection *connection, const char_t *uri); -error_t handleCloudLog(HttpConnection *connection, const char_t *uri); -error_t handleCloudClaim(HttpConnection *connection, const char_t *uri); -error_t handleCloudContent(HttpConnection *connection, const char_t *uri, bool_t noPassword); -error_t handleCloudContentV1(HttpConnection *connection, const char_t *uri); -error_t handleCloudContentV2(HttpConnection *connection, const char_t *uri); -error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri); \ No newline at end of file +error_t handleCloudTime(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudOTA(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudLog(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudClaim(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const char_t *queryString, bool_t noPassword); +error_t handleCloudContentV1(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudContentV2(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, const char_t *queryString); \ No newline at end of file diff --git a/include/handler_reverse.h b/include/handler_reverse.h index 53de5c83..bd0b5c2c 100644 --- a/include/handler_reverse.h +++ b/include/handler_reverse.h @@ -13,4 +13,4 @@ #define PROX_STATUS_BODY 3 #define PROX_STATUS_DONE 4 -error_t handleReverse(HttpConnection *connection, const char_t *uri); +error_t handleReverse(HttpConnection *connection, const char_t *uri, const char_t *queryString); diff --git a/src/cloud_request.c b/src/cloud_request.c index 5b5ef18a..0bee413f 100644 --- a/src/cloud_request.c +++ b/src/cloud_request.c @@ -73,17 +73,17 @@ error_t httpClientTlsInitCallback(HttpClientContext *context, return NO_ERROR; } -int_t cloud_request_get(const char *server, int port, const char *uri, const uint8_t *hash, req_cbr_t *cbr) +int_t cloud_request_get(const char *server, int port, const char *uri, const char *queryString, const uint8_t *hash, req_cbr_t *cbr) { - return cloud_request(server, port, true, uri, "GET", NULL, 0, hash, cbr); + return cloud_request(server, port, true, uri, queryString, "GET", NULL, 0, hash, cbr); } -int_t cloud_request_post(const char *server, int port, const char *uri, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr) +int_t cloud_request_post(const char *server, int port, const char *uri, const char *queryString, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr) { - return cloud_request(server, port, true, uri, "POST", body, bodyLen, hash, cbr); + return cloud_request(server, port, true, uri, queryString, "POST", body, bodyLen, hash, cbr); } -int_t cloud_request(const char *server, int port, bool https, const char *uri, const char *method, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr) +int_t cloud_request(const char *server, int port, bool https, const char *uri, const char *queryString, const char *method, const uint8_t *body, size_t bodyLen, const uint8_t *hash, req_cbr_t *cbr) { if (!settings_get_bool("cloud.enabled")) { @@ -169,6 +169,7 @@ int_t cloud_request(const char *server, int port, bool https, const char *uri, c httpClientCreateRequest(&httpClientContext); httpClientSetMethod(&httpClientContext, method); httpClientSetUri(&httpClientContext, uri); + httpClientSetQueryString(&httpClientContext, queryString); if (body && bodyLen > 0) { error = httpClientSetContentLength(&httpClientContext, bodyLen); diff --git a/src/handler_api.c b/src/handler_api.c index 15401013..e66a0df9 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -24,7 +24,7 @@ typedef enum #define SAVE_SIZE 80 #define BUFFER_SIZE (DATA_SIZE + SAVE_SIZE) -error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri) +error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri, const char_t *queryString) { char *json = strdup("{\"options\": ["); int pos = 0; @@ -116,7 +116,7 @@ error_t handleApiGetIndex(HttpConnection *connection, const char_t *uri) return NO_ERROR; } -error_t handleApiTrigger(HttpConnection *connection, const char_t *uri) +error_t handleApiTrigger(HttpConnection *connection, const char_t *uri, const char_t *queryString) { const char *item = &uri[5]; char response[256]; @@ -178,7 +178,7 @@ error_t handleApiTrigger(HttpConnection *connection, const char_t *uri) return NO_ERROR; } -error_t handleApiGet(HttpConnection *connection, const char_t *uri) +error_t handleApiGet(HttpConnection *connection, const char_t *uri, const char_t *queryString) { const char *item = &uri[5 + 3 + 1]; @@ -239,7 +239,7 @@ error_t handleApiGet(HttpConnection *connection, const char_t *uri) return NO_ERROR; } -error_t handleApiSet(HttpConnection *connection, const char_t *uri) +error_t handleApiSet(HttpConnection *connection, const char_t *uri, const char_t *queryString) { char response[256]; sprintf(response, "ERROR"); @@ -414,7 +414,7 @@ bool queryGet(const char *query, const char *key, char *data, size_t data_len) return false; // Key not found } -error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri) +error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri, const char_t *queryString) { char *query = connection->request.queryString; @@ -515,7 +515,7 @@ error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri) return NO_ERROR; } -error_t handleApiStats(HttpConnection *connection, const char_t *uri) +error_t handleApiStats(HttpConnection *connection, const char_t *uri, const char_t *queryString) { char *json = strdup("{\"stats\": ["); int pos = 0; @@ -799,7 +799,7 @@ void fileCertUploaded(const char *filename) free(path); } -error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri) +error_t handleApiUploadCert(HttpConnection *connection, const char_t *uri, const char_t *queryString) { uint_t statusCode = 500; char message[128]; @@ -836,7 +836,7 @@ void fileUploaded(const char *filename) TRACE_INFO("Received new file '%s'\r\n", filename); } -error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri) +error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri, const char_t *queryString) { char *query = connection->request.queryString; diff --git a/src/handler_cloud.c b/src/handler_cloud.c index be8be74a..2c653f93 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -40,6 +40,7 @@ typedef enum typedef struct { const char_t *uri; + const char_t *queryString; cloudapi_t api; char_t *buffer; size_t bufferPos; @@ -207,11 +208,12 @@ static void cbrCloudServerDiscoPassthrough(void *src_ctx, void *cloud_ctx) ctx->status = PROX_STATUS_DONE; } -static req_cbr_t getCloudCbr(HttpConnection *connection, const char_t *uri, cloudapi_t api, cbr_ctx_t *ctx); +static req_cbr_t getCloudCbr(HttpConnection *connection, const char_t *uri, const char_t *queryString, cloudapi_t api, cbr_ctx_t *ctx); -static req_cbr_t getCloudCbr(HttpConnection *connection, const char_t *uri, cloudapi_t api, cbr_ctx_t *ctx) +static req_cbr_t getCloudCbr(HttpConnection *connection, const char_t *uri, const char_t *queryString, cloudapi_t api, cbr_ctx_t *ctx) { ctx->uri = uri; + ctx->queryString = queryString; ctx->api = api; ctx->buffer = NULL; ctx->bufferPos = 0; @@ -306,7 +308,7 @@ void httpPrepareHeader(HttpConnection *connection, const void *contentType, size connection->response.contentLength = contentLength; } -error_t handleCloudTime(HttpConnection *connection, const char_t *uri) +error_t handleCloudTime(HttpConnection *connection, const char_t *uri, const char_t *queryString) { TRACE_INFO(" >> respond with current time\r\n"); @@ -319,8 +321,8 @@ error_t handleCloudTime(HttpConnection *connection, const char_t *uri) else { cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, V1_TIME, &ctx); - if (!cloud_request_get(NULL, 0, uri, NULL, &cbr)) + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_TIME, &ctx); + if (!cloud_request_get(NULL, 0, uri, queryString, NULL, &cbr)) { return NO_ERROR; } @@ -334,7 +336,7 @@ error_t handleCloudTime(HttpConnection *connection, const char_t *uri) return httpWriteResponse(connection, response, false); } -error_t handleCloudOTA(HttpConnection *connection, const char_t *uri) +error_t handleCloudOTA(HttpConnection *connection, const char_t *uri, const char_t *queryString) { error_t ret = NO_ERROR; char *query = strdup(connection->request.queryString); @@ -360,8 +362,8 @@ error_t handleCloudOTA(HttpConnection *connection, const char_t *uri) if (settings_get_bool("cloud.enabled") && settings_get_bool("cloud.enableV1Ota")) { cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, V1_OTA, &ctx); - cloud_request_get(NULL, 0, uri, NULL, &cbr); + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_OTA, &ctx); + cloud_request_get(NULL, 0, uri, queryString, NULL, &cbr); } else { @@ -417,18 +419,18 @@ void markCustomTonie(tonie_info_t *tonieInfo) TRACE_INFO("Marked custom tonie with file %s\r\n", contentPathDot); } -error_t handleCloudLog(HttpConnection *connection, const char_t *uri) +error_t handleCloudLog(HttpConnection *connection, const char_t *uri, const char_t *queryString) { if (settings_get_bool("cloud.enabled") && settings_get_bool("cloud.enableV1Log")) { cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, V1_LOG, &ctx); - cloud_request_get(NULL, 0, uri, NULL, &cbr); + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_LOG, &ctx); + cloud_request_get(NULL, 0, uri, queryString, NULL, &cbr); } return NO_ERROR; } -error_t handleCloudClaim(HttpConnection *connection, const char_t *uri) +error_t handleCloudClaim(HttpConnection *connection, const char_t *uri, const char_t *queryString) { char ruid[17]; uint8_t *token = connection->private.authentication_token; @@ -459,8 +461,8 @@ error_t handleCloudClaim(HttpConnection *connection, const char_t *uri) } cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, V1_CLAIM, &ctx); - cloud_request_get(NULL, 0, uri, token, &cbr); + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_CLAIM, &ctx); + cloud_request_get(NULL, 0, uri, queryString, token, &cbr); return NO_ERROR; } @@ -472,7 +474,7 @@ static void strupr(char input[]) } } -error_t handleCloudContent(HttpConnection *connection, const char_t *uri, bool_t noPassword) +error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const char_t *queryString, bool_t noPassword) { char ruid[17]; uint8_t *token = connection->private.authentication_token; @@ -532,21 +534,21 @@ error_t handleCloudContent(HttpConnection *connection, const char_t *uri, bool_t { connection->response.keepAlive = true; cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, V2_CONTENT, &ctx); - cloud_request_get(NULL, 0, uri, token, &cbr); + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V2_CONTENT, &ctx); + cloud_request_get(NULL, 0, uri, queryString, token, &cbr); } } return NO_ERROR; } -error_t handleCloudContentV1(HttpConnection *connection, const char_t *uri) +error_t handleCloudContentV1(HttpConnection *connection, const char_t *uri, const char_t *queryString) { - return handleCloudContent(connection, uri, TRUE); + return handleCloudContent(connection, uri, queryString, TRUE); } -error_t handleCloudContentV2(HttpConnection *connection, const char_t *uri) +error_t handleCloudContentV2(HttpConnection *connection, const char_t *uri, const char_t *queryString) { if (connection->request.auth.found && connection->request.auth.mode == HTTP_AUTH_MODE_DIGEST) { - return handleCloudContent(connection, uri, FALSE); + return handleCloudContent(connection, uri, queryString, FALSE); } else { @@ -555,7 +557,7 @@ error_t handleCloudContentV2(HttpConnection *connection, const char_t *uri) return NO_ERROR; } -error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri) +error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, const char_t *queryString) { uint8_t data[BODY_BUFFER_SIZE]; size_t size; @@ -649,8 +651,8 @@ error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri) osFreeMem(freshResp.tonie_marked); cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, V1_FRESHNESS_CHECK, &ctx); - if (!cloud_request_post(NULL, 0, "/v1/freshness-check", data, dataLen, NULL, &cbr)) + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_FRESHNESS_CHECK, &ctx); + if (!cloud_request_post(NULL, 0, "/v1/freshness-check", queryString, data, dataLen, NULL, &cbr)) { return NO_ERROR; } diff --git a/src/handler_reverse.c b/src/handler_reverse.c index 0f507a20..cd0f6a49 100644 --- a/src/handler_reverse.c +++ b/src/handler_reverse.c @@ -66,7 +66,7 @@ static void cbrCloudServerDiscoPassthrough(void *src_ctx, void *cloud_ctx) ctx->status = PROX_STATUS_DONE; } -error_t handleReverse(HttpConnection *connection, const char_t *uri) +error_t handleReverse(HttpConnection *connection, const char_t *uri, const char_t *queryString) { cbr_ctx_t ctx = { .status = PROX_STATUS_IDLE, @@ -83,7 +83,9 @@ error_t handleReverse(HttpConnection *connection, const char_t *uri) /* here call cloud request, which has to get extended for cbr for header fields and content packets */ uint8_t *token = connection->private.authentication_token; - error_t error = cloud_request_get(NULL, 0, &uri[8], token, &cbr); + + // TODO POST + error_t error = cloud_request_get(NULL, 0, &uri[8], queryString, token, &cbr); if (error != NO_ERROR) { TRACE_ERROR("cloud_request_get() failed\r\n"); diff --git a/src/main.c b/src/main.c index 3c63376c..27bb7011 100644 --- a/src/main.c +++ b/src/main.c @@ -140,7 +140,7 @@ int_t main(int argc, char *argv[]) settings_set_bool("cloud.enabled", true); - error = cloud_request(hostname, port, protocol == PROT_HTTPS, uri, "GET", NULL, 0, hash, NULL); + error = cloud_request(hostname, port, protocol == PROT_HTTPS, uri, "", "GET", NULL, 0, hash, NULL); free(hostname); free(uri); @@ -172,7 +172,7 @@ int_t main(int argc, char *argv[]) TRACE_WARNING("\r\n"); - error = cloud_request_get(NULL, 0, request, hash, NULL); + error = cloud_request_get(NULL, 0, request, "", hash, NULL); } } else diff --git a/src/server.c b/src/server.c index 96819fac..13766f97 100644 --- a/src/server.c +++ b/src/server.c @@ -44,10 +44,10 @@ typedef struct { enum eRequestMethod method; char *path; - error_t (*handler)(HttpConnection *connection, const char_t *uri); + error_t (*handler)(HttpConnection *connection, const char_t *uri, const char_t *queryString); } request_type_t; -error_t handleWww(HttpConnection *connection, const char_t *uri) +error_t handleWww(HttpConnection *connection, const char_t *uri, const char_t *queryString) { return httpSendResponse(connection, &uri[4]); } @@ -63,6 +63,7 @@ request_type_t request_paths[] = { {REQ_POST, "/api/fileUpload", &handleApiFileUpload}, {REQ_GET, "/api/fileIndex", &handleApiFileIndex}, {REQ_GET, "/api/stats", &handleApiStats}, + {REQ_GET, "/api/trigger", &handleApiTrigger}, {REQ_GET, "/api/getIndex", &handleApiGetIndex}, {REQ_GET, "/api/get/", &handleApiGet}, @@ -224,7 +225,7 @@ httpServerRequestCallback(HttpConnection *connection, size_t pathLen = osStrlen(request_paths[i].path); if (!osStrncmp(request_paths[i].path, uri, pathLen) && ((request_paths[i].method == REQ_ANY) || (request_paths[i].method == REQ_GET && !osStrcasecmp(connection->request.method, "GET")) || (request_paths[i].method == REQ_POST && !osStrcasecmp(connection->request.method, "POST")))) { - return (*request_paths[i].handler)(connection, uri); + return (*request_paths[i].handler)(connection, uri, connection->request.queryString); } } From f6a67c92acba2ce30659488abae5c43358e04935 Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 12:02:40 +0000 Subject: [PATCH 05/52] add cloud reset api --- include/handler_cloud.h | 3 ++- include/settings.h | 1 + src/handler_cloud.c | 22 +++++++++++++++++++++- src/server.c | 3 ++- src/settings.c | 1 + 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/include/handler_cloud.h b/include/handler_cloud.h index 4ad1833d..5ea0b372 100644 --- a/include/handler_cloud.h +++ b/include/handler_cloud.h @@ -31,4 +31,5 @@ error_t handleCloudClaim(HttpConnection *connection, const char_t *uri, const ch error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const char_t *queryString, bool_t noPassword); error_t handleCloudContentV1(HttpConnection *connection, const char_t *uri, const char_t *queryString); error_t handleCloudContentV2(HttpConnection *connection, const char_t *uri, const char_t *queryString); -error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, const char_t *queryString); \ No newline at end of file +error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleCloudReset(HttpConnection *connection, const char_t *uri, const char_t *queryString); \ No newline at end of file diff --git a/include/settings.h b/include/settings.h index 398a7086..bc281039 100644 --- a/include/settings.h +++ b/include/settings.h @@ -24,6 +24,7 @@ typedef struct char *remote_hostname; uint32_t remote_port; bool enableV1Claim; + bool enableV1CloudReset; bool enableV1FreshnessCheck; bool enableV1Log; bool enableV1Time; diff --git a/src/handler_cloud.c b/src/handler_cloud.c index 2c653f93..ae95074a 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -25,7 +25,8 @@ typedef enum V1_CLAIM, V2_CONTENT, V1_FRESHNESS_CHECK, - V1_LOG + V1_LOG, + V1_CLOUDRESET } cloudapi_t; typedef enum @@ -676,4 +677,23 @@ error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, return NO_ERROR; } return NO_ERROR; +} + +error_t handleCloudReset(HttpConnection *connection, const char_t *uri, const char_t *queryString) +{ + // EMPTY POST REQUEST? + if (settings_get_bool("cloud.enabled") && settings_get_bool("cloud.enableV1CloudReset")) + { + cbr_ctx_t ctx; + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_CLOUDRESET, &ctx); + cloud_request_post(NULL, 0, uri, queryString, NULL, 0, NULL, &cbr); + } + else + { + // TODO + httpPrepareHeader(connection, "application/json; charset=utf-8", 2); + connection->response.keepAlive = false; + return httpWriteResponse(connection, "{}", false); + } + return NO_ERROR; } \ No newline at end of file diff --git a/src/server.c b/src/server.c index 13766f97..97dfe4aa 100644 --- a/src/server.c +++ b/src/server.c @@ -75,7 +75,8 @@ request_type_t request_paths[] = { {REQ_GET, "/v1/content", &handleCloudContentV1}, {REQ_GET, "/v2/content", &handleCloudContentV2}, {REQ_POST, "/v1/freshness-check", &handleCloudFreshnessCheck}, - {REQ_POST, "/v1/log", &handleCloudLog}}; + {REQ_POST, "/v1/log", &handleCloudLog}, + {REQ_POST, "/v1/cloud-reset", &handleCloudReset}}; char_t *ipv4AddrToString(Ipv4Addr ipAddr, char_t *str) { diff --git a/src/settings.c b/src/settings.c index a36bffcc..9de4650b 100644 --- a/src/settings.c +++ b/src/settings.c @@ -52,6 +52,7 @@ OPTION_BOOL("cloud.enabled", &Settings.cloud.enabled, FALSE, "Generally enable c OPTION_STRING("cloud.hostname", &Settings.cloud.remote_hostname, "prod.de.tbs.toys", "Hostname of remote cloud server") OPTION_UNSIGNED("cloud.port", &Settings.cloud.remote_port, 443, 1, 65535, "Port of remote cloud server") OPTION_BOOL("cloud.enableV1Claim", &Settings.cloud.enableV1Claim, TRUE, "Pass 'claim' queries to boxine cloud") +OPTION_BOOL("cloud.enableV1CloudReset", &Settings.cloud.enableV1CloudReset, FALSE, "Pass 'cloudReset' queries to boxine cloud") OPTION_BOOL("cloud.enableV1FreshnessCheck", &Settings.cloud.enableV1FreshnessCheck, TRUE, "Pass 'freshnessCheck' queries to boxine cloud") OPTION_BOOL("cloud.enableV1Log", &Settings.cloud.enableV1Log, FALSE, "Pass 'log' queries to boxine cloud") OPTION_BOOL("cloud.enableV1Time", &Settings.cloud.enableV1Time, FALSE, "Pass 'time' queries to boxine cloud") From e0cbed8cd0cfcfd3d4fdceda3b5fd434c72ae38b Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 12:12:57 +0000 Subject: [PATCH 06/52] remove todo --- src/handler_cloud.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/handler_cloud.c b/src/handler_cloud.c index ae95074a..e5c63dc9 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -690,7 +690,6 @@ error_t handleCloudReset(HttpConnection *connection, const char_t *uri, const ch } else { - // TODO httpPrepareHeader(connection, "application/json; charset=utf-8", 2); connection->response.keepAlive = false; return httpWriteResponse(connection, "{}", false); From 66c9702c1860aec26ea26f6cf356f57d6e0eaa0f Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 14:53:32 +0000 Subject: [PATCH 07/52] List of audio sounds --- wiki/audio.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 wiki/audio.md diff --git a/wiki/audio.md b/wiki/audio.md new file mode 100644 index 00000000..32ae4101 --- /dev/null +++ b/wiki/audio.md @@ -0,0 +1,27 @@ +|Folder|Language|File|Animal|Short|Long| +|-|-|-|-|-|-| +|00000001|DE|00000000||Jingle|Startup sound| +|00000001|DE|00000001||Tada|| +|00000001|DE|00000002||Tadum MhhMhhh|| +|00000001|DE|00000003||Tadududu|Low battery?| +|00000001|DE|00000004||Empty|| +|00000001|DE|00000005||Empty|| +|00000001|DE|00000006||Clingclong|Download complete| +|00000001|DE|00000007||Offlinemode on|Der Offlinemodus ist jetzt aktiviert| +|00000001|DE|00000008||Offlinemode off|Der Offlinemodus wurde beendet| +|00000001|DE|00000009||Low battery|Ohhoh, mein Akku ist leer und ich muss abschalten. Bitte stell mich auf die Ladestation.| +|00000001|DE|0000000A|Koalabär||Ohh oh, das hat nicht geklappt. Ich befinde mich gerade im Offlinemodus. Weitere Infos erhälts du unter dem Codewort Koalabär| +|00000001|DE|0000000B||Installation|Hallo, nicht erschrecken. Hier spricht deine Toniebox. Bevor es losgeht, brauche ich Hilfe bei der Installation.| +|00000001|DE|0000000C||Empty|| +|00000001|DE|0000000D||Charger|Bitte lass mich noch auf der Ladestation| +|00000001|DE|0000000E||Limit|Hallo, du hast dein Hörspiellimit für heute erreicht.| +|00000001|DE|0000000F||Network|Ohh oh, das Herunterladen wurde leider unterbrochen. Bitte überprüfe ob du noch mit dem Internet verbunden bist.| +|00000001|DE|00000010||Box ready|Ohh-ja, jetzt bin ich bereit für die Tonies. Viel Spaaaß!| +|00000001|DE|00000011|Schildkröte||Ohh oh, ich habe keine Verbindung zum Internet. Weitere Infos erhälst du unter dem Codewort Schildkröte| +|00000001|DE|00000012|Murmeltier||Ohh oh, ein Fehler. Codewort Murmeltier| +|00000001|DE|00000013||Password|Ohh oh, das hat nicht geklappt. Dein Passwort scheint wohl falsch zu sein.| +|00000001|DE|00000014|Igel||Ohh oh, ein Fehler. Codewort Igel| +|00000001|DE|00000015|Ameise||Ohh oh, ein Fehler. Codewort Ameise| +|00000001|DE|00000016|Erdmännchen||Ohh oh, ein Fehler. Codewort Erdmännchen| +|00000001|DE|00000017|Eule||Ohh oh, ein Fehler. Codewort Eule| +|00000001|DE|00000018|Elefant||Ohh oh, ein Fehler. Codewort Elefant| \ No newline at end of file From 27530a22a3139257e54ee724188e13f7370a53f0 Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 15:05:33 +0000 Subject: [PATCH 08/52] Language to folder --- wiki/audio.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wiki/audio.md b/wiki/audio.md index 32ae4101..7ebad1f7 100644 --- a/wiki/audio.md +++ b/wiki/audio.md @@ -1,3 +1,9 @@ +|Folder|Language| +|-|-| +|00000000|English (GB)| +|00000001|German| +|00000002|English (USA)| + |Folder|Language|File|Animal|Short|Long| |-|-|-|-|-|-| |00000001|DE|00000000||Jingle|Startup sound| From 7d25b3a7461efb2a3c59fffd8a09e1d89c670797 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 17:26:40 +0200 Subject: [PATCH 09/52] fixed multipart upload corner cases added directory create API --- contrib/www/index.html | 16 +-- include/handler_api.h | 3 +- src/handler_api.c | 270 ++++++++++++++++++++++++++++++++--------- src/server.c | 1 + 4 files changed, 225 insertions(+), 65 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index 391ace75..7f8a40a3 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -622,16 +622,15 @@

Client certificate upload

} try { - const response = await fetch('/api/createDirectory', { + const response = await fetch('/api/dirCreate', { method: 'POST', headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify({ path: `${this.state.path}${name}` }), + body: `${this.state.path}${name}`, }); if (response.ok) { - alert('Directory created successfully'); this.fetchFileIndex(this.state.path); // Refresh files } else { alert('Failed to create directory'); @@ -676,27 +675,28 @@

File Viewer

                                 {isDirectory ? (
                                     
-                                         { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${name}/`); }}>
+                                         { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${name} /`); }}>
                                             {name}
-                                        
+                                        
                                         {' '.repeat(32 - name.length)}
                                         {date}
                                         {size}
-                                    
+                                    
                                 ) : (
                                     
                                         {name.padEnd(32)}
                                         {date}
                                         {size}
                                     
-                                )}
+                                )
+                                }
                             
))} - + ); } } diff --git a/include/handler_api.h b/include/handler_api.h index df7270cc..5087cd3b 100644 --- a/include/handler_api.h +++ b/include/handler_api.h @@ -15,4 +15,5 @@ error_t handleApiGet(HttpConnection *connection, const char_t *uri); error_t handleApiSet(HttpConnection *connection, const char_t *uri); error_t handleApiTrigger(HttpConnection *connection, const char_t *uri); error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri); -error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri); \ No newline at end of file +error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri); +error_t handleApiDirectoryCreate(HttpConnection *connection, const char_t *uri); \ No newline at end of file diff --git a/src/handler_api.c b/src/handler_api.c index 15401013..18df7a43 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -15,6 +15,7 @@ typedef enum { + PARSE_HEADER, PARSE_FILENAME, PARSE_BODY } eMultipartState; @@ -638,49 +639,131 @@ int find_string(const void *haystack, size_t haystack_len, size_t haystack_start error_t parse_multipart_content(HttpConnection *connection, const char *rootPath, char *message, size_t message_max, void (*fileCertUploaded)(const char *)) { - char buffer[BUFFER_SIZE]; + char buffer[2 * BUFFER_SIZE]; char filename[64]; FsFile *file = NULL; - size_t packet_size; - eMultipartState state = PARSE_FILENAME; + eMultipartState state = PARSE_HEADER; char *boundary = connection->request.boundary; size_t leftover = 0; + bool fetch = true; + int save_start = 0; + int save_end = 0; + int payload_size = 0; + do { - error_t error = httpReceive(connection, &buffer[leftover], DATA_SIZE - leftover, &packet_size, SOCKET_FLAG_DONT_WAIT); - bool partial = (DATA_SIZE - leftover) != packet_size; - if (error != NO_ERROR) + if (!payload_size) { - TRACE_ERROR("httpReceive failed\r\n"); - return error; + fetch = true; } - int save_start = 0; - int save_end = packet_size; - int payload_size = leftover + packet_size; + payload_size = leftover; + if (fetch) + { + size_t packet_size; + error_t error = httpReceive(connection, &buffer[leftover], DATA_SIZE - leftover, &packet_size, SOCKET_FLAG_DONT_WAIT); + if (error != NO_ERROR) + { + TRACE_ERROR("httpReceive failed\r\n"); + return error; + } + + save_start = 0; + payload_size = leftover + packet_size; + save_end = payload_size; + leftover = 0; + + fetch = false; + } switch (state) { + case PARSE_HEADER: + { + /* when the payload starts with boundary, its a valid payload */ + int boundary_start = find_string(buffer, payload_size, 0, boundary); + if (boundary_start < 0) + { + /* if not, check for newlines that preceed */ + int data_end = find_string(buffer, payload_size, 0, "\r\n"); + if (data_end >= 0) + { + /* when found, start from there, after the newline */ + save_start = data_end + 2; + save_end = payload_size; + } + else + { + /* if not, drop most of the buffer, keeping the last few bytes */ + save_start = (payload_size > SAVE_SIZE) ? payload_size - SAVE_SIZE : 0; + save_end = payload_size; + } + } + else + { + save_start = boundary_start + strlen(boundary); + save_end = payload_size; + state = PARSE_FILENAME; + } + break; + } + case PARSE_FILENAME: { - int fn_start = find_string(buffer, payload_size - SAVE_SIZE, 0, "filename=\""); + if (payload_size < 3) + { + save_start = 0; + save_end = payload_size; + fetch = true; + break; + } + + /* when the payload starts with --, then leave */ + if (!memcmp(buffer, "--", 2)) + { + TRACE_DEBUG("Received multipart end\r\n"); + return NO_ERROR; + } + if (memcmp(buffer, "\r\n", 2)) + { + TRACE_DEBUG("No valid multipart\r\n"); + return NO_ERROR; + } + + int fn_start = find_string(buffer, payload_size, 0, "filename=\""); if (fn_start < 0) { TRACE_ERROR("No filename found\r\n"); + save_start = 0; + save_end = payload_size; + fetch = true; break; } fn_start += strlen("filename=\""); - int fn_end = find_string(buffer, payload_size - SAVE_SIZE, fn_start, "\"\r\n"); + int fn_end = find_string(buffer, payload_size, fn_start, "\"\r\n"); if (fn_end < 0) { - TRACE_ERROR("No filename end found\r\n"); + TRACE_DEBUG("No filename end found\r\n"); + save_start = 0; + save_end = payload_size; + fetch = true; + break; + } + + save_start = find_string(buffer, payload_size, fn_end, "\r\n\r\n"); + if (save_start < 0) + { + TRACE_DEBUG("no newlines found, reading next block\r\n"); + save_start = 0; + save_end = payload_size; + fetch = true; break; } int len = fn_end - fn_start; - strncpy(filename, &buffer[fn_start], len); + strncpy(filename, &buffer[fn_start], (len < sizeof(filename)) ? len : sizeof(filename)); filename[len] = '\0'; file = multipartStart(rootPath, filename, message, message_max); @@ -691,13 +774,6 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath } state = PARSE_BODY; - save_start = find_string(buffer, payload_size - SAVE_SIZE, fn_end, "\r\n\r\n"); - if (save_start < 0) - { - TRACE_ERROR("Failed parse multipart content\r\n"); - return ERROR_FAILURE; - } - save_start += 4; save_end = payload_size; break; @@ -705,12 +781,17 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath case PARSE_BODY: { - int searchLen = (partial || payload_size <= SAVE_SIZE) ? payload_size : payload_size - SAVE_SIZE; + if (!payload_size) + { + fetch = true; + break; + } + + int data_end = find_string(buffer, payload_size, 0, boundary); - int data_end = find_string(buffer, searchLen, 0, boundary); if (data_end >= 0) { - // We've found a boundary, let's finish up the current file + /* We've found a boundary, let's finish up the current file, but skip the "--\r\n" */ if (multipartAdd(file, (uint8_t *)buffer, data_end - 4) != NO_ERROR) { TRACE_ERROR("Failed to open file\r\n"); @@ -725,27 +806,20 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath fileCertUploaded(filename); } - if (strncmp(&buffer[data_end + strlen(boundary)], "--", 2) == 0) - { - return NO_ERROR; // no more data to process, so return - } - else - { - // Prepare for next file - state = PARSE_FILENAME; - // Position 'start' at the end of the boundary plus "--\r\n" - save_start = data_end + strlen(boundary) + 4; - save_end = payload_size; - } + /* Prepare for next file */ + state = PARSE_HEADER; + save_start = data_end; + save_end = payload_size; } else { - // No boundary found, this is just more file content - if (payload_size < SAVE_SIZE) + /* there is no full bounday end in this block, save the end and fetch next */ + fetch = true; + + if (payload_size <= SAVE_SIZE) { - save_start = payload_size; + save_start = 0; save_end = payload_size; - multipartAdd(file, (uint8_t *)buffer, payload_size); } else { @@ -763,7 +837,7 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath { memmove(buffer, &buffer[save_start], leftover); } - } while (packet_size > 0); + } while (payload_size > 0); return NO_ERROR; } @@ -835,19 +909,62 @@ void fileUploaded(const char *filename) { TRACE_INFO("Received new file '%s'\r\n", filename); } +#include +#include -error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri) +void sanitizePath(char *path) { - char *query = connection->request.queryString; + size_t i, j; + bool slash = false; + /* Merge all double (or more) slashes // */ + for (i = 0, j = 0; path[i]; ++i) + { + if (path[i] == '/') + { + if (slash) + continue; + slash = true; + } + else + { + slash = false; + } + path[j++] = path[i]; + } + + /* Make sure the path doesn't end with a '/' unless it's the root directory. */ + if (j > 1 && path[j - 1] == '/') + j--; + + /* Null terminate the sanitized path */ + path[j] = '\0'; + + /* If path doesn't start with '/', shift right and add '/' */ + if (path[0] != '/') + { + memmove(&path[1], &path[0], j + 1); // Shift right + path[0] = '/'; // Add '/' at the beginning + j++; + } + + /* If path doesn't end with '/', add '/' at the end */ + if (path[j - 1] != '/') + { + path[j] = '/'; // Add '/' at the end + path[j + 1] = '\0'; // Null terminate + } +} + +error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri) +{ const char *rootPath = settings_get_string("core.contentdir"); if (rootPath == NULL || !fsDirExists(rootPath)) { - TRACE_ERROR("core.certdir not set to a valid path\r\n"); + TRACE_ERROR("core.contentdir not set to a valid path\r\n"); return ERROR_FAILURE; } - TRACE_INFO("Query: '%s'\r\n", query); char path[128]; @@ -855,16 +972,12 @@ error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri) { strcpy(path, "/"); } - if (strstr(path, "..")) - { - TRACE_INFO("Path does not allow '..': '%s'\r\n", query); - strcpy(path, "/"); - } - char pathAbsolute[256]; - strcpy(pathAbsolute, rootPath); - strcat(pathAbsolute, "/"); - strcat(pathAbsolute, path); + sanitizePath(path); + + char pathAbsolute[256]; + snprintf(pathAbsolute, sizeof(pathAbsolute), "/%s/%s", rootPath, path); + pathAbsolute[sizeof(pathAbsolute) - 1] = 0; uint_t statusCode = 500; char message[256]; @@ -893,7 +1006,52 @@ error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri) httpPrepareHeader(connection, "text/plain; charset=utf-8", osStrlen(message)); connection->response.statusCode = statusCode; - TRACE_INFO("chunked: '%s'\r\n", connection->response.chunkedEncoding ? "true" : "false"); + return httpWriteResponse(connection, message, false); +} + +error_t handleApiDirectoryCreate(HttpConnection *connection, const char_t *uri) +{ + const char *rootPath = settings_get_string("core.contentdir"); + + if (rootPath == NULL || !fsDirExists(rootPath)) + { + TRACE_ERROR("core.contentdir not set to a valid path\r\n"); + return ERROR_FAILURE; + } + char path[256]; + size_t size = 0; + + error_t error = httpReceive(connection, &path, sizeof(path), &size, 0x00); + if (error != NO_ERROR) + { + TRACE_ERROR("httpReceive failed!"); + return error; + } + path[size] = 0; + + TRACE_INFO("Creating directory: '%s'\r\n", path); + + sanitizePath(path); + + char pathAbsolute[256 + 2]; + snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); + pathAbsolute[sizeof(pathAbsolute) - 1] = 0; + + uint_t statusCode = 200; + char message[256 + 64]; + + snprintf(message, sizeof(message), "OK"); + + error_t err = fsCreateDir(pathAbsolute); + + if (err != NO_ERROR) + { + statusCode = 500; + snprintf(message, sizeof(message), "Error creating directory '%s', error %d", path, err); + TRACE_ERROR("Error creating directory '%s' -> '%s', error %d\r\n", path, pathAbsolute, err); + } + httpPrepareHeader(connection, "text/plain; charset=utf-8", osStrlen(message)); + connection->response.statusCode = statusCode; return httpWriteResponse(connection, message, false); } diff --git a/src/server.c b/src/server.c index 96819fac..ded2cd29 100644 --- a/src/server.c +++ b/src/server.c @@ -59,6 +59,7 @@ request_type_t request_paths[] = { /* web interface directory */ {REQ_GET, "/www", &handleWww}, /* custom API */ + {REQ_POST, "/api/dirCreate", &handleApiDirectoryCreate}, {REQ_POST, "/api/uploadCert", &handleApiUploadCert}, {REQ_POST, "/api/fileUpload", &handleApiFileUpload}, {REQ_GET, "/api/fileIndex", &handleApiFileIndex}, From 84091fe2c05d5236e6ea9e0e662f3b1684e5f642 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 17:44:21 +0200 Subject: [PATCH 10/52] show ".." instead of an extra button --- contrib/www/index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index 7f8a40a3..957fd118 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -659,18 +659,18 @@

File Viewer

- {this.state.path !== '/' && ( -

- -

- )} -
                             Index of {this.state.path}
                         
+ {this.state.path !== '/' && ( +
+                                 { e.preventDefault(); this.fetchFileIndex(this.getParentPath(this.state.path)) }}>
+                                    ..
+                                
+                            
+ )} + {this.state.files.map(({ name, date, size, isDirectory }, index) => (
                                 {isDirectory ? (

From 83f7e71e2bae013f8a1d7d0a5c03f6fef42319e8 Mon Sep 17 00:00:00 2001
From: g3gg0 
Date: Mon, 24 Jul 2023 17:47:04 +0200
Subject: [PATCH 11/52] fix index display

---
 contrib/www/index.html | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/contrib/www/index.html b/contrib/www/index.html
index 957fd118..f2e57581 100644
--- a/contrib/www/index.html
+++ b/contrib/www/index.html
@@ -662,6 +662,13 @@ 

File Viewer

                             Index of {this.state.path}
                         
+
+                            
+                                {'Name'.padEnd(33)}
+                                {'Date'.padEnd(19)}
+                                {'Size'.padStart(12)}
+                            
+                        
{this.state.path !== '/' && (
@@ -680,13 +687,13 @@ 

File Viewer

{' '.repeat(32 - name.length)} {date} - {size} + {'-'.padStart(10)} ) : ( {name.padEnd(32)} - {date} - {size} + {date.padEnd(10)} + {size.padStart(10)} ) } From 29020a5383de78dcefcdaf41a95642cd04a397b2 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 18:42:44 +0200 Subject: [PATCH 12/52] fix upload handler_api.c make files clickable, opening in a new window --- contrib/www/index.html | 85 ++++++++++++++++++++++++++++++------------ src/handler_api.c | 4 +- 2 files changed, 64 insertions(+), 25 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index f2e57581..a4833d72 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -360,7 +360,7 @@

Settings

return ''; } } + onDrop(event) { event.preventDefault(); const files = [...event.dataTransfer.files].map(file => ({ @@ -557,6 +558,7 @@

Client certificate upload

); } } + class FileViewerTile extends React.Component { constructor(props) { super(props); @@ -565,9 +567,10 @@

Client certificate upload

files: [], }; this.fetchFileIndex = this.fetchFileIndex.bind(this); - this.uploadFile = this.uploadFile.bind(this); + this.uploadFiles = this.uploadFiles.bind(this); this.createDirectory = this.createDirectory.bind(this); this.fileInputRef = React.createRef(); + this.onDrop = this.onDrop.bind(this); } componentDidMount() { @@ -589,30 +592,50 @@

Client certificate upload

} } - async uploadFile() { - const file = this.fileInputRef.current.files[0]; - if (!file) { + + askPermission(files) { + if (window.confirm("Do you want to upload these files?")) { + this.uploadFiles(files); + } + } + + onDrop(event) { + event.preventDefault(); + const files = [...event.dataTransfer.files].map(file => ({ + name: file.name, + file: file, + status: 'Not uploaded yet' + })); + this.askPermission(files); + } + + async uploadFiles(files) { + // Check for file presence + if (!files.length) { return; } - const formData = new FormData(); - formData.append(file.name, file); + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const formData = new FormData(); + formData.append(file.name, file.file); - try { - const response = await fetch(`/api/fileUpload?path=${encodeURIComponent(this.state.path)}`, { - method: 'POST', - body: formData, - }); + try { + const response = await fetch(`/api/fileUpload?path=${encodeURIComponent(this.state.path)}`, { + method: 'POST', + body: formData, + }); - if (response.ok) { - alert('File uploaded successfully'); - this.fetchFileIndex(this.state.path); // Refresh files - } else { - alert('File upload failed'); + if (response.ok) { + } else { + alert('File upload failed'); + } + } catch (err) { + console.error('There was an error!', err); } - } catch (err) { - console.error('There was an error!', err); } + + this.fetchFileIndex(this.state.path); // Refresh files after all uploads } async createDirectory() { @@ -649,14 +672,27 @@

Client certificate upload

render() { return ( -
+
event.preventDefault()}>

File Viewer

- + { + const files = [...event.target.files].map(file => ({ + name: file.name, + file: file, + status: 'Not uploaded yet' + })); + this.askPermission(files); + }} + />

@@ -691,7 +727,10 @@ 

File Viewer

) : ( - {name.padEnd(32)} + + {name} + + {' '.repeat(32 - name.length)} {date.padEnd(10)} {size.padStart(10)} @@ -723,7 +762,7 @@

File Viewer

} componentDidMount() { - this.interval = setInterval(this.fetchFromServer, 60000); + //this.interval = setInterval(this.fetchFromServer, 60000); this.intervalDisplay = setInterval(this.updateDisplayTime, 1000); } diff --git a/src/handler_api.c b/src/handler_api.c index 4f9a198d..a4e14d09 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -976,7 +976,7 @@ error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri, const sanitizePath(path); char pathAbsolute[256]; - snprintf(pathAbsolute, sizeof(pathAbsolute), "/%s/%s", rootPath, path); + snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); pathAbsolute[sizeof(pathAbsolute) - 1] = 0; uint_t statusCode = 500; @@ -988,7 +988,7 @@ error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri, const { statusCode = 500; snprintf(message, sizeof(message), "invalid path: '%s'", path); - TRACE_ERROR("invalid path: '%s'\r\n", path); + TRACE_ERROR("invalid path: '%s' -> '%s'\r\n", path, pathAbsolute); } else { From f266ea3a65f0e5bd66263e1e12b0004ccd6e66ff Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 18:45:19 +0200 Subject: [PATCH 13/52] reenable autoupdates again --- contrib/www/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index a4833d72..006e1d5d 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -360,7 +360,7 @@

File Viewer

} componentDidMount() { - //this.interval = setInterval(this.fetchFromServer, 60000); + this.interval = setInterval(this.fetchFromServer, 60000); this.intervalDisplay = setInterval(this.updateDisplayTime, 1000); } From 2f701b4be272d1e48ec32ceb306bfa841f55569c Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 17:15:09 +0000 Subject: [PATCH 14/52] delete .gitkeep from output --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index b6dc001b..1086b397 100644 --- a/Makefile +++ b/Makefile @@ -228,6 +228,9 @@ preinstall: clean build $(QUIET)mkdir $(PREINSTALL_DIR)/ $(QUIET)cp $(BIN_DIR)/* $(PREINSTALL_DIR)/ $(QUIET)cp -r $(CONTRIB_DIR)/* $(PREINSTALL_DIR)/ + $(QUIET)cd $(PREINSTALL_DIR)/ \ + && find . -name ".gitkeep" -type f -delete \ + && cd - zip: preinstall mkdir $(ZIP_DIR)/ From f681baf780ec2e237f42eb4f232a49f534b9c83e Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 18:43:13 +0000 Subject: [PATCH 15/52] TAF protobuf header parsing --- include/handler_cloud.h | 5 + proto/toniebox.pb.taf-header.proto | 9 ++ src/handler_cloud.c | 44 ++++-- src/proto/proto/toniebox.pb.taf-header.pb-c.c | 131 ++++++++++++++++++ src/proto/proto/toniebox.pb.taf-header.pb-c.h | 78 +++++++++++ 5 files changed, 259 insertions(+), 8 deletions(-) create mode 100644 proto/toniebox.pb.taf-header.proto create mode 100644 src/proto/proto/toniebox.pb.taf-header.pb-c.c create mode 100644 src/proto/proto/toniebox.pb.taf-header.pb-c.h diff --git a/include/handler_cloud.h b/include/handler_cloud.h index 5ea0b372..7f6b5024 100644 --- a/include/handler_cloud.h +++ b/include/handler_cloud.h @@ -7,7 +7,10 @@ #include "http/http_server.h" #include "http/http_server_misc.h" +#include "proto/toniebox.pb.taf-header.pb-c.h" + #define BODY_BUFFER_SIZE 4096 +#define TAF_HEADER_SIZE 4096 typedef struct { @@ -15,11 +18,13 @@ typedef struct bool_t exists; bool_t nocloud; bool_t live; + TonieboxAudioFileHeader *tafHeader; } tonie_info_t; void getContentPathFromCharRUID(char ruid[17], char contentPath[30]); void getContentPathFromUID(uint64_t uid, char contentPath[30]); tonie_info_t getTonieInfo(char contentPath[30]); +void freeTonieInfo(tonie_info_t *tonieInfo); error_t httpWriteResponse(HttpConnection *connection, void *data, bool_t freeMemory); void httpPrepareHeader(HttpConnection *connection, const void *contentType, size_t contentLength); diff --git a/proto/toniebox.pb.taf-header.proto b/proto/toniebox.pb.taf-header.proto new file mode 100644 index 00000000..479b6d71 --- /dev/null +++ b/proto/toniebox.pb.taf-header.proto @@ -0,0 +1,9 @@ +syntax = "proto2"; + +message TonieboxAudioFileHeader { + required bytes sha1_hash = 1; + required uint64 num_bytes = 2; + required uint32 audio_id = 3; + repeated uint32 track_page_nums = 4 [packed=true]; +// required bytes _fill = 5; +} \ No newline at end of file diff --git a/src/handler_cloud.c b/src/handler_cloud.c index e5c63dc9..9e765828 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -200,6 +200,7 @@ static void cbrCloudBodyPassthrough(void *src_ctx, void *cloud_ctx, const char * break; } ctx->status = PROX_STATUS_BODY; + freeTonieInfo(&ctx->tonieInfo); } static void cbrCloudServerDiscoPassthrough(void *src_ctx, void *cloud_ctx) @@ -266,9 +267,34 @@ tonie_info_t getTonieInfo(char contentPath[30]) osStrcat(contentPathDot, ".live"); tonieInfo.live = fsFileExists(contentPathDot); + FsFile *file = fsOpenFile(contentPath, FS_FILE_MODE_READ); + if (file) + { + uint8_t headerBuffer[TAF_HEADER_SIZE - 4]; + size_t read_length; + fsReadFile(file, headerBuffer, 4, &read_length); + if (read_length == 4) + { + uint32_t protobufSize = (uint32_t)((headerBuffer[0] << 24) | (headerBuffer[1] << 16) | (headerBuffer[2] << 8) | headerBuffer[3]); + if (protobufSize < TAF_HEADER_SIZE) + { + fsReadFile(file, headerBuffer, protobufSize, &read_length); // TODO: Read size by first 4 bytes + if (read_length == protobufSize) + { + tonieInfo.tafHeader = toniebox_audio_file_header__unpack(NULL, TAF_HEADER_SIZE - 4, (const uint8_t *)headerBuffer); + } + } + } + fsCloseFile(file); + } return tonieInfo; } +void freeTonieInfo(tonie_info_t *tonieInfo) +{ + toniebox_audio_file_header__free_unpacked(tonieInfo->tafHeader, NULL); +} + error_t httpWriteResponse(HttpConnection *connection, void *data, bool_t freeMemory) { error_t error = httpWriteHeader(connection); @@ -456,14 +482,14 @@ error_t handleCloudClaim(HttpConnection *connection, const char_t *uri, const ch markCustomTonie(&tonieInfo); } - if (!settings_get_bool("cloud.enabled") || !settings_get_bool("cloud.enableV1Claim") || tonieInfo.nocloud) + if (settings_get_bool("cloud.enabled") && settings_get_bool("cloud.enableV1Claim") && !tonieInfo.nocloud) { - return NO_ERROR; + cbr_ctx_t ctx; + req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_CLAIM, &ctx); + cloud_request_get(NULL, 0, uri, queryString, token, &cbr); } + freeTonieInfo(&tonieInfo); - cbr_ctx_t ctx; - req_cbr_t cbr = getCloudCbr(connection, uri, queryString, V1_CLAIM, &ctx); - cloud_request_get(NULL, 0, uri, queryString, token, &cbr); return NO_ERROR; } @@ -478,6 +504,7 @@ static void strupr(char input[]) error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const char_t *queryString, bool_t noPassword) { char ruid[17]; + error_t error = NO_ERROR; uint8_t *token = connection->private.authentication_token; osStrncpy(ruid, &uri[12], sizeof(ruid)); @@ -512,7 +539,6 @@ error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const if (error) { TRACE_ERROR(" >> file %s not available or not send, error=%u...\r\n", tonieInfo.contentPath, error); - return error; } } else @@ -529,7 +555,7 @@ error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const } httpPrepareHeader(connection, NULL, 0); connection->response.statusCode = 404; - return httpWriteResponse(connection, NULL, false); + error = httpWriteResponse(connection, NULL, false); } else { @@ -539,7 +565,8 @@ error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const cloud_request_get(NULL, 0, uri, queryString, token, &cbr); } } - return NO_ERROR; + freeTonieInfo(&tonieInfo); + return error; } error_t handleCloudContentV1(HttpConnection *connection, const char_t *uri, const char_t *queryString) { @@ -640,6 +667,7 @@ error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, { freshResp.tonie_marked[freshResp.n_tonie_marked++] = freshReq->tonie_infos[i]->uid; } + freeTonieInfo(&tonieInfo); } if (settings_get_bool("cloud.enabled") && settings_get_bool("cloud.enableV1FreshnessCheck")) diff --git a/src/proto/proto/toniebox.pb.taf-header.pb-c.c b/src/proto/proto/toniebox.pb.taf-header.pb-c.c new file mode 100644 index 00000000..2548f118 --- /dev/null +++ b/src/proto/proto/toniebox.pb.taf-header.pb-c.c @@ -0,0 +1,131 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: proto/toniebox.pb.taf-header.proto */ + +/* Do not generate deprecated warnings for self */ +#ifndef PROTOBUF_C__NO_DEPRECATED +#define PROTOBUF_C__NO_DEPRECATED +#endif + +#include "proto/toniebox.pb.taf-header.pb-c.h" +void toniebox_audio_file_header__init + (TonieboxAudioFileHeader *message) +{ + static const TonieboxAudioFileHeader init_value = TONIEBOX_AUDIO_FILE_HEADER__INIT; + *message = init_value; +} +size_t toniebox_audio_file_header__get_packed_size + (const TonieboxAudioFileHeader *message) +{ + assert(message->base.descriptor == &toniebox_audio_file_header__descriptor); + return protobuf_c_message_get_packed_size ((const ProtobufCMessage*)(message)); +} +size_t toniebox_audio_file_header__pack + (const TonieboxAudioFileHeader *message, + uint8_t *out) +{ + assert(message->base.descriptor == &toniebox_audio_file_header__descriptor); + return protobuf_c_message_pack ((const ProtobufCMessage*)message, out); +} +size_t toniebox_audio_file_header__pack_to_buffer + (const TonieboxAudioFileHeader *message, + ProtobufCBuffer *buffer) +{ + assert(message->base.descriptor == &toniebox_audio_file_header__descriptor); + return protobuf_c_message_pack_to_buffer ((const ProtobufCMessage*)message, buffer); +} +TonieboxAudioFileHeader * + toniebox_audio_file_header__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data) +{ + return (TonieboxAudioFileHeader *) + protobuf_c_message_unpack (&toniebox_audio_file_header__descriptor, + allocator, len, data); +} +void toniebox_audio_file_header__free_unpacked + (TonieboxAudioFileHeader *message, + ProtobufCAllocator *allocator) +{ + if(!message) + return; + assert(message->base.descriptor == &toniebox_audio_file_header__descriptor); + protobuf_c_message_free_unpacked ((ProtobufCMessage*)message, allocator); +} +static const ProtobufCFieldDescriptor toniebox_audio_file_header__field_descriptors[4] = +{ + { + "sha1_hash", + 1, + PROTOBUF_C_LABEL_REQUIRED, + PROTOBUF_C_TYPE_BYTES, + 0, /* quantifier_offset */ + offsetof(TonieboxAudioFileHeader, sha1_hash), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "num_bytes", + 2, + PROTOBUF_C_LABEL_REQUIRED, + PROTOBUF_C_TYPE_UINT64, + 0, /* quantifier_offset */ + offsetof(TonieboxAudioFileHeader, num_bytes), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "audio_id", + 3, + PROTOBUF_C_LABEL_REQUIRED, + PROTOBUF_C_TYPE_UINT32, + 0, /* quantifier_offset */ + offsetof(TonieboxAudioFileHeader, audio_id), + NULL, + NULL, + 0, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, + { + "track_page_nums", + 4, + PROTOBUF_C_LABEL_REPEATED, + PROTOBUF_C_TYPE_UINT32, + offsetof(TonieboxAudioFileHeader, n_track_page_nums), + offsetof(TonieboxAudioFileHeader, track_page_nums), + NULL, + NULL, + 0 | PROTOBUF_C_FIELD_FLAG_PACKED, /* flags */ + 0,NULL,NULL /* reserved1,reserved2, etc */ + }, +}; +static const unsigned toniebox_audio_file_header__field_indices_by_name[] = { + 2, /* field[2] = audio_id */ + 1, /* field[1] = num_bytes */ + 0, /* field[0] = sha1_hash */ + 3, /* field[3] = track_page_nums */ +}; +static const ProtobufCIntRange toniebox_audio_file_header__number_ranges[1 + 1] = +{ + { 1, 0 }, + { 0, 4 } +}; +const ProtobufCMessageDescriptor toniebox_audio_file_header__descriptor = +{ + PROTOBUF_C__MESSAGE_DESCRIPTOR_MAGIC, + "TonieboxAudioFileHeader", + "TonieboxAudioFileHeader", + "TonieboxAudioFileHeader", + "", + sizeof(TonieboxAudioFileHeader), + 4, + toniebox_audio_file_header__field_descriptors, + toniebox_audio_file_header__field_indices_by_name, + 1, toniebox_audio_file_header__number_ranges, + (ProtobufCMessageInit) toniebox_audio_file_header__init, + NULL,NULL,NULL /* reserved[123] */ +}; diff --git a/src/proto/proto/toniebox.pb.taf-header.pb-c.h b/src/proto/proto/toniebox.pb.taf-header.pb-c.h new file mode 100644 index 00000000..587c692e --- /dev/null +++ b/src/proto/proto/toniebox.pb.taf-header.pb-c.h @@ -0,0 +1,78 @@ +/* Generated by the protocol buffer compiler. DO NOT EDIT! */ +/* Generated from: proto/toniebox.pb.taf-header.proto */ + +#ifndef PROTOBUF_C_proto_2ftoniebox_2epb_2etaf_2dheader_2eproto__INCLUDED +#define PROTOBUF_C_proto_2ftoniebox_2epb_2etaf_2dheader_2eproto__INCLUDED + +#include + +PROTOBUF_C__BEGIN_DECLS + +#if PROTOBUF_C_VERSION_NUMBER < 1000000 +# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers. +#elif 1003003 < PROTOBUF_C_MIN_COMPILER_VERSION +# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c. +#endif + + +typedef struct _TonieboxAudioFileHeader TonieboxAudioFileHeader; + + +/* --- enums --- */ + + +/* --- messages --- */ + +struct _TonieboxAudioFileHeader +{ + ProtobufCMessage base; + ProtobufCBinaryData sha1_hash; + uint64_t num_bytes; + uint32_t audio_id; + /* + * required bytes _fill = 5; + */ + size_t n_track_page_nums; + uint32_t *track_page_nums; +}; +#define TONIEBOX_AUDIO_FILE_HEADER__INIT \ + { PROTOBUF_C_MESSAGE_INIT (&toniebox_audio_file_header__descriptor) \ + , {0,NULL}, 0, 0, 0,NULL } + + +/* TonieboxAudioFileHeader methods */ +void toniebox_audio_file_header__init + (TonieboxAudioFileHeader *message); +size_t toniebox_audio_file_header__get_packed_size + (const TonieboxAudioFileHeader *message); +size_t toniebox_audio_file_header__pack + (const TonieboxAudioFileHeader *message, + uint8_t *out); +size_t toniebox_audio_file_header__pack_to_buffer + (const TonieboxAudioFileHeader *message, + ProtobufCBuffer *buffer); +TonieboxAudioFileHeader * + toniebox_audio_file_header__unpack + (ProtobufCAllocator *allocator, + size_t len, + const uint8_t *data); +void toniebox_audio_file_header__free_unpacked + (TonieboxAudioFileHeader *message, + ProtobufCAllocator *allocator); +/* --- per-message closures --- */ + +typedef void (*TonieboxAudioFileHeader_Closure) + (const TonieboxAudioFileHeader *message, + void *closure_data); + +/* --- services --- */ + + +/* --- descriptors --- */ + +extern const ProtobufCMessageDescriptor toniebox_audio_file_header__descriptor; + +PROTOBUF_C__END_DECLS + + +#endif /* PROTOBUF_C_proto_2ftoniebox_2epb_2etaf_2dheader_2eproto__INCLUDED */ From b94bbab8e1647c35dd9faf9f113630265207e729 Mon Sep 17 00:00:00 2001 From: SciLor Date: Mon, 24 Jul 2023 19:08:07 +0000 Subject: [PATCH 16/52] Check for updated audio_ids --- include/handler_cloud.h | 1 + src/handler_cloud.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/handler_cloud.h b/include/handler_cloud.h index 7f6b5024..e854220f 100644 --- a/include/handler_cloud.h +++ b/include/handler_cloud.h @@ -18,6 +18,7 @@ typedef struct bool_t exists; bool_t nocloud; bool_t live; + bool_t updated; TonieboxAudioFileHeader *tafHeader; } tonie_info_t; diff --git a/src/handler_cloud.c b/src/handler_cloud.c index 9e765828..03e83ec1 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -650,20 +650,23 @@ error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, getContentPathFromUID(freshReq->tonie_infos[i]->uid, tonieInfo.contentPath); tonieInfo = getTonieInfo(tonieInfo.contentPath); + tonieInfo.updated = (freshReq->tonie_infos[i]->audio_id < tonieInfo.tafHeader->audio_id); + if (!tonieInfo.nocloud) { freshReqCloud.tonie_infos[freshReqCloud.n_tonie_infos++] = freshReq->tonie_infos[i]; } (void)custom; - TRACE_INFO(" uid: %016" PRIX64 ", nocloud: %d, live: %d, audioid: %08X (%s%s)\n", + TRACE_INFO(" uid: %016" PRIX64 ", nocloud: %d, live: %d, updated: %d, audioid: %08X (%s%s)\n", freshReq->tonie_infos[i]->uid, tonieInfo.nocloud, tonieInfo.live, + tonieInfo.updated, freshReq->tonie_infos[i]->audio_id, date_buffer, custom ? ", custom" : ""); - if (tonieInfo.live) + if (tonieInfo.live || tonieInfo.updated) { freshResp.tonie_marked[freshResp.n_tonie_marked++] = freshReq->tonie_infos[i]->uid; } From e21fd9ff0bbea3e17f3dc171e7744917397f9bfd Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Mon, 24 Jul 2023 21:33:13 +0200 Subject: [PATCH 17/52] fix web interface, uploading etc --- contrib/www/index.html | 87 +++++++++++++++++++++++++------- include/handler_api.h | 4 +- src/handler_api.c | 109 ++++++++++++++++++++++++++++++++++++++--- src/server.c | 2 + 4 files changed, 177 insertions(+), 25 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index 006e1d5d..e5caf117 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -565,12 +565,16 @@

Client certificate upload

this.state = { path: '/', files: [], + selectedFiles: [], }; this.fetchFileIndex = this.fetchFileIndex.bind(this); this.uploadFiles = this.uploadFiles.bind(this); this.createDirectory = this.createDirectory.bind(this); this.fileInputRef = React.createRef(); this.onDrop = this.onDrop.bind(this); + this.deleteSelectedFiles = this.deleteSelectedFiles.bind(this); + this.toggleFileSelection = this.toggleFileSelection.bind(this); + this.selectAllFiles = this.selectAllFiles.bind(this); } componentDidMount() { @@ -592,7 +596,6 @@

Client certificate upload

} } - askPermission(files) { if (window.confirm("Do you want to upload these files?")) { this.uploadFiles(files); @@ -650,7 +653,7 @@

Client certificate upload

headers: { 'Content-Type': 'application/json', }, - body: `${this.state.path}${name}`, + body: this.state.path.trim() + name.trim(), }); if (response.ok) { @@ -670,6 +673,50 @@

Client certificate upload

return parts.join('/') || '/'; } + async deleteSelectedFiles() { + let deletedCount = 0, failedCount = 0; + + for (let file of this.state.selectedFiles) { + const api = file.isDirectory ? '/api/dirDelete' : '/api/fileDelete'; + + try { + const response = await fetch(api, { + method: 'POST', + headers: { 'Content-Type': 'text/plain' }, + body: this.state.path + file.name, + }); + + if (response.ok && await response.text() === 'OK') { + deletedCount++; + } else { + failedCount++; + } + } catch (err) { + console.error('There was an error!', err); + failedCount++; + } + } + + alert(`Deleted: ${deletedCount}, Failed: ${failedCount} `); + this.setState({ selectedFiles: [] }); + this.fetchFileIndex(this.state.path); // Refresh files after delete + } + + + toggleFileSelection(file) { + this.setState(prevState => { + if (prevState.selectedFiles.includes(file)) { + return { selectedFiles: prevState.selectedFiles.filter(f => f !== file) }; + } else { + return { selectedFiles: [...prevState.selectedFiles, file] }; + } + }); + } + + selectAllFiles() { + this.setState({ selectedFiles: [...this.state.files] }); + } + render() { return (
event.preventDefault()}> @@ -679,6 +726,8 @@

File Viewer

+ + {this.state.files.length > 0 && } File Viewer
)} - {this.state.files.map(({ name, date, size, isDirectory }, index) => ( + {this.state.files.map((file, index) => (
-                                {isDirectory ? (
+                                 this.toggleFileSelection(file)}
+                                />
+                                {file.isDirectory ? (
                                     
-                                         { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${name} /`); }}>
-                                            {name}
+                                         { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${file.name}/`); }}>
+                                            {file.name}
                                         
-                                        {' '.repeat(32 - name.length)}
-                                        {date}
+                                        {' '.repeat(32 - file.name.length)}
+                                        {file.date}
                                         {'-'.padStart(10)}
                                     
                                 ) : (
                                     
-                                        
-                                            {name}
+                                        
+                                            {file.name}
                                         
-                                        {' '.repeat(32 - name.length)}
-                                        {date.padEnd(10)}
-                                        {size.padStart(10)}
+                                        {' '.repeat(32 - file.name.length)}
+                                        {file.date.padEnd(10)}
+                                        {file.size.padStart(10)}
                                     
                                 )
                                 }
-                            
+
))} - - - - ); } } + class App extends React.Component { constructor(props) { super(props); diff --git a/include/handler_api.h b/include/handler_api.h index db23c4d5..0546961a 100644 --- a/include/handler_api.h +++ b/include/handler_api.h @@ -16,4 +16,6 @@ error_t handleApiSet(HttpConnection *connection, const char_t *uri, const char_t error_t handleApiTrigger(HttpConnection *connection, const char_t *uri, const char_t *queryString); error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri, const char_t *queryString); error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri, const char_t *queryString); -error_t handleApiDirectoryCreate(HttpConnection *connection, const char_t *uri, const char_t *queryString); \ No newline at end of file +error_t handleApiDirectoryCreate(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiFileDelete(HttpConnection *connection, const char_t *uri, const char_t *queryString); +error_t handleApiDirectoryDelete(HttpConnection *connection, const char_t *uri, const char_t *queryString); diff --git a/src/handler_api.c b/src/handler_api.c index a4e14d09..991d8556 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -912,7 +912,7 @@ void fileUploaded(const char *filename) #include #include -void sanitizePath(char *path) +void sanitizePath(char *path, bool isDir) { size_t i, j; bool slash = false; @@ -949,10 +949,13 @@ void sanitizePath(char *path) } /* If path doesn't end with '/', add '/' at the end */ - if (path[j - 1] != '/') + if (isDir) { - path[j] = '/'; // Add '/' at the end - path[j + 1] = '\0'; // Null terminate + if (path[j - 1] != '/') + { + path[j] = '/'; // Add '/' at the end + path[j + 1] = '\0'; // Null terminate + } } } @@ -973,7 +976,7 @@ error_t handleApiFileUpload(HttpConnection *connection, const char_t *uri, const strcpy(path, "/"); } - sanitizePath(path); + sanitizePath(path, true); char pathAbsolute[256]; snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); @@ -1031,7 +1034,7 @@ error_t handleApiDirectoryCreate(HttpConnection *connection, const char_t *uri, TRACE_INFO("Creating directory: '%s'\r\n", path); - sanitizePath(path); + sanitizePath(path, true); char pathAbsolute[256 + 2]; snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); @@ -1055,3 +1058,97 @@ error_t handleApiDirectoryCreate(HttpConnection *connection, const char_t *uri, return httpWriteResponse(connection, message, false); } + +error_t handleApiDirectoryDelete(HttpConnection *connection, const char_t *uri, const char_t *queryString) +{ + const char *rootPath = settings_get_string("core.contentdir"); + + if (rootPath == NULL || !fsDirExists(rootPath)) + { + TRACE_ERROR("core.contentdir not set to a valid path\r\n"); + return ERROR_FAILURE; + } + char path[256]; + size_t size = 0; + + error_t error = httpReceive(connection, &path, sizeof(path), &size, 0x00); + if (error != NO_ERROR) + { + TRACE_ERROR("httpReceive failed!"); + return error; + } + path[size] = 0; + + TRACE_INFO("Deleting directory: '%s'\r\n", path); + + sanitizePath(path, true); + + char pathAbsolute[256 + 2]; + snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); + pathAbsolute[sizeof(pathAbsolute) - 1] = 0; + + uint_t statusCode = 200; + char message[256 + 64]; + + snprintf(message, sizeof(message), "OK"); + + error_t err = fsRemoveDir(pathAbsolute); + + if (err != NO_ERROR) + { + statusCode = 500; + snprintf(message, sizeof(message), "Error deleting directory '%s', error %d", path, err); + TRACE_ERROR("Error deleting directory '%s' -> '%s', error %d\r\n", path, pathAbsolute, err); + } + httpPrepareHeader(connection, "text/plain; charset=utf-8", osStrlen(message)); + connection->response.statusCode = statusCode; + + return httpWriteResponse(connection, message, false); +} + +error_t handleApiFileDelete(HttpConnection *connection, const char_t *uri, const char_t *queryString) +{ + const char *rootPath = settings_get_string("core.contentdir"); + + if (rootPath == NULL || !fsDirExists(rootPath)) + { + TRACE_ERROR("core.contentdir not set to a valid path\r\n"); + return ERROR_FAILURE; + } + char path[256]; + size_t size = 0; + + error_t error = httpReceive(connection, &path, sizeof(path), &size, 0x00); + if (error != NO_ERROR) + { + TRACE_ERROR("httpReceive failed!"); + return error; + } + path[size] = 0; + + TRACE_INFO("Deleting file: '%s'\r\n", path); + + sanitizePath(path, false); + + char pathAbsolute[256 + 2]; + snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); + pathAbsolute[sizeof(pathAbsolute) - 1] = 0; + + uint_t statusCode = 200; + char message[256 + 64]; + + snprintf(message, sizeof(message), "OK"); + + error_t err = fsDeleteFile(pathAbsolute); + + if (err != NO_ERROR) + { + statusCode = 500; + snprintf(message, sizeof(message), "Error deleting file '%s', error %d", path, err); + TRACE_ERROR("Error deleting file '%s' -> '%s', error %d\r\n", path, pathAbsolute, err); + } + httpPrepareHeader(connection, "text/plain; charset=utf-8", osStrlen(message)); + connection->response.statusCode = statusCode; + + return httpWriteResponse(connection, message, false); +} diff --git a/src/server.c b/src/server.c index 9041e163..8c73822c 100644 --- a/src/server.c +++ b/src/server.c @@ -59,6 +59,8 @@ request_type_t request_paths[] = { /* web interface directory */ {REQ_GET, "/www", &handleWww}, /* custom API */ + {REQ_POST, "/api/fileDelete", &handleApiFileDelete}, + {REQ_POST, "/api/dirDelete", &handleApiDirectoryDelete}, {REQ_POST, "/api/dirCreate", &handleApiDirectoryCreate}, {REQ_POST, "/api/uploadCert", &handleApiUploadCert}, {REQ_POST, "/api/fileUpload", &handleApiFileUpload}, From 48d6c0d6dec90fa27d6ad931ce63422d29c2bb7f Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Tue, 25 Jul 2023 01:50:32 +0200 Subject: [PATCH 18/52] add TAF detection and add description field --- contrib/www/index.html | 62 ++++++++++++++++++++++------------------- include/handler_cloud.h | 5 ++-- src/handler_api.c | 39 ++++++++++++++++---------- src/handler_cloud.c | 30 ++++++++++++-------- 4 files changed, 79 insertions(+), 57 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index e5caf117..d18ef102 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -763,35 +763,39 @@

File Viewer

)} - {this.state.files.map((file, index) => ( -
-                                 this.toggleFileSelection(file)}
-                                />
-                                {file.isDirectory ? (
-                                    
-                                         { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${file.name}/`); }}>
-                                            {file.name}
-                                        
-                                        {' '.repeat(32 - file.name.length)}
-                                        {file.date}
-                                        {'-'.padStart(10)}
-                                    
-                                ) : (
-                                    
-                                        
-                                            {file.name}
-                                        
-                                        {' '.repeat(32 - file.name.length)}
-                                        {file.date.padEnd(10)}
-                                        {file.size.padStart(10)}
-                                    
-                                )
-                                }
-                            
- ))} + {this.state.files.map((file, index) => { + let filename = file.name.substring(0, 32); + return ( +
+                                     this.toggleFileSelection(file)}
+                                    />
+                                    {file.isDirectory ? (
+                                        
+                                             { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${file.name}/`); }}>
+                                                {filename}
+                                            
+                                            {' '.repeat(32 - filename.length)}
+                                            {file.date}
+                                            {'-'.padStart(10)}
+                                        
+                                    ) : (
+                                        
+                                            
+                                                {filename}
+                                            
+                                            {' '.repeat(32 - filename.length)}
+                                            {file.date.padEnd(10)}
+                                            {file.size.padStart(10)}
+                                        
+                                    )
+                                    }
+                                
+ ); + })} + ); } diff --git a/include/handler_cloud.h b/include/handler_cloud.h index e854220f..966156ae 100644 --- a/include/handler_cloud.h +++ b/include/handler_cloud.h @@ -14,8 +14,9 @@ typedef struct { - char contentPath[30]; + char *contentPath; bool_t exists; + bool_t valid; bool_t nocloud; bool_t live; bool_t updated; @@ -24,7 +25,7 @@ typedef struct void getContentPathFromCharRUID(char ruid[17], char contentPath[30]); void getContentPathFromUID(uint64_t uid, char contentPath[30]); -tonie_info_t getTonieInfo(char contentPath[30]); +tonie_info_t getTonieInfo(const char *contentPath); void freeTonieInfo(tonie_info_t *tonieInfo); error_t httpWriteResponse(HttpConnection *connection, void *data, bool_t freeMemory); diff --git a/src/handler_api.c b/src/handler_api.c index 991d8556..2f1b47be 100644 --- a/src/handler_api.c +++ b/src/handler_api.c @@ -429,21 +429,15 @@ error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri, const TRACE_INFO("Query: '%s'\r\n", query); char path[128]; + char pathAbsolute[256]; if (!queryGet(connection->request.queryString, "path", path, sizeof(path))) { strcpy(path, "/"); } - if (strstr(path, "..")) - { - TRACE_INFO("Path does not allow '..': '%s'\r\n", query); - strcpy(path, "/"); - } - char pathAbsolute[256]; - strcpy(pathAbsolute, rootPath); - strcat(pathAbsolute, "/"); - strcat(pathAbsolute, path); + snprintf(pathAbsolute, sizeof(pathAbsolute), "%s/%s", rootPath, path); + pathAbsolute[sizeof(pathAbsolute) - 1] = 0; int pos = 0; char *json = strdup("["); @@ -453,7 +447,7 @@ error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri, const while (true) { - char buf[1024]; + char buf[384]; FsDirEntry entry; if (fsReadDir(dir, &entry) != NO_ERROR) @@ -477,8 +471,21 @@ error_t handleApiFileIndex(HttpConnection *connection, const char_t *uri, const entry.modified.year, entry.modified.month, entry.modified.day, entry.modified.hours, entry.modified.minutes, entry.modified.seconds); - sprintf(buf, "{\"name\": \"%s\", \"date\": \"%s\", \"size\": \"%d\", \"isDirectory\": %s }", - entry.name, dateString, entry.size, (entry.attributes & FS_FILE_ATTR_DIRECTORY) ? "true" : "false"); + char desc[24]; + osStrcpy(desc, ""); + + char filePathAbsolute[384]; + snprintf(filePathAbsolute, sizeof(filePathAbsolute), "%s/%s", pathAbsolute, entry.name); + + tonie_info_t tafInfo = getTonieInfo(filePathAbsolute); + if (tafInfo.valid) + { + snprintf(desc, sizeof(desc), "TAF, 0x%08X", tafInfo.tafHeader->audio_id); + } + freeTonieInfo(&tafInfo); + + snprintf(buf, sizeof(buf), "{\"name\": \"%s\", \"date\": \"%s\", \"size\": \"%d\", \"isDirectory\": %s, \"desc\": \"%s\" }", + entry.name, dateString, entry.size, (entry.attributes & FS_FILE_ATTR_DIRECTORY) ? "true" : "false", desc); json = realloc(json, osStrlen(json) + osStrlen(buf) + 10); strcat(json, buf); @@ -640,7 +647,7 @@ int find_string(const void *haystack, size_t haystack_len, size_t haystack_start error_t parse_multipart_content(HttpConnection *connection, const char *rootPath, char *message, size_t message_max, void (*fileCertUploaded)(const char *)) { char buffer[2 * BUFFER_SIZE]; - char filename[64]; + char filename[256]; FsFile *file = NULL; eMultipartState state = PARSE_HEADER; char *boundary = connection->request.boundary; @@ -762,8 +769,10 @@ error_t parse_multipart_content(HttpConnection *connection, const char *rootPath break; } - int len = fn_end - fn_start; - strncpy(filename, &buffer[fn_start], (len < sizeof(filename)) ? len : sizeof(filename)); + int inLen = fn_end - fn_start; + int len = (inLen < sizeof(filename)) ? inLen : (sizeof(filename) - 1); + TRACE_INFO("FN length %d %d %d %d\r\n", inLen, len, fn_start, fn_end); + strncpy(filename, &buffer[fn_start], len); filename[len] = '\0'; file = multipartStart(rootPath, filename, message, message_max); diff --git a/src/handler_cloud.c b/src/handler_cloud.c index 03e83ec1..f0d1a051 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -253,19 +253,23 @@ void getContentPathFromUID(uint64_t uid, char contentPath[30]) getContentPathFromCharRUID((char *)cruid, contentPath); } -tonie_info_t getTonieInfo(char contentPath[30]) +tonie_info_t getTonieInfo(const char *contentPath) { tonie_info_t tonieInfo; - char contentPathDot[30 + 8]; //".nocloud" / ".live" - osMemcpy(contentPathDot, contentPath, 30); - osMemcpy(tonieInfo.contentPath, contentPath, 30); - - tonieInfo.exists = fsFileExists(contentPathDot); - osStrcat(contentPathDot, ".nocloud"); - tonieInfo.nocloud = fsFileExists(contentPathDot); - contentPathDot[29] = 0; - osStrcat(contentPathDot, ".live"); - tonieInfo.live = fsFileExists(contentPathDot); + int maxLen = strlen(contentPath) + 32; + char *checkFile = (char *)osAllocMem(maxLen + 1); + + checkFile[maxLen] = 0; + tonieInfo.valid = false; + tonieInfo.tafHeader = NULL; + tonieInfo.contentPath = strdup(contentPath); + snprintf(checkFile, maxLen, "%s", contentPath); + tonieInfo.exists = fsFileExists(checkFile); + snprintf(checkFile, maxLen, "%s.nocloud", contentPath); + tonieInfo.nocloud = fsFileExists(checkFile); + snprintf(checkFile, maxLen, "%s.live", contentPath); + tonieInfo.live = fsFileExists(checkFile); + osFreeMem(checkFile); FsFile *file = fsOpenFile(contentPath, FS_FILE_MODE_READ); if (file) @@ -282,6 +286,7 @@ tonie_info_t getTonieInfo(char contentPath[30]) if (read_length == protobufSize) { tonieInfo.tafHeader = toniebox_audio_file_header__unpack(NULL, TAF_HEADER_SIZE - 4, (const uint8_t *)headerBuffer); + tonieInfo.valid = true; } } } @@ -293,6 +298,9 @@ tonie_info_t getTonieInfo(char contentPath[30]) void freeTonieInfo(tonie_info_t *tonieInfo) { toniebox_audio_file_header__free_unpacked(tonieInfo->tafHeader, NULL); + free(tonieInfo->contentPath); + tonieInfo->contentPath = NULL; + tonieInfo->tafHeader = NULL; } error_t httpWriteResponse(HttpConnection *connection, void *data, bool_t freeMemory) From ba7c19ecc28f5c78d0d7a9b700852d0e51d0c8f0 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Tue, 25 Jul 2023 09:15:03 +0200 Subject: [PATCH 19/52] fixed webui again --- contrib/www/index.html | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index d18ef102..479386d4 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -749,9 +749,10 @@

File Viewer

                             
-                                {'Name'.padEnd(33)}
+                                {'Name'.padEnd(24 + 4)}
                                 {'Date'.padEnd(19)}
                                 {'Size'.padStart(12)}
+                                {' Description'}
                             
                         
@@ -764,7 +765,11 @@

File Viewer

)} {this.state.files.map((file, index) => { - let filename = file.name.substring(0, 32); + let maxLen = 24; + let filename = file.name.substring(0, maxLen); + if (file.name.length > maxLen) { + filename = file.name.substring(0, maxLen - 3) + "..."; + } return (
                                     File Viewer
                                              { e.preventDefault(); this.fetchFileIndex(`${this.state.path}${file.name}/`); }}>
                                                 {filename}
                                             
-                                            {' '.repeat(32 - filename.length)}
+                                            {' '.repeat(maxLen - filename.length)}
                                             {file.date}
                                             {'-'.padStart(10)}
+                                            {' -'}
                                         
                                     ) : (
                                         
                                             
                                                 {filename}
                                             
-                                            {' '.repeat(32 - filename.length)}
+                                            {' '.repeat(maxLen - filename.length)}
                                             {file.date.padEnd(10)}
                                             {file.size.padStart(10)}
+                                            {' ' + file.desc}
                                         
                                     )
                                     }

From b7feb9ed66405c9ab545ef88401856a6a33c47fc Mon Sep 17 00:00:00 2001
From: g3gg0 
Date: Tue, 25 Jul 2023 10:31:05 +0200
Subject: [PATCH 20/52] added playback and json usage

---
 contrib/www/index.html | 118 +++++++++++++++++++++++++++++++++++++++--
 src/server.c           | 115 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 228 insertions(+), 5 deletions(-)

diff --git a/contrib/www/index.html b/contrib/www/index.html
index 479386d4..e1fb3f06 100644
--- a/contrib/www/index.html
+++ b/contrib/www/index.html
@@ -24,6 +24,40 @@
             margin: 0;
         }
 
+        .small-round-button {
+            position: absolute;
+            top: 0;
+            border-radius: 50%;
+            width: 30px;
+            height: 30px;
+        }
+
+        .desc {
+            display: inline-block;
+            word-wrap: break-word;
+            overflow-wrap: break-word;
+            width: 300px;
+            white-space: normal;
+        }
+
+        .image-resize {
+            width: 32px;
+            height: 32px;
+            transition: all 0.3s ease-in-out;
+            margin-left: 40px;
+        }
+
+        .parent:hover .image-resize {
+            width: 128px;
+            height: 128px;
+        }
+
+        .parent {
+            position: relative;
+            display: flex;
+            align-items: start;
+        }
+
         .app {
             padding: 10px;
             border-radius: 5px;
@@ -559,6 +593,52 @@ 

Client certificate upload

} } + class OggPlayer extends React.Component { + constructor(props) { + super(props); + + this.audioRef = React.createRef(); + + this.state = { + currentTime: 0, + duration: 0, + } + } + + setUrl = (url) => { + this.audioRef.current.src = url; + this.audioRef.current.play(); + } + + componentDidMount() { + this.audioRef.current.addEventListener('timeupdate', this.updateCurrentTime); + this.audioRef.current.addEventListener('loadedmetadata', this.updateDuration); + } + + componentWillUnmount() { + this.audioRef.current.removeEventListener('timeupdate', this.updateCurrentTime); + this.audioRef.current.removeEventListener('loadedmetadata', this.updateDuration); + } + + updateCurrentTime = () => { + this.setState({ currentTime: this.audioRef.current.currentTime }); + } + + updateDuration = () => { + this.setState({ duration: this.audioRef.current.duration }); + } + + seek = (event) => { + this.audioRef.current.currentTime = (event.target.value / 100) * this.audioRef.current.duration; + } + + render() { + return ( +
@@ -770,6 +854,16 @@

File Viewer

if (file.name.length > maxLen) { filename = file.name.substring(0, maxLen - 3) + "..."; } + + let matchingTonie; + if (file.desc.startsWith('TAF,')) { + let fileDescParts = file.desc.split(' '); + let hexValue = fileDescParts[1]; + let audioId = parseInt(hexValue, 16).toString(); + + matchingTonie = this.state.tonies.find(tonie => tonie.audio_id.includes(audioId)); + } + return (
                                     File Viewer
                                             {' '.repeat(maxLen - filename.length)}
                                             {file.date}
                                             {'-'.padStart(10)}
-                                            {' -'}
                                         
                                     ) : (
                                         
@@ -795,13 +888,27 @@ 

File Viewer

{' '.repeat(maxLen - filename.length)} {file.date.padEnd(10)} {file.size.padStart(10)} - {' ' + file.desc} + {file.desc.startsWith('TAF,') && +
+ + + {matchingTonie && matchingTonie.title} +
+ }
) }
); - })} + }) + } ); @@ -809,6 +916,7 @@

File Viewer

} + class App extends React.Component { constructor(props) { super(props); diff --git a/src/server.c b/src/server.c index 8c73822c..58975f35 100644 --- a/src/server.c +++ b/src/server.c @@ -52,12 +52,127 @@ error_t handleWww(HttpConnection *connection, const char_t *uri, const char_t *q return httpSendResponse(connection, &uri[4]); } +error_t handleOgg(HttpConnection *connection, const char_t *uri_full, const char_t *queryString) +{ + const char_t *uri = &uri_full[4]; + TRACE_ERROR("Returning ogg file '%s'\r\n", uri); + + error_t error; + size_t n; + uint32_t length; + FsFile *file; + + // Retrieve the full pathname + httpGetAbsolutePath(connection, uri, connection->buffer, + HTTP_SERVER_BUFFER_SIZE); + + // Retrieve the size of the specified file + error = fsGetFileSize(connection->buffer, &length); + // The specified URI cannot be found? + if (error) + { + TRACE_ERROR("File does not exist '%s'\r\n", connection->buffer); + return ERROR_NOT_FOUND; + } + + // Open the file for reading + file = fsOpenFile(connection->buffer, FS_FILE_MODE_READ); + // Failed to open the file? + if (file == NULL) + return ERROR_NOT_FOUND; + + // Format HTTP response header + // TODO add status 416 on invalid ranges + if (connection->request.Range.start > 0) + { + connection->request.Range.size = length; + if (connection->request.Range.end >= connection->request.Range.size || connection->request.Range.end == 0) + connection->request.Range.end = connection->request.Range.size - 1; + + if (connection->response.contentRange == NULL) + connection->response.contentRange = osAllocMem(255); + + osSprintf((char *)connection->response.contentRange, "bytes %" PRIu32 "-%" PRIu32 "/%" PRIu32, connection->request.Range.start, connection->request.Range.end, connection->request.Range.size); + connection->response.statusCode = 206; + connection->response.contentLength = connection->request.Range.end - connection->request.Range.start + 1; + TRACE_DEBUG("Added response range %s\r\n", connection->response.contentRange); + } + else + { + connection->response.statusCode = 200; + connection->response.contentLength = length; + } + connection->response.contentType = "audio/ogg"; + connection->response.chunkedEncoding = FALSE; + length = connection->response.contentLength; + + // Send the header to the client + error = httpWriteHeader(connection); + // Any error to report? + if (error) + { + // Close the file + fsCloseFile(file); + // Return status code + return error; + } + + if (connection->request.Range.start > 0 && connection->request.Range.start < connection->request.Range.size) + { + TRACE_DEBUG("Seeking file to %" PRIu64 "\r\n", connection->request.Range.start); + fsSeekFile(file, connection->request.Range.start, FS_SEEK_SET); + } + else + { + TRACE_DEBUG("No seeking, sending from beginning\r\n"); + } + + // Send response body + while (length > 0) + { + // Limit the number of bytes to read at a time + n = MIN(length, HTTP_SERVER_BUFFER_SIZE); + + // Read data from the specified file + error = fsReadFile(file, connection->buffer, n, &n); + // End of input stream? + if (error) + break; + + // Send data to the client + error = httpWriteStream(connection, connection->buffer, n); + // Any error to report? + if (error) + break; + + // Decrement the count of remaining bytes to be transferred + length -= n; + } + + // Close the file + fsCloseFile(file); + + // Successful file transfer? + if (error == NO_ERROR || error == ERROR_END_OF_FILE) + { + if (length == 0) + { + // Properly close the output stream + error = httpCloseStream(connection); + } + } + + // Return status code + return error; +} + /* const for now. later maybe dynamic? */ request_type_t request_paths[] = { /* reverse proxy handler */ {REQ_ANY, "/reverse", &handleReverse}, /* web interface directory */ {REQ_GET, "/www", &handleWww}, + {REQ_GET, "/ogg", &handleOgg}, /* custom API */ {REQ_POST, "/api/fileDelete", &handleApiFileDelete}, {REQ_POST, "/api/dirDelete", &handleApiDirectoryDelete}, From 50ab915d364f4869f03ced32683c1680facc025a Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Tue, 25 Jul 2023 10:33:16 +0200 Subject: [PATCH 21/52] added tonie info json --- contrib/www/tonies.json | 904 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 904 insertions(+) create mode 100644 contrib/www/tonies.json diff --git a/contrib/www/tonies.json b/contrib/www/tonies.json new file mode 100644 index 00000000..38c22456 --- /dev/null +++ b/contrib/www/tonies.json @@ -0,0 +1,904 @@ +[ +{ "no": "0", "model": "00-0000", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - (Platzhalter) - DE", "series": "Kreativ-Tonie", "episodes": "(Platzhalter) - DE", "tracks": [], "release": "1472688000", "language": "de", "category": "Kreativ-Tonies", "pic": "http://gt-blog.de/JSON/Kreativ-Tonie%20-%20(Platzhalter).png" }, +{ "no": "0", "model": "00-0000", "audio_id": ["1"], "hash": ["3630A243E9F382968A2883A437DB9BC78A1ACF13"], "title": "Creativ-Tonie - (DUMMY) - UK", "series": "Creativ-Tonie", "episodes": "(DUMMY) - UK", "tracks": [], "release": "1472688000", "language": "GB", "category": "Creative-Tonies", "pic": "http://gt-blog.de/JSON/Kreativ-Tonie%20-%20(Platzhalter).png" }, +{ "no": "0", "model": "00-0000", "audio_id": ["1"], "hash": ["6077D3FE350568A984573538E79F000A6D2780E2"], "title": "Creativ-Tonie - (DUMMY) - US", "series": "Creativ-Tonie", "episodes": "(DUMMY) - US", "tracks": [], "release": "1472688000", "language": "GB", "category": "Creative-Tonies", "pic": "http://gt-blog.de/JSON/Kreativ-Tonie%20-%20(Platzhalter).png" }, +{ "no": "0", "model": "00-0000", "audio_id": ["1"], "hash": [], "title": "Kreativ-Tonie - GESPERRT in einem anderen Haushalt", "series": "Kreativ-Tonie", "episodes": "GESPERRT in einem anderen Haushalt", "tracks": [], "release": "1472688000", "language": "de", "category": "Kreativ-Tonies", "pic": "https://www.drk-heidelberg.de/drk_heidelberg/images/extras/kreuz_falsch.jpg" }, + +{ "no": "1", "model": "2958132", "audio_id": ["1597842449"], "hash": ["7D9FB2F587B6F4E262C78AC2ADEF30B9D7BC9F40"], "title": "Creative-Tonie - Purple People with P (Starter Set limited Edition for US Start only)", "series": "Creative-Tonie", "episodes": "Purple People with P (Starter Set limited Edition for US Start only)", "tracks": [], "release": "1600819200", "language": "US", "category": "Creative-Tonies", "pic": "https://cdn.tonies.de/thumbnails/d25cb4078f2971e37507c35af79c9c28602f62a1.png" }, +{ "no": "2", "model": "2958132", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Purple White with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Purple White with Star (Starter Set)", "tracks": [], "release": "1600819200", "language": "US", "category": "Creative-Tonies", "pic": "" }, +{ "no": "3", "model": "2958132", "audio_id": ["1"], "hash": ["6077D3FE350568A984573538E79F000A6D2780E2"], "title": "Creative-Tonie - Purple Brown with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Purple Brown with Star (Starter Set)", "tracks": [], "release": "1600819200", "language": "US", "category": "Creative-Tonies", "pic": "" }, +{ "no": "4", "model": "2958132", "audio_id": ["1"], "hash": ["6077D3FE350568A984573538E79F000A6D2780E2"], "title": "Creative-Tonie - Purple Black with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Purple Black with Star (Starter Set)", "tracks": [], "release": "1600819200", "language": "US", "category": "Creative-Tonies", "pic": "https://cdn.tonies.de/thumbnails/74b629b5b5bb09b7cc797749291d5b956868e7f8.png" }, +{ "no": "5", "model": "19999999", "audio_id": ["1501087019"], "hash": ["26AD7A48B7D153D1CEDA753AF25E38833DB340DF"], "title": "DEMO TONIE - DEMO TONIE", "series": "DEMO TONIE", "episodes": "DEMO TONIE", "tracks": [], "release": "", "language": "de", "category": "DEMO TONIE", "pic": "" }, +{ "no": "6", "model": "02-0000", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - Türkis (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Türkis (Starterkit)", "tracks": [], "release": "1531267200", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/98-0614.png" }, +{ "no": "7", "model": "02-0000", "audio_id": ["1"], "hash": ["FF81F781BA4D453D8EAB01E7FDAA47A385B53FA2"], "title": "Kreativ-Tonie - Anthrazit mit Stern (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Anthrazit mit Stern (Starterkit)", "tracks": [], "release": "1539129600", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/98-0616.png" }, +{ "no": "8", "model": "02-0000", "audio_id": ["1"], "hash": ["E846951CA68FBDECF84D6AFA09C65BC31A8D106A"], "title": "Kreativ-Tonie - Beere mit Stern (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Beere mit Stern (Starterkit)", "tracks": [], "release": "1539129600", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/50000085.png" }, +{ "no": "9", "model": "02-0000", "audio_id": ["1"], "hash": ["B72DBA1C844437C51F1C63E27F2FDE7467B8296F"], "title": "Kreativ-Tonie - Rot mit Stern (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Rot mit Stern (Starterkit)", "tracks": [], "release": "1539129600", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/50000086.png" }, +{ "no": "10", "model": "02-0000", "audio_id": ["1"], "hash": ["57F921FB03E089335C34CA1859247792D1A9D65B"], "title": "Kreativ-Tonie - Blau mit Stern (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Blau mit Stern (Starterkit)", "tracks": [], "release": "1539129600", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/50000081.png" }, +{ "no": "11", "model": "02-0000", "audio_id": ["1"], "hash": ["7557B5F3FF8EEDD20BC10B760657AFDFB530243F"], "title": "Kreativ-Tonie - Grün mit Stern (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Grün mit Stern (Starterkit)", "tracks": [], "release": "1539129600", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/98-0620.png" }, +{ "no": "12", "model": "02-0000", "audio_id": ["1"], "hash": ["BB1A9D158A89E4D28E9DBC48C8D72212A90A2F26"], "title": "Kreativ-Tonie - Pink mit Stern (Starterkit)", "series": "Kreativ-Tonie", "episodes": "Pink mit Stern (Starterkit)", "tracks": [], "release": "1539129600", "language": "de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/50000084.png" }, +{ "no": "13", "model": "02-0000", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Grey with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Grey with Star (Starter Set)", "tracks": [], "release": "946684800", "language": "GB", "category": "Creative-Tonies", "pic": "https://tonies.de/assets/cache/10000164-50000544-b-U2mgjNXs.91cb8505.png" }, +{ "no": "14", "model": "02-0000", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Purple with Star (Starterkit)", "series": "Creative-Tonie", "episodes": "Purple with Star (Starterkit)", "tracks": [], "release": "946684800", "language": "GB", "category": "Creative-Tonies", "pic": "https://tonies.de/assets/cache/02-0002-a-aK184wTf.5d603d36.png" }, +{ "no": "15", "model": "02-0000", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Red with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Red with Star (Starter Set)", "tracks": [], "release": "946684800", "language": "GB", "category": "Creative-Tonies", "pic": "https://tonies.de/assets/cache/02-0023-b-4A-keiYD.e29009ad.png" }, +{ "no": "16", "model": "02-0000", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Light Blue with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Light Blue with Star (Starter Set)", "tracks": [], "release": "946684800", "language": "GB", "category": "Creative-Tonies", "pic": "https://tonies.de/assets/cache/02-0003-a-zGVkzyPk.ccab4893.png" }, +{ "no": "17", "model": "02-0000", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Green with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Green with Star (Starter Set)", "tracks": [], "release": "946684800", "language": "GB", "category": "Creative-Tonies", "pic": "" }, +{ "no": "18", "model": "02-0000", "audio_id": ["1"], "hash": [], "title": "Creative-Tonie - Pink with Star (Starter Set)", "series": "Creative-Tonie", "episodes": "Pink with Star (Starter Set)", "tracks": [], "release": "946684800", "language": "US", "category": "Creative-Tonies", "pic": "" }, +{ "no": "19", "model": "01-0000", "audio_id": ["1490954965"], "hash": ["43B590E78F561BD167A75D698B19C07323F766D6"], "title": "Geschichten vom Löwen - Die Geschichte vom Löwen, der nicht schreiben konnte", "series": "Geschichten vom Löwen", "episodes": "Die Geschichte vom Löwen, der nicht schreiben konnte", "tracks": [], "release": "1474934400", "language": "de", "category": "Hörspiele & Hörbücher", "pic": "https://media.moluna.de/images/bilder/a529/536/4251192100030_5_03-0004-03.png" }, +{ "no": "20", "model": "01-0000", "audio_id": ["1575064246","1573742024"], "hash": ["0513A5510AD394D5B6D65073F09862DF4A7AB437","E7783B4ECECEB0A03B4C8C25314434DFF13D2FCB"], "title": "Minimusiker - Weihnachtslieder", "series": "Minimusiker", "episodes": "Weihnachtslieder", "tracks": [], "release": "1575158400", "language": "de", "category": "Musik", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0032-98-0517-b-sPki-aR6.png" }, +{ "no": "21", "model": "01-0001", "audio_id": ["1490952835"], "hash": ["8DAF02437F070941B7DE1890A986A381B9F839EB"], "title": "Janosch - Oh, wie schön ist Panama", "series": "Janosch", "episodes": "Oh, wie schön ist Panama", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0001-98-0053-b-turiiCTi.png" }, +{ "no": "22", "model": "01-0002", "audio_id": ["1490953360"], "hash": ["5CC60897A8AE7FECEA1502CA05ADB14932CAB458"], "title": "Die Olchis - Die Olchis auf Geburtstagsreise", "series": "Die Olchis", "episodes": "Die Olchis auf Geburtstagsreise", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0002-98-0054-b-jCKXRduL.png" }, +{ "no": "23", "model": "01-0003", "audio_id": ["1490952874"], "hash": ["F609BA65B01FB1EAAF3201E0EB3387B75AADEA21"], "title": "Die Olchis - Die Olchis und der schwarze Pirat", "series": "Die Olchis", "episodes": "Die Olchis und der schwarze Pirat", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0003-98-0055-b-460I-xsI.png" }, +{ "no": "24", "model": "01-0004", "audio_id": ["1490952704"], "hash": ["9FA0D659A0FEE55230809EF907D7605E3B35CA2A"], "title": "Die Olchi-Detektive - Das Erbe der Piraten", "series": "Die Olchi-Detektive", "episodes": "Das Erbe der Piraten", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0004-98-0056-b-_Yr9cXo0.png" }, +{ "no": "25", "model": "01-0005", "audio_id": ["1490953718"], "hash": ["E4813D6B2C98D3BE0B5646EBC6B69C53A0AAB713"], "title": "Der kleine Rabe Socke - Alles erlaubt?", "series": "Der kleine Rabe Socke", "episodes": "Alles erlaubt?", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0005-98-0057-b-lHtpTXe5.png" }, +{ "no": "26", "model": "01-0006", "audio_id": ["1490969759"], "hash": ["C21ABA646527DF630E93BB6053E4CC9FA736B00B"], "title": "Maus - (M)auserlesene Lieder", "series": "Maus", "episodes": "(M)auserlesene Lieder", "tracks": [], "release": "1474934400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0006-b-VBRoor9F.png" }, +{ "no": "27", "model": "01-0007", "audio_id": ["1490953058"], "hash": ["750BF562670C513449974069A782C885F7F3D305"], "title": "Das Sams - Eine Woche voller Samstage", "series": "Das Sams", "episodes": "Eine Woche voller Samstage", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0007-98-0059-b-GrtvZ5U-.png" }, +{ "no": "28", "model": "01-0008", "audio_id": ["1561988350"], "hash": ["57AF2FF64E14AB0E9D30162D128EFBD9011C0E33"], "title": "Das Sams - Am Samstag kam das Sams zurück", "series": "Das Sams", "episodes": "Am Samstag kam das Sams zurück", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0008-98-0060-b-ky7cu1SZ.png" }, +{ "no": "29", "model": "01-0009", "audio_id": ["1490953780"], "hash": ["AF67D62142CF08D524DC4076F9547B80C3BA3371"], "title": "Bobo Siebenschläfer - Bobos Ausflug zum Spielplatz", "series": "Bobo Siebenschläfer", "episodes": "Bobos Ausflug zum Spielplatz", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0009-98-0061-b-l0kNc0lG.png" }, +{ "no": "30", "model": "01-0010", "audio_id": ["1490952230"], "hash": ["F48E05C4F967D28FECD551EB6A5C0F5D99B783EC"], "title": "Conni - Conni kommt in den Kindergarten / Conni macht das Seepferdchen", "series": "Conni", "episodes": "Conni kommt in den Kindergarten / Conni macht das Seepferdchen", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0010-98-0062-b-_fVvzXIj.png" }, +{ "no": "31", "model": "01-0011", "audio_id": ["1490954387"], "hash": ["BEF46C4D08AA050898612D62E3AD62E4CB74615A"], "title": "Conni - Conni auf dem Bauernhof / Conni und das neue Baby", "series": "Conni", "episodes": "Conni auf dem Bauernhof / Conni und das neue Baby", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0011-98-0063-b-u_mbZFYI.png" }, +{ "no": "32", "model": "01-0012", "audio_id": ["1490952276"], "hash": ["1ED597A53319204E6C6C9D8240142B0B9B4F2297"], "title": "Bibi Blocksberg - Hexen gibt es doch", "series": "Bibi Blocksberg", "episodes": "Hexen gibt es doch", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0012-98-0064-b-LyJLOsk6.png" }, +{ "no": "33", "model": "01-0013", "audio_id": ["1490954302"], "hash": ["DE2E96DCAEF3C0251104354AAE218323BB0D804A"], "title": "Benjamin Blümchen - Der Zoo-Kindergarten", "series": "Benjamin Blümchen", "episodes": "Der Zoo-Kindergarten", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0013-98-0065-b-16Kl6TCe.png" }, +{ "no": "34", "model": "01-0014", "audio_id": ["1490955104"], "hash": ["0DB4521B90EAC3DCA1C14E65733AFBBC1D17549B"], "title": "Benjamin Blümchen - Benjamin als Baggerfahrer", "series": "Benjamin Blümchen", "episodes": "Benjamin als Baggerfahrer", "tracks": [], "release": "1474934400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0014-b-bNX6ajHQ.png" }, +{ "no": "35", "model": "01-0018", "audio_id": ["1490987835"], "hash": ["BB141E1EFB7C2BFBC594963DA09D8BCDD6019FDF"], "title": "Kleiner Eisbär - Lars, lass mich nicht allein! / Lars und der Angsthase", "series": "Kleiner Eisbär", "episodes": "Lars, lass mich nicht allein! / Lars und der Angsthase", "tracks": [], "release": "1481155200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0018-98-0089-b-zF5lupDs.png" }, +{ "no": "36", "model": "01-0019", "audio_id": ["1483546545"], "hash": ["CD1F1F3CF94F6AA6017C97107A929F74E662BE57"], "title": "Der Grüffelo - Der Grüffelo", "series": "Der Grüffelo", "episodes": "Der Grüffelo", "tracks": [], "release": "1481155200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0019-98-0090-b-j3K9c6nT.png" }, +{ "no": "37", "model": "01-0020", "audio_id": ["1490961684"], "hash": ["3CFAC73F49FD96CA3E6D420C603480D9E2F98AAE"], "title": "Die Olchis - Die Olchis werden Fußballmeister", "series": "Die Olchis", "episodes": "Die Olchis werden Fußballmeister", "tracks": [], "release": "1481155200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0020-98-0091-b-HVOj8kjL.png" }, +{ "no": "38", "model": "01-0021", "audio_id": ["1490968382"], "hash": ["5B07154A51AE4BCA8AC39E529421C86466E66CAB"], "title": "Unter meinem Bett - Unter meinem Bett 1", "series": "Unter meinem Bett", "episodes": "Unter meinem Bett 1", "tracks": [], "release": "1481155200", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0021-98-0092-b-PcfHwbBS.png" }, +{ "no": "39", "model": "01-0022", "audio_id": ["1480012266"], "hash": ["CB6B622A16027B45F53FF3341E5F7C91829E1BBB"], "title": "Janosch - Ich mach dich gesund, sagte der Bär", "series": "Janosch", "episodes": "Ich mach dich gesund, sagte der Bär", "tracks": [], "release": "1481155200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0022-b-m5cXI77L.png" }, +{ "no": "40", "model": "01-0023", "audio_id": ["1490989863"], "hash": ["93DD0A6629388FC5FE737A3849888DFF7F2FD7E4"], "title": "Der kleine Drache Kokosnuss - Hörspiel zur TV-Serie 01", "series": "Der kleine Drache Kokosnuss", "episodes": "Hörspiel zur TV-Serie 01", "tracks": [], "release": "1481155200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0023-b-zxxpVjnn.png" }, +{ "no": "41", "model": "01-0024", "audio_id": ["1490961165"], "hash": ["C9DC94F5FAA7FACD70C8A153B7C9C99C14F05ECF"], "title": "Bobo Siebenschläfer - Bobo feiert Kindergeburtstag", "series": "Bobo Siebenschläfer", "episodes": "Bobo feiert Kindergeburtstag", "tracks": [], "release": "1481155200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0024-b-LXTpMq6U.png" }, +{ "no": "42", "model": "01-0025", "audio_id": ["1486561806"], "hash": ["9A30E4C6720636ABD371F7E1E62990366B80E4FA"], "title": "Teufelskicker - Moritz macht das Spiel!", "series": "Teufelskicker", "episodes": "Moritz macht das Spiel!", "tracks": [], "release": "1490313600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0025-98-0101-b-462wp9fG.png" }, +{ "no": "43", "model": "01-0027", "audio_id": ["1486543535"], "hash": ["BF9374148A23770463CDAB0574F3E82BACCA281B"], "title": "Ritter Rost - Die Zauberinsel", "series": "Ritter Rost", "episodes": "Die Zauberinsel", "tracks": [], "release": "1487548800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0027-98-0102-b-uwKLIYwp.png" }, +{ "no": "44", "model": "01-0028", "audio_id": ["1486647727"], "hash": ["13B9C6FF850EDB54FF576F27F9BBAD698628D37F"], "title": "Conni - Conni backt Pizza / Conni lernt Rad fahren", "series": "Conni", "episodes": "Conni backt Pizza / Conni lernt Rad fahren", "tracks": [], "release": "1490313600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0028-98-0104-b-PzewoATX.png" }, +{ "no": "45", "model": "01-0030", "audio_id": ["1486558877"], "hash": ["25C613A357AF4A24447D0CAA437AC64A41081762"], "title": "Bibi Blocksberg - Die große Hexenparty", "series": "Bibi Blocksberg", "episodes": "Die große Hexenparty", "tracks": [], "release": "1487548800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0030-98-0105-b-RdNqqFbV.png" }, +{ "no": "46", "model": "01-0031", "audio_id": ["1486650326"], "hash": ["4C986C747CECCB881B41A5181BA4D46272860633"], "title": "Wickie - Wasser auf die Mühlen", "series": "Wickie", "episodes": "Wasser auf die Mühlen", "tracks": [], "release": "1490313600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0031-98-0107-b-ahLQEvh7.png" }, +{ "no": "47", "model": "01-0032", "audio_id": ["1486567458"], "hash": ["9B49C1FD3EBF6DB6BA18A21F2A2104A4679CFED9"], "title": "Heidi - Die Reise zum Großvater", "series": "Heidi", "episodes": "Die Reise zum Großvater", "tracks": [], "release": "1490313600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0032-98-0108-b-Sdcz5OyY.png" }, +{ "no": "48", "model": "01-0033", "audio_id": ["1486489725"], "hash": ["193C3AE24BF8487BA2C6D0D8CF851B89EAB989CF"], "title": "Der Räuber Hotzenplotz - Der Räuber Hotzenplotz", "series": "Der Räuber Hotzenplotz", "episodes": "Der Räuber Hotzenplotz", "tracks": [], "release": "1487548800", "language": "de-de", "category": "Hörspiele & Hörbücher", "pic": "https://tonies.de/assets/cache/01-0033-b-10hnQd0R.cff20468.png" }, +{ "no": "49", "model": "01-0034", "audio_id": ["1490357985"], "hash": ["E0CA0638FFEC056F4EC5991C19523370B3EE4EB3"], "title": "Griechische Sagen - Griechische Sagen", "series": "Griechische Sagen", "episodes": "Griechische Sagen", "tracks": [], "release": "1490313600", "language": "de-de", "category": "Wissen", "pic": "https://tonies.de/assets/cache/01-0034-b-XtRo_RGK.987bcf9c.png" }, +{ "no": "50", "model": "01-0035", "audio_id": ["1488447947"], "hash": ["14ADC00F025D7C0B18A63B0031E5F8292E7BBC97"], "title": "Der kleine Rabe Socke - Alles vermurkst!", "series": "Der kleine Rabe Socke", "episodes": "Alles vermurkst!", "tracks": [], "release": "1487548800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0035-b-jTJXC9QB.png" }, +{ "no": "51", "model": "01-0036", "audio_id": ["1486648850","1599063181"], "hash": ["98FA163BF48F71C08CDE709D50A539DD147DCBA9","7C32BD51D1D686CE179B182014075CC6C9910C44"], "title": "Bibi & Tina - Die Wildpferde – Teil 1", "series": "Bibi & Tina", "episodes": "Die Wildpferde – Teil 1", "tracks": [], "release": "1491523200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0036-98-0112-b-NMfRYDab.png" }, +{ "no": "52", "model": "01-0037", "audio_id": ["1486649279"], "hash": ["5DFACFF8A97C808852EE7CE631E4EB8B4E3290E4"], "title": "Bibi & Tina - Die Wildpferde – Teil 2", "series": "Bibi & Tina", "episodes": "Die Wildpferde – Teil 2", "tracks": [], "release": "1491523200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0037-98-0113-b-T-BqhtEY.png" }, +{ "no": "53", "model": "01-0038", "audio_id": ["1487085725"], "hash": ["9076E0EAD6460E7E732939D7663B3C8C3981E8A4"], "title": "WAS IST WAS - Dinosaurier / Ausgestorbene Tiere", "series": "WAS IST WAS", "episodes": "Dinosaurier / Ausgestorbene Tiere", "tracks": [], "release": "1490313600", "language": "de-de", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0038-98-0114-b-crV8N6cL.png" }, +{ "no": "54", "model": "01-0039", "audio_id": ["1516116649"], "hash": ["998DC50CCCBEA684D53A6A890524384BB2D37589"], "title": "WAS IST WAS - Wunderbare Pferde/Reitervolk Mongolen", "series": "WAS IST WAS", "episodes": "Wunderbare Pferde/Reitervolk Mongolen", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0039-98-0115-b-yyDNlYBB.png" }, +{ "no": "55", "model": "01-0040", "audio_id": ["1489080791"], "hash": ["5915EECEC17F04B47122E8C454C695E4A8F9F425"], "title": "Unter meinem Bett - Unter meinem Bett 2", "series": "Unter meinem Bett", "episodes": "Unter meinem Bett 2", "tracks": [], "release": "1490313600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0040-98-0116-b-0LUCF0o8.png" }, +{ "no": "56", "model": "01-0041", "audio_id": ["1494600617"], "hash": ["70D299E9A95646E59811022014B80B390520CDFF"], "title": "Die drei ??? Kids - Panik im Paradies", "series": "Die drei ??? Kids", "episodes": "Panik im Paradies", "tracks": [], "release": "1498521600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0041-b-pKQi4Iqs.png" }, +{ "no": "57", "model": "01-0042", "audio_id": ["1494603501"], "hash": ["E1868443A3F33059BB099F3CBB2F7AF53598E678"], "title": "Die drei ??? Kids - Radio Rocky Beach", "series": "Die drei ??? Kids", "episodes": "Radio Rocky Beach", "tracks": [], "release": "1498521600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0042-b-y1dcNyjv.png" }, +{ "no": "58", "model": "01-0043", "audio_id": ["1494604545"], "hash": ["982B01F66ECD3FB94599DEC013ADE696D625CA5C"], "title": "Die drei ??? Kids - Invasion der Fliegen", "series": "Die drei ??? Kids", "episodes": "Invasion der Fliegen", "tracks": [], "release": "1498521600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0043-b-r8U2X9kr.png" }, +{ "no": "59", "model": "01-0044", "audio_id": ["1490108080"], "hash": ["16CB3C60FE1B053700F07026FA858BC2562869E6"], "title": "Der kleine Drache Kokosnuss - Hörspiel zur TV-Serie 02", "series": "Der kleine Drache Kokosnuss", "episodes": "Hörspiel zur TV-Serie 02", "tracks": [], "release": "1489622400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0044-98-0120-b-NYnKqZrH.png" }, +{ "no": "60", "model": "01-0046", "audio_id": ["1497366055"], "hash": ["1877D771582598A10E9B1751BEA792537615D6B7"], "title": "Der kleine Hui Buh - Wie Hui Buh seine Rasselkette bekam/Die Halloween-Party", "series": "Der kleine Hui Buh", "episodes": "Wie Hui Buh seine Rasselkette bekam/Die Halloween-Party", "tracks": [], "release": "1499731200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0046-98-0122-b-8uPwtFMW.png" }, +{ "no": "61", "model": "01-0047", "audio_id": ["1494261627"], "hash": ["1DCEA2F152234CAFB0AAA1F7A0E203F71E1AAD7E"], "title": "Die Olchi-Detektive - Ritter der Popelrunde", "series": "Die Olchi-Detektive", "episodes": "Ritter der Popelrunde", "tracks": [], "release": "1489622400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0047-b-tmMVQ5fC.png" }, +{ "no": "62", "model": "01-0048", "audio_id": ["1490291885"], "hash": ["574BB050383E37D08F99B1412212DDD52C4983E5"], "title": "Lieblings-Kinderlieder - Schlaflieder", "series": "Lieblings-Kinderlieder", "episodes": "Schlaflieder", "tracks": [], "release": "1494892800", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0048-b-Nne5Ush0.6698bd43.png" }, +{ "no": "63", "model": "01-0049", "audio_id": ["1494587913"], "hash": ["7645CCA44DA9B4ED1450B0BDB3959E1C5149F310"], "title": "Ella - Ella in der Schule", "series": "Ella", "episodes": "Ella in der Schule", "tracks": [], "release": "1499731200", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0049-98-0125-b-GSMYClu0.png" }, +{ "no": "64", "model": "01-0050", "audio_id": ["1496420327"], "hash": ["07569C04E6E393E618280D160DC53BE661DDBA79"], "title": "Käpt'n Sharky - Käpt’n Sharky und das Geheimnis der Schatzinsel", "series": "Käpt'n Sharky", "episodes": "Käpt’n Sharky und das Geheimnis der Schatzinsel", "tracks": [], "release": "1499731200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0050-98-0126-b-k9784EEf.png" }, +{ "no": "65", "model": "01-0051", "audio_id": ["1499761300"], "hash": ["57AF01BF655803F39E063D0EE3F80984D93BB93A"], "title": "Kikaninchen - Mein Geschichtenkissen", "series": "Kikaninchen", "episodes": "Mein Geschichtenkissen", "tracks": [], "release": "1506384000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0051-b-JkqDkha0.png" }, +{ "no": "66", "model": "01-0053", "audio_id": ["1497362810"], "hash": ["B34C99E6EA7E33F9144959924E12D2E6C7C1E019"], "title": "Der kleine Drache Kokosnuss - Hörspiel zur TV-Serie 03", "series": "Der kleine Drache Kokosnuss", "episodes": "Hörspiel zur TV-Serie 03", "tracks": [], "release": "1499731200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0053-98-0129-b-TpXo0Lqb.png" }, +{ "no": "67", "model": "01-0054", "audio_id": ["1509029455"], "hash": ["FE66BD616ED713B071EB5FAA59513A5A801EB75F"], "title": "Mia and me - Mia und die Elfen", "series": "Mia and me", "episodes": "Mia und die Elfen", "tracks": [], "release": "1506384000", "language": "de-de", "category": "Hörspiele & Hörbücher", "pic": "https://tonies.de/assets/cache/01-0054-b-tB1g6UpN.9022b6e2.png" }, +{ "no": "68", "model": "01-0058", "audio_id": ["1498658278"], "hash": ["2A4712EC8CA22737F0BD3F15D66C76FD3EF9C6C5"], "title": "Prinzessin Lillifee - Prinzessin Lillifee", "series": "Prinzessin Lillifee", "episodes": "Prinzessin Lillifee", "tracks": [], "release": "1506384000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0058-b-3iFL2hGp.png" }, +{ "no": "69", "model": "01-0059", "audio_id": ["1565619974"], "hash": ["FB7A10017EA1CECDBBB639712381E1BB426B6488"], "title": "Ich - einfach unverbesserlich - Ich - einfach unverbesserlich 1", "series": "Ich - einfach unverbesserlich", "episodes": "Ich - einfach unverbesserlich 1", "tracks": [], "release": "1570665600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0059-98-0136-b-AV5ke_ki.png" }, +{ "no": "70", "model": "01-0060", "audio_id": ["1503563886"], "hash": ["2357B01BBB21A544917EB22C5D9E24C43D976487"], "title": "Wickie - Die Königin der Winde", "series": "Wickie", "episodes": "Die Königin der Winde", "tracks": [], "release": "1506384000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0060-98-0137-b-M_0MS6Wi.png" }, +{ "no": "71", "model": "01-0061", "audio_id": ["1503565716"], "hash": ["E371321DCEDFAD777227A513FC990BDC4258FF31"], "title": "Heidi - Freunde für immer", "series": "Heidi", "episodes": "Freunde für immer", "tracks": [], "release": "1506384000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0061-98-0138-b-_-xGEyHw.png" }, +{ "no": "72", "model": "01-0062", "audio_id": ["1527152598"], "hash": ["F22E73DE2EFC60FC313C27CCFBA87DAC0AC23F1E"], "title": "Unser Sandmännchen - Nachts, wenn alles schläft", "series": "Unser Sandmännchen", "episodes": "Nachts, wenn alles schläft", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0062-b-zI_reOjP.png" }, +{ "no": "73", "model": "01-0063", "audio_id": ["1510833110"], "hash": ["4DEB83FE051585EB82D6E1E2D7CE3C852DF93C2B"], "title": "Benjamin Blümchen - Ein Törööö für alle Fälle", "series": "Benjamin Blümchen", "episodes": "Ein Törööö für alle Fälle", "tracks": [], "release": "1511222400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0063-98-0140-b-sIMC5DNS.png" }, +{ "no": "74", "model": "01-0064", "audio_id": ["1539359525"], "hash": ["26556087408216B14ED0DA5375DE059C6F613969"], "title": "Der Räuber Hotzenplotz - Neues vom Räuber Hotzenplotz", "series": "Der Räuber Hotzenplotz", "episodes": "Neues vom Räuber Hotzenplotz", "tracks": [], "release": "1541548800", "language": "de-de", "category": "Hörspiele & Hörbücher", "pic": "https://tonies.de/assets/cache/01-0064-98-0141-b-6r4_KSYE.6ec2db8b.png" }, +{ "no": "75", "model": "01-0065", "audio_id": ["1506459498"], "hash": ["C62AEEE7ADC23BCC8EECA4CE1A288EA480E95237"], "title": "Die kleine Hexe - Die kleine Hexe", "series": "Die kleine Hexe", "episodes": "Die kleine Hexe", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0065-98-0142-b-2sAuxmBo.png" }, +{ "no": "76", "model": "01-0069", "audio_id": ["1510149293"], "hash": ["E57FEACCC01A66247CDEAF6D71956FF335930081"], "title": "Der Grüffelo - Das Grüffelokind", "series": "Der Grüffelo", "episodes": "Das Grüffelokind", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0069-b-_iCeNthx.png" }, +{ "no": "77", "model": "01-0081", "audio_id": ["1508755908"], "hash": ["C505AAAE5B61E74D2C7D23AD0DD08607685685C6"], "title": "Pettersson und Findus - Wie Findus zu Pettersson kam", "series": "Pettersson und Findus", "episodes": "Wie Findus zu Pettersson kam", "tracks": [], "release": "1511222400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0081-98-0128-b-vIi7BJNN.png" }, +{ "no": "78", "model": "01-0082", "audio_id": ["1506513728"], "hash": ["161392572BEB9A55948089BF8FA6EC3528F48E84"], "title": "Der kleine Prinz - Der Kleine Prinz", "series": "Der kleine Prinz", "episodes": "Der Kleine Prinz", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0082-b-XrRX3opY.png" }, +{ "no": "79", "model": "01-0083", "audio_id": ["1516184888"], "hash": ["733F286BB11B9A6E8085E681D2ECA1BF06719576"], "title": "Leo Lausemaus - Das Original-Hörspiel zu den Büchern 1", "series": "Leo Lausemaus", "episodes": "Das Original-Hörspiel zu den Büchern 1", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0083-b-gcqfnmAb.png" }, +{ "no": "80", "model": "01-0084", "audio_id": ["1542989590"], "hash": ["1974E8A6EB41AE741A6DA6FC269214E175A1E012"], "title": "Yakari - Best of Yakari", "series": "Yakari", "episodes": "Best of Yakari", "tracks": [], "release": "1543449600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0084-98-0263-b-vWGFGbgO.png" }, +{ "no": "81", "model": "01-0095", "audio_id": ["1542989851"], "hash": ["7D1ABF09D437B2EE160FCFE98E2573AF32D5235E"], "title": "Die Eule mit der Beule - Die kleine Eule feiert Weihnachten", "series": "Die Eule mit der Beule", "episodes": "Die kleine Eule feiert Weihnachten", "tracks": [], "release": "1543363200", "language": "de-de", "category": "Hörspiele & Hörbücher", "pic": "https://tonies.de/assets/cache/01-0095-98-0586-b-eGPAP8Ml.3362f65f.png" }, +{ "no": "82", "model": "01-0097", "audio_id": ["1506953861"], "hash": ["18006BCAA0A9F1EF808968039994922BD6C59487"], "title": "Die Sendung mit dem Elefanten - Schlaf schön!", "series": "Die Sendung mit dem Elefanten", "episodes": "Schlaf schön!", "tracks": [], "release": "1511222400", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0097-b-dug9HEPg.png" }, +{ "no": "83", "model": "01-0098", "audio_id": ["1506516170"], "hash": ["D734CBD53079912F5097F08C2D9853510534D0A8"], "title": "Die Eule mit der Beule - Die Eule mit der Beule", "series": "Die Eule mit der Beule", "episodes": "Die Eule mit der Beule", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0098-b-vLgwS2fW.png" }, +{ "no": "84", "model": "01-0100", "audio_id": ["1542108286","1605531741"], "hash": ["A8EAA6F788CAE24FF8FE44281C73F9414ECCCACC","EE9951C7160AC377AAA732E3F93173AB892137F6"], "title": "Die Schule der magischen Tiere - Die Schule der magischen Tiere", "series": "Die Schule der magischen Tiere", "episodes": "Die Schule der magischen Tiere", "tracks": [], "release": "1541635200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0100-98-0322-b-FrJN465A.png" }, +{ "no": "85", "model": "01-0101", "audio_id": ["1571644754"], "hash": ["296F70606833670626F7FF7799BEE347F856D8B4"], "title": "Die drei !!! - Das Geheimnis der alten Villa", "series": "Die drei !!!", "episodes": "Das Geheimnis der alten Villa", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0101-50000674-b-1kgWReJw.png" }, +{ "no": "86", "model": "01-0102", "audio_id": ["1584954252"], "hash": ["126AFC63FBB6B33200D453639A7BE89ECA1195BE"], "title": "Die drei !!! - Mission Pferdeshow", "series": "Die drei !!!", "episodes": "Mission Pferdeshow", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0102-50000676-b-nKX6mBj8.png" }, +{ "no": "87", "model": "01-0103", "audio_id": ["1589541986"], "hash": ["E991E2D53EC15A3D01986AB31ED2477629190FA7"], "title": "Die drei !!! - Das rote Phantom", "series": "Die drei !!!", "episodes": "Das rote Phantom", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0103-50000678-b-aOvfd43E.png" }, +{ "no": "88", "model": "01-0104", "audio_id": ["1505225683","1663574097"], "hash": ["EE98EC1D9560965F3D0EF4C18FA54FBACD216357","84E63A3DE4D36C0C8DC8A22FCA45D29ADBB69AF8"], "title": "Eule findet den Beat - Ein Entdeckerflug durch die Musikwelt", "series": "Eule findet den Beat", "episodes": "Ein Entdeckerflug durch die Musikwelt", "tracks": [], "release": "1506384000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0104-98-0326-b-7C2ZQTZ6.png" }, +{ "no": "89", "model": "01-0105", "audio_id": ["1516197093"], "hash": ["379317010AB4888A58C347542213AC0E3656C105"], "title": "Janosch - Post für den Tiger", "series": "Janosch", "episodes": "Post für den Tiger", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0105-98-0327-b-pZgpaHwe.png" }, +{ "no": "90", "model": "01-0106", "audio_id": ["1505220230"], "hash": ["F917D46FB256978EF35DF62491EFC9A9142CF292"], "title": "Käpt'n Sharky - Käpt'n Sharky und das Seeungeheuer", "series": "Käpt'n Sharky", "episodes": "Käpt'n Sharky und das Seeungeheuer", "tracks": [], "release": "1506384000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0106-98-0147-b-itCt6u4_.png" }, +{ "no": "91", "model": "01-0107", "audio_id": ["1505734286"], "hash": ["C56DEBFADA771650994B0666EB63792EA2EEA227"], "title": "Liliane Susewind - Ein Meerschwein ist nicht gern allein", "series": "Liliane Susewind", "episodes": "Ein Meerschwein ist nicht gern allein", "tracks": [], "release": "1511222400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0107-98-0330-b-Uq_G4X2f.png" }, +{ "no": "92", "model": "01-0108", "audio_id": ["1506522101"], "hash": ["FFB1C3856DAC652008BFF6DEBAB4033A2B2A9E54"], "title": "Unter meinem Bett - Unter meinem Bett 3", "series": "Unter meinem Bett", "episodes": "Unter meinem Bett 3", "tracks": [], "release": "1511222400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0108-98-0331-b-md0ZW4iF.png" }, +{ "no": "93", "model": "01-0109", "audio_id": ["1520616479"], "hash": ["779C666F0918E04A9D976F7FE74D9A3D9B41DEAA"], "title": "Dr. Brumm - Dr. Brumm steckt fest/Dr. Brumm geht baden", "series": "Dr. Brumm", "episodes": "Dr. Brumm steckt fest/Dr. Brumm geht baden", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0109-98-0332-b-yc5xb9lc.png" }, +{ "no": "94", "model": "01-0110", "audio_id": ["1506518482"], "hash": ["E2DDCB9E5B8B331F2A0CD9EC67F059201B813117"], "title": "Der kleine Rabe Socke - Alles Schule!", "series": "Der kleine Rabe Socke", "episodes": "Alles Schule!", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0110-98-0334-b-XhHKt0b6.png" }, +{ "no": "95", "model": "01-0111", "audio_id": ["1513704577"], "hash": ["394225283CDDC2231769512C965C573201D2E359"], "title": "Bibi Blocksberg - Der Affe ist los", "series": "Bibi Blocksberg", "episodes": "Der Affe ist los", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0111-98-0335-b-4cPpMOlh.png" }, +{ "no": "96", "model": "01-0112", "audio_id": ["1505737657"], "hash": ["4423859B12F029F8879A0B2DDC4F886EF568FFB8"], "title": "Anne Kaffeekanne - 12 Lieder zum Singen, Spielen und Tanzen", "series": "Anne Kaffeekanne", "episodes": "12 Lieder zum Singen, Spielen und Tanzen", "tracks": [], "release": "1511222400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0112-b-tDoZCy1f.png" }, +{ "no": "97", "model": "01-0113", "audio_id": ["1506950840"], "hash": ["D6F0F882EB65D4F71A80CD467B1BAA50C223C3AC"], "title": "Bibi & Tina - Der verschwundene Pokal", "series": "Bibi & Tina", "episodes": "Der verschwundene Pokal", "tracks": [], "release": "1511222400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0113-98-0337-b-P72oTyl_.png" }, +{ "no": "98", "model": "01-0114", "audio_id": ["1506952133"], "hash": ["E3BE5309B28F12F115600132904CC8FDFC09D3B4"], "title": "Bibi & Tina - Die Waschbären sind los", "series": "Bibi & Tina", "episodes": "Die Waschbären sind los", "tracks": [], "release": "1511222400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0114-98-0338-b-fM8SKAgm.png" }, +{ "no": "99", "model": "01-0116", "audio_id": ["1615480986"], "hash": ["93C18742D5BF861C71D855871A94A7916128ADB0"], "title": "Alea Aquarius - Die Magie der Nixen", "series": "Alea Aquarius", "episodes": "Die Magie der Nixen", "tracks": [], "release": "1618444800", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0116-50002708-b-txQpbUIa.png" }, +{ "no": "100", "model": "01-0118", "audio_id": ["1628505371"], "hash": ["7FFF3246429934809591E29BDF4E8895F86891A6"], "title": "Mascha und der Bär - Ein neuer Freund für Mascha", "series": "Mascha und der Bär", "episodes": "Ein neuer Freund für Mascha", "tracks": [], "release": "1631145600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0118-50001193-b-3_L7GGar.png" }, +{ "no": "101", "model": "01-0119", "audio_id": ["1613995997"], "hash": ["069CC60A7AA0A227C0ED791114879D7653516964"], "title": "Elmar - Kunterbunte Geschichten", "series": "Elmar", "episodes": "Kunterbunte Geschichten", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0119-50001857-b-CwEETDO8.png" }, +{ "no": "102", "model": "01-0120", "audio_id": ["1539360305"], "hash": ["7D1235872B8F4C39B2A3D2552F91C18277B62496"], "title": "Lieblings-Klassiker - Pinocchio und 4 weitere Klassiker", "series": "Lieblings-Klassiker", "episodes": "Pinocchio und 4 weitere Klassiker", "tracks": [], "release": "1540425600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0120-98-0343-b-Q1howk5T.png" }, +{ "no": "103", "model": "01-0122", "audio_id": ["1520618022"], "hash": ["2F5FB456E421304BCFFE90D6B4C3D122EC1CC18A"], "title": "Maulwurf - Vom kleinen Maulwurf, der wissen wollte, wer ihm auf den Kopf gemacht hat/Die Rache des Hans-Heinerich", "series": "Maulwurf", "episodes": "Vom kleinen Maulwurf, der wissen wollte, wer ihm auf den Kopf gemacht hat/Die Rache des Hans-Heinerich", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0122-98-0344-b-yR9lvmFr.png" }, +{ "no": "104", "model": "01-0123", "audio_id": ["1504025966"], "hash": ["6C0B924F1B5D4E898A2F2A8F23DEEF96A1F32D95"], "title": "Rotz 'n' Roll Radio - Jubel, Trubel, Heiserkeit", "series": "Rotz 'n' Roll Radio", "episodes": "Jubel, Trubel, Heiserkeit", "tracks": [], "release": "1511222400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0123-b-T06QPTxB.png" }, +{ "no": "105", "model": "01-0124", "audio_id": ["1505232981"], "hash": ["0B5277535FFC20350E0D3379D89B3D9A663835B6"], "title": "Lieblings-Kinderlieder - Spiel- und Bewegungslieder", "series": "Lieblings-Kinderlieder", "episodes": "Spiel- und Bewegungslieder", "tracks": [], "release": "1506384000", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0124-98-0346-b-SobhWaFv.2448f2e9.png" }, +{ "no": "106", "model": "01-0125", "audio_id": ["1555502575"], "hash": ["DDDE01C8053BD2375038DC4E1A86545EA7814BE4"], "title": "Deine Freunde - Das Gelbe von Drei", "series": "Deine Freunde", "episodes": "Das Gelbe von Drei", "tracks": [], "release": "1559779200", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0125-98-0347-b-fFy5FDPN.png" }, +{ "no": "107", "model": "01-0126", "audio_id": ["1522134717"], "hash": ["D27FD54AD7DBDF2F2468C490839EFA09BE8ABAEE"], "title": "Die Gäng - D!e Gäng", "series": "Die Gäng", "episodes": "D!e Gäng", "tracks": [], "release": "1528329600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0126-98-0348-b-LCEoZX0w.png" }, +{ "no": "108", "model": "01-0127", "audio_id": ["1508506646"], "hash": ["7B9F1DD1C8ACE3026808B293EF3531F0309A5B0A"], "title": "Lieselotte - Ein Geburtstagsfest für Lieselotte und andere Geschichten", "series": "Lieselotte", "episodes": "Ein Geburtstagsfest für Lieselotte und andere Geschichten", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0127-98-0349-b-wNXyNeLt.png" }, +{ "no": "109", "model": "01-0128", "audio_id": ["1506519950"], "hash": ["3BE2F4C9D08353C27F2B2BAE91A9A22601EDA9D9"], "title": "Lieblings-Kinderlieder - Weihnachtslieder", "series": "Lieblings-Kinderlieder", "episodes": "Weihnachtslieder", "tracks": [], "release": "1510012800", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0128-b-Wkk0E5Dx.7777b503.png" }, +{ "no": "110", "model": "01-0129", "audio_id": ["1497370173"], "hash": ["D59E8614F9624BF54DF3384C4315E2EE8757B425"], "title": "Lieblings-Kinderlieder - Geburtstagslieder", "series": "Lieblings-Kinderlieder", "episodes": "Geburtstagslieder", "tracks": [], "release": "1499731200", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0048-b-qDvlQhqu.4175ebcd.png" }, +{ "no": "111", "model": "01-0130", "audio_id": ["1506442732"], "hash": ["F0D38E35469FB21EF0B3112B7814F41D8C427118"], "title": "Maus - Schlaf schön!", "series": "Maus", "episodes": "Schlaf schön!", "tracks": [], "release": "1508198400", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0130-98-0376-b-PumoLIWK.png" }, +{ "no": "112", "model": "01-0133", "audio_id": ["1510832922"], "hash": ["B73209796FCB87FE3BAAE7056B90E7725614DA52"], "title": "Bummelkasten - Irgendwas Bestimmtes", "series": "Bummelkasten", "episodes": "Irgendwas Bestimmtes", "tracks": [], "release": "1511222400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0133-98-0409-b-nkyNQnxs.png" }, +{ "no": "113", "model": "01-0137", "audio_id": ["1516115039"], "hash": ["71B071B6F06FDE25C2207D779C6D6EE2D6F6D610"], "title": "Stockmann - Stockmann", "series": "Stockmann", "episodes": "Stockmann", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0137-b-6_zPmLKY.png" }, +{ "no": "114", "model": "01-0138", "audio_id": ["1542990132","1611240613"], "hash": ["584B4A4D2F0FA97B2D9279FB3BCAA1AE4E10CD75","8B1D3BF4186651BCC978691235AA5BD0284B0666"], "title": "Lieblings-Kinderlieder - Englische Lieder", "series": "Lieblings-Kinderlieder", "episodes": "Englische Lieder", "tracks": [], "release": "1543449600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0138-98-0417-b-hDcNOd6Z.png" }, +{ "no": "115", "model": "01-0139", "audio_id": ["1597844784"], "hash": ["6D721696277CF60E7293DC2758FA63D964BF57D0"], "title": "Der kleine Siebenschläfer - Die Geschichte vom kleinen Siebenschläfer, der nicht einschlafen konnte", "series": "Der kleine Siebenschläfer", "episodes": "Die Geschichte vom kleinen Siebenschläfer, der nicht einschlafen konnte", "tracks": [], "release": "1599696000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0139-50001491-b-sa1ZxbvZ.png" }, +{ "no": "116", "model": "01-0140", "audio_id": ["1522159155"], "hash": ["1602C2770A02B8113DA29341CCAFD9231ABAB789"], "title": "WAS IST WAS - Raumfahrt/Der Mond", "series": "WAS IST WAS", "episodes": "Raumfahrt/Der Mond", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0140-b-lTY7WnkE.png" }, +{ "no": "117", "model": "01-0141", "audio_id": ["1516181867"], "hash": ["DC1538CDBEF9CF9CA16DA2D5E0B3ADAF6E82F157"], "title": "Das kleine Gespenst - Das kleine Gespenst", "series": "Das kleine Gespenst", "episodes": "Das kleine Gespenst", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0141-98-0420-b-sUf0SbJ2.png" }, +{ "no": "118", "model": "01-0142", "audio_id": ["1520614694"], "hash": ["95B56A7ED78DDCCACADECA0D3B8E488A0FB49E66"], "title": "Der kleine Wassermann - Der kleine Wassermann", "series": "Der kleine Wassermann", "episodes": "Der kleine Wassermann", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0142-98-0421-b-jTM27L6t.png" }, +{ "no": "119", "model": "01-0143", "audio_id": ["1539358350"], "hash": ["5A8E64A9D90F1AEF66F3B2505218DCE5BBBD59B5"], "title": "Heule Eule - Heule Eule und andere Geschichten – Die Hörspiele", "series": "Heule Eule", "episodes": "Heule Eule und andere Geschichten – Die Hörspiele", "tracks": [], "release": "1540425600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0143-98-0422-b-YYgtM3mT.png" }, +{ "no": "120", "model": "01-0144", "audio_id": ["1542990413"], "hash": ["CEEF707AB0614E6D069CFDC40DF3B5E96922FDB7"], "title": "Die Fuchsbande - Der Skandal im Hof/Die Spur des Riesen", "series": "Die Fuchsbande", "episodes": "Der Skandal im Hof/Die Spur des Riesen", "tracks": [], "release": "1543449600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0144-98-0423-b-v7mRq5dh.png" }, +{ "no": "121", "model": "01-0145", "audio_id": ["1550512609"], "hash": ["819BC693CE1011C895939100FF1E09BFD9DEF113"], "title": "Jim Knopf - Teil 1: Von Lummerland bis China", "series": "Jim Knopf", "episodes": "Teil 1: Von Lummerland bis China", "tracks": [], "release": "1553126400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0145-98-0424-b-f1LM_G17.png" }, +{ "no": "122", "model": "01-0146", "audio_id": ["1516120313"], "hash": ["CC64F046F23AA201E01DBAC8EEFF32C889697601"], "title": "Heidi - Ein Wolf im Dörfli", "series": "Heidi", "episodes": "Ein Wolf im Dörfli", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0146-98-0425-b-sIJ33VEE.png" }, +{ "no": "123", "model": "01-0147", "audio_id": ["1516113576"], "hash": ["8C9AAC4304A3AF4AEB79A8BCCC1208BDBF580AC7"], "title": "Lieblings-Märchen - Rotkäppchen und 4 weitere Märchen", "series": "Lieblings-Märchen", "episodes": "Rotkäppchen und 4 weitere Märchen", "tracks": [], "release": "1517443200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0147-b-Zi75XPcY.png" }, +{ "no": "124", "model": "01-0148", "audio_id": ["1522239554"], "hash": ["A7DA8EC58A5751820BC5094872CF114CBF63E9F5"], "title": "Lieblings-Märchen - Rapunzel und 4 weitere Märchen", "series": "Lieblings-Märchen", "episodes": "Rapunzel und 4 weitere Märchen", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0148-b-g9jWxcL5.png" }, +{ "no": "125", "model": "01-0150", "audio_id": ["1552296674"], "hash": ["F05191C7D0EA6F26C1A14119561E5BCE5E89FB00"], "title": "Pettersson und Findus - Findus und der Hahn im Korb", "series": "Pettersson und Findus", "episodes": "Findus und der Hahn im Korb", "tracks": [], "release": "1553126400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0150-98-0460-b-tZn8Q43N.png" }, +{ "no": "126", "model": "01-0151", "audio_id": ["1520612067"], "hash": ["9C89143B79853CA08562C0B6D07AD25686ECFF28"], "title": "Felix - Briefe von Felix", "series": "Felix", "episodes": "Briefe von Felix", "tracks": [], "release": "1528329600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0151-b-LXbaVLSo.png" }, +{ "no": "127", "model": "01-0153", "audio_id": ["1552298695"], "hash": ["4646AB771BFAEF1F7013EE6F2F259B0BEEBA863C"], "title": "Die Haferhorde - Flausen im Schopf", "series": "Die Haferhorde", "episodes": "Flausen im Schopf", "tracks": [], "release": "1553126400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0153-98-0463-b-jo_QCcku.png" }, +{ "no": "128", "model": "01-0154", "audio_id": ["1561473242"], "hash": ["8AEBB400ABF765D5E42FCC631802F2A370C23F0F"], "title": "Die Haferhorde - Volle Mähne!", "series": "Die Haferhorde", "episodes": "Volle Mähne!", "tracks": [], "release": "1562198400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0154-98-0464-b-w14AntYG.png" }, +{ "no": "129", "model": "01-0156", "audio_id": ["1539356873"], "hash": ["88CBA35D71CF11D8F526C2E469EF1B9F7B9EE782"], "title": "Lieblings-Kinderlieder - Tierlieder", "series": "Lieblings-Kinderlieder", "episodes": "Tierlieder", "tracks": [], "release": "1541548800", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0156-98-0498-b-8bYG3NyL.6ec2db8b.png" }, +{ "no": "130", "model": "01-0157", "audio_id": ["1540999117"], "hash": ["D1178DCCE6F9895F0F93E252859186B3C9205BF5"], "title": "Leo Lausemaus - Das Original-Hörspiel zu den Büchern 2", "series": "Leo Lausemaus", "episodes": "Das Original-Hörspiel zu den Büchern 2", "tracks": [], "release": "1541635200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0157-98-0499-b-2I-P8TJExeT.png" }, +{ "no": "131", "model": "01-0159", "audio_id": ["1623844621"], "hash": ["8826A3B929094A3610550FAE8832291656C54329"], "title": "Erdbeerinchen Erdbeerfee - Zauberhafte Geschichten aus dem Erdbeergarten", "series": "Erdbeerinchen Erdbeerfee", "episodes": "Zauberhafte Geschichten aus dem Erdbeergarten", "tracks": [], "release": "1628726400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0159-50001544-b-brz3eX7Y.png" }, +{ "no": "132", "model": "01-0160", "audio_id": ["1565614398"], "hash": ["988918AD29BA9A3D259F100845EB9ADDAD531B29"], "title": "WAS IST WAS - Wale & Delfine / Geheimnis Tiefsee", "series": "WAS IST WAS", "episodes": "Wale & Delfine / Geheimnis Tiefsee", "tracks": [], "release": "1567641600", "language": "de-de", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0160-98-0504-b-pCdAiFd4.png" }, +{ "no": "133", "model": "01-0161", "audio_id": ["1553257247"], "hash": ["6218E017381B9568DA112286CFF383A1AE648BED"], "title": "Maus - Mit der Maus die Welt entdecken", "series": "Maus", "episodes": "Mit der Maus die Welt entdecken", "tracks": [], "release": "1553126400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0161-98-0505-b-mk5yd9x2.png" }, +{ "no": "134", "model": "01-0162", "audio_id": ["1539355961"], "hash": ["5DB7422D7409E12C3C615AED52EFF3E117526A2A"], "title": "Die Punkies - Bühne frei für die Punkies", "series": "Die Punkies", "episodes": "Bühne frei für die Punkies", "tracks": [], "release": "1540425600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0162-98-0506-b-g64aU05U.png" }, +{ "no": "135", "model": "01-0163", "audio_id": ["1552300740"], "hash": ["46C52252A1B4D6EAA566A25CA75A055A80DC52C0"], "title": "Kleiner Eisbär - Lars, hilf mir fliegen!/ Lars rettet die Rentiere", "series": "Kleiner Eisbär", "episodes": "Lars, hilf mir fliegen!/ Lars rettet die Rentiere", "tracks": [], "release": "1553126400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0163-98-0507-b-mHaYk14r.png" }, +{ "no": "136", "model": "01-0164", "audio_id": ["1542990628"], "hash": ["14EBFB2A6A73ECF95335F470502D2671D36E9561"], "title": "Volker Rosin - Der Gorilla mit der Sonnenbrille", "series": "Volker Rosin", "episodes": "Der Gorilla mit der Sonnenbrille", "tracks": [], "release": "1543449600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0164-98-0508-b-XP71kt9k.png" }, +{ "no": "137", "model": "01-0165", "audio_id": ["1540992468"], "hash": ["5202BCA10DB887E75273470D6BBD0771E198F5AB"], "title": "Tabaluga - Das große Ereignis/Freunde fürs Leben", "series": "Tabaluga", "episodes": "Das große Ereignis/Freunde fürs Leben", "tracks": [], "release": "1541635200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0165-98-0509-b-adAQGTCx.png" }, +{ "no": "138", "model": "01-0167", "audio_id": ["1540993720"], "hash": ["70161F7FD18F773A264EF455E64903689BE12D49"], "title": "Bobo Siebenschläfer - Bobo beim Kinderarzt und weitere Folgen", "series": "Bobo Siebenschläfer", "episodes": "Bobo beim Kinderarzt und weitere Folgen", "tracks": [], "release": "1541635200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0167-98-0511-b-b6ai22RY.png" }, +{ "no": "139", "model": "01-0168", "audio_id": ["1555493703"], "hash": ["22F6A303C2201F728A9E20AAB8019DBA317B268F"], "title": "Der kleine Drache Kokosnuss - Hörspiel zur TV-Serie 04", "series": "Der kleine Drache Kokosnuss", "episodes": "Hörspiel zur TV-Serie 04", "tracks": [], "release": "1557360000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0168-98-0512-b-wi8JnOEj.png" }, +{ "no": "140", "model": "01-0169", "audio_id": ["1555489350"], "hash": ["46046C5F69A3AB79312D9D491DB7217205D0E2B8"], "title": "Der kleine Hui Buh - Schatzjagd im Museum/Magische Meisterschaft", "series": "Der kleine Hui Buh", "episodes": "Schatzjagd im Museum/Magische Meisterschaft", "tracks": [], "release": "1557360000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0169-98-0513-b-yEMF7LOQ.png" }, +{ "no": "141", "model": "01-0170", "audio_id": ["1571393591"], "hash": ["17431267AD06869C6D2510C90EF3EF2CB1E1C964"], "title": "Unter meinem Bett - Unter meinem Bett 4", "series": "Unter meinem Bett", "episodes": "Unter meinem Bett 4", "tracks": [], "release": "1572998400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0170-50000601-b-9w8gEDm8.png" }, +{ "no": "142", "model": "01-0171", "audio_id": ["1558445643"], "hash": ["846217974F27AADF5763591B7E230D7A49DD3D1A"], "title": "Lieblings-Kinderlieder - Kindergartenlieder", "series": "Lieblings-Kinderlieder", "episodes": "Kindergartenlieder", "tracks": [], "release": "1559779200", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0171-98-0515-b-OO3t_6Rc.png" }, +{ "no": "143", "model": "01-0173", "audio_id": ["1555487737"], "hash": ["1DF99C7AB4AB0552C23FD808FD396C42A74AC2AD"], "title": "Benjamin Blümchen - Benjamin Blümchen als Ritter", "series": "Benjamin Blümchen", "episodes": "Benjamin Blümchen als Ritter", "tracks": [], "release": "1557360000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0173-98-0518-b-3R-AKrw8.png" }, +{ "no": "144", "model": "01-0174", "audio_id": ["1558437924"], "hash": ["EE40CB4895467A91E106135811FAE2414FE59747"], "title": "Bibi Blocksberg - Die Prinzessinnen von Thunderstorm", "series": "Bibi Blocksberg", "episodes": "Die Prinzessinnen von Thunderstorm", "tracks": [], "release": "1559779200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0174-98-0519-b-KM4m_yll.png" }, +{ "no": "145", "model": "01-0176", "audio_id": ["1558433200"], "hash": ["B6670D9E504BAE92A2C7F520F41477C6CEF96A05"], "title": "Felix - Weltbeste Briefe von Felix", "series": "Felix", "episodes": "Weltbeste Briefe von Felix", "tracks": [], "release": "1559779200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0176-98-0555-b-oQnNptSP.png" }, +{ "no": "146", "model": "01-0177", "audio_id": ["1542991276"], "hash": ["0B501D1D69791E7C3A0574A7650F2EBE8ECE3045"], "title": "Lieblings-Klassiker - Peter Pan und 4 weitere Klassiker", "series": "Lieblings-Klassiker", "episodes": "Peter Pan und 4 weitere Klassiker", "tracks": [], "release": "1543449600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0177-98-0550-b-hiO17Np4.png" }, +{ "no": "147", "model": "01-0178", "audio_id": ["1542992698"], "hash": ["FC7CF2CC4FFE8C68574A7DED1B5CAE5603B0E3B0"], "title": "Lieblings-Kinderlieder - Schlaflieder 2", "series": "Lieblings-Kinderlieder", "episodes": "Schlaflieder 2", "tracks": [], "release": "1543363200", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0178-98-0551-b-oq6zinlR.c179ef6f.png" }, +{ "no": "148", "model": "01-0179", "audio_id": ["1561482642"], "hash": ["6EE282859065B81382649810EBF339C131313FA2"], "title": "Disney - Das Dschungelbuch", "series": "Disney", "episodes": "Das Dschungelbuch", "tracks": [], "release": "1565827200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0179-98-0552-b-EUbtzkIN.png" }, +{ "no": "149", "model": "01-0180", "audio_id": ["1567169844"], "hash": ["59BDC6D17969BE4FF168F1190B73C8765A780A7D"], "title": "Disney - Arielle die Meerjungfrau", "series": "Disney", "episodes": "Arielle die Meerjungfrau", "tracks": [], "release": "1570665600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0180-98-0553-b-3l4n0rZ3.png" }, +{ "no": "150", "model": "01-0181", "audio_id": ["1558439191"], "hash": ["430B229B31FD57846FFF850D771DFDCB9614C37F"], "title": "Der Räuber Hotzenplotz - Hotzenplotz 3", "series": "Der Räuber Hotzenplotz", "episodes": "Hotzenplotz 3", "tracks": [], "release": "1559692800", "language": "de-de", "category": "Hörspiele & Hörbücher", "pic": "https://tonies.de/assets/cache/01-0181-98-0554-b-pf8-pFPD.677f75b9.png" }, +{ "no": "151", "model": "01-0182", "audio_id": ["1542991950"], "hash": ["B808F5868B33E4F431F2D77ADB05345F750DC4F3"], "title": "TKKG Junior - Vorsicht: bissig!", "series": "TKKG Junior", "episodes": "Vorsicht: bissig!", "tracks": [], "release": "1559779200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0182-98-0556-b-RfBvCHlM.png" }, +{ "no": "152", "model": "01-0183", "audio_id": ["1567701087"], "hash": ["44790F4BEB2AEFC4CA5652A00A12B565050334D1"], "title": "TKKG Junior - Auf frischer Tat ertappt", "series": "TKKG Junior", "episodes": "Auf frischer Tat ertappt", "tracks": [], "release": "1570665600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0183-98-0557-b-XDLX3NB2.png" }, +{ "no": "153", "model": "01-0184", "audio_id": ["1567698840"], "hash": ["24AB3FFC29605649811503965848C607AAF38E5E"], "title": "Disney - Cars", "series": "Disney", "episodes": "Cars", "tracks": [], "release": "1570665600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0184-98-0558-b-eWCQF6OF.png" }, +{ "no": "154", "model": "01-0186", "audio_id": ["1550242130"], "hash": ["55C9095A550D780D5F3C954EB6CAF420810E48F0"], "title": "Zogg - Zogg/Tommi Tatze", "series": "Zogg", "episodes": "Zogg/Tommi Tatze", "tracks": [], "release": "1557360000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0186-98-0584-b-b955t-6X.png" }, +{ "no": "155", "model": "01-0187", "audio_id": ["1555486356"], "hash": ["93972B8F4E7DD543061A9DD973F9EC503CB24D86"], "title": "Räuber Ratte - Räuber Ratte/Superwurm", "series": "Räuber Ratte", "episodes": "Räuber Ratte/Superwurm", "tracks": [], "release": "1557360000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0187-98-0585-b-n3fSy5Wn.png" }, +{ "no": "156", "model": "01-0188", "audio_id": ["1567168920"], "hash": ["A54E51176A1113DE985F92A0BB84B475D6C1A5A1"], "title": "Safiras - Nanami und das traumhafte Tuch/Ninazu und das grüne Zauberbonbon", "series": "Safiras", "episodes": "Nanami und das traumhafte Tuch/Ninazu und das grüne Zauberbonbon", "tracks": [], "release": "1570665600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0188-98-0580-b-MSNwRJVv.png" }, +{ "no": "157", "model": "01-0189", "audio_id": ["1560953848"], "hash": ["8A875724AFB82AF703DD55509DDE8790E709BB60"], "title": "Disney - Bambi", "series": "Disney", "episodes": "Bambi", "tracks": [], "release": "1565827200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0189-98-0581-b-tn5ktQcz.png" }, +{ "no": "158", "model": "01-0190", "audio_id": ["1561483318"], "hash": ["47B3817F9AA6C36DE171BCFC61C20B8318D42383"], "title": "Disney - Der König der Löwen", "series": "Disney", "episodes": "Der König der Löwen", "tracks": [], "release": "1565827200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0190-98-0582-b-a0Vs2yGR.png" }, +{ "no": "159", "model": "01-0191", "audio_id": ["1552318658"], "hash": ["5733AE741B1A61CCD55C3C8F9ED5C4DBE256CEA1"], "title": "Für Hund und Katz ist auch noch Platz - Für Hund und Katz ist auch noch Platz/Wo ist Mami?", "series": "Für Hund und Katz ist auch noch Platz", "episodes": "Für Hund und Katz ist auch noch Platz/Wo ist Mami?", "tracks": [], "release": "1553126400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0191-98-0583-b-Sp8noaH9.png" }, +{ "no": "160", "model": "01-0192", "audio_id": ["1571641839"], "hash": ["1DF274DA1CBB7469B25AF32F2A0549F59189B012"], "title": "Der Räuber Hotzenplotz - Und die Mondrakete", "series": "Der Räuber Hotzenplotz", "episodes": "Und die Mondrakete", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0192-50000864-b-nRdiB8jz.png" }, +{ "no": "161", "model": "01-0193", "audio_id": ["1579696839"], "hash": ["C9FEC899B41930D42E1AC49065C48C66A89799DC"], "title": "Pettersson und Findus - Findus zieht um", "series": "Pettersson und Findus", "episodes": "Findus zieht um", "tracks": [], "release": "1580947200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0193-98-0588-b-ddpRQ61P.png" }, +{ "no": "162", "model": "01-0193", "audio_id": ["1631260569"], "hash": ["FF5194E065C7644216B4DE1FF7D5B6389A032EB5"], "title": "Pettersson und Findus - Aufruhr im Gemüsebeet", "series": "Pettersson und Findus", "episodes": "Aufruhr im Gemüsebeet", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0193-98-0588-b-ddpRQ61P.png" }, +{ "no": "163", "model": "01-0194", "audio_id": ["1567768740"], "hash": ["3F5E4F76BF8941B3A0E892C024F0BFA5880D32CF"], "title": "Lieblings-Kinderlieder - Weihnachtslieder 2", "series": "Lieblings-Kinderlieder", "episodes": "Weihnachtslieder 2", "tracks": [], "release": "1570579200", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/01-0194-98-0615-b-GsJA_Gxb.e7436e05.png" }, +{ "no": "164", "model": "01-0196", "audio_id": ["1579698321"], "hash": ["00FF419EE46B340FF136394078B8D77788BA4DD7"], "title": "Fünf Freunde - Fünf Freunde und die verlassene Jagdhütte", "series": "Fünf Freunde", "episodes": "Fünf Freunde und die verlassene Jagdhütte", "tracks": [], "release": "1580947200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0196-98-0622-b-SZ0G_kuv.png" }, +{ "no": "165", "model": "01-0197", "audio_id": ["1558432319"], "hash": ["E8BC45A6FFC759867764D4A25640730EB0C51082"], "title": "Die Biene Maja - Majas Geburt", "series": "Die Biene Maja", "episodes": "Majas Geburt", "tracks": [], "release": "1559779200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0197-98-0623-b-Ing9Jy8M.png" }, +{ "no": "166", "model": "01-0198", "audio_id": ["1587460705"], "hash": ["760F5D2BA607675EEB106F2FE155E8AD7932C83E"], "title": "Der kleine Hui Buh - Der blubbernde Brotteig/Alarm in der Geheimzentrale", "series": "Der kleine Hui Buh", "episodes": "Der blubbernde Brotteig/Alarm in der Geheimzentrale", "tracks": [], "release": "1588809600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0198-50001280-b-How-ETcK.png" }, +{ "no": "167", "model": "01-0199", "audio_id": ["1561468413"], "hash": ["07C89090059A1C8EA81FA21ACAF2F8528CD51A65"], "title": "Gorilla Club - 1-2-3-4!", "series": "Gorilla Club", "episodes": "1-2-3-4!", "tracks": [], "release": "1562198400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0199-98-0625-b-8UtiIcXN.png" }, +{ "no": "168", "model": "01-0200", "audio_id": ["1539349655","1642776958"], "hash": ["147D4528EA01F49B0AEA106046F9562AE59931E1","8F706B3A20CBDF5BF26314C6873C6202E87174AB"], "title": "Feuerwehrmann Sam - In Pontypandy ist was los", "series": "Feuerwehrmann Sam", "episodes": "In Pontypandy ist was los", "tracks": [], "release": "1549497600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/01-0200-98-0627-b-nL2ncLa4.png" }, +{ "no": "169", "model": "02-0001", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Grün (Beige)", "series": "", "episodes": "Kreativ-Tonie Grün (Beige)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0001-98-0067-ST1--gCMgBo7a.png" }, +{ "no": "170", "model": "02-0002", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Beere (Beige)", "series": "", "episodes": "Kreativ-Tonie Beere (Beige)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0002-98-0068-ST1--dDoXAGvv.png" }, +{ "no": "171", "model": "02-0003", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Blau (Beige)", "series": "", "episodes": "Kreativ-Tonie Blau (Beige)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0003-98-0069-ST1--pqfYTcIy.png" }, +{ "no": "172", "model": "02-0004", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Ritter", "series": "", "episodes": "Kreativ-Tonie Ritter", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0004-a-F_l9JskM.png" }, +{ "no": "173", "model": "02-0005", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - Indianerin", "series": "Kreativ-Tonie", "episodes": "Indianerin", "tracks": [], "release": "1474934400", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://tonies.de/assets/cache/02-0005-a-FIwfh9mF.4e85ddc5.png" }, +{ "no": "174", "model": "02-0006", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - Gelb (E) - Sonderedition", "series": "Kreativ-Tonie", "episodes": "Gelb (E) - Sonderedition", "tracks": [], "release": "1474934400", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/98-0073.png" }, +{ "no": "175", "model": "02-0007", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Pirat", "series": "", "episodes": "Kreativ-Tonie Pirat", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0007-a-mbMUqEJy.png" }, +{ "no": "176", "model": "02-0008", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Trommler", "series": "", "episodes": "Kreativ-Tonie Trommler", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0008-98-0097-b-UpIi5tEo.png" }, +{ "no": "177", "model": "02-0009", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Sängerin", "series": "", "episodes": "Kreativ-Tonie Sängerin", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0009-98-0098-b-fRwtgvXR.png" }, +{ "no": "178", "model": "02-0010", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Gitarrist", "series": "", "episodes": "Kreativ-Tonie Gitarrist", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0010-50000693-b-MPvJ43FZ.png" }, +{ "no": "179", "model": "02-0011", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Prinzessin", "series": "", "episodes": "Kreativ-Tonie Prinzessin", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0011-98-0121-b-gyLxpr2U.png" }, +{ "no": "180", "model": "02-0012", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Meerjungfrau", "series": "", "episodes": "Kreativ-Tonie Meerjungfrau", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0012-98-0106-b-EUdkKaU3.png" }, +{ "no": "181", "model": "02-0017", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - Astronaut", "series": "Kreativ-Tonie", "episodes": "Astronaut", "tracks": [], "release": "1494892800", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://tonies.de/assets/cache/02-0017-b-ZLwYuhi_.84e2afd9.png" }, +{ "no": "182", "model": "02-0019", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - Baby Rosa", "series": "Kreativ-Tonie", "episodes": "Baby Rosa", "tracks": [], "release": "1506384000", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://tonies.de/assets/cache/02-0019-b-Cr-FO79T.36dc67e8.png" }, +{ "no": "183", "model": "02-0020", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Spooky", "series": "", "episodes": "Kreativ-Tonie Spooky", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0020-98-0328-b-U9WEr_cd.png" }, +{ "no": "184", "model": "02-0021", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": "Kreativ-Tonie - Baby Hellblau", "series": "Kreativ-Tonie", "episodes": "Baby Hellblau", "tracks": [], "release": "1506384000", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://tonies.de/assets/cache/02-0021-b-Div0T1-W.dc4ef85e.png" }, +{ "no": "185", "model": "02-0023", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Rot (Beige)", "series": "", "episodes": "Kreativ-Tonie Rot (Beige)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0023-98-0357-ST1--B0UqqcX7.png" }, +{ "no": "186", "model": "02-0024", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Oma", "series": "", "episodes": "Kreativ-Tonie Oma", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0024-98-0374-b-a_ymAF6g.png" }, +{ "no": "187", "model": "02-0025", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Opa", "series": "", "episodes": "Kreativ-Tonie Opa", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0025-98-0375-b-Ug3JQD3r.png" }, +{ "no": "188", "model": "02-0026", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Einhorn", "series": "", "episodes": "Kreativ-Tonie Einhorn", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0026-b-BIrvDJkO.png" }, +{ "no": "189", "model": "02-0027", "audio_id": ["1"], "hash": ["3FCFA522F6F94993640FC3458679216A3AB86748"], "title": " - Kreativ-Tonie Bauarbeiter", "series": "", "episodes": "Kreativ-Tonie Bauarbeiter", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0027-98-0413-b-XHuXmDUl.png" }, +{ "no": "190", "model": "02-0028", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Skater", "series": "", "episodes": "Kreativ-Tonie Skater", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0028-98-0426-b-WZM8scyZ.png" }, +{ "no": "191", "model": "02-0029", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Feuerwehrmann", "series": "", "episodes": "Kreativ-Tonie Feuerwehrmann", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0029-b-3jl8tNux.png" }, +{ "no": "192", "model": "02-0030", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Fußballer", "series": "", "episodes": "Kreativ-Tonie Fußballer", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0030-98-0500-b-UGKUJ1HM.png" }, +{ "no": "193", "model": "02-0031", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Ärztin", "series": "", "episodes": "Kreativ-Tonie Ärztin", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0031-50001037-b-IvlBzTq1.png" }, +{ "no": "194", "model": "02-0032", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Weihnachtsmann", "series": "", "episodes": "Kreativ-Tonie Weihnachtsmann", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0032-98-0517-b-sPki-aR6.png" }, +{ "no": "195", "model": "02-0033", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Superheld", "series": "", "episodes": "Kreativ-Tonie Superheld", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0033-98-0578-b-O_8gslZU.png" }, +{ "no": "196", "model": "02-0034", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Superheldin", "series": "", "episodes": "Kreativ-Tonie Superheldin", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0034-98-0579-b-ztctglzo.png" }, +{ "no": "197", "model": "02-0036", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Blanko", "series": "", "episodes": "Kreativ-Tonie Blanko", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/02-0036-98-0626-b-R98oV5PN.png" }, +{ "no": "198", "model": "05-0001", "audio_id": ["1561649212"], "hash": ["7EB5561CAABF1AD2257C0993E79D87CBC40A1F18"], "title": "Die Playmos - Der Schatz der Teufelsinsel", "series": "Die Playmos", "episodes": "Der Schatz der Teufelsinsel", "tracks": [], "release": "1564617600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/05-0001-99-0443-b-Q5QayTN7.png" }, +{ "no": "199", "model": "05-0002", "audio_id": ["1565699896"], "hash": ["F5D1E590F40B4C3523E30BED5E8DF535882641B5"], "title": "Die Playmos - Das Turnier auf der Königsritterburg", "series": "Die Playmos", "episodes": "Das Turnier auf der Königsritterburg", "tracks": [], "release": "1567641600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/05-0002-99-0450-b-x7-9ykOd.png" }, +{ "no": "200", "model": "05-0003", "audio_id": ["1561648649"], "hash": ["8F0158CF04E4506ACEECA21577AFC4F98215D292"], "title": "Die Playmos - Der Ball im Prinzessinnen-Schloss", "series": "Die Playmos", "episodes": "Der Ball im Prinzessinnen-Schloss", "tracks": [], "release": "1564617600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/05-0003-99-0444-g-_lt54OMM.png" }, +{ "no": "201", "model": "05-0004", "audio_id": ["1565699026"], "hash": ["C773B456C0C9A186689FAD02EE939FD9E8E26140"], "title": "Die Playmos - Licht aus dem Drachenland", "series": "Die Playmos", "episodes": "Licht aus dem Drachenland", "tracks": [], "release": "1567641600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/05-0004-99-0445-b-FhIvu_i7.png" }, +{ "no": "202", "model": "05-0005", "audio_id": ["1561648098"], "hash": ["4374DD32874D0F4252E2D811731A6AEC01185932"], "title": "Die Playmos - Großbrand in der Feuerwache", "series": "Die Playmos", "episodes": "Großbrand in der Feuerwache", "tracks": [], "release": "1564617600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/05-0005-99-0451-b-f_epXoi2.png" }, +{ "no": "203", "model": "10000001", "audio_id": ["1538986377"], "hash": ["843D8B52F017A517EC15D457D83711B72D84601C"], "title": "The Gruffalo - The Gruffalo", "series": "The Gruffalo", "episodes": "The Gruffalo", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000001-50000041-b--719YHE0p.png" }, +{ "no": "204", "model": "10000002", "audio_id": [], "hash": [], "title": "The Gruffalo - The Gruffalo's Child", "series": "The Gruffalo", "episodes": "The Gruffalo's Child", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000002-50000042-b-6NCHHCT0.png" }, +{ "no": "205", "model": "10000003", "audio_id": [], "hash": [], "title": "Room on the Broom - Room on the Broom", "series": "Room on the Broom", "episodes": "Room on the Broom", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000003-50000043-b-2zL7Dn61.png" }, +{ "no": "206", "model": "10000004", "audio_id": ["1537356882"], "hash": ["780F1AF1159CB7B3D054A04C2DC78DC77795B977"], "title": "The Snowman - The Snowman/The Snowman and the Snowdog", "series": "The Snowman", "episodes": "The Snowman/The Snowman and the Snowdog", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000004-50000044-b-XOfI-Jo8.png" }, +{ "no": "207", "model": "10000005", "audio_id": [], "hash": [], "title": "Highway Rat - Highway Rat", "series": "Highway Rat", "episodes": "Highway Rat", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000005-50000045-b-B9Fqe7su.png" }, +{ "no": "208", "model": "10000006", "audio_id": ["1550238386"], "hash": ["867C7915AA83D6F81073404172744022B73583E2"], "title": "Zog - Zog", "series": "Zog", "episodes": "Zog", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000006-50000046-b--0UdJxpcs.png" }, +{ "no": "209", "model": "10000007", "audio_id": ["1537278651"], "hash": ["6C477248718A4F541A75BFE9E7DE0FFC2231BA88"], "title": "Stick Man - Stick Man", "series": "Stick Man", "episodes": "Stick Man", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000007-50000047-b--E1b1iT2M.png" }, +{ "no": "210", "model": "10000008", "audio_id": [], "hash": [], "title": "HOW AND WHY - The Age of Dinosaurs / Prehistoric Animals", "series": "HOW AND WHY", "episodes": "The Age of Dinosaurs / Prehistoric Animals", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-educational", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000008-50000048-b-M6xf5PxF.png" }, +{ "no": "211", "model": "10000009", "audio_id": [], "hash": [], "title": "HOW AND WHY - Fabulous Horses / The Mongol Steppe Riders", "series": "HOW AND WHY", "episodes": "Fabulous Horses / The Mongol Steppe Riders", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-educational", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000009-50000049-b-KqUKU2M4.png" }, +{ "no": "212", "model": "10000010", "audio_id": ["1537279769"], "hash": ["438E54F0FCF60BB23E9FD666A22192599B6DACFB"], "title": "Favourite Children’s Songs - Bedtime Songs and Lullabies", "series": "Favourite Children’s Songs", "episodes": "Bedtime Songs and Lullabies", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000010-50000050-b-KZmBtKCB.png" }, +{ "no": "213", "model": "10000011", "audio_id": ["1537282975"], "hash": ["4983F99F694CE02B003A3DA1FC7D36AE74E4B75D"], "title": "Favourite Children’s Songs - Playtime and Action Songs", "series": "Favourite Children’s Songs", "episodes": "Playtime and Action Songs", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000011-50000051-b-W0OFsDOf.png" }, +{ "no": "214", "model": "10000012", "audio_id": ["1537356209"], "hash": ["EB51835B960D749D2A6A35105441517EDA34A37C"], "title": "Favourite Children’s Songs - Christmas Songs and Carols", "series": "Favourite Children’s Songs", "episodes": "Christmas Songs and Carols", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000012-50000052-b-5rd4qOb_.png" }, +{ "no": "215", "model": "10000013", "audio_id": ["1537281089"], "hash": ["A836CF1106BD0AC5C328A507AFCF6D605C246D21"], "title": "Favourite Classics - Pinocchio and other classic stories", "series": "Favourite Classics", "episodes": "Pinocchio and other classic stories", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000013-50000053-b-hN2-98K9.png" }, +{ "no": "216", "model": "10000014", "audio_id": ["1537381053"], "hash": ["17627E54850A416B6780CE64C739CFE2AAE933B0"], "title": "Favourite Tales - Little Red Riding Hood and other fairy tales", "series": "Favourite Tales", "episodes": "Little Red Riding Hood and other fairy tales", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000014-50000054-b-QC6reK_n.png" }, +{ "no": "217", "model": "10000015", "audio_id": ["1537369489"], "hash": ["747D95F438F4B1918CD7F28669DF1AE5AFAB11CB"], "title": "The Little Prince - The Little Prince", "series": "The Little Prince", "episodes": "The Little Prince", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000015-50000055-b-O-uyd534.png" }, +{ "no": "218", "model": "10000016", "audio_id": ["1561552371"], "hash": ["4D6BDD2CB763A564C1B3A052CF2F92E1F6A95B57"], "title": "Disney - The Jungle Book", "series": "Disney", "episodes": "The Jungle Book", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000016-50000056-b--15AOkBDY.png" }, +{ "no": "219", "model": "10000017", "audio_id": [], "hash": [], "title": "Disney - Cars", "series": "Disney", "episodes": "Cars", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000017-50000057-b-E-pjZQhW.png" }, +{ "no": "220", "model": "10000018", "audio_id": ["1571390854"], "hash": ["03415C09CE9FFA446A74F74C2392304A26C9C24B"], "title": "Disney - The Little Mermaid", "series": "Disney", "episodes": "The Little Mermaid", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000018-50000058-b-6peGW8p6.png" }, +{ "no": "221", "model": "10000020", "audio_id": ["1561553854"], "hash": ["12CED2F9C6577B5D0B410D2A4E9B27F4F80E6BA2"], "title": "Disney - The Lion King", "series": "Disney", "episodes": "The Lion King", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000020-50000060-b--TjY0sqFh.png" }, +{ "no": "222", "model": "10000021", "audio_id": [], "hash": [], "title": "Hully Boo Spook'n Spell - How Hully Boo got his rattling chain / Halloween at Palace Primary", "series": "Hully Boo Spook'n Spell", "episodes": "How Hully Boo got his rattling chain / Halloween at Palace Primary", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000021-50000061-b-aA-RU2Pi.png" }, +{ "no": "223", "model": "10000022", "audio_id": [], "hash": [], "title": "Hully Boo Spook'n Spell - Treasure hunt in the Museum / The Magic Championships", "series": "Hully Boo Spook'n Spell", "episodes": "Treasure hunt in the Museum / The Magic Championships", "tracks": [], "release": "1580947200", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000022-50000062-b-JlznNp8b.png" }, +{ "no": "224", "model": "10000023", "audio_id": [], "hash": [], "title": "The Fox Pack - Mystery in the Garden/Tracks of a Giant", "series": "The Fox Pack", "episodes": "Mystery in the Garden/Tracks of a Giant", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000023-50000063-b-ud4wvX9y.png" }, +{ "no": "225", "model": "10000024", "audio_id": [], "hash": [], "title": "The Gnats - Here come the Gnats!", "series": "The Gnats", "episodes": "Here come the Gnats!", "tracks": [], "release": "1559692800", "language": "en-gb", "category": "Audiobook", "pic": "https://tonies.com/assets/cache/10000024-50000064-b-QLG3a7AI.79c18a0b.png" }, +{ "no": "226", "model": "10000025", "audio_id": [], "hash": [], "title": "TKKG Junior - Beware of the Beast", "series": "TKKG Junior", "episodes": "Beware of the Beast", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000025-50000065-b-aaGAe9bB.png" }, +{ "no": "227", "model": "10000026", "audio_id": [], "hash": [], "title": "TKKG Junior - Scary Sleepover", "series": "TKKG Junior", "episodes": "Scary Sleepover", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000026-50000066-b-OfN6-Rvn.png" }, +{ "no": "228", "model": "10000027", "audio_id": ["1537440378"], "hash": ["6B7C12412153E9048670D2406108A9CAFD104C17"], "title": "Die drei ??? Kids Englisch - Soccer Mania (Englische Version)", "series": "Die drei ??? Kids Englisch", "episodes": "Soccer Mania (Englische Version)", "tracks": [], "release": "1568851200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000027-50000067-b-7w6_xDVx.png" }, +{ "no": "229", "model": "10000028", "audio_id": [], "hash": [], "title": "The Three Question Marks - The Realm of Riddles", "series": "The Three Question Marks", "episodes": "The Realm of Riddles", "tracks": [], "release": "1540252800", "language": "en-gb", "category": "Audiobook", "pic": "https://tonies.de/assets/cache/01-0042-b-y1dcNyjv.9e7643b7.png" }, +{ "no": "230", "model": "10000029", "audio_id": [], "hash": [], "title": "The Three ??? - Night among Wolves", "series": "The Three ???", "episodes": "Night among Wolves", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000029-50000069-b-1DZQkuLa.png" }, +{ "no": "231", "model": "10000030", "audio_id": [], "hash": [], "title": "The Ballalloes - Duel by Flood Light", "series": "The Ballalloes", "episodes": "Duel by Flood Light", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000030-50000070-b-dafbEhLV.png" }, +{ "no": "232", "model": "10000031", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Princess", "series": "", "episodes": "Creative-Tonie Princess", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000031-50000071-g-P-FeoTxL.png" }, +{ "no": "233", "model": "10000032", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Pirate", "series": "", "episodes": "Creative-Tonie Pirate", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000032-50000072-g-TZ7ljSST.png" }, +{ "no": "234", "model": "10000033", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Mermaid", "series": "", "episodes": "Creative-Tonie Mermaid", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000033-50000073-g-TbzW34uc.png" }, +{ "no": "235", "model": "10000034", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Spooky", "series": "", "episodes": "Creative-Tonie Spooky", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000034-50000074-g-XfBY2OmC.png" }, +{ "no": "236", "model": "10000035", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Grandad", "series": "", "episodes": "Creative-Tonie Grandad", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000035-50000075-g-cp-aaaqk.png" }, +{ "no": "237", "model": "10000036", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Grandma", "series": "", "episodes": "Creative-Tonie Grandma", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000036-50000076-g-b55wtgq5.png" }, +{ "no": "238", "model": "10000037", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Unicorn", "series": "", "episodes": "Creative-Tonie Unicorn", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000037-50000077-g-y4ylkDYC.png" }, +{ "no": "239", "model": "10000038", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Footballer", "series": "", "episodes": "Creative-Tonie Footballer", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000038-50000078-g-tLXOKJeR.png" }, +{ "no": "240", "model": "10000039", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Fireman", "series": "", "episodes": "Creative-Tonie Fireman", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000039-50000079-g-2WmcDYek.png" }, +{ "no": "241", "model": "10000040", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Father Christmas", "series": "", "episodes": "Creative-Tonie Father Christmas", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000040-50000080-g-xR4tPtHM.png" }, +{ "no": "242", "model": "10000097", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Osterhase", "series": "", "episodes": "Kreativ-Tonie Osterhase", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000097-98-1003-b-QW4KAnWE.png" }, +{ "no": "243", "model": "10000110", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Blank", "series": "", "episodes": "Creative-Tonie Blank", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000110-50000207-g-lKxUR4gw.png" }, +{ "no": "244", "model": "10000111", "audio_id": [], "hash": [], "title": "Favourite Tales - Rapunzel and other fairy tales", "series": "Favourite Tales", "episodes": "Rapunzel and other fairy tales", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000111-50000208-b-oGKY6ygu.png" }, +{ "no": "245", "model": "10000112", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Birthday Songs", "series": "Favourite Children’s Songs", "episodes": "Birthday Songs", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000112-50000211-b-vNfUNHA3.png" }, +{ "no": "246", "model": "10000113", "audio_id": ["1"], "hash": ["3630A243E9F382968A2883A437DB9BC78A1ACF13"], "title": " - Creative-Tonie Sweetheart", "series": "", "episodes": "Creative-Tonie Sweetheart", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000113-50000212-g-Mi4nkgsU.png" }, +{ "no": "247", "model": "10000117", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Clown", "series": "", "episodes": "Kreativ-Tonie Clown", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000117-98-1050-b-CX31szTQ.png" }, +{ "no": "248", "model": "10000118", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Vampir", "series": "", "episodes": "Kreativ-Tonie Vampir", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000118-50000244-b--fGy8NfAe.png" }, +{ "no": "249", "model": "10000119", "audio_id": ["1571647953"], "hash": ["AAA64D3F3B3181826B47E2DBF22AF3225B300113"], "title": "Disney - Aladdin", "series": "Disney", "episodes": "Aladdin", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000119-50000315-b-0XapXGS4.png" }, +{ "no": "250", "model": "10000120", "audio_id": [], "hash": [], "title": "Disney - Aladdin", "series": "Disney", "episodes": "Aladdin", "tracks": [], "release": "1613001600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000120-50000314-b-ypsz_M0T.png" }, +{ "no": "251", "model": "10000121", "audio_id": ["1571391804"], "hash": ["41A81CA64D375560AAF4A55533ADE42F72A30BEF"], "title": "Disney - Dumbo", "series": "Disney", "episodes": "Dumbo", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000121-50000320-b-4RcJn6XY.png" }, +{ "no": "252", "model": "10000124", "audio_id": ["1582832845"], "hash": ["366DC26D368B6696EA5BF15EC4B5C67263AD6A57"], "title": "St. Pauli Rabauken - Entscheidung am Millerntor", "series": "St. Pauli Rabauken", "episodes": "Entscheidung am Millerntor", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000124-50000593-b-XlP5QAZa.png" }, +{ "no": "253", "model": "10000125", "audio_id": ["1565945151"], "hash": ["728E59FBFE91A7013D3077E7254295D76AEFC8A6"], "title": "Tilda Apfelkern - Das geheime Kuchenrezept", "series": "Tilda Apfelkern", "episodes": "Das geheime Kuchenrezept", "tracks": [], "release": "1580947200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000125-50000598-b-5y8oPndQ.png" }, +{ "no": "254", "model": "10000126", "audio_id": ["1584951702"], "hash": ["0D51E6379A82635C7C1C1173F96B8E82F8E731CA"], "title": "Der glückliche Löwe - Der glückliche Löwe", "series": "Der glückliche Löwe", "episodes": "Der glückliche Löwe", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000126-50001104-b-cmMvC1Ah.png" }, +{ "no": "255", "model": "10000129", "audio_id": ["1615477825"], "hash": ["C1C371A61BBD64D5A86D01B375002FC4CD78CF47"], "title": "Super Wings - Schwimmende Schweinchen", "series": "Super Wings", "episodes": "Schwimmende Schweinchen", "tracks": [], "release": "1618444800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000129-50001432-b-TBTZ-zhh.png" }, +{ "no": "256", "model": "10000130", "audio_id": ["1565695105","1580918309"], "hash": ["B84647E2641E84104B022C4741BE11FBD62DF4C0","F2723E4A9D1B502DB64099A3F7D91F77F2853C50"], "title": "Lieblings-Kinderlieder - Zähllieder", "series": "Lieblings-Kinderlieder", "episodes": "Zähllieder", "tracks": [], "release": "1567641600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000130-50000800-b-C3DVDdZp.png" }, +{ "no": "257", "model": "10000131", "audio_id": ["1584703650"], "hash": ["0AAAE29675A2D1C4F60868C2EFBE86CD5D2A97D9"], "title": "Fünf Freunde - Fünf Freunde auf der Suche nach Timmy", "series": "Fünf Freunde", "episodes": "Fünf Freunde auf der Suche nach Timmy", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000131-50000869-b-YnN-HEIM.png" }, +{ "no": "258", "model": "10000132", "audio_id": ["1584722674"], "hash": ["D4AB8BD540E1CCE86986E338B7F966D83BF18B78"], "title": "Fünf Freunde - Fünf Freunde und das versunkene Schiff", "series": "Fünf Freunde", "episodes": "Fünf Freunde und das versunkene Schiff", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000132-50000868-b-OPUBBioJ.png" }, +{ "no": "259", "model": "10000133", "audio_id": ["1580993072"], "hash": ["056DE0700D6DBF6509A52A5328303615893BF2D4"], "title": "Fünf Freunde - Fünf Freunde und der Großalarm in Kirrin", "series": "Fünf Freunde", "episodes": "Fünf Freunde und der Großalarm in Kirrin", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000133-50000866-b-0mPcGSsb.png" }, +{ "no": "260", "model": "10000134", "audio_id": ["1580986736"], "hash": ["0359CE6D84668FA8BCB1918DC76BBF6E863C19F8"], "title": "Fünf Freunde - Fünf Freunde und die doppelte Erfindung", "series": "Fünf Freunde", "episodes": "Fünf Freunde und die doppelte Erfindung", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000134-50000867-b-ws0eZoLv.png" }, +{ "no": "261", "model": "10000135", "audio_id": ["1589466321"], "hash": ["70E8AC620EF6EE8FB4C853FF37D6BDD3273753E0"], "title": "Lieblings-Märchen - Der gestiefelte Kater und vier weitere Märchen", "series": "Lieblings-Märchen", "episodes": "Der gestiefelte Kater und vier weitere Märchen", "tracks": [], "release": "1591228800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000135-50001285-b-5rvLEGAy.png" }, +{ "no": "262", "model": "10000137", "audio_id": ["1561467219"], "hash": ["D20A6EDEB83B866CE86B9278B73B888D1CCB9BCB"], "title": "Lieblings-Märchen - Sterntaler und 4 weitere Märchen", "series": "Lieblings-Märchen", "episodes": "Sterntaler und 4 weitere Märchen", "tracks": [], "release": "1562198400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000137-50000691-b-Tje2BW-j.png" }, +{ "no": "263", "model": "10000140", "audio_id": ["1583159825"], "hash": ["D7BFB561D2D6C63B965CCFD11F251B5F7A16FB8C"], "title": "Die Biene Maja - Der Schmetterlingsball", "series": "Die Biene Maja", "episodes": "Der Schmetterlingsball", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000140-98-1020-b-ljUt_pBN.png" }, +{ "no": "264", "model": "10000141", "audio_id": ["1584719217","1612267806"], "hash": ["7F3303306E01A5DDD86EF0F12AA1BB070C35E4BC","7F3303306E01A5DDD86EF0F12AA1BB070C35E4BC"], "title": "Disney - Die Eiskönigin", "series": "Disney", "episodes": "Die Eiskönigin", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000141-50000861-b-Lnlgh2mc.png" }, +{ "no": "265", "model": "10000142", "audio_id": ["1579712407"], "hash": ["274A8A6663FB088436DF4666BDBC71293A2134BF"], "title": "Disney - Toy Story", "series": "Disney", "episodes": "Toy Story", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000142-50000862-b-ARsvt7ZO.png" }, +{ "no": "266", "model": "10000143", "audio_id": ["1565696659"], "hash": ["85C3670C165E28DBEC49F2A7DE4C94B4B693E9F5"], "title": "Kinderliederzug - Bitte alle einsteigen!", "series": "Kinderliederzug", "episodes": "Bitte alle einsteigen!", "tracks": [], "release": "1567641600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000143-98-1008-b-OHyav2rn.png" }, +{ "no": "267", "model": "10000144", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Yeti", "series": "", "episodes": "Kreativ-Tonie Yeti", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000144-50000863-b-wrQPy1uf.png" }, +{ "no": "268", "model": "10000145", "audio_id": ["1587460453"], "hash": ["9A17FBEA993FA326711A4FE3BA1136ACB3427BD2"], "title": "Mein Lotta-Leben - Alles voller Kaninchen", "series": "Mein Lotta-Leben", "episodes": "Alles voller Kaninchen", "tracks": [], "release": "1588809600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000145-50001335-b-sAxI1mB-.png" }, +{ "no": "269", "model": "10000146", "audio_id": ["1565696183"], "hash": ["0E6D030E40AB272DBED5F7CB06C43EB2B9E1179D"], "title": "Minimusiker - Lieder für dich", "series": "Minimusiker", "episodes": "Lieder für dich", "tracks": [], "release": "1567641600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000146-50000595-b-G5ozmjj8.png" }, +{ "no": "270", "model": "10000147", "audio_id": ["1565341341"], "hash": ["061364357EBE83259F3AF6C281FA99631B55D956"], "title": "Nola Note - Nola Note auf musikalischer Weltreise 1", "series": "Nola Note", "episodes": "Nola Note auf musikalischer Weltreise 1", "tracks": [], "release": "1564617600", "language": "de-de", "category": "JAKO-O", "pic": "https://tonies.de/assets/cache/images/tonies/nola-note/10000147-50000597-b.ee210867.png" }, +{ "no": "271", "model": "10000148", "audio_id": ["1571398952"], "hash": ["1FDA1CA0C8CD1B1EBCD1A3F04B57A6CE7EC23DEC"], "title": "Der Traumzauberbaum - Geschichtenlieder", "series": "Der Traumzauberbaum", "episodes": "Geschichtenlieder", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000148-50000860-b-H0GY58qt.png" }, +{ "no": "272", "model": "10000149", "audio_id": ["1576855851"], "hash": ["7A68D103DC474710B102E7F6ABEF2C403A0AB8A3"], "title": "Unser Sandmännchen - Abends im Walde", "series": "Unser Sandmännchen", "episodes": "Abends im Walde", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000149-50000859-b-k0ewEmNh.png" }, +{ "no": "273", "model": "10000150", "audio_id": ["1589465611"], "hash": ["334A0F16B2E234C376CCF719CF1D2C4D12D75B86"], "title": "Wieso? Weshalb? Warum? junior - Die Feuerwehr/Die Rettungsfahrzeuge", "series": "Wieso? Weshalb? Warum? junior", "episodes": "Die Feuerwehr/Die Rettungsfahrzeuge", "tracks": [], "release": "1591228800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000150-50001227-b-7MU6z2zd.png" }, +{ "no": "274", "model": "10000151", "audio_id": ["1587460860"], "hash": ["EC8B9F05BA84328D04D64A7348969EB99AE1777F"], "title": "Wieso? Weshalb? Warum? junior - Die Polizei", "series": "Wieso? Weshalb? Warum? junior", "episodes": "Die Polizei", "tracks": [], "release": "1588809600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000151-50000578-b-fUeKsbOt.png" }, +{ "no": "275", "model": "10000152", "audio_id": ["1602774212"], "hash": ["BC26A93ED0D8F08EC40CCD1E6665B7A63D79AEA2"], "title": "Disney - Frozen", "series": "Disney", "episodes": "Frozen", "tracks": [], "release": "1605744000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000674-50000857-b--56NEMwai.png" }, +{ "no": "276", "model": "10000153", "audio_id": ["1598274871"], "hash": ["8FAC5C837CC918611D38922BF9A0EBED148C5298"], "title": "Disney - Toy Story", "series": "Disney", "episodes": "Toy Story", "tracks": [], "release": "1603324800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000153-50000858-b--Dkd6Ln8Z.png" }, +{ "no": "277", "model": "10000154", "audio_id": ["1561478364"], "hash": ["0D32A6BAB607345D29E52152F94AF65FCF971567"], "title": "Lieblings-Kinderlieder - Reiselieder", "series": "Lieblings-Kinderlieder", "episodes": "Reiselieder", "tracks": [], "release": "1562198400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000154-50000573-b-8_eVyM69.png" }, +{ "no": "278", "model": "10000155", "audio_id": ["1571392711"], "hash": ["95337091AC44A718EB91E4EBD8AFF98F8D7CEB8D"], "title": "Lieblings-Klassiker - Eine Weihnachtsgeschichte und vier weitere Klassiker", "series": "Lieblings-Klassiker", "episodes": "Eine Weihnachtsgeschichte und vier weitere Klassiker", "tracks": [], "release": "1572998400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000155-50000870-b-Cr_pvSBl.png" }, +{ "no": "279", "model": "10000156", "audio_id": ["1621515766"], "hash": ["958432FA7712118394F7961D89A503C6894C12F7"], "title": "TKKG Junior - Der rote Retter", "series": "TKKG Junior", "episodes": "Der rote Retter", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000156-50001157-b-yst1Aqbu.png" }, +{ "no": "280", "model": "10000157", "audio_id": ["1583162697","1632485931"], "hash": ["56F98ACBF824BA9CBD8A7170C3030ED1CA6AE97C","9199B7D7910AFC2A6CBDEA3D0B3F4DB7F3EA6FCC"], "title": "Wickie - Tanz mit dem Wolf und sechs weitere Episoden", "series": "Wickie", "episodes": "Tanz mit dem Wolf und sechs weitere Episoden", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000157-50000831-b-St6GicV3.png" }, +{ "no": "281", "model": "10000157", "audio_id": ["1583162697"], "hash": ["60A19A077A32F9FD7754BDB9729C87159E039056"], "title": "Wickie - Das Magische Schwert", "series": "Wickie", "episodes": "Das Magische Schwert", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000157-50000831-b-St6GicV3.png" }, +{ "no": "282", "model": "10000158", "audio_id": ["1602579939"], "hash": ["BAF7A9FEF8B948B9EFB38593778804D191D3269F"], "title": "Die drei ??? - Der Super-Papagei", "series": "Die drei ???", "episodes": "Der Super-Papagei", "tracks": [], "release": "1604880000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000158-50001310-b-Ov0GFH4k.png" }, +{ "no": "283", "model": "10000158", "audio_id": ["1641978889"], "hash": ["B58AE4E6EB0B8BC6A136DA559CEDD1A45B4745C4"], "title": "Die drei ??? - Das Hexen Handy", "series": "Die drei ???", "episodes": "Das Hexen Handy", "tracks": [], "release": "1604880000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000158-50001310-b-Ov0GFH4k.png" }, +{ "no": "284", "model": "10000158", "audio_id": ["1641978893"], "hash": ["7F4CB38F5F16C60876597FB905DFFE3C329C13DE"], "title": "Die drei ??? - Höhenangst", "series": "Die drei ???", "episodes": "Höhenangst", "tracks": [], "release": "1604880000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000158-50001310-b-Ov0GFH4k.png" }, +{ "no": "285", "model": "10000158", "audio_id": ["1626080403"], "hash": ["64EE06AA8E3EEBC737B492BA64A9C2846717899A"], "title": "Die drei ??? - Die Musikpiraten", "series": "Die drei ???", "episodes": "Die Musikpiraten", "tracks": [], "release": "1604880000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000158-50001310-b-Ov0GFH4k.png" }, +{ "no": "286", "model": "10000159", "audio_id": [], "hash": [], "title": " - Creative-Tonie Builder", "series": "", "episodes": "Creative-Tonie Builder", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/02-0027-g-Azf5oGtF.png" }, +{ "no": "287", "model": "10000160", "audio_id": ["1552308906"], "hash": ["E268521989F1D18394FA07748EA174266C762526"], "title": "Favourite Children’s Songs - Animal Songs", "series": "Favourite Children’s Songs", "episodes": "Animal Songs", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000160-50000441-b-03eCHH_o.png" }, +{ "no": "288", "model": "10000161", "audio_id": [], "hash": [], "title": "Favourite Classics - Peter Pan and other classic stories", "series": "Favourite Classics", "episodes": "Peter Pan and other classic stories", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000161-50000442-b--svf8j_K.png" }, +{ "no": "289", "model": "10000163", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Pink (Beige)", "series": "", "episodes": "Kreativ-Tonie Pink (Beige)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000163-50000541-ST-3cYmv2if.png" }, +{ "no": "290", "model": "10000164", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Anthrazit (Beige)", "series": "", "episodes": "Kreativ-Tonie Anthrazit (Beige)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000164-50000544-ST-jG0YQTOM.png" }, +{ "no": "291", "model": "10000165", "audio_id": ["1567785245"], "hash": ["C4A445F46DF2E7B7646ADAE01D9659AAA26AD822"], "title": "TKKG Junior - Giftige Schokolade", "series": "TKKG Junior", "episodes": "Giftige Schokolade", "tracks": [], "release": "1570665600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000165-50000551-b-SBfVn2m4.png" }, +{ "no": "292", "model": "10000166", "audio_id": [], "hash": [], "title": "HOW AND WHY - Whales and Dolphins / Secrets of the Deep Sea", "series": "HOW AND WHY", "episodes": "Whales and Dolphins / Secrets of the Deep Sea", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-educational", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000166-50000555-b-lggfXJKQ.png" }, +{ "no": "293", "model": "10000168", "audio_id": ["1571393323"], "hash": ["6EBEC735FA1AA9BD9BA6E5EC4A7034CBBE773C8D"], "title": "Favourite Children’s Songs - Sing-Along Songs", "series": "Favourite Children’s Songs", "episodes": "Sing-Along Songs", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000168-50000561-b-OcfJpH1x.png" }, +{ "no": "294", "model": "10000169", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Clown", "series": "", "episodes": "Creative-Tonie Clown", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000169-50000564-g-oZqK3_Vl.png" }, +{ "no": "295", "model": "10000170", "audio_id": [], "hash": [], "title": " - Creative-Tonie Skater", "series": "", "episodes": "Creative-Tonie Skater", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/02-0028-98-0426-g-eBFy20hy.png" }, +{ "no": "296", "model": "10000172", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Travelling Songs", "series": "Favourite Children’s Songs", "episodes": "Travelling Songs", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000172-50000574-b-LBKYeOka.png" }, +{ "no": "297", "model": "10000173", "audio_id": [], "hash": [], "title": "HOW AND WHY - Space Travel / The Moon", "series": "HOW AND WHY", "episodes": "Space Travel / The Moon", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-educational", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000173-50000582-b-IvVGXGDm.png" }, +{ "no": "298", "model": "10000174", "audio_id": [], "hash": [], "title": "Maya The Bee - The birth of Maya", "series": "Maya The Bee", "episodes": "The birth of Maya", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000227-50000588-b-5zuTgL8H.png" }, +{ "no": "299", "model": "10000175", "audio_id": ["1567153050"], "hash": ["AA8E3321EFA6B25ABD54630A2BD0ACF8CBD5E31A"], "title": "Kosmo und Klax - Freundschaftsgeschichten", "series": "Kosmo und Klax", "episodes": "Freundschaftsgeschichten", "tracks": [], "release": "1567641600", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000175-50000591-b-rBOesc5M.png" }, +{ "no": "300", "model": "10000178", "audio_id": ["1"], "hash": [], "title": " - Superhero Boy", "series": "", "episodes": "Superhero Boy", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000178-50000603-g-_XQK3PqE.png" }, +{ "no": "301", "model": "10000179", "audio_id": ["1"], "hash": [], "title": " - Superhero Girl", "series": "", "episodes": "Superhero Girl", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000179-50000604-g--LxV4a_E.png" }, +{ "no": "302", "model": "10000184", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Vampire", "series": "", "episodes": "Creative-Tonie Vampire", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000184-50000703-g-GV3odsp-.png" }, +{ "no": "303", "model": "10000194", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Yeti", "series": "", "episodes": "Creative-Tonie Yeti", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000194-50000856-g-4iGgJ1SE.png" }, +{ "no": "304", "model": "10000195", "audio_id": [], "hash": [], "title": "Favourite Classics - A Christmas Carol and other classic stories", "series": "Favourite Classics", "episodes": "A Christmas Carol and other classic stories", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000195-50000904-b-qBQYIFH_.png" }, +{ "no": "305", "model": "10000196", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Bedtime Songs & Lullabies 2", "series": "Favourite Children’s Songs", "episodes": "Bedtime Songs & Lullabies 2", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000196-50000802-b-BDCjcvPi.png" }, +{ "no": "306", "model": "10000197", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Counting Songs / Times", "series": "Favourite Children’s Songs", "episodes": "Counting Songs / Times", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000197-50000803-b-aEQBMxiB.png" }, +{ "no": "307", "model": "10000199", "audio_id": ["1579697260"], "hash": ["98E226360981B5402C2D523DBA1B1B597EB30E74"], "title": "Sven van Thom - Tanz den Spatz", "series": "Sven van Thom", "episodes": "Tanz den Spatz", "tracks": [], "release": "1580947200", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000199-50000807-b-eQJYBsBs.png" }, +{ "no": "308", "model": "10000200", "audio_id": ["1579699189"], "hash": ["23757D6C83C5DF54BCBF208D525FFE03AD6CACBB"], "title": "Lieblings-Klassiker - Robinson Crusoe und vier weitere Klassiker", "series": "Lieblings-Klassiker", "episodes": "Robinson Crusoe und vier weitere Klassiker", "tracks": [], "release": "1580947200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000200-50000811-b-jyo8_fHO.png" }, +{ "no": "309", "model": "10000201", "audio_id": [], "hash": [], "title": "Favourite Classics - Robinson Crusoe and other classic stories", "series": "Favourite Classics", "episodes": "Robinson Crusoe and other classic stories", "tracks": [], "release": "1580947200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000201-50000815-b-m4Xp_n3x.png" }, +{ "no": "310", "model": "10000202", "audio_id": ["1579694773"], "hash": ["C701E816FA88F802666A632E8A190921A0AA9E18"], "title": "Benjamin Blümchen - Die Märchennacht im Zoo", "series": "Benjamin Blümchen", "episodes": "Die Märchennacht im Zoo", "tracks": [], "release": "1580947200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000202-50000819-b-S_10dRXu.png" }, +{ "no": "311", "model": "10000203", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Dirigent", "series": "", "episodes": "Kreativ-Tonie Dirigent", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000203-50000823-b-VheHKzQz.png" }, +{ "no": "312", "model": "10000204", "audio_id": ["1"], "hash": ["1228FC393CDC6782B6A2585E42658DA191D8B654"], "title": "Kreativ-Tonie - Lufthansa", "series": "Kreativ-Tonie", "episodes": "Lufthansa", "tracks": [], "release": "1861920000", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/50000827.png" }, +{ "no": "313", "model": "10000205", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Conductor", "series": "", "episodes": "Creative-Tonie Conductor", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000205-50000832-g-79ptlRwr.png" }, +{ "no": "314", "model": "10000209", "audio_id": ["1621498153"], "hash": ["E452D9142E6ACB1B8D87E5F2B3AE3168254291F1"], "title": "Disney - Mulan", "series": "Disney", "episodes": "Mulan", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000209-50001246-b-0YUpPvI3.png" }, +{ "no": "315", "model": "10000210", "audio_id": [], "hash": [], "title": "Disney - Mulan", "series": "Disney", "episodes": "Mulan", "tracks": [], "release": "1628726400", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000210-50001254-b-7k4sPtxX.png" }, +{ "no": "316", "model": "10000215", "audio_id": ["1582899206"], "hash": ["F9B032B4FB82EFA975C2DEC114DE072874164794"], "title": "Geschichten vom Löwen - Die Geschichte vom Löwen, der nicht schreiben konnte und zwei weitere Löwengeschichten", "series": "Geschichten vom Löwen", "episodes": "Die Geschichte vom Löwen, der nicht schreiben konnte und zwei weitere Löwengeschichten", "tracks": [], "release": "1583366400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000215-50001080-b-w6yCvROZ.png" }, +{ "no": "317", "model": "10000223", "audio_id": ["1584702856"], "hash": ["08684E59BA77DFD5EF196753FCD426B907907871"], "title": "Weißt du eigentlich, wie lieb ich dich hab - Weißt du eigentlich, wie lieb ich dich hab?", "series": "Weißt du eigentlich, wie lieb ich dich hab", "episodes": "Weißt du eigentlich, wie lieb ich dich hab?", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000223-50001097-b-AHryA9aA.png" }, +{ "no": "318", "model": "10000224", "audio_id": ["1"], "hash": [], "title": " - Creative-Tonie Easter Bunny", "series": "", "episodes": "Creative-Tonie Easter Bunny", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000224-50001088-g-Egc7k2z-.png" }, +{ "no": "319", "model": "10000225", "audio_id": [], "hash": [], "title": "Guess how much I love you - Guess How Much I Love You", "series": "Guess how much I love you", "episodes": "Guess How Much I Love You", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000225-50001050-b-J6sbkluX.png" }, +{ "no": "320", "model": "10000227", "audio_id": [], "hash": [], "title": "Maya The Bee - The birth of Maya", "series": "Maya The Bee", "episodes": "The birth of Maya", "tracks": [], "release": "1585699200", "language": "en-gb", "category": "Audiobook", "pic": "https://tonies.com/assets/cache/10000227-50000588-b-5zuTgL8H.0e8873e5.png" }, +{ "no": "321", "model": "10000228", "audio_id": [], "hash": [], "title": "Despicable Me - The Junior Novel", "series": "Despicable Me", "episodes": "The Junior Novel", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000228-50001091-b-XDmIBnFs.png" }, +{ "no": "322", "model": "10000230", "audio_id": ["1584704459"], "hash": ["BFA07A0B325E0DEEA18A4DC97DDEF976C7E58BC2"], "title": "Lieblings-Kinderlieder - Spiel- und Bewegungslieder 2", "series": "Lieblings-Kinderlieder", "episodes": "Spiel- und Bewegungslieder 2", "tracks": [], "release": "0", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000230-50001114-b-I7ECi52U.png" }, +{ "no": "323", "model": "10000231", "audio_id": ["1589466823"], "hash": ["390831D405B37D62EA07D22A0254DAB9F419EA7D"], "title": "Petzi - Drei Landratten bauen ein Schiff", "series": "Petzi", "episodes": "Drei Landratten bauen ein Schiff", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000231-50001199-b-tn60cpGH.png" }, +{ "no": "324", "model": "10000238", "audio_id": ["1"], "hash": ["9F75EE2B6B389BE3DC76BFFA179CF24E569341B8"], "title": " - Kreativ-Tonie Fee", "series": "", "episodes": "Kreativ-Tonie Fee", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000238-50001203-b-tkhdzZU2.png" }, +{ "no": "325", "model": "10000240", "audio_id": ["1587466487"], "hash": ["E56DC53A7A1E101F4CE9C0DB34253CC5A8CE67E4"], "title": "Rolf Zuckowski - Rolfs neue Vogelhochzeit", "series": "Rolf Zuckowski", "episodes": "Rolfs neue Vogelhochzeit", "tracks": [], "release": "1588809600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000240-50001207-b-MSs3co8_.png" }, +{ "no": "326", "model": "10000241", "audio_id": ["1589466629"], "hash": ["7167CDC018DD26875EF1C1A3C9753AF77F0DB92F"], "title": "Thomas Müller - Mein Weg zum Traumverein", "series": "Thomas Müller", "episodes": "Mein Weg zum Traumverein", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000241-50001219-b-vuKA-DYv.png" }, +{ "no": "327", "model": "10000244", "audio_id": ["1589465384"], "hash": ["384583340FD8D880ADED6CEEBAD1D5CEBB4E805E"], "title": "Die Eule mit der Beule - Liederalbum", "series": "Die Eule mit der Beule", "episodes": "Liederalbum", "tracks": [], "release": "1591228800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000244-50001283-b-zcJK3kJA.png" }, +{ "no": "328", "model": "10000245", "audio_id": ["1603186186"], "hash": ["0B475ADBC358D1A2283E2EE09DEC0A55776942F2"], "title": "Disney - Cinderella", "series": "Disney", "episodes": "Cinderella", "tracks": [], "release": "1603324800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000245-50001215-b-y_ueQbgG.png" }, +{ "no": "329", "model": "10000246", "audio_id": ["1589465494"], "hash": ["87B145D77B3FF327B324CD9AC99D4A5733ED8DC2"], "title": "Heavysaurus - Rock'n Rarrr Music", "series": "Heavysaurus", "episodes": "Rock'n Rarrr Music", "tracks": [], "release": "1591228800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000246-50001230-b-WTaiSzZp.png" }, +{ "no": "330", "model": "10000247", "audio_id": ["1597843958"], "hash": ["BD838A625EC63E7713687B347EAFDF7C774E57A7"], "title": "Pumuckl - Spuk in der Werkstatt/Das verkaufte Bett", "series": "Pumuckl", "episodes": "Spuk in der Werkstatt/Das verkaufte Bett", "tracks": [], "release": "1599696000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000247-50001211-b-mASJO1wG.png" }, +{ "no": "331", "model": "10000248", "audio_id": ["1589539605"], "hash": ["B331CFF7FEC1D61E2C3B16C18692E997DA873105"], "title": "Yakari - Best of Kleiner Donner", "series": "Yakari", "episodes": "Best of Kleiner Donner", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000248-50001223-b-CowT5Yuz.png" }, +{ "no": "332", "model": "10000249", "audio_id": ["1"], "hash": ["3630A243E9F382968A2883A437DB9BC78A1ACF13"], "title": " - Creative-Tonie Fairy", "series": "", "episodes": "Creative-Tonie Fairy", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000249-50001242-g-n8XumXnO.png" }, +{ "no": "333", "model": "10000250", "audio_id": ["1598255985"], "hash": ["6D96E7B223CFCE56E95D475C7575D1ACE414737F"], "title": "Disney - Cinderella", "series": "Disney", "episodes": "Cinderella", "tracks": [], "release": "1605744000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000250-50001236-b-GsWEjIii.png" }, +{ "no": "334", "model": "10000251", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Playtime and Action Songs 2", "series": "Favourite Children’s Songs", "episodes": "Playtime and Action Songs 2", "tracks": [], "release": "1591228800", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000251-50001272-b-Rt9pIZpR.png" }, +{ "no": "335", "model": "10000252", "audio_id": [], "hash": [], "title": "Favourite Tales - Puss in Boots and other fairy tales", "series": "Favourite Tales", "episodes": "Puss in Boots and other fairy tales", "tracks": [], "release": "1599696000", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000252-50001289-b-j8uXPnJk.png" }, +{ "no": "336", "model": "10000254", "audio_id": ["1593184372","1599140047"], "hash": ["D8294A166B9BCC3621816719A998CF37740FE269","1D868D4504B2228348F1306583930F109CE5E16B"], "title": "Benjamin Blümchen - Das Original-Hörspiel zum Kinofilm und Songs", "series": "Benjamin Blümchen", "episodes": "Das Original-Hörspiel zum Kinofilm und Songs", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000254-50001472-b-BD0glhj4.png" }, +{ "no": "337", "model": "10000256", "audio_id": ["1611141443"], "hash": ["C97EBA52DE65B16F13B9F822BCC44253CB7A8B9A"], "title": "Greg's Tagebuch - Von Idioten umzingelt", "series": "Greg's Tagebuch", "episodes": "Von Idioten umzingelt", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000256-50001476-b-eiCDwljn.png" }, +{ "no": "338", "model": "10000257", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Sleepy", "series": "", "episodes": "Kreativ-Tonie Sleepy", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000257-50001455-b-0T3i4yFu.png" }, +{ "no": "339", "model": "10000258", "audio_id": ["1589466967"], "hash": ["AA475EEC1F89F6E6C0D80E5E6A178F391948D5E3"], "title": "Lieblings-Meisterstücke - Hänsel und Gretel", "series": "Lieblings-Meisterstücke", "episodes": "Hänsel und Gretel", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000258-50001468-b-92QC_n5-.png" }, +{ "no": "340", "model": "10000259", "audio_id": ["1589466718","1607348654"], "hash": ["F90BB10F2DAAB94E6AC3F0C8445F96C0BFCF3039","E4BCD18EFFAE976A2B06BB0CA9C7E5155C972B53"], "title": "Lieblings-Meisterstücke - Die Zauberflöte", "series": "Lieblings-Meisterstücke", "episodes": "Die Zauberflöte", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000259-50001464-b-uv3roBlI.png" }, +{ "no": "341", "model": "10000260", "audio_id": ["1603186614"], "hash": ["8F2B06C048AB02600E92357D1671E6E1FE9FB066"], "title": "Disney - Findet Nemo", "series": "Disney", "episodes": "Findet Nemo", "tracks": [], "release": "1603324800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000260-50001234-b-A-Z2g-Qk.png" }, +{ "no": "342", "model": "10000261", "audio_id": ["1611151776"], "hash": ["90692FFF7BCB10FBAB8F10A946EF3DF4547FA03B"], "title": "Eule findet den Beat - Auf Europatour", "series": "Eule findet den Beat", "episodes": "Auf Europatour", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000261-50001480-b-cLLmbiSY.png" }, +{ "no": "343", "model": "10000262", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Polizist", "series": "", "episodes": "Kreativ-Tonie Polizist", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000262-50002461-b-sr3rncOf.png" }, +{ "no": "344", "model": "10000263", "audio_id": ["1597845678"], "hash": ["40E4F57E6D6C8AC039BB559F2F18A40C0EEF9911"], "title": "Lieblings-Kinderlieder - Europäische Kinderlieder", "series": "Lieblings-Kinderlieder", "episodes": "Europäische Kinderlieder", "tracks": [], "release": "1599696000", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000263-50001484-b-i45XYtf_.png" }, +{ "no": "345", "model": "10000265", "audio_id": ["1597845307"], "hash": ["ACD5D5ACD6991FD6AD2953D679326962A0C6EBF2"], "title": "WAS IST WAS - Pinguine/Tiere im Zoo", "series": "WAS IST WAS", "episodes": "Pinguine/Tiere im Zoo", "tracks": [], "release": "1599696000", "language": "de-de", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000265-50001488-b-dlb-b5pb.png" }, +{ "no": "346", "model": "10000266", "audio_id": ["1618933872"], "hash": ["B1F09A88544F8BB869BC14FDC0B24E5EE2CDE064"], "title": "Wieso? Weshalb? Warum? junior - Der Wald", "series": "Wieso? Weshalb? Warum? junior", "episodes": "Der Wald", "tracks": [], "release": "1620604800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000266-50001494-b-CEeOCTV7.png" }, +{ "no": "347", "model": "10000267", "audio_id": [], "hash": [], "title": " - Creative-Tonie Sleepy", "series": "", "episodes": "Creative-Tonie Sleepy", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000267-50001637-g-9SH7UIEo.png" }, +{ "no": "348", "model": "10000269", "audio_id": ["1598255592"], "hash": ["9D7F408A08BAB7EAC5F933D559D4DDE6256CD511"], "title": "Disney - Finding Nemo", "series": "Disney", "episodes": "Finding Nemo", "tracks": [], "release": "1605744000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000269-50001238-b-y1gNEbAW.png" }, +{ "no": "349", "model": "10000270", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - European Children's Songs", "series": "Favourite Children’s Songs", "episodes": "European Children's Songs", "tracks": [], "release": "1599696000", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000270-50001627-b-bCu5Jkld.png" }, +{ "no": "350", "model": "10000271", "audio_id": [], "hash": [], "title": "Favourite Masterpieces - Hansel and Gretel", "series": "Favourite Masterpieces", "episodes": "Hansel and Gretel", "tracks": [], "release": "1634083200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000271-50001629-b-AAMSP8r5.png" }, +{ "no": "351", "model": "10000273", "audio_id": ["1611154008"], "hash": ["EFE4DDEF42D7AD8D9673217633D77B712BEEE31D"], "title": "Peter Rabbit - The Peter Rabbit Collection", "series": "Peter Rabbit", "episodes": "The Peter Rabbit Collection", "tracks": [], "release": "1613001600", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000273-50001635-b--3vVCvuHA.png" }, +{ "no": "352", "model": "10000274", "audio_id": [], "hash": [], "title": "Fun with Spot - Spot's Fun with Friends", "series": "Fun with Spot", "episodes": "Spot's Fun with Friends", "tracks": [], "release": "1605744000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000274-50001633-b-EwI6ab8q.png" }, +{ "no": "353", "model": "10000275", "audio_id": ["1614016237"], "hash": ["98EE30F7C0997C013077CE12935F203451F79A04"], "title": "Bakabu - Beste Freunde", "series": "Bakabu", "episodes": "Beste Freunde", "tracks": [], "release": "1615420800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000275-50001839-b-fccLgkxG.png" }, +{ "no": "354", "model": "10000278", "audio_id": ["1615473211"], "hash": ["E4A00BCD6E9A368691A64B13B5F6439F8B3ECEC9"], "title": "Fredrik Vahle - Zugabe", "series": "Fredrik Vahle", "episodes": "Zugabe", "tracks": [], "release": "1618444800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000278-50001847-b-YhAXXYmr.png" }, +{ "no": "355", "model": "10000279", "audio_id": ["1618931878"], "hash": ["283FBCE5DD7AC7F82FF94707F0E89DB48C53D613"], "title": "Janosch - Als Tiger und Bär beinahe das Beste verpassten", "series": "Janosch", "episodes": "Als Tiger und Bär beinahe das Beste verpassten", "tracks": [], "release": "1620604800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000279-50001643-b-R_rvqPXa.png" }, +{ "no": "356", "model": "10000280", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Monster", "series": "", "episodes": "Kreativ-Tonie Monster", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000280-50001649-b-pLbsE7do.png" }, +{ "no": "357", "model": "10000283", "audio_id": ["1603203813"], "hash": ["6516548B7BBC7B900F56CECCB13E9CFCBF7D37BB"], "title": "Kasperli - Es hät en Dieb im Zoo! / D Insle vom Pirat Ohnibart", "series": "Kasperli", "episodes": "Es hät en Dieb im Zoo! / D Insle vom Pirat Ohnibart", "tracks": [], "release": "1603324800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000283-50001853-b-FY_pzlQh.png" }, +{ "no": "358", "model": "10000284", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Detektiv", "series": "", "episodes": "Kreativ-Tonie Detektiv", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000284-50006269-b-lpmh9aRP.png" }, +{ "no": "359", "model": "10000285", "audio_id": ["1603457557"], "hash": ["0ED88036E887A367CCFABB0526723A490A45684F"], "title": "Disney - Die Monster AG", "series": "Disney", "episodes": "Die Monster AG", "tracks": [], "release": "1605744000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000285-50001250-b-UtHpdBz5.png" }, +{ "no": "360", "model": "10000287", "audio_id": ["1602851914"], "hash": ["9AE807599CDDA23B9FD896CBE19FC1B6887F25AC"], "title": "Kai Lüftners Kürbiskopp - Ein musikalisches Roadmovie", "series": "Kai Lüftners Kürbiskopp", "episodes": "Ein musikalisches Roadmovie", "tracks": [], "release": "1603324800", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000287-50001961-b-id83n-j3.png" }, +{ "no": "361", "model": "10000289", "audio_id": ["1603187188"], "hash": ["3975179176CFAA082229A2CF7848BEA4395730E2"], "title": "Lieblings-Kinderlieder - Halloween & Spuk", "series": "Lieblings-Kinderlieder", "episodes": "Halloween & Spuk", "tracks": [], "release": "1603324800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000289-50001862-b-6PEAZPeh.png" }, +{ "no": "362", "model": "10000291", "audio_id": ["1621583135"], "hash": ["A92DDB1957036565766B36BBA3F154443CFE9BF8"], "title": "WAS IST WAS Junior - Bauernhof", "series": "WAS IST WAS Junior", "episodes": "Bauernhof", "tracks": [], "release": "1626307200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000291-50001843-b-tQqIdmu_.png" }, +{ "no": "363", "model": "10000293", "audio_id": ["1605696937"], "hash": ["0BC0BEBCD13D6954430FE631BE7692D1FBED7B6D"], "title": "Elmer - Elmer and Friends Story Collection", "series": "Elmer", "episodes": "Elmer and Friends Story Collection", "tracks": [], "release": "1605744000", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000293-50000600-b--cCDVMwU.png" }, +{ "no": "364", "model": "10000294", "audio_id": [], "hash": [], "title": "Disney - Monsters Inc.", "series": "Disney", "episodes": "Monsters Inc.", "tracks": [], "release": "1623283200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000294-50001252-b-yEX7Uz3k.png" }, +{ "no": "365", "model": "10000295", "audio_id": ["1604075272"], "hash": ["71E4CC5321C9CF6193F81C2DCBC586A792A3C5D8"], "title": "Favourite Children’s Songs - Halloween & Spooky Songs", "series": "Favourite Children’s Songs", "episodes": "Halloween & Spooky Songs", "tracks": [], "release": "1603324800", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000295-50001860-b-IL1P1vCm.png" }, +{ "no": "366", "model": "10000298", "audio_id": ["1603283156"], "hash": ["22015BCE90A59714B5ECEAD3B9915B386A422EE0"], "title": "Drachenzähmen leicht gemacht - Drachenzähmen leicht gemacht 1", "series": "Drachenzähmen leicht gemacht", "episodes": "Drachenzähmen leicht gemacht 1", "tracks": [], "release": "1605744000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000298-50001258-b-2e7ZPoHm.png" }, +{ "no": "367", "model": "10000300", "audio_id": ["1611142297"], "hash": ["D6F795A4E775939BB5E33106D2E581132E4D1EF7"], "title": "Lieblings-Meisterstücke - Der Nussknacker", "series": "Lieblings-Meisterstücke", "episodes": "Der Nussknacker", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000300-50001979-b-R6s6QVVz.png" }, +{ "no": "368", "model": "10000301", "audio_id": ["1614020456"], "hash": ["BD3DB22F30F51355D1748762C35E2E36779648E6"], "title": "Lindbergh - Die abenteuerliche Geschichte einer fliegenden Maus", "series": "Lindbergh", "episodes": "Die abenteuerliche Geschichte einer fliegenden Maus", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000301-50001983-b-jLo14qFp.png" }, +{ "no": "369", "model": "10000302", "audio_id": ["1613142717"], "hash": ["399DB744A1BFB10EF5141A4C0F3B23321C9167C0"], "title": "Die drei Räuber - Die drei Räuber", "series": "Die drei Räuber", "episodes": "Die drei Räuber", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000302-50001969-b-2qQEh95j.png" }, +{ "no": "370", "model": "10000303", "audio_id": ["1603281123"], "hash": ["9D5EDE86C919617B949BC0B8F69B3FB8BF67CA42"], "title": "Peppa Pig - Die Ritterburg und 7 weitere Geschichten", "series": "Peppa Pig", "episodes": "Die Ritterburg und 7 weitere Geschichten", "tracks": [], "release": "1605744000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000303-50001268-b-MMwcmSQ5.png" }, +{ "no": "371", "model": "10000304", "audio_id": ["1603457195"], "hash": ["9D2E864EE60DCBA93066B5C11B5D697F35C19A0C"], "title": "Rolf Zuckowski - In der Weihnachtsbäckerei", "series": "Rolf Zuckowski", "episodes": "In der Weihnachtsbäckerei", "tracks": [], "release": "1605657600", "language": "de-de", "category": "Musik", "pic": "https://tonies.de/assets/cache/10000304-50001965-b-KI7Nhc7o.15cc4236.png" }, +{ "no": "372", "model": "10000308", "audio_id": [], "hash": [], "title": "How to train your Dragon - How to train your Dragon", "series": "How to train your Dragon", "episodes": "How to train your Dragon", "tracks": [], "release": "1628726400", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000308-50001260-b-KvFEl59w.png" }, +{ "no": "373", "model": "10000309", "audio_id": [], "hash": [], "title": "Favourite Masterpieces - The Magic Flute", "series": "Favourite Masterpieces", "episodes": "The Magic Flute", "tracks": [], "release": "1634083200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000309-50001891-b-loYQp8sA.png" }, +{ "no": "374", "model": "10000310", "audio_id": [], "hash": [], "title": "Favourite Masterpieces - The Nutcracker", "series": "Favourite Masterpieces", "episodes": "The Nutcracker", "tracks": [], "release": "1634083200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000310-50001973-b-HC_vGgiF.png" }, +{ "no": "375", "model": "10000311", "audio_id": [], "hash": [], "title": "Peppa Pig - On the Road with Peppa Pig", "series": "Peppa Pig", "episodes": "On the Road with Peppa Pig", "tracks": [], "release": "1603324800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000311-50001270-b--N5RzuCnO.png" }, +{ "no": "376", "model": "10000317", "audio_id": [], "hash": [], "title": "Diary of a Wimpy Kid - Diary of a Wimpy Kid", "series": "Diary of a Wimpy Kid", "episodes": "Diary of a Wimpy Kid", "tracks": [], "release": "1620604800", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000317-50001645-b-vRq4Wtb2.png" }, +{ "no": "377", "model": "10000318", "audio_id": [], "hash": [], "title": "Fireman Sam - The Pontypandy Pack", "series": "Fireman Sam", "episodes": "The Pontypandy Pack", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000318-50001092-b-_YH1SRAD.png" }, +{ "no": "378", "model": "10000319", "audio_id": [], "hash": [], "title": "Princess Lillifee - Princess Lillifee", "series": "Princess Lillifee", "episodes": "Princess Lillifee", "tracks": [], "release": "1580947200", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000319-50001084-b-inxM0Npg.png" }, +{ "no": "379", "model": "10000320", "audio_id": ["1625126376","1641108531"], "hash": ["938A1698332EED922168645A3FA95E86C732584B","B0385E1D0D3955659271316ECF7F98A075B6BB32"], "title": "Paw Patrol - Die Rettung der Meeresschildkröten", "series": "Paw Patrol", "episodes": "Die Rettung der Meeresschildkröten", "tracks": [], "release": "1620864000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000320-50003329-b-IdNApLds.png" }, +{ "no": "380", "model": "10000321", "audio_id": [], "hash": [], "title": "Paw Patrol - Chase", "series": "Paw Patrol", "episodes": "Chase", "tracks": [], "release": "1620604800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000321-50003328-b--nVprK4ic.png" }, +{ "no": "381", "model": "10000330", "audio_id": ["1"], "hash": ["FA2290234D767C05E7870263F5AE52F3B95AC645"], "title": " - Kreativ-Tonie Borussia Dortmund", "series": "", "episodes": "Kreativ-Tonie Borussia Dortmund", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000330-50001005-b-RWM4TBiv.png" }, +{ "no": "382", "model": "10000331", "audio_id": ["1614019608"], "hash": ["51CD4FA1EC30CDCB4FC7F14BBFCB3B6EE92388ED"], "title": "Miffy - Miffy", "series": "Miffy", "episodes": "Miffy", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000331-50001008-b-ztePf54Z.png" }, +{ "no": "383", "model": "10000332", "audio_id": ["1"], "hash": ["1C3C74C3300468E4BE6C4CF0D082C34E4A9EBF1E"], "title": "Kreativ-Tonie - Fortuna Düsseldorf", "series": "Kreativ-Tonie", "episodes": "Fortuna Düsseldorf", "tracks": [], "release": "1600214400", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://cdn.tonies.de/thumbnails/c2642215530ba0f1b0fac637a8943cf62697c6df.png" }, +{ "no": "384", "model": "10000333", "audio_id": ["1592471045"], "hash": ["7FD5227A307737494EBEC4BEF94BBE0EFE04F0E2"], "title": "Beethoven für Kids - Beethoven für Kids - Gelesen von Daniel Hope", "series": "Beethoven für Kids", "episodes": "Beethoven für Kids - Gelesen von Daniel Hope", "tracks": [], "release": "1593648000", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000333-50001016-b-llwDxeee.png" }, +{ "no": "385", "model": "10000334", "audio_id": ["1611138006"], "hash": ["812C030A89FF1B8736B7E940FAA5A45352BC196A"], "title": "Disney - Winnie Puuh auf großer Reise", "series": "Disney", "episodes": "Winnie Puuh auf großer Reise", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000334-50001020-b-KEL_C6bL.png" }, +{ "no": "386", "model": "10000335", "audio_id": ["1623757893"], "hash": ["FDFE716263EF7E90EE07F2C3CFAD2A5DE93317B8"], "title": "Disney - Winnie the Pooh", "series": "Disney", "episodes": "Winnie the Pooh", "tracks": [], "release": "1626307200", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000335-50001024-b-P92RQqDd.png" }, +{ "no": "387", "model": "10000336", "audio_id": [], "hash": [], "title": "Miffy - Miffy’s Adventures", "series": "Miffy", "episodes": "Miffy’s Adventures", "tracks": [], "release": "1613001600", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000336-50001028-b-x0Le8POn.png" }, +{ "no": "388", "model": "10000337", "audio_id": ["1611143214"], "hash": ["A49ABDE70780A8A5E7B577521FF2381850BD9C41"], "title": "Peter Hase und seine Freunde - Ein Geschichten-Schatz", "series": "Peter Hase und seine Freunde", "episodes": "Ein Geschichten-Schatz", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000337-50001032-b-SOm6kfKC.png" }, +{ "no": "389", "model": "10000343", "audio_id": [], "hash": [], "title": " - Creative-Tonie Doctor", "series": "", "episodes": "Creative-Tonie Doctor", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000343-50001038-g-6QOz8jHA.png" }, +{ "no": "390", "model": "10000357", "audio_id": [], "hash": [], "title": "Shrek - Shrek", "series": "Shrek", "episodes": "Shrek", "tracks": [], "release": "1634083200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000357-50001131-b-UdxCYvUr.png" }, +{ "no": "391", "model": "10000358", "audio_id": [], "hash": [], "title": "Bob the Builder - Bob the Builder 1", "series": "Bob the Builder", "episodes": "Bob the Builder 1", "tracks": [], "release": "1618963200", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000358-50001135-b-8vrh50yY.png" }, +{ "no": "392", "model": "10000360", "audio_id": ["1632495265"], "hash": ["D77A1A659DC89AFB5D750FDBD15E6DB0CCA2AFD1"], "title": "Wir sind nachher wieder da, wir müssen kurz nach Afrika - Wir sind nachher wieder da, wir müssen kurz nach Afrika", "series": "Wir sind nachher wieder da, wir müssen kurz nach Afrika", "episodes": "Wir sind nachher wieder da, wir müssen kurz nach Afrika", "tracks": [], "release": "1634083200", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000360-50001141-b--HkfaXPm.png" }, +{ "no": "393", "model": "10000361", "audio_id": ["1618929823","1632899421"], "hash": ["97AD5A2B7A96D163D8CA48DB85AF7D9BDEFDDC0C","F0EF5341EAD0CB6CF46B2C9249679BEA9259AE0A"], "title": "LEA - LEAs Welt", "series": "LEA", "episodes": "LEAs Welt", "tracks": [], "release": "1620604800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000361-50001145-b-pEg2Z-qw.png" }, +{ "no": "394", "model": "10000362", "audio_id": ["1644247935"], "hash": ["EEFAD5DCF9F5A9A2B0A26517843AAA68C6D2DE6B"], "title": "Der kleine König - Der kleine König sagt Gute Nacht", "series": "Der kleine König", "episodes": "Der kleine König sagt Gute Nacht", "tracks": [], "release": "1646784000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000362-50001149-b-qEV5i4x7.png" }, +{ "no": "395", "model": "10000364", "audio_id": ["1618933130"], "hash": ["1F67EF68F732DCAAA0A966CB408D38DB0838056C"], "title": "Bob der Baumeister - Bob der Küchenmeister", "series": "Bob der Baumeister", "episodes": "Bob der Küchenmeister", "tracks": [], "release": "1620604800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000364-50001151-b-F-28_KRN.png" }, +{ "no": "396", "model": "10000365", "audio_id": ["1618930832"], "hash": ["5ED4CE6C9E49AB85A91361B52C6F586C39BBD81B"], "title": "Shrek - Der Tollkühne Held", "series": "Shrek", "episodes": "Der Tollkühne Held", "tracks": [], "release": "1620604800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000365-50001153-b-lVQ6uerg.png" }, +{ "no": "397", "model": "10000368", "audio_id": [], "hash": [], "title": "Shaun the Sheep - The Farmer's Llamas", "series": "Shaun the Sheep", "episodes": "The Farmer's Llamas", "tracks": [], "release": "1661212800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000368-50001162-b-eKcQv4hd.png" }, +{ "no": "398", "model": "10000369", "audio_id": ["1634643392"], "hash": ["0F78F13E82FC49C7E955A948BDCB9EF6D6E987E6"], "title": "Pixi Wissen - Planeten und Sterne", "series": "Pixi Wissen", "episodes": "Planeten und Sterne", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000369-50001166-b-i7Y1DVdZ.png" }, +{ "no": "399", "model": "10000370", "audio_id": ["1614017057"], "hash": ["C9691177B88F62D72DD791DF723CE5BA110FE167"], "title": "Der Sternenmann - Lieder und Hörspiel zur guten Nacht", "series": "Der Sternenmann", "episodes": "Lieder und Hörspiel zur guten Nacht", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000370-50001170-b-_uNwCijw.png" }, +{ "no": "400", "model": "10000371", "audio_id": ["1610722877"], "hash": ["982E3EA5B91CE0428910916F4D3F45922803A964"], "title": "Kikaninchen - Die Mischung macht’s!", "series": "Kikaninchen", "episodes": "Die Mischung macht’s!", "tracks": [], "release": "1613001600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000371-50001174-b-etPYd4AG.png" }, +{ "no": "401", "model": "10000372", "audio_id": [], "hash": [], "title": "Disney - 101 Dalmatians", "series": "Disney", "episodes": "101 Dalmatians", "tracks": [], "release": "1644364800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000372-50001178-b-258FBcJC.png" }, +{ "no": "402", "model": "10000373", "audio_id": ["1618311124"], "hash": ["49AECD3ABDEB88A587EF2D49C9B076C94D162C31"], "title": "Disney - 101 Dalmatiner", "series": "Disney", "episodes": "101 Dalmatiner", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000373-50001180-b-6foxdYcD.png" }, +{ "no": "403", "model": "10000377", "audio_id": [], "hash": [], "title": "Masha and the Bear - Masha & the Bear 1", "series": "Masha and the Bear", "episodes": "Masha & the Bear 1", "tracks": [], "release": "1631145600", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/hero-2-Zk6hWR2Y.png" }, +{ "no": "404", "model": "10000380", "audio_id": [], "hash": [], "title": "Paddington Bear - A bear called Paddington", "series": "Paddington Bear", "episodes": "A bear called Paddington", "tracks": [], "release": "1638403200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000572-50001890-b%28-zw0v5LpV.png" }, +{ "no": "405", "model": "10000381", "audio_id": ["1636534955"], "hash": ["7F82295663D4735BE44DC6F1A97830A07CE76407"], "title": "Paddington - Geschichten von Paddington", "series": "Paddington", "episodes": "Geschichten von Paddington", "tracks": [], "release": "1638316800", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000381-50001306-b-IOqxFBcw.png" }, +{ "no": "406", "model": "10000382", "audio_id": [], "hash": [], "title": "In the Night Garden - A Musical Journey", "series": "In the Night Garden", "episodes": "A Musical Journey", "tracks": [], "release": "1615420800", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000382-50001344-b-NLZIjRTt.png" }, +{ "no": "407", "model": "10000383", "audio_id": ["1614003428"], "hash": ["15DD5DE9899063F6998D162288E9BE96F57835BD"], "title": "Die kleine Schnecke Monika Häuschen - Warum stolpern Tausendfüßler nicht?", "series": "Die kleine Schnecke Monika Häuschen", "episodes": "Warum stolpern Tausendfüßler nicht?", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000383-50001347-b-iXFGmCF1.png" }, +{ "no": "408", "model": "10000384", "audio_id": ["1615477040"], "hash": ["71428408D69AD2455A20937CD1263FCB6C6679D3"], "title": "Eule findet den Beat - Mit Gefühl", "series": "Eule findet den Beat", "episodes": "Mit Gefühl", "tracks": [], "release": "1618444800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000384-50001352-b-WTWeAT-V.png" }, +{ "no": "409", "model": "10000386", "audio_id": [], "hash": [], "title": "Mia and Me - Centopia’s hope / Talking to unicorns", "series": "Mia and Me", "episodes": "Centopia’s hope / Talking to unicorns", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000386-50001639-b-_zvOzss2.png" }, +{ "no": "410", "model": "10000399", "audio_id": ["1613137355"], "hash": ["04CFB9417A3F264312FF166A5D5FD1DAE57C2141"], "title": "Sternenschweif - Geheimnisvolle Verwandlung", "series": "Sternenschweif", "episodes": "Geheimnisvolle Verwandlung", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000399-50001428-b-g-8NJWrF.png" }, +{ "no": "411", "model": "10000408", "audio_id": [], "hash": [], "title": "Super Wings - A World of Adventure", "series": "Super Wings", "episodes": "A World of Adventure", "tracks": [], "release": "1628726400", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000408-50001433-b-AWoVjlie.png" }, +{ "no": "412", "model": "10000482", "audio_id": ["1655213844"], "hash": ["A7AC16F50A989631E51AE050261566EC23B3DD5A"], "title": "Thomas & seine Freunde - Große Welt! Große Abenteuer!", "series": "Thomas & seine Freunde", "episodes": "Große Welt! Große Abenteuer!", "tracks": [], "release": "1657670400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000482-50001513-b-dqBphh2x.png" }, +{ "no": "413", "model": "10000483", "audio_id": [], "hash": [], "title": "Thomas the Tank Engine - Thomas & Friends: The Adventure Begins", "series": "Thomas the Tank Engine", "episodes": "Thomas & Friends: The Adventure Begins", "tracks": [], "release": "1638403200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000483-50001515-b-c13vlazF.png" }, +{ "no": "414", "model": "10000484", "audio_id": ["1653301237"], "hash": ["91D817763CD05E8139A7E6CE9F46DFCE2ED29FC0"], "title": "SPIRIT - SPIRIT - Frei und Ungezähmt", "series": "SPIRIT", "episodes": "SPIRIT - Frei und Ungezähmt", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000484-50001519-b-o0o9sPWf.png" }, +{ "no": "415", "model": "10000485", "audio_id": [], "hash": [], "title": "Dreamworks - Spirit - Untamed", "series": "Dreamworks", "episodes": "Spirit - Untamed", "tracks": [], "release": "1651536000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000485-50001521-b-uEXcMeFG.png" }, +{ "no": "416", "model": "10000486", "audio_id": ["1615475317"], "hash": ["CFDB2C6357AA68F56A545B0058E58EF5F8C3BDF2"], "title": "Die Biene Maja - Der Bienentanz", "series": "Die Biene Maja", "episodes": "Der Bienentanz", "tracks": [], "release": "1618444800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000486-50001525-b-VlmwZxfc.png" }, +{ "no": "417", "model": "10000487", "audio_id": ["1615377845"], "hash": ["D094F64C17DFA6CF2FFFA5CB46FEDB8EB459E500"], "title": "Ralph Ruthe - Das Klo", "series": "Ralph Ruthe", "episodes": "Das Klo", "tracks": [], "release": "1618444800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000487-50001529-b-ASuKAio0.png" }, +{ "no": "418", "model": "10000488", "audio_id": [], "hash": [], "title": "The Famous Five - The Famous Five: A Short Story Collection", "series": "The Famous Five", "episodes": "The Famous Five: A Short Story Collection", "tracks": [], "release": "1620604800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000488-50001531-b-WaQ56T-m.png" }, +{ "no": "419", "model": "10000491", "audio_id": ["1632496175"], "hash": ["31EDC8FA096F7C5515C1863CAD057B155D5A04FC"], "title": "Rico und Oskar - Rico, Oskar und die Tieferschatten", "series": "Rico und Oskar", "episodes": "Rico, Oskar und die Tieferschatten", "tracks": [], "release": "1634083200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000491-50001547-b-yajOddiM.png" }, +{ "no": "420", "model": "10000492", "audio_id": ["1613149310"], "hash": ["5F15E51E64554B34346021C5C749FE8DB386C1F0"], "title": "Lichterkinder - Die besten Spiel- und Bewegungslieder", "series": "Lichterkinder", "episodes": "Die besten Spiel- und Bewegungslieder", "tracks": [], "release": "1615420800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000492-50001549-b-bUCDWsVq.png" }, +{ "no": "421", "model": "10000493", "audio_id": ["1633445007"], "hash": ["75A7BE5A67F161E6F4852EF83A1511CC506EC378"], "title": "Bibi & Tina - Das Waisenfohlen", "series": "Bibi & Tina", "episodes": "Das Waisenfohlen", "tracks": [], "release": "1634083200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000493-50001555-b-J9oi6Ox0.png" }, +{ "no": "422", "model": "10000495", "audio_id": ["1621506260"], "hash": ["7A6A3DA4B514AC3E6B52B43E87E7FF5EFD494768"], "title": "Trolls - Finde dein Glück", "series": "Trolls", "episodes": "Finde dein Glück", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000495-50001563-b-RiUSAGR6.png" }, +{ "no": "423", "model": "10000496", "audio_id": [], "hash": [], "title": "Trolls - Trolls", "series": "Trolls", "episodes": "Trolls", "tracks": [], "release": "1628726400", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000496-50001565-b-JNsDu4Z3.png" }, +{ "no": "424", "model": "10000497", "audio_id": [], "hash": [], "title": "Disney - The Jungle Book", "series": "Disney", "episodes": "The Jungle Book", "tracks": [], "release": "1598486400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-JungleBook-Transparent.png?v=1629749316" }, +{ "no": "425", "model": "10000498", "audio_id": [], "hash": [], "title": "Disney - The Lion King", "series": "Disney", "episodes": "The Lion King", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-LionKing-Transparent.png?v=1629749327" }, +{ "no": "426", "model": "10000499", "audio_id": ["1641995471"], "hash": ["B26449358C8A12CEAC6E3A404C390986CD80C65A"], "title": "Sesamstraße - Krümelmonsters Mitmampfspaß", "series": "Sesamstraße", "episodes": "Krümelmonsters Mitmampfspaß", "tracks": [], "release": "1644364800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000499-50001573-b-JvL-ywWC.png" }, +{ "no": "427", "model": "10000500", "audio_id": [], "hash": [], "title": "Sesame Street - Cookie Monster", "series": "Sesame Street", "episodes": "Cookie Monster", "tracks": [], "release": "1636502400", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000500-50001575-b-A4rI6vzE.png" }, +{ "no": "428", "model": "10000501", "audio_id": [], "hash": [], "title": "Disney and Pixar - Cars", "series": "Disney and Pixar", "episodes": "Cars", "tracks": [], "release": "1600387200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Car-Transparent.png?v=1629749161" }, +{ "no": "429", "model": "10000502", "audio_id": [], "hash": [], "title": "Beethoven for Kids - Beethoven for Kids - Presented by Daniel Hope", "series": "Beethoven for Kids", "episodes": "Beethoven for Kids - Presented by Daniel Hope", "tracks": [], "release": "1599696000", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000502-50001586-b-XN1Y7fGa.png" }, +{ "no": "430", "model": "10000503", "audio_id": [], "hash": [], "title": "Disney - The Little Mermaid", "series": "Disney", "episodes": "The Little Mermaid", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-LittleMermaid-Transparent.png?v=1629749341" }, +{ "no": "431", "model": "10000504", "audio_id": [], "hash": [], "title": "Despicable Me - ", "series": "Despicable Me", "episodes": "", "tracks": [], "release": "1605052800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-DespicableMe-Transparent.png?v=1629749026" }, +{ "no": "432", "model": "10000505", "audio_id": [], "hash": [], "title": "Pinocchio and Other Classic Stories - ", "series": "Pinocchio and Other Classic Stories", "episodes": "", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Pinocchio-Transparent.png?v=1629749690" }, +{ "no": "433", "model": "10000506", "audio_id": [], "hash": [], "title": "Red Riding Hood and Other Fairy Tales - ", "series": "Red Riding Hood and Other Fairy Tales", "episodes": "", "tracks": [], "release": "1632182400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-FavoriteTales-transparent.png?v=1629301521" }, +{ "no": "434", "model": "10000507", "audio_id": ["1623839089"], "hash": ["0AF4FDBAE4DB14B01731CCC1B3C035A2DC789DB0"], "title": "Unter meinem Bett - Unter meinem Bett 5", "series": "Unter meinem Bett", "episodes": "Unter meinem Bett 5", "tracks": [], "release": "1628726400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000507-50001597-b-ANibxdCp.png" }, +{ "no": "435", "model": "10000508", "audio_id": ["1666852857"], "hash": ["CD64F10600A56E42853ED6C8AA7A33DA6F362AD5"], "title": "Giraffenaffen - Die Giraffenaffen Lieblingslieder", "series": "Giraffenaffen", "episodes": "Die Giraffenaffen Lieblingslieder", "tracks": [], "release": "1668038400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000508-50001599-m-LWFycps3.png" }, +{ "no": "436", "model": "10000509", "audio_id": [], "hash": [], "title": "Disney - Aladdin", "series": "Disney", "episodes": "Aladdin", "tracks": [], "release": "1617667200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Aladdin-Transparent.png?v=1629749014" }, +{ "no": "437", "model": "10000510", "audio_id": [], "hash": [], "title": "Disney - Frozen: Elsa", "series": "Disney", "episodes": "Frozen: Elsa", "tracks": [], "release": "1603238400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Frozen-Transparent.png?v=1598469588" }, +{ "no": "438", "model": "10000511", "audio_id": [], "hash": [], "title": "Disney and Pixar - Toy Story", "series": "Disney and Pixar", "episodes": "Toy Story", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-ToyStory-Transparent.png?v=1598471384" }, +{ "no": "439", "model": "10000512", "audio_id": [], "hash": [], "title": "Disney - Cinderella", "series": "Disney", "episodes": "Cinderella", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Cinderella-Transparent.png?v=1629749229" }, +{ "no": "440", "model": "10000513", "audio_id": [], "hash": [], "title": "Disney and Pixar - Finding Nemo", "series": "Disney and Pixar", "episodes": "Finding Nemo", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Nemo-Transparent.png?v=1598469564" }, +{ "no": "441", "model": "10000515", "audio_id": [], "hash": [], "title": "Disney - Mulan", "series": "Disney", "episodes": "Mulan", "tracks": [], "release": "1629072000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Mulan-Transparent.png?v=1628083717" }, +{ "no": "442", "model": "10000517", "audio_id": ["1619191456"], "hash": ["05823D1B07985E9F2529E0ED090ED14F149535BD"], "title": "Disney - Monsters Inc.", "series": "Disney", "episodes": "Monsters Inc.", "tracks": [], "release": "1623628800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-MonstersInc-Transparent.png?v=1629749259" }, +{ "no": "443", "model": "10000524", "audio_id": ["1614018035"], "hash": ["4E0BCB589462786C497457BFC3A05D24C8D813EC"], "title": "Feuerwehrmann Sam - Eine Insel voller Abenteuer", "series": "Feuerwehrmann Sam", "episodes": "Eine Insel voller Abenteuer", "tracks": [], "release": "1615420800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000524-50001655-b-6Gpr1INn.png" }, +{ "no": "444", "model": "10000525", "audio_id": ["1621932043"], "hash": ["9B87A589EAD58CAB36CEF507929902D5545B66F0"], "title": "Rund um die Welt mit Fuchs und Schaf - Osaka & Serengeti", "series": "Rund um die Welt mit Fuchs und Schaf", "episodes": "Osaka & Serengeti", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000525-50001659-b-WygaF6LM.png" }, +{ "no": "445", "model": "10000526", "audio_id": ["1623769782"], "hash": ["6394FFB1D9ED7C4FE8FD43AC1388603569C72F5A"], "title": "Disney - Vaiana", "series": "Disney", "episodes": "Vaiana", "tracks": [], "release": "1628726400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000526-50001663-b-0naxLFhi.png" }, +{ "no": "446", "model": "10000527", "audio_id": ["1615474093"], "hash": ["C7856682CF6785CCEB9B61E2F03DFE4B4B0174A7"], "title": "Affenzahn Utopia - Die Abenteuer von Affenzahn", "series": "Affenzahn Utopia", "episodes": "Die Abenteuer von Affenzahn", "tracks": [], "release": "1618444800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000527-50001667-b-m8_zLILa.png" }, +{ "no": "447", "model": "10000528", "audio_id": ["1636449199"], "hash": ["A2F8C8A0AA9647CB4D17C198AAA28AC776FA3024"], "title": "Asterix - Asterix, der Gallier", "series": "Asterix", "episodes": "Asterix, der Gallier", "tracks": [], "release": "1638316800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000528-50001671-b-XZlkF7oZ.png" }, +{ "no": "448", "model": "10000529", "audio_id": ["1623425833"], "hash": ["EC2EE59311A9AA5449E5B1DE7213A5B01839F79E"], "title": "Die kleine Hummel Bommel - Die kleine Hummel Bommel / Die kleine Hummel Bommel sucht das Glück", "series": "Die kleine Hummel Bommel", "episodes": "Die kleine Hummel Bommel / Die kleine Hummel Bommel sucht das Glück", "tracks": [], "release": "1626307200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000529-50001675-b-J5FCDkhE.png" }, +{ "no": "449", "model": "10000530", "audio_id": ["1623426891"], "hash": ["7B5B52EBB06C9663DCB2ACAB2825E8451D5DEA55"], "title": "Ostwind - Zusammen sind wir frei", "series": "Ostwind", "episodes": "Zusammen sind wir frei", "tracks": [], "release": "1626307200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000530-50001679-b-pFdy9Rif.png" }, +{ "no": "450", "model": "10000531", "audio_id": [], "hash": [], "title": "Kids Classical Music - Peter & the Wolf / Carnival of the Animals", "series": "Kids Classical Music", "episodes": "Peter & the Wolf / Carnival of the Animals", "tracks": [], "release": "1623283200", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000531-50001683-b-Vne7pf_D.png" }, +{ "no": "451", "model": "10000534", "audio_id": [], "hash": [], "title": "Creative-Tonie - Pirate", "series": "Creative-Tonie", "episodes": "Pirate", "tracks": [], "release": "1606953600", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Pirate-Transparent.png?v=1629749661" }, +{ "no": "452", "model": "10000537", "audio_id": [], "hash": [], "title": "Creative-Tonie - Superhero - Blue/Red", "series": "Creative-Tonie", "episodes": "Superhero - Blue/Red", "tracks": [], "release": "1611532800", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-SuperheroBlue-Transparent.png?v=1662492864" }, +{ "no": "453", "model": "10000538", "audio_id": ["1617005479"], "hash": ["CC5EA00EE6BDCCC1635A70F0E10BCF7E43AF3E91"], "title": "Playtime Songs - ", "series": "Playtime Songs", "episodes": "", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PlaytimeSongs-Transparent.png?v=1598469686" }, +{ "no": "454", "model": "10000539", "audio_id": ["1616768647"], "hash": ["F67F58DC1E056A410A1F5A0454E94E3D90BF078E"], "title": "Bedtime Songs - ", "series": "Bedtime Songs", "episodes": "", "tracks": [], "release": "1598486400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BedtimeSongs-Transparent.png?v=1629748695" }, +{ "no": "455", "model": "10000540", "audio_id": [], "hash": [], "title": "Celebration Songs - ", "series": "Celebration Songs", "episodes": "", "tracks": [], "release": "1598486400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BirthdaySongs-Transparent.png?v=1629748727" }, +{ "no": "456", "model": "10000541", "audio_id": [], "hash": [], "title": "The Gruffalo - ", "series": "The Gruffalo", "episodes": "", "tracks": [], "release": "1598486400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Gruffalo-Transparent.png?v=1629749955" }, +{ "no": "457", "model": "10000542", "audio_id": [], "hash": [], "title": "Peter Rabbit - ", "series": "Peter Rabbit", "episodes": "", "tracks": [], "release": "1615766400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PeterRabbit-Transparent.png?v=1629749704" }, +{ "no": "458", "model": "10000543", "audio_id": ["1618492730"], "hash": ["89FE66253BFE64D1D1DF63AB6F9D49C23E90D863"], "title": "Peppa Pig - ", "series": "Peppa Pig", "episodes": "", "tracks": [], "release": "1621296000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PeppaPig-Transparent.png?v=1620930667" }, +{ "no": "459", "model": "10000544", "audio_id": [], "hash": [], "title": "Spot’s Fun with Friends - ", "series": "Spot’s Fun with Friends", "episodes": "", "tracks": [], "release": "1613088000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Spot-Transparent.png?v=1612557865" }, +{ "no": "460", "model": "10000546", "audio_id": [], "hash": [], "title": "Creative-Tonie - Fairy", "series": "Creative-Tonie", "episodes": "Fairy", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Fairy-Transparent.png?v=1598469532" }, +{ "no": "461", "model": "10000547", "audio_id": [], "hash": [], "title": "Creative-Tonie - Vampire", "series": "Creative-Tonie", "episodes": "Vampire", "tracks": [], "release": "1597190400", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Vampire-Transparent.png?v=1662492821" }, +{ "no": "462", "model": "10000548", "audio_id": [], "hash": [], "title": "Stick Man - ", "series": "Stick Man", "episodes": "", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-StickMan-Transparent.png?v=1629749806" }, +{ "no": "463", "model": "10000549", "audio_id": [], "hash": [], "title": "Zog - ", "series": "Zog", "episodes": "", "tracks": [], "release": "1603929600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Zog-Transparent.png?v=1629750061" }, +{ "no": "464", "model": "10000550", "audio_id": [], "hash": [], "title": "Room on the Broom - ", "series": "Room on the Broom", "episodes": "", "tracks": [], "release": "1610496000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-RoomBroom-Transparent.png?v=1611105892" }, +{ "no": "465", "model": "10000553", "audio_id": [], "hash": [], "title": "Rapunzel and Other Fairy Tales - ", "series": "Rapunzel and Other Fairy Tales", "episodes": "", "tracks": [], "release": "1597276800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Rapunzel-Transparent.png?v=1629749890" }, +{ "no": "466", "model": "10000554", "audio_id": [], "hash": [], "title": "A Christmas Carol and Tales - ", "series": "A Christmas Carol and Tales", "episodes": "", "tracks": [], "release": "1617753600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-ChristmasCarol-Transparent.png?v=1629748395" }, +{ "no": "467", "model": "10000555", "audio_id": [], "hash": [], "title": "Elmer and Friends Story Collection - ", "series": "Elmer and Friends Story Collection", "episodes": "", "tracks": [], "release": "1614124800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Elmer-Transparent.png?v=1629749382" }, +{ "no": "468", "model": "10000556", "audio_id": [], "hash": [], "title": "Guess How Much I Love You - ", "series": "Guess How Much I Love You", "episodes": "", "tracks": [], "release": "1616198400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GHMILY-Transparent.png?v=1629749618" }, +{ "no": "469", "model": "10000557", "audio_id": [], "hash": [], "title": "Animal Songs - ", "series": "Animal Songs", "episodes": "", "tracks": [], "release": "1632182400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-AnimalSongs-Transparent.png?v=1629748632" }, +{ "no": "470", "model": "10000558", "audio_id": [], "hash": [], "title": "Counting Songs - ", "series": "Counting Songs", "episodes": "", "tracks": [], "release": "1607644800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-CountingSongs-Transparent.png?v=1629748738" }, +{ "no": "471", "model": "10000560", "audio_id": ["1613992479"], "hash": ["747185684371F0C892801D2C7D120B1E00C4FD66"], "title": "Traveling Songs - ", "series": "Traveling Songs", "episodes": "", "tracks": [], "release": "1618790400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-TravelingSongs-Transparent.png?v=1629750033" }, +{ "no": "472", "model": "10000561", "audio_id": [], "hash": [], "title": "Highway Rat - ", "series": "Highway Rat", "episodes": "", "tracks": [], "release": "1620691200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-HighwayRat-Transparent.png?v=1629749601" }, +{ "no": "473", "model": "10000562", "audio_id": [], "hash": [], "title": "The Gruffalo's Child - ", "series": "The Gruffalo's Child", "episodes": "", "tracks": [], "release": "1628467200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GruffalosChild-Transparent.png?v=1629749994" }, +{ "no": "474", "model": "10000570", "audio_id": [], "hash": [], "title": "How to Train Your Dragon - ", "series": "How to Train Your Dragon", "episodes": "", "tracks": [], "release": "1627862400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-How-To-Train-Your-Dragon-Transparent.png?v=1629749585" }, +{ "no": "475", "model": "10000571", "audio_id": ["1629457432"], "hash": ["E5F816A06677591331DE87A9FB6968B153D3352F"], "title": "PAW Patrol - Chase", "series": "PAW Patrol", "episodes": "Chase", "tracks": [], "release": "1634601600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PawPatrol-Chase-Transparent.png?v=1632256667" }, +{ "no": "476", "model": "10000572", "audio_id": [], "hash": [], "title": "Paddington Bear - ", "series": "Paddington Bear", "episodes": "", "tracks": [], "release": "1637280000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-paddington-transparent.png?v=1637098178" }, +{ "no": "477", "model": "10000575", "audio_id": [], "hash": [], "title": "Shrek - ", "series": "Shrek", "episodes": "", "tracks": [], "release": "1633564800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-shrek-transparent.png?v=1632762713" }, +{ "no": "478", "model": "10000577", "audio_id": [], "hash": [], "title": "Disney - Moana", "series": "Disney", "episodes": "Moana", "tracks": [], "release": "1628726400", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000577-50001794-b-F5WxIzRu.png" }, +{ "no": "479", "model": "10000579", "audio_id": ["1623658942"], "hash": ["FD1AEB03D12B017C82B3F139192AD46F46866487"], "title": "Hanni und Nanni - Hanni und Nanni voll im Trend", "series": "Hanni und Nanni", "episodes": "Hanni und Nanni voll im Trend", "tracks": [], "release": "1626307200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000579-50001823-b-7fvjmIgZ.png" }, +{ "no": "480", "model": "10000580", "audio_id": ["1623661702"], "hash": ["3CBE5DBF69D0E2E0C740016A4795DBA1C26A30D6"], "title": "Hanni und Nanni - Hanni und Nanni im Hochzeitsrausch", "series": "Hanni und Nanni", "episodes": "Hanni und Nanni im Hochzeitsrausch", "tracks": [], "release": "1626307200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000580-50001827-b-6R-7fr6U.png" }, +{ "no": "481", "model": "10000581", "audio_id": ["1642145177"], "hash": ["821CD801F780A117A7A799E1EF2015F46ED7C73E"], "title": "100 % Wolf - 100% Wolf - Das Original-Hörspiel zum Kinofilm", "series": "100 % Wolf", "episodes": "100% Wolf - Das Original-Hörspiel zum Kinofilm", "tracks": [], "release": "1644364800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000581-50001831-b-cl7UEkfp.png" }, +{ "no": "482", "model": "10000583", "audio_id": ["1642170832"], "hash": ["30C8922D8FE3B24091387D2EFAA3F849D4ED3A3F"], "title": "Pittiplatsch - Neue Abenteuer mit Pittiplatsch", "series": "Pittiplatsch", "episodes": "Neue Abenteuer mit Pittiplatsch", "tracks": [], "release": "1646784000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000583-50001835-b-ZLXT5hMV.png" }, +{ "no": "483", "model": "10000591", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Christmas Songs and Carols 2", "series": "Favourite Children’s Songs", "episodes": "Christmas Songs and Carols 2", "tracks": [], "release": "1605744000", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000591-50001855-b-ILDDA5BX.png" }, +{ "no": "484", "model": "10000599", "audio_id": [], "hash": [], "title": "Oi Frog - Oi Frog and Friends", "series": "Oi Frog", "episodes": "Oi Frog and Friends", "tracks": [], "release": "1623283200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000599-50001901-b-q6XiCyOo.png" }, +{ "no": "485", "model": "10000606", "audio_id": ["1628517672"], "hash": ["68A2F8C3A88774A986D0ECA868B482E8C4CB721F"], "title": "Peter Wohlleben - Hörst du wie die Bäume sprechen?", "series": "Peter Wohlleben", "episodes": "Hörst du wie die Bäume sprechen?", "tracks": [], "release": "1631145600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000606-50001915-b-1o6a8e1l.png" }, +{ "no": "486", "model": "10000608", "audio_id": [], "hash": [], "title": "Octonauts - Captain Barnacles", "series": "Octonauts", "episodes": "Captain Barnacles", "tracks": [], "release": "1644364800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000608-50001919-b-YC9FjeOt.png" }, +{ "no": "487", "model": "10000610", "audio_id": ["1634037132"], "hash": ["936EFF9CB83AF4AFCAC6C7FFE16C64538D03E48F"], "title": "Mia and me - Das goldene Einhorn / Onchao und das Paradies", "series": "Mia and me", "episodes": "Das goldene Einhorn / Onchao und das Paradies", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000610-50001927-b-jQvNVmdW.png" }, +{ "no": "488", "model": "10000611", "audio_id": ["1628524298"], "hash": ["1A69C7949FEE6E4ED69305534FA582C4D2A2F76F"], "title": "Petronella Apfelmus - Verhext und festgeklebt", "series": "Petronella Apfelmus", "episodes": "Verhext und festgeklebt", "tracks": [], "release": "1631145600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000611-50001931-b-VVTSb-fI.png" }, +{ "no": "489", "model": "10000613", "audio_id": [], "hash": [], "title": " - Zauberer", "series": "", "episodes": "Zauberer", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000613-50001937-h-g4DeLVvp.png" }, +{ "no": "490", "model": "10000614", "audio_id": ["1660900888"], "hash": ["7FFE15C2B4ED7A1375F5A6852B46F9821D004C9D"], "title": "Die unendliche Geschichte - Teil 1: Die große Suche", "series": "Die unendliche Geschichte", "episodes": "Teil 1: Die große Suche", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000614-50001941-b-jm3fxX5U.png" }, +{ "no": "491", "model": "10000616", "audio_id": ["1642411203"], "hash": ["8394304B472C37686C0B1872152B6C92FC4750D4"], "title": "Lieblings-Meisterstücke - Schwanensee", "series": "Lieblings-Meisterstücke", "episodes": "Schwanensee", "tracks": [], "release": "1644364800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000616-50001949-b-bMvGoQjk.png" }, +{ "no": "492", "model": "10000617", "audio_id": ["1654765288"], "hash": ["254D44D121A7C1B9BC3CE82D9054FE51AE84F983"], "title": "Miraculous - Miraculous - Aller Anfang ist schwer", "series": "Miraculous", "episodes": "Miraculous - Aller Anfang ist schwer", "tracks": [], "release": "1657670400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000617-50001953-b-1BQvSqSJ.png" }, +{ "no": "493", "model": "10000623", "audio_id": [], "hash": [], "title": "Disney - Moana", "series": "Disney", "episodes": "Moana", "tracks": [], "release": "1635379200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Moana-transparent.png?v=1632762166" }, +{ "no": "494", "model": "10000624", "audio_id": [], "hash": [], "title": "Masha and the Bear - ", "series": "Masha and the Bear", "episodes": "", "tracks": [], "release": "1632355200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-masha-transparent.png?v=1629301598" }, +{ "no": "495", "model": "10000626", "audio_id": [], "hash": [], "title": "My Little Pony - ", "series": "My Little Pony", "episodes": "", "tracks": [], "release": "1664236800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-mylittlepony-transparent.png?v=1663706685" }, +{ "no": "496", "model": "10000629", "audio_id": [], "hash": [], "title": "Octonauts - ", "series": "Octonauts", "episodes": "", "tracks": [], "release": "1643068800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-octonauts-transparent.png?v=1641488232" }, +{ "no": "497", "model": "10000630", "audio_id": [], "hash": [], "title": "Sesame Street - Cookie Monster", "series": "Sesame Street", "episodes": "Cookie Monster", "tracks": [], "release": "1630281600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/cookiemonster-transparent.png?v=1653492301" }, +{ "no": "498", "model": "10000631", "audio_id": [], "hash": [], "title": "Spirit Untamed - ", "series": "Spirit Untamed", "episodes": "", "tracks": [], "release": "1648684800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-spirit-transparent.png?v=1647976348" }, +{ "no": "499", "model": "10000632", "audio_id": [], "hash": [], "title": "Super Wings - A World of Adventure - ", "series": "Super Wings - A World of Adventure", "episodes": "", "tracks": [], "release": "1629676800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Super-Wings-Transparent.png?v=1629749810" }, +{ "no": "500", "model": "10000633", "audio_id": [], "hash": [], "title": "Trolls - Poppy", "series": "Trolls", "episodes": "Poppy", "tracks": [], "release": "1630540800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Trolls-Transparent.png?v=1628178719" }, +{ "no": "501", "model": "10000637", "audio_id": [], "hash": [], "title": "Creative-Tonie - Yeti", "series": "Creative-Tonie", "episodes": "Yeti", "tracks": [], "release": "1641168000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Yeti-transparent.png?v=1662492489" }, +{ "no": "502", "model": "10000638", "audio_id": [], "hash": [], "title": "Disney - Mickey Mouse", "series": "Disney", "episodes": "Mickey Mouse", "tracks": [], "release": "1635811200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Mickey-transparent.png?v=1629320921" }, +{ "no": "503", "model": "10000641", "audio_id": [], "hash": [], "title": "Miraculous - Tales of Ladybug and Cat Noir", "series": "Miraculous", "episodes": "Tales of Ladybug and Cat Noir", "tracks": [], "release": "1652140800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-miraculous-transparent.png?v=1652186104" }, +{ "no": "504", "model": "10000642", "audio_id": [], "hash": [], "title": "The Snowman and the Snow Dog - ", "series": "The Snowman and the Snow Dog", "episodes": "", "tracks": [], "release": "1637193600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-snowman-transparent.png?v=1637098072" }, +{ "no": "505", "model": "10000646", "audio_id": [], "hash": [], "title": "PJ Masks - Owlette", "series": "PJ Masks", "episodes": "Owlette", "tracks": [], "release": "1661817600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-owlette-transparent.png?v=1662131905" }, +{ "no": "506", "model": "10000647", "audio_id": [], "hash": [], "title": "Das magische Baumhaus - Im Tal der Dinosaurier", "series": "Das magische Baumhaus", "episodes": "Im Tal der Dinosaurier", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000647-50002054-b-MxNkBUXw.png" }, +{ "no": "507", "model": "10000648", "audio_id": [], "hash": [], "title": "Favourite Masterpieces - Swan Lake", "series": "Favourite Masterpieces", "episodes": "Swan Lake", "tracks": [], "release": "1659052800", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000648-50002056-b-4EY_qUh-.png" }, +{ "no": "508", "model": "10000655", "audio_id": [], "hash": [], "title": "Disney - Minnie Mouse", "series": "Disney", "episodes": "Minnie Mouse", "tracks": [], "release": "1635811200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Minnie-transparent.png?v=1629320934" }, +{ "no": "509", "model": "10000656", "audio_id": [], "hash": [], "title": "Disney - Beauty and the Beast", "series": "Disney", "episodes": "Beauty and the Beast", "tracks": [], "release": "1634169600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-beautyandthebeast-transparent.png?v=1634142198" }, +{ "no": "510", "model": "10000659", "audio_id": [], "hash": [], "title": "Creative-Tonie - Singer", "series": "Creative-Tonie", "episodes": "Singer", "tracks": [], "release": "1641168000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Singer-transparent.png?v=1662492714" }, +{ "no": "511", "model": "10000660", "audio_id": [], "hash": [], "title": "Holiday Songs - ", "series": "Holiday Songs", "episodes": "", "tracks": [], "release": "1637193600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-holiday-songs-transparent.png?v=1637098225" }, +{ "no": "512", "model": "10000662", "audio_id": [], "hash": [], "title": "Enid Blyton - Magic Faraway Tree - The Enchanted Wood", "series": "Enid Blyton", "episodes": "Magic Faraway Tree - The Enchanted Wood", "tracks": [], "release": "1650585600", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000662-50002108-b-BX51M0WF.png" }, +{ "no": "513", "model": "10000663", "audio_id": [], "hash": [], "title": "Mr Bean - Mr Bean", "series": "Mr Bean ", "episodes": "Mr Bean", "tracks": [], "release": "1631145600", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000663-50002112-b-4kOvL_lW.png" }, +{ "no": "514", "model": "10000664", "audio_id": [], "hash": [], "title": "Disney - Minnie - When we grow up", "series": "Disney", "episodes": "Minnie - When we grow up", "tracks": [], "release": "1634083200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000664-50002115-b--NJDwPtK.png" }, +{ "no": "515", "model": "10000665", "audio_id": ["1653380480"], "hash": ["E77D4C928AB317F806063682F8DCE9C12F53394A"], "title": "Disney - Minnie Maus - Helfen macht Spaß", "series": "Disney", "episodes": "Minnie Maus - Helfen macht Spaß", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000665-50002117-b-c3nt6ToI.png" }, +{ "no": "516", "model": "10000666", "audio_id": ["1628524434"], "hash": ["69C4A18A3888D4D1B378D9687E7729EFC1C29D7C"], "title": "Disney - Die Schöne und das Biest", "series": "Disney", "episodes": "Die Schöne und das Biest", "tracks": [], "release": "1631145600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000666-50002119-b-dVTt5-PW.png" }, +{ "no": "517", "model": "10000667", "audio_id": [], "hash": [], "title": "Clangers - Clangers Radio", "series": "Clangers", "episodes": "Clangers Radio", "tracks": [], "release": "1628726400", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000667-50002123-b-NGvPyydm.png" }, +{ "no": "518", "model": "10000670", "audio_id": [], "hash": [], "title": "Bing - Bing Bunny", "series": "Bing", "episodes": "Bing Bunny", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000670-50002135-b-v3t7mjH1.png" }, +{ "no": "519", "model": "10000671", "audio_id": ["1633002682"], "hash": ["2BF8C9A627B91D9FE8D82EA237BEFB74191E7F1E"], "title": "Disney - Die Eiskönigin 2", "series": "Disney", "episodes": "Die Eiskönigin 2", "tracks": [], "release": "1635292800", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000671-50002139-b-f3SSde5y.png" }, +{ "no": "520", "model": "10000672", "audio_id": ["1634306694"], "hash": ["F220183E11F8D147EDD3955FECD824E9913F385B"], "title": "Disney - Coco", "series": "Disney", "episodes": "Coco", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000672-50002142-b-3wqy7IeY.png" }, +{ "no": "521", "model": "10000674", "audio_id": [], "hash": [], "title": "Disney - Frozen 2", "series": "Disney", "episodes": "Frozen 2", "tracks": [], "release": "1638403200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000674-50002145-b-8FA4W3eY.png" }, +{ "no": "522", "model": "10000675", "audio_id": [], "hash": [], "title": "Disney - Bambi", "series": "Disney", "episodes": "Bambi", "tracks": [], "release": "1626307200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000675-50002147-b-9wfBUjvh.png" }, +{ "no": "523", "model": "10000676", "audio_id": ["1633616185"], "hash": ["80A70612E754900E25BCE05164CCA54F3996F7C7"], "title": "Disney - Beauty and the Beast", "series": "Disney", "episodes": "Beauty and the Beast", "tracks": [], "release": "1636502400", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000676-50002149-b-U-Xgx_Fw.png" }, +{ "no": "524", "model": "10000679", "audio_id": [], "hash": [], "title": "Disney - Frozen 2: Anna", "series": "Disney", "episodes": "Frozen 2: Anna", "tracks": [], "release": "1637884800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Anna-transparent.png?v=1637707786" }, +{ "no": "525", "model": "10000680", "audio_id": ["1651044662"], "hash": ["BF5B74812C4DC0EEDEA29253EF7ADEF5CFD2A8A2"], "title": "Miraculous - Miraculous - Ladybug", "series": "Miraculous", "episodes": "Miraculous - Ladybug", "tracks": [], "release": "1653004800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000680-50002157-b-lGHrrwRs.png" }, +{ "no": "526", "model": "10000681", "audio_id": ["1636444326"], "hash": ["1C98EF0A82A2CB3C123CFCDB02D77760168CF6BF"], "title": "Barbie - Princess Adventure", "series": "Barbie", "episodes": "Princess Adventure", "tracks": [], "release": "1638316800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000681-50002159-b-mdFNftki.png" }, +{ "no": "527", "model": "10000682", "audio_id": ["1636615777"], "hash": ["89E486F1238605D85E31E7753DDACE8AEA7B6E76"], "title": "Barbie - Barbie Princess Adventure", "series": "Barbie", "episodes": "Barbie Princess Adventure", "tracks": [], "release": "1638403200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000682-50002161-b-GWoz66io.png" }, +{ "no": "528", "model": "10000683", "audio_id": ["1623848161"], "hash": ["0FDC7870CC2170860568D8BF447953D58DCE1DDB"], "title": "Disney - Mickys total verrücktes Fußballspiel", "series": "Disney", "episodes": "Mickys total verrücktes Fußballspiel", "tracks": [], "release": "1628726400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000683-50002163-b-6nAgF5Gp.png" }, +{ "no": "529", "model": "10000684", "audio_id": [], "hash": [], "title": "Disney - Toy Story 2", "series": "Disney", "episodes": "Toy Story 2", "tracks": [], "release": "1650412800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000684-50002167-b-VO9VFJb0.png" }, +{ "no": "530", "model": "10000685", "audio_id": [], "hash": [], "title": "Disney and Pixar - Toy Story 2: Buzz Lightyear", "series": "Disney and Pixar", "episodes": "Toy Story 2: Buzz Lightyear", "tracks": [], "release": "1638921600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-buzz-transparent.png?v=1635524284" }, +{ "no": "531", "model": "10000686", "audio_id": ["1645008699"], "hash": ["605FC2F25CF8633012BFC7448FA9BFC7CDC13616"], "title": "Disney - Rapunzel – Neu verföhnt", "series": "Disney", "episodes": "Rapunzel – Neu verföhnt", "tracks": [], "release": "1645574400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000686-50002173-b-_RawURwh.png" }, +{ "no": "532", "model": "10000687", "audio_id": ["1642593734"], "hash": ["0A2A25AD7C8276E1D1C2803C42F94D493F038F5C"], "title": "Disney - Küss den Frosch", "series": "Disney", "episodes": "Küss den Frosch", "tracks": [], "release": "1646784000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000687-50002177-b-Nj4F7Ku-.png" }, +{ "no": "533", "model": "10000688", "audio_id": [], "hash": [], "title": "Disney - The Princess and the Frog", "series": "Disney", "episodes": "The Princess and the Frog", "tracks": [], "release": "1648425600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000688-50002179-b-dGH3vQFZ.png" }, +{ "no": "534", "model": "10000689", "audio_id": [], "hash": [], "title": "Disney - The Princess and The Frog", "series": "Disney", "episodes": "The Princess and The Frog", "tracks": [], "release": "1646092800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PATF-transparent.png?v=1646138911" }, +{ "no": "535", "model": "10000690", "audio_id": [], "hash": [], "title": "Disney - Tangled", "series": "Disney", "episodes": "Tangled", "tracks": [], "release": "1646265600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000690-50002183-b-UN40KbFW.png" }, +{ "no": "536", "model": "10000691", "audio_id": [], "hash": [], "title": "Disney - Tangled", "series": "Disney", "episodes": "Tangled", "tracks": [], "release": "1649203200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Tangled-transparent.png?v=1649099717" }, +{ "no": "537", "model": "10000692", "audio_id": [], "hash": [], "title": "Disney - Mickey and Friends", "series": "Disney", "episodes": "Mickey and Friends", "tracks": [], "release": "1634083200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000692-50002187-b-HuoWEt1C.png" }, +{ "no": "538", "model": "10000693", "audio_id": ["1611158308"], "hash": ["CA4C9EE5BC87E466FB7B7C40489E022F5AC196F0"], "title": "Der Räuber Hotzenplotz - Der Räuber Hotzenplotz", "series": "Der Räuber Hotzenplotz", "episodes": "Der Räuber Hotzenplotz", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000693-50002218-b--F9idIUue.png" }, +{ "no": "539", "model": "10000694", "audio_id": ["1611160097"], "hash": ["D2E9B4A4D3B12F7911060E5BC452A4206B82C4FA"], "title": "Der Räuber Hotzenplotz - Neues vom Räuber Hotzenplotz", "series": "Der Räuber Hotzenplotz", "episodes": "Neues vom Räuber Hotzenplotz", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000694-50002220-b--xln-T1VO.png" }, +{ "no": "540", "model": "10000695", "audio_id": ["1611163363"], "hash": ["E3B13F8F104DB8A617D6141EC9B8D0728FB91DE4"], "title": "Der Räuber Hotzenplotz - Schluss mit der Räuberei", "series": "Der Räuber Hotzenplotz", "episodes": "Schluss mit der Räuberei", "tracks": [], "release": "1613001600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000695-50002222-b-PqSVAwrE.png" }, +{ "no": "541", "model": "10000696", "audio_id": [], "hash": [], "title": "Der kleine Wassermann - Der kleine Wassermann (Neuauflage 2022)", "series": "Der kleine Wassermann", "episodes": "Der kleine Wassermann (Neuauflage 2022)", "tracks": [], "release": "1668038400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000696-50002224-b--giT-WT-Z.png" }, +{ "no": "542", "model": "10000697", "audio_id": [], "hash": [], "title": "Die kleine Hexe - Die kleine Hexe", "series": "Die kleine Hexe", "episodes": "Die kleine Hexe", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000697-50002226-b--WoW9yp4G.png" }, +{ "no": "543", "model": "10000698", "audio_id": [], "hash": [], "title": "Das kleine Gespenst - Das kleine Gespenst (Neuauflage 2022)", "series": "Das kleine Gespenst", "episodes": "Das kleine Gespenst (Neuauflage 2022)", "tracks": [], "release": "1668038400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000698-50002228-b--6mCCD_f9.png" }, +{ "no": "544", "model": "10000700", "audio_id": ["1623418368"], "hash": ["38C76E2BB73BD1D6568C6870C46AD04FE5EBA68A"], "title": "Disney - Winnie the Pooh", "series": "Disney", "episodes": "Winnie the Pooh", "tracks": [], "release": "1626652800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/winniethepooh-transparent.png?v=1653492273" }, +{ "no": "545", "model": "10000701", "audio_id": [], "hash": [], "title": "Diary of a Wimpy Kid - ", "series": "Diary of a Wimpy Kid", "episodes": "", "tracks": [], "release": "1626134400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-DOAWK-Transparent.png?v=1629749017" }, +{ "no": "546", "model": "10000705", "audio_id": [], "hash": [], "title": "Sesame Street - Elmo", "series": "Sesame Street", "episodes": "Elmo", "tracks": [], "release": "1636502400", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000705-50002247-b-giCPPqJR.png" }, +{ "no": "547", "model": "10000706", "audio_id": ["1624282221"], "hash": ["9085AE20BA158B44162B41502B28E33C41E8913F"], "title": "Sesame Street - Elmo", "series": "Sesame Street", "episodes": "Elmo", "tracks": [], "release": "1630281600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Elmo-Transparent.png?v=1629227625" }, +{ "no": "548", "model": "10000710", "audio_id": ["1658762474"], "hash": ["DEA8F8937A0DA12768AC4FB62C5855F18D221942"], "title": "PJ Masks - Owlette", "series": "PJ Masks", "episodes": "Owlette", "tracks": [], "release": "1661472000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000710-50002259-b-8Ey7TciG.png" }, +{ "no": "549", "model": "10000721", "audio_id": [], "hash": [], "title": "Paw Patrol - Skye", "series": "Paw Patrol", "episodes": "Skye", "tracks": [], "release": "1631145600", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000721-50002336-b-EIBKveVe.png" }, +{ "no": "550", "model": "10000722", "audio_id": ["1618494143","1644324746"], "hash": ["28801200539431E823E80E72DFC779F5C41E29C3","5C44F7453271B561CF77C780D7A9485C76DE206C"], "title": "Mia and me - Ankunft in Centopia / Eine neue Hoffnung", "series": "Mia and me", "episodes": "Ankunft in Centopia / Eine neue Hoffnung", "tracks": [], "release": "1620604800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000722-50002339-b--T_KiZi27.png" }, +{ "no": "551", "model": "10000723", "audio_id": [], "hash": [], "title": "Creative-Tonie - Superhero - Turquoise/Green", "series": "Creative-Tonie", "episodes": "Superhero - Turquoise/Green", "tracks": [], "release": "1611532800", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-SuperheroTurquoise-Transparent.png?v=1662492916" }, +{ "no": "552", "model": "10000724", "audio_id": [], "hash": [], "title": "PJ Masks - Catboy", "series": "PJ Masks", "episodes": "Catboy", "tracks": [], "release": "1661817600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-catboy-transparent.png?v=1662131871" }, +{ "no": "553", "model": "10000725", "audio_id": [], "hash": [], "title": "PJ Masks - Catboy", "series": "PJ Masks", "episodes": "Catboy", "tracks": [], "release": "1660780800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000725-50002349-b-zFqIsgCG.png" }, +{ "no": "554", "model": "10000726", "audio_id": [], "hash": [], "title": "PAW Patrol - Skye", "series": "PAW Patrol", "episodes": "Skye", "tracks": [], "release": "1634601600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PawPatrol-Skye-transparent.png?v=1632257244" }, +{ "no": "555", "model": "10000727", "audio_id": [], "hash": [], "title": "PJ Masks - Gekko", "series": "PJ Masks", "episodes": "Gekko", "tracks": [], "release": "1661817600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-gekko-transparent.png?v=1662131715" }, +{ "no": "556", "model": "10000728", "audio_id": [], "hash": [], "title": "PJ Masks - Gekko", "series": "PJ Masks", "episodes": "Gekko", "tracks": [], "release": "1661472000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000728-50002356-b-yDBdHPIA.png" }, +{ "no": "557", "model": "10000729", "audio_id": [], "hash": [], "title": "Creative-Tonie - Superhero - Pink/Purple", "series": "Creative-Tonie", "episodes": "Superhero - Pink/Purple", "tracks": [], "release": "1611532800", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-SuperheroPink-Transparent.png?v=1662492896" }, +{ "no": "558", "model": "10000730", "audio_id": [], "hash": [], "title": "Paw Patrol - Marshall", "series": "Paw Patrol", "episodes": "Marshall", "tracks": [], "release": "1631145600", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000730-50002362-b-bjY9hKRx.png" }, +{ "no": "559", "model": "10000731", "audio_id": ["1631704349"], "hash": ["286DCF2CC6FDB42C4E5EDF565DD7D9C229E38C0C"], "title": "PAW Patrol - Marshall", "series": "PAW Patrol", "episodes": "Marshall", "tracks": [], "release": "1634601600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PawPatrol-Marshall-transparent.png?v=1632256990" }, +{ "no": "560", "model": "10000732", "audio_id": ["1636393552"], "hash": ["4CF9048817172DD151D2753E2C4ED892EA6BAA85"], "title": "Pippi Langstrumpf - Pippi Langstrumpf", "series": "Pippi Langstrumpf", "episodes": "Pippi Langstrumpf", "tracks": [], "release": "1634083200", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000732-50002368-b-Lnte4nUc.png" }, +{ "no": "561", "model": "10000733", "audio_id": [], "hash": [], "title": "Pippi Longstocking - Pippi Longstocking", "series": "Pippi Longstocking", "episodes": "Pippi Longstocking", "tracks": [], "release": "1636502400", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000733-50002370-b-QLKalh5W.png" }, +{ "no": "562", "model": "10000748", "audio_id": ["1609250613"], "hash": ["D6F218B54883EDE9A6007A9E8F40607716CB4A56"], "title": "Nap Time - White Noise", "series": "Nap Time", "episodes": "White Noise", "tracks": [], "release": "1611014400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-WhiteNoise-Transparent_9cedf745-48a2-4d74-8be5-9935a8187805.png?v=1629749741" }, +{ "no": "563", "model": "10000749", "audio_id": [], "hash": [], "title": "Llama Llama - ", "series": "Llama Llama", "episodes": "", "tracks": [], "release": "1632960000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-llamallama-transparent.png?v=1632762391" }, +{ "no": "564", "model": "10000750", "audio_id": [], "hash": [], "title": "Llama Llama - Mama Llama", "series": "Llama Llama", "episodes": "Mama Llama", "tracks": [], "release": "1632960000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-mamallama-transparent.png?v=1632762436" }, +{ "no": "565", "model": "10000752", "audio_id": [], "hash": [], "title": "Matilda - ", "series": "Matilda", "episodes": "", "tracks": [], "release": "1658793600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-matilda-transparent.png?v=1658780831" }, +{ "no": "566", "model": "10000753", "audio_id": [], "hash": [], "title": "The Witches - ", "series": "The Witches", "episodes": "", "tracks": [], "release": "1663027200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-witches-transparent.png?v=1662748431" }, +{ "no": "567", "model": "10000755", "audio_id": ["1610702237"], "hash": ["437ED370650281CF35610AD8E798F36A688A588F"], "title": "Nap Time - Nature Sounds", "series": "Nap Time", "episodes": "Nature Sounds", "tracks": [], "release": "1611014400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-NatureSounds-Transparent_e54a2f8c-0442-4150-a636-bfaa516d064e.png?v=1629749759" }, +{ "no": "568", "model": "10000768", "audio_id": [], "hash": [], "title": "Disney - 101 Dalmatians", "series": "Disney", "episodes": "101 Dalmatians", "tracks": [], "release": "1641427200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-101-dalmations-transparent.png?v=1640190685" }, +{ "no": "569", "model": "10000770", "audio_id": [], "hash": [], "title": "Beethoven's Wig - ", "series": "Beethoven's Wig", "episodes": "", "tracks": [], "release": "1624838400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BeethovensWig-Transparent.png?v=1629748677" }, +{ "no": "570", "model": "10000771", "audio_id": [], "hash": [], "title": "Dora the Explorer - ", "series": "Dora the Explorer", "episodes": "", "tracks": [], "release": "1653609600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-dora-transparent.png?v=1653423732" }, +{ "no": "571", "model": "10000773", "audio_id": [], "hash": [], "title": "Wild Kratts - Martin", "series": "Wild Kratts", "episodes": "Martin", "tracks": [], "release": "1647907200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-wild-kratts-martin-transparent.png?v=1647534578" }, +{ "no": "572", "model": "10000774", "audio_id": [], "hash": [], "title": "Elinor Wonders Why - ", "series": "Elinor Wonders Why", "episodes": "", "tracks": [], "release": "1657584000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-elinorwonderswhy-transparent.png?v=1657137088" }, +{ "no": "573", "model": "10000777", "audio_id": [], "hash": [], "title": "Blue's Clues & You - ", "series": "Blue's Clues & You", "episodes": "", "tracks": [], "release": "1652745600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BluesClues-transparent.png?v=1652387927" }, +{ "no": "574", "model": "10000778", "audio_id": [], "hash": [], "title": "Disney and Pixar - Cars: Mater", "series": "Disney and Pixar", "episodes": "Cars: Mater", "tracks": [], "release": "1658448000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-mater-transparent.png?v=1658500453" }, +{ "no": "575", "model": "10000780", "audio_id": [], "hash": [], "title": "Pete the Cat - ", "series": "Pete the Cat", "episodes": "", "tracks": [], "release": "1645488000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Pete-the-Cat-transparent.png?v=1645203110" }, +{ "no": "576", "model": "10000781", "audio_id": [], "hash": [], "title": "Corduroy - ", "series": "Corduroy", "episodes": "", "tracks": [], "release": "1646697600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-corduroy-transparent.png?v=1646245299" }, +{ "no": "577", "model": "10000785", "audio_id": ["1649246009"], "hash": ["A33346D1362177D5654848820986090F960C37FD"], "title": "Eric Carle - The Very Hungry Caterpillar™ and Friends", "series": "Eric Carle", "episodes": "The Very Hungry Caterpillar™ and Friends", "tracks": [], "release": "1650931200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-vhc-transparent.png?v=1650472321" }, +{ "no": "578", "model": "10000792", "audio_id": [], "hash": [], "title": "The Cat in the Hat - ", "series": "The Cat in the Hat", "episodes": "", "tracks": [], "release": "1656979200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-catinthehat-transparent.png?v=1662133278" }, +{ "no": "579", "model": "10000793", "audio_id": [], "hash": [], "title": "Horton Hears a Who! - ", "series": "Horton Hears a Who!", "episodes": "", "tracks": [], "release": "1660003200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-horton-transparent.png?v=1662132202" }, +{ "no": "580", "model": "10000794", "audio_id": ["1651050000"], "hash": ["7BFED33E2B4BAA38BEEC9A48389CCBADE68805C0"], "title": "Der magische Blumenladen - Ein Geheimnis kommt selten allein", "series": "Der magische Blumenladen", "episodes": "Ein Geheimnis kommt selten allein", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000794-50002563-b-8yRu_a93.png" }, +{ "no": "581", "model": "10000795", "audio_id": ["1634821743"], "hash": ["205FD87ECAB2003FC6DBADBD766C2D6A1CEDB422"], "title": "National Geographic Kid - Astronaut", "series": "National Geographic Kid", "episodes": "Astronaut", "tracks": [], "release": "1637280000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-natgeo-astronaut-transparent.png?v=1635869621" }, +{ "no": "582", "model": "10000796", "audio_id": ["1635339515"], "hash": ["E87D47A83C8ADC6663AFC37E8FA82186654D6F89"], "title": "National Geographic Kids - Whale", "series": "National Geographic Kids", "episodes": "Whale", "tracks": [], "release": "1642464000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-natgeo-whale-transparent.png?v=1644598960" }, +{ "no": "583", "model": "10000797", "audio_id": [], "hash": [], "title": "Disney - Baby Lullabies", "series": "Disney", "episodes": "Baby Lullabies", "tracks": [], "release": "1651536000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-disney-lullabies-transparent.png?v=1651002509" }, +{ "no": "584", "model": "10000799", "audio_id": [], "hash": [], "title": "National Geographic Kids - Dinosaur", "series": "National Geographic Kids", "episodes": "Dinosaur", "tracks": [], "release": "1642464000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-NatGeo-Dinosaur-transparent.png?v=1641499372" }, +{ "no": "585", "model": "10000800", "audio_id": [], "hash": [], "title": "Eloise - ", "series": "Eloise", "episodes": "", "tracks": [], "release": "1665446400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-eloise-transparent.png?v=1665073126" }, +{ "no": "586", "model": "10000802", "audio_id": [], "hash": [], "title": "Gabby's Dollhouse - ", "series": "Gabby's Dollhouse", "episodes": "", "tracks": [], "release": "1663891200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-gabbysdollhouse-transparent.png?v=1663886234" }, +{ "no": "587", "model": "10000812", "audio_id": [], "hash": [], "title": "Julia Donaldson - The Snail and the Whale & The Smartest Giant in Town", "series": "Julia Donaldson", "episodes": "The Snail and the Whale & The Smartest Giant in Town", "tracks": [], "release": "1664150400", "language": "en-gb", "category": "audio-book-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000812-50002632-b-yzUGoC87.png" }, +{ "no": "588", "model": "10000826", "audio_id": [], "hash": [], "title": "Nap Time - White Noise", "series": "Nap Time", "episodes": "White Noise", "tracks": [], "release": "1615420800", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000826-50002680-b--sr0lyoTy.png" }, +{ "no": "589", "model": "10000827", "audio_id": [], "hash": [], "title": "Nap Time - Nature Sounds", "series": "Nap Time", "episodes": "Nature Sounds", "tracks": [], "release": "1615420800", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000827-50002682-b-TriRaepD.png" }, +{ "no": "590", "model": "10000829", "audio_id": ["1612883610"], "hash": ["81A32C7D7C098F4110DF5589E30CC49E162344A4"], "title": "Lieblings-Kinderlieder - Spiel- und Bewegungslieder", "series": "Lieblings-Kinderlieder", "episodes": "Spiel- und Bewegungslieder", "tracks": [], "release": "1613001600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000829-50002693-b--a-XMhHMq.png" }, +{ "no": "591", "model": "10000830", "audio_id": ["1623662483"], "hash": ["329B411BA117F4BB8E781AF022D96D04F44111D8"], "title": "Lieblings-Kinderlieder - Schlaflieder", "series": "Lieblings-Kinderlieder", "episodes": "Schlaflieder", "tracks": [], "release": "1626307200", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000830-50002696-b--9flWR7Ik.png" }, +{ "no": "592", "model": "10000831", "audio_id": ["1626272002"], "hash": ["8E6935CAA11A2CFAD48265912084C45F4BFDEAC4"], "title": "Lieblings-Kinderlieder - Geburtstagslieder", "series": "Lieblings-Kinderlieder", "episodes": "Geburtstagslieder", "tracks": [], "release": "1628726400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000831-50002699-b--LsJUyV9E.png" }, +{ "no": "593", "model": "10000832", "audio_id": ["1628520341"], "hash": ["5E26979F73425E70AAC9AB4F099B6C734094A5DB"], "title": "Lieblings-Kinderlieder - Weihnachtslieder", "series": "Lieblings-Kinderlieder", "episodes": "Weihnachtslieder", "tracks": [], "release": "1631145600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000832-50002702-b--53LpBw4c.png" }, +{ "no": "594", "model": "10000833", "audio_id": ["1618495778"], "hash": ["600359A081A4FB4B794830CA355FBB2216F19842"], "title": "Griechische Sagen - Griechische Sagen", "series": "Griechische Sagen", "episodes": "Griechische Sagen", "tracks": [], "release": "1620604800", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000833-50002705-b--hncQ3mlz.png" }, +{ "no": "595", "model": "10000839", "audio_id": [], "hash": [], "title": "Disney - Cars 2", "series": "Disney", "episodes": "Cars 2", "tracks": [], "release": "1651536000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000778-50002494-b-KZSpfvyS.png" }, +{ "no": "596", "model": "10000853", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - De Noël", "series": "Mes Comptines Préférées", "episodes": "De Noël", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000853-50002775-b-opJgc5sb.png" }, +{ "no": "597", "model": "10000854", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - Pour S'Endormir", "series": "Mes Comptines Préférées", "episodes": "Pour S'Endormir", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000854-50002779-b-OOThPjhi.png" }, +{ "no": "598", "model": "10000855", "audio_id": ["1621604842"], "hash": ["658FDD725562CEC6721132328B4EE10E3C4B7F2E"], "title": "Mes Comptines Préférées - De La Maternelle", "series": "Mes Comptines Préférées", "episodes": "De La Maternelle", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000855-50002777-b-BLI50xUV.png" }, +{ "no": "599", "model": "10000858", "audio_id": [], "hash": [], "title": "Disney - La Reine Des Neiges", "series": "Disney", "episodes": "La Reine Des Neiges", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000858-50002785-b-0KZDZf2k.png" }, +{ "no": "600", "model": "10000859", "audio_id": [], "hash": [], "title": "Elmer - Elmer Et Ses Amis", "series": "Elmer", "episodes": "Elmer Et Ses Amis", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000859-50002787-b-alQJe8cv.png" }, +{ "no": "601", "model": "10000862", "audio_id": ["1642425121"], "hash": ["9C7D07C459FA2139927EC8692181268329A68BAB"], "title": "Disney - Cars", "series": "Disney", "episodes": "Cars", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000862-50002793-b-I_d109Ke.png" }, +{ "no": "602", "model": "10000864", "audio_id": [], "hash": [], "title": "Disney - Ariel, La Petite Sirène", "series": "Disney", "episodes": "Ariel, La Petite Sirène", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000864-50002797-b-YPB2nIBK.png" }, +{ "no": "603", "model": "10000865", "audio_id": ["1647968905"], "hash": ["4894476016591978C7BEB31F1C614299538D38A2"], "title": "Disney - Le Livre De La Jungle", "series": "Disney", "episodes": "Le Livre De La Jungle", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000865-50002799-b-A3-GemCu.png" }, +{ "no": "604", "model": "10000866", "audio_id": ["1613996775"], "hash": ["FA6E17956D55E441D229B0D7B1ECA45FC34E9505"], "title": "Disney - Le Roi Lion", "series": "Disney", "episodes": "Le Roi Lion", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000866-50002801-b-CMZjxYeR.png" }, +{ "no": "605", "model": "10000867", "audio_id": [], "hash": [], "title": "Disney - Toy Story", "series": "Disney", "episodes": "Toy Story", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000867-50002803-b-DgFhMN-g.png" }, +{ "no": "606", "model": "10000868", "audio_id": [], "hash": [], "title": "La Pat' Patrouille - Chase", "series": "La Pat' Patrouille", "episodes": "Chase", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000868-50003335-b-cv3UE4Id.png" }, +{ "no": "607", "model": "10000872", "audio_id": [], "hash": [], "title": "Peppa Pig - Sur La Route Avec Peppa", "series": "Peppa Pig", "episodes": "Sur La Route Avec Peppa", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000872-50002813-b-0nKgLUF5.png" }, +{ "no": "608", "model": "10000874", "audio_id": [], "hash": [], "title": "Tonie Créatif - Licorne", "series": "Tonie Créatif", "episodes": "Licorne", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000874-50002817-b-lUPcngLV.png" }, +{ "no": "609", "model": "10000875", "audio_id": [], "hash": [], "title": "Tonie Créatif - Pirate", "series": "Tonie Créatif", "episodes": "Pirate", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000875-50002819-b-Zk4nhpAD.png" }, +{ "no": "610", "model": "10000876", "audio_id": [], "hash": [], "title": "Tonie Créatif - Princesse", "series": "Tonie Créatif", "episodes": "Princesse", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000876-50002821-b-3-v4HvWW.png" }, +{ "no": "611", "model": "10000877", "audio_id": [], "hash": [], "title": "Tonie Créatif - Super-Héros - Rose", "series": "Tonie Créatif", "episodes": "Super-Héros - Rose", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000877-50002823-b-aDgPiuSJ.png" }, +{ "no": "612", "model": "10000878", "audio_id": [], "hash": [], "title": "Tonie Créatif - Super-Héros - Turquoise", "series": "Tonie Créatif", "episodes": "Super-Héros - Turquoise", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000878-50002825-b--1vKsRIq.png" }, +{ "no": "613", "model": "10000880", "audio_id": ["1644477021"], "hash": ["777B603609746D158A4127EB2318189CBBC2BDE3"], "title": "Frederick - Frederick und seine Mäusefreunde", "series": "Frederick", "episodes": "Frederick und seine Mäusefreunde", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000880-50002887-b-yLu1IQAU.png" }, +{ "no": "614", "model": "10000882", "audio_id": [], "hash": [], "title": "Wild Kratts - Chris", "series": "Wild Kratts", "episodes": "Chris", "tracks": [], "release": "1647907200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-wild-kratts-chris-transparent.png?v=1647534610" }, +{ "no": "615", "model": "10000885", "audio_id": [], "hash": [], "title": "Mr Men & Little Miss - Little Miss Sunshine", "series": "Mr Men & Little Miss", "episodes": "Little Miss Sunshine", "tracks": [], "release": "1650326400", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000885-50005028-b--ICF1zBf.png" }, +{ "no": "616", "model": "10000886", "audio_id": [], "hash": [], "title": "Mr Men & Little Miss - Mr Strong", "series": "Mr Men & Little Miss", "episodes": "Mr Strong", "tracks": [], "release": "1650326400", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000886-50002907-b-kLfAHCnm.png" }, +{ "no": "617", "model": "10000887", "audio_id": [], "hash": [], "title": "Mr Men & Little Miss - Mr Tickle", "series": "Mr Men & Little Miss", "episodes": "Mr Tickle", "tracks": [], "release": "1650326400", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000887-50002911-b-U291g3xO.png" }, +{ "no": "618", "model": "10000889", "audio_id": [], "hash": [], "title": "Tee & Mo - Tee and Mo", "series": "Tee & Mo", "episodes": "Tee and Mo", "tracks": [], "release": "1655683200", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000889-50002917-b-slgmRrBx.png" }, +{ "no": "619", "model": "10000890", "audio_id": ["1648650657"], "hash": ["B375D1746593C583D2674898666539F4C38C7686"], "title": "Das NEINhorn - Das NEINhorn & Das NEINhorn und die SchLANGEWEILE", "series": "Das NEINhorn", "episodes": "Das NEINhorn & Das NEINhorn und die SchLANGEWEILE", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000890-50002921-b-J9WXYRkI.png" }, +{ "no": "620", "model": "10000891", "audio_id": ["1643975334"], "hash": ["FC62546562C92189A30876B4049C2FD5C3AE798E"], "title": "Lauras Stern - Die allererste Bilderbuch Geschichte & Glitzernde Gutenacht-Geschichten", "series": "Lauras Stern", "episodes": "Die allererste Bilderbuch Geschichte & Glitzernde Gutenacht-Geschichten", "tracks": [], "release": "1644364800", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000891-50002925-b-Nc_yn5N0.png" }, +{ "no": "621", "model": "10000892", "audio_id": ["1645168415"], "hash": ["C058B8D6CD192DE269BF3376F9A6D2E7E6F76FEE"], "title": "Hasenkind - Nur noch kurz die Ohren kraulen? Hasenkinds Mitmach-Geschichten", "series": "Hasenkind", "episodes": "Nur noch kurz die Ohren kraulen? Hasenkinds Mitmach-Geschichten", "tracks": [], "release": "1646784000", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000892-50002929-b-CkM0rstF.png" }, +{ "no": "622", "model": "10000895", "audio_id": ["1645526104"], "hash": ["58CBC28274B18AE5F76FA11E7F19E66861FEA1E1"], "title": "Urmel - Urmel aus dem Eis", "series": "Urmel", "episodes": "Urmel aus dem Eis", "tracks": [], "release": "1646784000", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000895-50002941-b-F6X91ppy.png" }, +{ "no": "623", "model": "10000896", "audio_id": ["1661256078"], "hash": ["2A6D36F748BC31146703C233C91892845292F8D7"], "title": "Wie kleine Tiere schlafen gehen - Wie kleine Tiere schlafen gehen / Wie kleine Kinder schlafen gehen", "series": "Wie kleine Tiere schlafen gehen", "episodes": "Wie kleine Tiere schlafen gehen / Wie kleine Kinder schlafen gehen", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000896-50002945-b-jcKOERBL.png" }, +{ "no": "624", "model": "10000897", "audio_id": [], "hash": [], "title": "Michel aus Lönneberga - Der Tag, an dem Michel besonders nett sein wollte", "series": "Michel aus Lönneberga", "episodes": "Der Tag, an dem Michel besonders nett sein wollte", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000897-50002949-b-qhUAFqjq.png" }, +{ "no": "625", "model": "10000898", "audio_id": ["1656412723"], "hash": ["036DD3579EDE773C22804E4E08B1499DB57BB927"], "title": "Jan Tenner - Jan Tenner - Planet der 1000 Wunder", "series": "Jan Tenner", "episodes": "Jan Tenner - Planet der 1000 Wunder", "tracks": [], "release": "1657670400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000898-50002953-b-a0dK_Sfn.png" }, +{ "no": "626", "model": "10000906", "audio_id": ["1648810807"], "hash": ["4196C73CEFD3E597E423FE4D56E3913E1360AAD0"], "title": "Das kleine WIR - Das kleine WIR", "series": "Das kleine WIR", "episodes": "Das kleine WIR", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000906-50002969-b-CfEuwLeO.png" }, +{ "no": "627", "model": "10000910", "audio_id": ["1666860796"], "hash": ["67D5B7B20473DE0418DE1D0740809011FCA3C8F3"], "title": "Leo Lausemaus - Das Original-Hörspiel zu den Büchern 3", "series": "Leo Lausemaus", "episodes": "Das Original-Hörspiel zu den Büchern 3", "tracks": [], "release": "1668038400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000910-50002983-b-Hv8Tqv3W.png" }, +{ "no": "628", "model": "10000911", "audio_id": ["1650551002"], "hash": ["BEE399FC6B812A5EA7F6DEB8ADFE70DADFC54983"], "title": "Willy Astor - Kindischer Ozean", "series": "Willy Astor", "episodes": "Kindischer Ozean", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000911-50002987-b-HubKQGqm.png" }, +{ "no": "629", "model": "10000912", "audio_id": ["1649856038"], "hash": ["B99E1BD2F4E1785E328D95C45DD2CD03B9A347A2"], "title": "Prinzessin Lillifee - Gute-Nacht-Geschichten - Die verzauberten Seerosen/Die goldene Perle", "series": "Prinzessin Lillifee", "episodes": "Gute-Nacht-Geschichten - Die verzauberten Seerosen/Die goldene Perle", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000912-50002991-b-k7Pt8Aa7.png" }, +{ "no": "630", "model": "10000913", "audio_id": ["1653303491"], "hash": ["F42053C2766AE48C7731B191A2C3C98E3AECBA7F"], "title": "Das kleine Hörbuch vom großen Glück - Das kleine Hörbuch vom großen Glück - Die Glücksfee", "series": "Das kleine Hörbuch vom großen Glück", "episodes": "Das kleine Hörbuch vom großen Glück - Die Glücksfee", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000913-50002993-b-BrNpju78.png" }, +{ "no": "631", "model": "10000925", "audio_id": [], "hash": [], "title": "LMNO Peas - ", "series": "LMNO Peas", "episodes": "", "tracks": [], "release": "1661212800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-lmnopeas-transparent.png?v=1662131977" }, +{ "no": "632", "model": "10000926", "audio_id": [], "hash": [], "title": "Chicka Chicka Boom Boom - ", "series": "Chicka Chicka Boom Boom", "episodes": "", "tracks": [], "release": "1647216000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-CBB-transparent.png?v=1647016566" }, +{ "no": "633", "model": "10000927", "audio_id": ["1643791015"], "hash": ["9B53B7EE07AF9057ED01376E942C95527DA2285F"], "title": "Minimusiker - Lieder für dich 2", "series": "Minimusiker", "episodes": "Lieder für dich 2", "tracks": [], "release": "1644364800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000927-50003044-b-9ZVmUE-e.png" }, +{ "no": "634", "model": "10000933", "audio_id": ["1643643834"], "hash": ["9889122EDCCCF11F1E7ED72E6CBFC176BC7CC4A6"], "title": "Paw Patrol - Schneller als die Feuerwehr", "series": "Paw Patrol", "episodes": "Schneller als die Feuerwehr", "tracks": [], "release": "1645574400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000933-50003063-b-MBfhYJnn.png" }, +{ "no": "635", "model": "10000934", "audio_id": [], "hash": [], "title": "Disney - Fantasia", "series": "Disney", "episodes": "Fantasia", "tracks": [], "release": "1636502400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-fantasia-transparent.png?v=1635524069" }, +{ "no": "636", "model": "10000935", "audio_id": [], "hash": [], "title": "Disney - Fantasia", "series": "Disney", "episodes": "Fantasia", "tracks": [], "release": "1638403200", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000935-50003069-b-xGhxuk0I.png" }, +{ "no": "637", "model": "10000941", "audio_id": [], "hash": [], "title": "Horrible Histories - Rotten Romans", "series": "Horrible Histories", "episodes": "Rotten Romans", "tracks": [], "release": "1658188800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000941-50003089-b-Wl3vHHC5.png" }, +{ "no": "638", "model": "10000944", "audio_id": [], "hash": [], "title": "We’re Going on a Bear Hunt - We're Going on a Bear Hunt", "series": "We’re Going on a Bear Hunt", "episodes": "We're Going on a Bear Hunt", "tracks": [], "release": "1663632000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000944-50003099-b-Kp0dBPHX.png" }, +{ "no": "639", "model": "10000945", "audio_id": [], "hash": [], "title": "Disney - Disney Baby Lullabies", "series": "Disney", "episodes": "Disney Baby Lullabies", "tracks": [], "release": "1648684800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000945-50003101-b-RzBAvP8j.png" }, +{ "no": "640", "model": "10000961", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Beere (Hellbraun)", "series": "", "episodes": "Kreativ-Tonie Beere (Hellbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000961-50003155-ST-RuCCDYmB.png" }, +{ "no": "641", "model": "10000962", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Rot (Hellbraun)", "series": "", "episodes": "Kreativ-Tonie Rot (Hellbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000962-50003159-ST-V7lv8YMB.png" }, +{ "no": "642", "model": "10000963", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Grün (Hellbraun)", "series": "", "episodes": "Kreativ-Tonie Grün (Hellbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000963-50003163-ST-jLaTS-C5.png" }, +{ "no": "643", "model": "10000964", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Blau (Hellbraun)", "series": "", "episodes": "Kreativ-Tonie Blau (Hellbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000964-50003167-ST-fTx5N0I5.png" }, +{ "no": "644", "model": "10000965", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Anthrazit (Hellbraun)", "series": "", "episodes": "Kreativ-Tonie Anthrazit (Hellbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000965-50003171-ST-nQg5WQRJ.png" }, +{ "no": "645", "model": "10000966", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Pink (Hellbraun)", "series": "", "episodes": "Kreativ-Tonie Pink (Hellbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000966-50003175-ST-Xze8N4gT.png" }, +{ "no": "646", "model": "10000967", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Beere (Dunkelbraun)", "series": "", "episodes": "Kreativ-Tonie Beere (Dunkelbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000967-50003179-ST-qIgsg05i.png" }, +{ "no": "647", "model": "10000968", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Rot (Dunkelbraun)", "series": "", "episodes": "Kreativ-Tonie Rot (Dunkelbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000968-50003183-ST-NM1-mvfO.png" }, +{ "no": "648", "model": "10000969", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Grün (Dunkelbraun)", "series": "", "episodes": "Kreativ-Tonie Grün (Dunkelbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000969-50003187-ST-MIS_unlP.png" }, +{ "no": "649", "model": "10000970", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Blau (Dunkelbraun)", "series": "", "episodes": "Kreativ-Tonie Blau (Dunkelbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000970-50003191-ST-RShlUlPl.png" }, +{ "no": "650", "model": "10000971", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Anthrazit (Dunkelbraun)", "series": "", "episodes": "Kreativ-Tonie Anthrazit (Dunkelbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000971-50003195-ST-tZSs85cR.png" }, +{ "no": "651", "model": "10000972", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Pink (Dunkelbraun)", "series": "", "episodes": "Kreativ-Tonie Pink (Dunkelbraun)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000972-50003199-ST-voB9vtw7.png" }, +{ "no": "652", "model": "10000973", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Purple (light brown)", "series": "", "episodes": "Creative-Tonie – Purple (light brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000973-50003201-ST-xDMN8kjY.png" }, +{ "no": "653", "model": "10000974", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Red (light brown)", "series": "", "episodes": "Creative-Tonie – Red (light brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000974-50003203-ST-aiC5P7-K.png" }, +{ "no": "654", "model": "10000975", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Green (light brown)", "series": "", "episodes": "Creative-Tonie – Green (light brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000975-50003205-ST-VSE78j5X.png" }, +{ "no": "655", "model": "10000976", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Light Blue (light brown)", "series": "", "episodes": "Creative-Tonie – Light Blue (light brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000976-50003207-ST-amVvzJfG.png" }, +{ "no": "656", "model": "10000977", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Grey (light brown)", "series": "", "episodes": "Creative-Tonie – Grey (light brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000977-50003209-ST-nSoMeeu-.png" }, +{ "no": "657", "model": "10000978", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Pink (light brown)", "series": "", "episodes": "Creative-Tonie – Pink (light brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000978-50003211-ST-mrg2hVcC.png" }, +{ "no": "658", "model": "10000979", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Purple (dark brown)", "series": "", "episodes": "Creative-Tonie – Purple (dark brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000979-50003213-ST-wAZxEqOb.png" }, +{ "no": "659", "model": "10000980", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Red (dark brown)", "series": "", "episodes": "Creative-Tonie – Red (dark brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000980-50003215-ST-mvo8nB2O.png" }, +{ "no": "660", "model": "10000981", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Green (dark brown)", "series": "", "episodes": "Creative-Tonie – Green (dark brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000981-50003217-ST-k6h4EWAL.png" }, +{ "no": "661", "model": "10000982", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Light Blue (dark brown)", "series": "", "episodes": "Creative-Tonie – Light Blue (dark brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000982-50003219-ST-Gua12ZIO.png" }, +{ "no": "662", "model": "10000983", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Grey (dark brown)", "series": "", "episodes": "Creative-Tonie – Grey (dark brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000983-50003221-ST--rI2OhG1.png" }, +{ "no": "663", "model": "10000984", "audio_id": [], "hash": [], "title": " - Creative-Tonie – Pink (dark brown)", "series": "", "episodes": "Creative-Tonie – Pink (dark brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000984-50003223-ST-vp0gNDBt.png" }, +{ "no": "664", "model": "10000989", "audio_id": ["1642603602"], "hash": ["616EE0C5FD79E8A63DFC1104E357D6C25BF04319"], "title": "Disney - Cars 2", "series": "Disney", "episodes": "Cars 2", "tracks": [], "release": "1646784000", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000989-50003227-b-DiWOB9PC.png" }, +{ "no": "665", "model": "10000990", "audio_id": ["1646834315","1649656803"], "hash": ["DD7837899555B206D13CAA2C320B7E924B77E37C","67898C15E89350A1FCEE145A12C45B76A941E2E5"], "title": "Lieblings-Kinderlieder - Jahreszeitenlieder", "series": "Lieblings-Kinderlieder", "episodes": "Jahreszeitenlieder", "tracks": [], "release": "1646784000", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000990-50003231-b-SMvKEm_K.png" }, +{ "no": "666", "model": "10000991", "audio_id": ["1651664260"], "hash": ["DE0AC754ADFE70755689F1F252849A49E672CD3B"], "title": "Disney - Toy Story 2", "series": "Disney", "episodes": "Toy Story 2", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000991-50003233-b-Vh9GpEnz.png" }, +{ "no": "667", "model": "10000992", "audio_id": [], "hash": [], "title": "Schlummerbande - Einschlafmelodien - Schlummerschaf im Zauberwald", "series": "Schlummerbande", "episodes": "Einschlafmelodien - Schlummerschaf im Zauberwald", "tracks": [], "release": "1663113600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000992-50003237-b-44RKtiIf.png" }, +{ "no": "668", "model": "10000993", "audio_id": ["1649853319"], "hash": ["969C0BB849CED552785769F0759E90A12A78F84F"], "title": "Paw Patrol - Der Delfin-Freund", "series": "Paw Patrol", "episodes": "Der Delfin-Freund", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000993-50003239-b-qU9lSEnk.png" }, +{ "no": "669", "model": "10000995", "audio_id": ["1656071577"], "hash": ["F72B2F37E72EF76C0BA769C5FF7390D42DFA513E"], "title": "Unter meinem Bett - Unter meinem Bett 6", "series": "Unter meinem Bett", "episodes": "Unter meinem Bett 6", "tracks": [], "release": "1663113600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000995-50003247-b-Q6lLthn0.png" }, +{ "no": "670", "model": "10000996", "audio_id": ["1660834591"], "hash": ["CB346C45E6D89C3F5EA27CE26A2AE5BA990DEB08"], "title": "Disney - Die Eiskönigin - Olaf taut auf", "series": "Disney", "episodes": "Die Eiskönigin - Olaf taut auf", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000996-50003251-b-W57V2H0f.png" }, +{ "no": "671", "model": "10000998", "audio_id": ["1656082085"], "hash": ["B5DD91E588B8B04BD1EBA892C40B46E7C3910936"], "title": "Die neugierige kleine Hexe - Die neugierige kleine Hexe / Die kleine Hexe hat Geburtstag", "series": "Die neugierige kleine Hexe", "episodes": "Die neugierige kleine Hexe / Die kleine Hexe hat Geburtstag", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000998-50003259-b-ZI_o1F01.png" }, +{ "no": "672", "model": "10001000", "audio_id": ["1645515636","1649657912"], "hash": ["0ED852D8DB12E384F6AB90752B05C8CD98072B4D","DD616E560E3B5C3B3BC8F68076EE9309EF797EA3"], "title": "Volker Rosin - Das singende Känguru", "series": "Volker Rosin", "episodes": "Das singende Känguru", "tracks": [], "release": "1646784000", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001000-50003267-b-lHloX8vZ.png" }, +{ "no": "673", "model": "10001002", "audio_id": [], "hash": [], "title": "Xavier Riddle - ", "series": "Xavier Riddle", "episodes": "", "tracks": [], "release": "1663632000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-xavierriddle-transparent.png?v=1663610599" }, +{ "no": "674", "model": "10001010", "audio_id": ["1622046689"], "hash": ["7F55150F9BD43DF8F810F7B5C6B1BEF0FEDD1E3F"], "title": "Disney - Aladdin", "series": "Disney", "episodes": "Aladdin", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001010-50003307-b-6oSKx4x4.png" }, +{ "no": "675", "model": "10001011", "audio_id": [], "hash": [], "title": "Disney - Bambi", "series": "Disney", "episodes": "Bambi", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001011-50003309-b-bdfuBGYJ.png" }, +{ "no": "676", "model": "10001013", "audio_id": [], "hash": [], "title": "Tonie Créatif - Joueur De Foot", "series": "Tonie Créatif", "episodes": "Joueur De Foot", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001013-50003333-b-hFB5qiEj.png" }, +{ "no": "677", "model": "10001014", "audio_id": [], "hash": [], "title": "Astérix - Astérix Le Gaulois", "series": "Astérix", "episodes": "Astérix Le Gaulois", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001014-50003337-b-FfnEjhli.png" }, +{ "no": "678", "model": "10001015", "audio_id": [], "hash": [], "title": "Disney - Raiponce", "series": "Disney", "episodes": "Raiponce", "tracks": [], "release": "1652918400", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001015-50003339-b--C5cQYZEL.png" }, +{ "no": "679", "model": "10001016", "audio_id": [], "hash": [], "title": "C'Est Toujours Pas Sorcier - Sur Les Traces Des Dinosaures", "series": "C'Est Toujours Pas Sorcier", "episodes": "Sur Les Traces Des Dinosaures", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001016-50003341-b-L6ST_gNt.png" }, +{ "no": "680", "model": "10001017", "audio_id": [], "hash": [], "title": "Mes Contes Préférés - Le Petit Chaperon Rouge Et 3 Autres Contes", "series": "Mes Contes Préférés", "episodes": "Le Petit Chaperon Rouge Et 3 Autres Contes", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001017-50003343-b-bPw96OFc.png" }, +{ "no": "681", "model": "10001018", "audio_id": [], "hash": [], "title": "Mes Classiques Préférés - Pinocchio Et 2 Autres Classiques", "series": "Mes Classiques Préférés", "episodes": "Pinocchio Et 2 Autres Classiques", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001018-50003345-b-w1-Nm_Ub.png" }, +{ "no": "682", "model": "10001019", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - À Mimer", "series": "Mes Comptines Préférées", "episodes": "À Mimer", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001019-50003348-b-lvPFWvbL.png" }, +{ "no": "683", "model": "10001020", "audio_id": [], "hash": [], "title": "Tonie Créatif - Fée", "series": "Tonie Créatif", "episodes": "Fée", "tracks": [], "release": "0", "language": "fr-fr", "category": "Tonie Créatif", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001020-50003350-b-4G_8t6bD.png" }, +{ "no": "684", "model": "10001021", "audio_id": [], "hash": [], "title": "Language: French - [FR] Favourite Children's Songs - Pour Faire La Fête", "series": "Language: French", "episodes": "[FR] Favourite Children's Songs - Pour Faire La Fête", "tracks": [], "release": "1657238400", "language": "en-gb", "category": "languages", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001021%5Bhero-2%5D-NMdXwxb8.png" }, +{ "no": "685", "model": "10001021", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - Pour Faire la Fête", "series": "Mes Comptines Préférées", "episodes": "Pour Faire la Fête", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001021-50003352-b-ApvXOeq7.png" }, +{ "no": "686", "model": "10001022", "audio_id": [], "hash": [], "title": "The Little Prince - The Little Prince (relaunch)", "series": "The Little Prince", "episodes": "The Little Prince (relaunch)", "tracks": [], "release": "1650585600", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000015-50000055-b-Iulbdcqx.png" }, +{ "no": "687", "model": "10001035", "audio_id": [], "hash": [], "title": "Favourite Tales - Little Red Riding Hood (relaunch)", "series": "Favourite Tales", "episodes": "Little Red Riding Hood (relaunch)", "tracks": [], "release": "1650585600", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001035-50003360-b-6kZh5g3A.png" }, +{ "no": "688", "model": "10001036", "audio_id": [], "hash": [], "title": "Favourite Classics - Pinocchio (relaunch)", "series": "Favourite Classics", "episodes": "Pinocchio (relaunch)", "tracks": [], "release": "1659052800", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/pinocchio-relaunch-u-q3W9GDWz.png" }, +{ "no": "689", "model": "10001037", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Playtime & Action (relaunch)", "series": "Favourite Children’s Songs", "episodes": "Playtime & Action (relaunch)", "tracks": [], "release": "0", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001037-50003368-b-JbYyYmjU.png" }, +{ "no": "690", "model": "10001038", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Bedtime & Lullabies (relaunch)", "series": "Favourite Children’s Songs", "episodes": "Bedtime & Lullabies (relaunch)", "tracks": [], "release": "1646611200", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001038-50003372-b-maevs6WR.png" }, +{ "no": "691", "model": "10001039", "audio_id": [], "hash": [], "title": "National Geographic Kids - Penguin", "series": "National Geographic Kids", "episodes": "Penguin", "tracks": [], "release": "1642464000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-NatGeo-penguin-transparent.png?v=1641573427" }, +{ "no": "692", "model": "10001041", "audio_id": [], "hash": [], "title": "Maya L'Abeille - Maya L'Abeille", "series": "Maya L'Abeille", "episodes": "Maya L'Abeille", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001041-50003378-b-jLIkM7gy.png" }, +{ "no": "693", "model": "10001043", "audio_id": [], "hash": [], "title": "Heidi - Heidi", "series": "Heidi", "episodes": "Heidi", "tracks": [], "release": "0", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001043-50003380-b-aIV05NEI.png" }, +{ "no": "694", "model": "10001049", "audio_id": [], "hash": [], "title": "Creative-Tonie - Purple/Medium", "series": "Creative-Tonie", "episodes": "Purple/Medium", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PurpleCTMedium-Transparent.png?v=1662494767" }, +{ "no": "695", "model": "10001050", "audio_id": [], "hash": [], "title": "Creative-Tonie - Red/Medium", "series": "Creative-Tonie", "episodes": "Red/Medium", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-RedCTMedium-transparent.png?v=1662493016" }, +{ "no": "696", "model": "10001051", "audio_id": [], "hash": [], "title": "Creative-Tonie - Green/Medium", "series": "Creative-Tonie", "episodes": "Green/Medium", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-greenctmedium-transparent.png?v=1662494871" }, +{ "no": "697", "model": "10001052", "audio_id": [], "hash": [], "title": "Creative-Tonie - Light Blue/Medium", "series": "Creative-Tonie", "episodes": "Light Blue/Medium", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BlueCTMedium-transparent.png?v=1662495152" }, +{ "no": "698", "model": "10001053", "audio_id": [], "hash": [], "title": "Creative-Tonie - Purple/Light", "series": "Creative-Tonie", "episodes": "Purple/Light", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PurpleCTLight-transparent.png?v=1662494753" }, +{ "no": "699", "model": "10001054", "audio_id": [], "hash": [], "title": "Creative-Tonie - Red/Light", "series": "Creative-Tonie", "episodes": "Red/Light", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-RedCTLight-transparent.png?v=1662493049" }, +{ "no": "700", "model": "10001055", "audio_id": [], "hash": [], "title": "Creative-Tonie - Green/Light", "series": "Creative-Tonie", "episodes": "Green/Light", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GreenCTLight-transparent.png?v=1662494850" }, +{ "no": "701", "model": "10001056", "audio_id": [], "hash": [], "title": "Creative-Tonie - Light Blue/Light", "series": "Creative-Tonie", "episodes": "Light Blue/Light", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BlueCTLight-transparent.png?v=1662495140" }, +{ "no": "702", "model": "10001057", "audio_id": [], "hash": [], "title": "Creative-Tonie - Gray/Light", "series": "Creative-Tonie", "episodes": "Gray/Light", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GreyCTLight-transparent.png?v=1662494983" }, +{ "no": "703", "model": "10001058", "audio_id": [], "hash": [], "title": "Creative-Tonie - Pink/Light", "series": "Creative-Tonie", "episodes": "Pink/Light", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PinkCTLight-transparent.png?v=1662494486" }, +{ "no": "704", "model": "10001059", "audio_id": [], "hash": [], "title": "Creative-Tonie - Gray/Medium", "series": "Creative-Tonie", "episodes": "Gray/Medium", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GreyCTMedium-transparent.png?v=1662495008" }, +{ "no": "705", "model": "10001060", "audio_id": [], "hash": [], "title": "Creative-Tonie - Pink/Medium", "series": "Creative-Tonie", "episodes": "Pink/Medium", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PinkCTMedium-transparent.png?v=1662494512" }, +{ "no": "706", "model": "10001061", "audio_id": [], "hash": [], "title": "Creative-Tonie - Purple/Dark", "series": "Creative-Tonie", "episodes": "Purple/Dark", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PurpleCTDark-transparent.png?v=1662494715" }, +{ "no": "707", "model": "10001062", "audio_id": [], "hash": [], "title": "Creative-Tonie - Red/Dark", "series": "Creative-Tonie", "episodes": "Red/Dark", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-RedCTDark-transparent.png?v=1662493070" }, +{ "no": "708", "model": "10001063", "audio_id": [], "hash": [], "title": "Creative-Tonie - Green/Dark", "series": "Creative-Tonie", "episodes": "Green/Dark", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GreenCTdark-transparent.png?v=1662494829" }, +{ "no": "709", "model": "10001064", "audio_id": [], "hash": [], "title": "Creative-Tonie - Light Blue/Dark", "series": "Creative-Tonie", "episodes": "Light Blue/Dark", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-BlueCTDark-Transparent.png?v=1662495128" }, +{ "no": "710", "model": "10001065", "audio_id": [], "hash": [], "title": "Creative-Tonie - Gray/Dark", "series": "Creative-Tonie", "episodes": "Gray/Dark", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GreyCTDark-transparent.png?v=1662494962" }, +{ "no": "711", "model": "10001066", "audio_id": [], "hash": [], "title": "Creative-Tonie - Pink/Dark", "series": "Creative-Tonie", "episodes": "Pink/Dark", "tracks": [], "release": "1631232000", "language": "en-US", "category": "Creative-Tonies", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-PinkCTDark-Transparent.png?v=1662579464" }, +{ "no": "712", "model": "10001071", "audio_id": [], "hash": [], "title": "Disney - Pocahontas", "series": "Disney", "episodes": "Pocahontas", "tracks": [], "release": "1654473600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Pocahontas-transparent.png?v=1653436781" }, +{ "no": "713", "model": "10001074", "audio_id": [], "hash": [], "title": "Disney - Doc McStuffins", "series": "Disney", "episodes": "Doc McStuffins", "tracks": [], "release": "1664841600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-docmcstuffins-transparent.png?v=1664751528" }, +{ "no": "714", "model": "10001075", "audio_id": [], "hash": [], "title": "Arthur - ", "series": "Arthur", "episodes": "", "tracks": [], "release": "1650240000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Arthur-transparent.png?v=1650287692" }, +{ "no": "715", "model": "10001079", "audio_id": [], "hash": [], "title": "Let's Go Luna - ", "series": "Let's Go Luna", "episodes": "", "tracks": [], "release": "1663632000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-letsgoluna-transparent.png?v=1663610744" }, +{ "no": "716", "model": "10001083", "audio_id": ["1648793677"], "hash": ["BE808E104BFFDB9D55ECC7EB474CA0C3240561A1"], "title": "Daniel Tiger's Neighborhood - ", "series": "Daniel Tiger's Neighborhood", "episodes": "", "tracks": [], "release": "1649721600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Daniel-Tiger-transparent.png?v=1649185029" }, +{ "no": "717", "model": "10001102", "audio_id": [], "hash": [], "title": " - Creative-Tonie Purple (beige)", "series": "", "episodes": "Creative-Tonie Purple (beige)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001102-50003559-ST-tMmP7ekn.png" }, +{ "no": "718", "model": "10001103", "audio_id": [], "hash": [], "title": " - Creative-Tonie Red (beige)", "series": "", "episodes": "Creative-Tonie Red (beige)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001103-50003561-ST-76QwBfEn.png" }, +{ "no": "719", "model": "10001104", "audio_id": [], "hash": [], "title": "Disney - Cendrillon", "series": "Disney", "episodes": "Cendrillon", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001104-50003563-b-j6GOEtEp.png" }, +{ "no": "720", "model": "10001106", "audio_id": ["1653373826"], "hash": ["654A0321F0404439D966BD9EBDED570062C4F3C3"], "title": "Lieblings-Kinderlieder - Kindergartenlieder", "series": "Lieblings-Kinderlieder", "episodes": "Kindergartenlieder", "tracks": [], "release": "0", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001106-50003569-b--oqXF8g_-.png" }, +{ "no": "721", "model": "10001107", "audio_id": ["1645795231"], "hash": ["7D2343A08FF14F6A0268301986252CA39EFE2BB6"], "title": "Lieblings-Kinderlieder - Englische Kinderlieder (Neuauflage 2022)", "series": "Lieblings-Kinderlieder", "episodes": "Englische Kinderlieder (Neuauflage 2022)", "tracks": [], "release": "1646784000", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001107-50003573-b-Ll66ei3e.png" }, +{ "no": "722", "model": "10001108", "audio_id": [], "hash": [], "title": " - Creative-Tonie Green (beige)", "series": "", "episodes": "Creative-Tonie Green (beige)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001108-50003575-ST-OU9cFyBY.png" }, +{ "no": "723", "model": "10001109", "audio_id": [], "hash": [], "title": " - Creative-Tonie Light Blue (beige)", "series": "", "episodes": "Creative-Tonie Light Blue (beige)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001109-50003577-ST-KfEVtfFk.png" }, +{ "no": "724", "model": "10001110", "audio_id": [], "hash": [], "title": " - Creative-Tonie Grey (beige)", "series": "", "episodes": "Creative-Tonie Grey (beige)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001110-50003579-ST-T_4JVDzb.png" }, +{ "no": "725", "model": "10001111", "audio_id": ["1651159467"], "hash": ["8AF383ED9FADBD664402BC4A34941ADC308CD93A"], "title": " - Creative-Tonie Pink (beige)", "series": "", "episodes": "Creative-Tonie Pink (beige)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001111-50003581-ST-E0MTlAHz.png" }, +{ "no": "726", "model": "10001149", "audio_id": [], "hash": [], "title": "John Henry and Other Stories - ", "series": "John Henry and Other Stories", "episodes": "", "tracks": [], "release": "1655164800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-johnhenry-transparent.png?v=1654879118" }, +{ "no": "727", "model": "10001150", "audio_id": [], "hash": [], "title": "Pride - ", "series": "Pride", "episodes": "", "tracks": [], "release": "1654041600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-pride-transparent.png?v=1653518594" }, +{ "no": "728", "model": "10001152", "audio_id": [], "hash": [], "title": "Annie Oakley - ", "series": "Annie Oakley", "episodes": "", "tracks": [], "release": "1665446400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-annieoakley-transparent.png?v=1665085895" }, +{ "no": "729", "model": "10001154", "audio_id": [], "hash": [], "title": "Spanish Lullabies - ", "series": "Spanish Lullabies", "episodes": "", "tracks": [], "release": "1641859200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-spanish-lullabies-transparent.png?v=1641488057" }, +{ "no": "730", "model": "10001155", "audio_id": [], "hash": [], "title": "Spanish Playtime Songs - ", "series": "Spanish Playtime Songs", "episodes": "", "tracks": [], "release": "1641859200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Spanish-Playtime-transparent.png?v=1641488175" }, +{ "no": "731", "model": "10001157", "audio_id": ["1661434142"], "hash": ["40FAA2149E37BEC726F0D14CC4F8347C9FD3D4D9"], "title": "Sesamstraße - Elmos Mitmachmusik", "series": "Sesamstraße", "episodes": "Elmos Mitmachmusik", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001157-50003709-b-__Nq3HxA.png" }, +{ "no": "732", "model": "10001212", "audio_id": ["1653375391"], "hash": ["20BEEED2E8CB2FF29DCA3DA106CB4437B298F50E"], "title": "Bitte nicht öffnen – Bissig! - Bissig!", "series": "Bitte nicht öffnen – Bissig!", "episodes": "Bissig!", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001212-50003726-b-cWO9BDGA.png" }, +{ "no": "733", "model": "10001217", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - En Anglais", "series": "Mes Comptines Préférées", "episodes": "En Anglais", "tracks": [], "release": "1646870400", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001217-50003730-b-UL9MClOS.png" }, +{ "no": "734", "model": "10001229", "audio_id": [], "hash": [], "title": "Miraculous - Ladybug", "series": "Miraculous", "episodes": "Ladybug", "tracks": [], "release": "1655942400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001229-50003754-b--Z_x3rjLx.png" }, +{ "no": "735", "model": "10001231", "audio_id": [], "hash": [], "title": "Peppa Pig - George Pig", "series": "Peppa Pig", "episodes": "George Pig", "tracks": [], "release": "1655856000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001231-50003758-b-gyqk9KH3.png" }, +{ "no": "736", "model": "10001232", "audio_id": [], "hash": [], "title": "Roald Dahl - The Witches", "series": "Roald Dahl", "episodes": "The Witches", "tracks": [], "release": "1658275200", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001232-50003760-b-qGtYZ5Ay.png" }, +{ "no": "737", "model": "10001243", "audio_id": [], "hash": [], "title": "CoComelon - ", "series": "CoComelon", "episodes": "", "tracks": [], "release": "1662508800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-cocomelon-transparent.png?v=1661874594" }, +{ "no": "738", "model": "10001247", "audio_id": [], "hash": [], "title": "L'Heure De La Sieste - Bruit Blanc", "series": "L'Heure De La Sieste", "episodes": "Bruit Blanc", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001247-50003812-b-DicaTyOq.png" }, +{ "no": "739", "model": "10001248", "audio_id": [], "hash": [], "title": "L'Heure De La Sieste - Sons De La Nature", "series": "L'Heure De La Sieste", "episodes": "Sons De La Nature", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001248-50003815-b-H41YgT8L.png" }, +{ "no": "740", "model": "10001249", "audio_id": [], "hash": [], "title": "Nat Geo - Penguin", "series": "Nat Geo", "episodes": "Penguin", "tracks": [], "release": "1650844800", "language": "en-gb", "category": "audio-play-educational", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001249-50003817-b-aIU4lfw6.png" }, +{ "no": "741", "model": "10001258", "audio_id": ["1632997351"], "hash": ["9739CAC9DA1253D92072A9153760B6610A511985"], "title": "Lieblings-Kinderlieder - Tierlieder", "series": "Lieblings-Kinderlieder", "episodes": "Tierlieder", "tracks": [], "release": "1633996800", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001258-50003833-b--eXCs2PPc.png" }, +{ "no": "742", "model": "10001259", "audio_id": ["1634291675"], "hash": ["E905B5DD6EC37FF5C86CC318904E8DEA70C2229D"], "title": "Lieblings-Kinderlieder - Schlaflieder 2", "series": "Lieblings-Kinderlieder", "episodes": "Schlaflieder 2", "tracks": [], "release": "0", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001259-50003837-b--Hepch5uS.png" }, +{ "no": "743", "model": "10001260", "audio_id": [], "hash": [], "title": "La Pat' Patrouille - Marcus", "series": "La Pat' Patrouille", "episodes": "Marcus", "tracks": [], "release": "1646870400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001260-50003859-b-ZYLav8nn.png" }, +{ "no": "744", "model": "10001261", "audio_id": [], "hash": [], "title": "C'Est Toujours Pas Sorcier - Plongée Dans Les Océans", "series": "C'Est Toujours Pas Sorcier", "episodes": "Plongée Dans Les Océans", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001261-50003861-b-EAOGDWEM.png" }, +{ "no": "745", "model": "10001262", "audio_id": [], "hash": [], "title": "C'Est Toujours Pas Sorcier - Les Secrets De L’Espace", "series": "C'Est Toujours Pas Sorcier", "episodes": "Les Secrets De L’Espace", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "audio-play-educational", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001262-50003863-b-CoideHTc.png" }, +{ "no": "746", "model": "10001263", "audio_id": [], "hash": [], "title": "Disney - La Belle Et La Bête", "series": "Disney", "episodes": "La Belle Et La Bête", "tracks": [], "release": "1657756800", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001263-50003865-b--pz9a3qHY.png" }, +{ "no": "747", "model": "10001264", "audio_id": ["1650637322"], "hash": ["A40CB1F5036C2DE96F740514514C58FD49612340"], "title": "Snöfrid aus dem Wiesental - Das wahrlich große Geheimnis von Appelgarden", "series": "Snöfrid aus dem Wiesental", "episodes": "Das wahrlich große Geheimnis von Appelgarden", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001264-50003869-b-xkd5eaCQ.png" }, +{ "no": "748", "model": "10001266", "audio_id": [], "hash": [], "title": "La Pat' Patrouille - Stella", "series": "La Pat' Patrouille", "episodes": "Stella", "tracks": [], "release": "1652918400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001266-50003875-b-spqgK8Nk.png" }, +{ "no": "749", "model": "10001267", "audio_id": [], "hash": [], "title": "Mes Classiques Préférés - Les Fables De La Fontaine", "series": "Mes Classiques Préférés", "episodes": "Les Fables De La Fontaine", "tracks": [], "release": "1661990400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001267-50003879-b--p9PtpCQB.png" }, +{ "no": "750", "model": "10001268", "audio_id": [], "hash": [], "title": "Peppa Pig - George", "series": "Peppa Pig", "episodes": "George", "tracks": [], "release": "1661990400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001268-50003881-b--ysAlSEbF.png" }, +{ "no": "751", "model": "10001269", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - Pour Voyager", "series": "Mes Comptines Préférées", "episodes": "Pour Voyager", "tracks": [], "release": "1655942400", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001269-50003883-b-fSNPnwHP.png" }, +{ "no": "752", "model": "10001270", "audio_id": [], "hash": [], "title": "Le Petit Nicolas - Le Petit Nicolas", "series": "Le Petit Nicolas", "episodes": "Le Petit Nicolas", "tracks": [], "release": "1661990400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001270-50003887-b--yQPpC5x6.png" }, +{ "no": "753", "model": "10001282", "audio_id": [], "hash": [], "title": "Disney - La Reine Des Neiges 2", "series": "Disney", "episodes": "La Reine Des Neiges 2", "tracks": [], "release": "1657756800", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001282-50003930-b--9Sb6swE6.png" }, +{ "no": "754", "model": "10001294", "audio_id": ["1632393133"], "hash": ["5FF38836753E294B7A3FE71B08344B9AB687E986"], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Hoppie Hase", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Hoppie Hase", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/080920-Hoppie_Hase-b-QBVBcJtu.png" }, +{ "no": "755", "model": "10001295", "audio_id": ["1632399239"], "hash": ["B9AF8845EA1D0F190045B83C28402EE97B2E3A62"], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Jimmy Bär", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Jimmy Bär", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/113888-Jimmy_Baer-b-Iikv8dks.png" }, +{ "no": "756", "model": "10001296", "audio_id": ["1632399007"], "hash": ["EE966A6E5B6CF7134FA31C686A835C718EC0CF0F"], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Lita Lamm", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Lita Lamm", "tracks": [], "release": "1623283200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/074097-Lita_Lamm-b-YxUP29iA.png" }, +{ "no": "757", "model": "10001307", "audio_id": [], "hash": [], "title": "Nat Geo - Whale", "series": "Nat Geo", "episodes": "Whale", "tracks": [], "release": "1650844800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001307-50004011-b-LxL10NzL.png" }, +{ "no": "758", "model": "10001314", "audio_id": [], "hash": [], "title": "Roald Dahl - Matilda", "series": "Roald Dahl", "episodes": "Matilda", "tracks": [], "release": "1663632000", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001314-50004021-b-JeBZaOQ0.png" }, +{ "no": "759", "model": "10001316", "audio_id": [], "hash": [], "title": "Nat Geo - Dinosaur", "series": "Nat Geo", "episodes": "Dinosaur", "tracks": [], "release": "1650844800", "language": "en-gb", "category": "audio-play-educational", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001316-50004029-b-IfJpkLh3.png" }, +{ "no": "760", "model": "10001318", "audio_id": [], "hash": [], "title": "Nat Geo - Astronaut", "series": "Nat Geo", "episodes": "Astronaut", "tracks": [], "release": "1650844800", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001318-50004035-b-vMYjUo_G.png" }, +{ "no": "761", "model": "10001325", "audio_id": [], "hash": [], "title": "Monty & Co - Monty & Co", "series": "Monty & Co", "episodes": "Monty & Co", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/monty-image-update%281-tILW1FFI.png" }, +{ "no": "762", "model": "10001329", "audio_id": [], "hash": [], "title": "Schlummerbande - Gutenachtgeschichten - Schlaf schön, kleiner Bär", "series": "Schlummerbande", "episodes": "Gutenachtgeschichten - Schlaf schön, kleiner Bär", "tracks": [], "release": "0", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001329-50003237-b-f0UvGMZQ.png" }, +{ "no": "763", "model": "10001334", "audio_id": [], "hash": [], "title": "Lieblings-Kinderlieder - Weihnachtslieder 2 (Neuauflage 2022)", "series": "Lieblings-Kinderlieder", "episodes": "Weihnachtslieder 2 (Neuauflage 2022)", "tracks": [], "release": "1663113600", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001334-50004100-b--CuPtjnzs.png" }, +{ "no": "764", "model": "10001335", "audio_id": ["1661154239"], "hash": ["C7EC2FF1792A8B72C1B7BEEAF0C73FC6E817D327"], "title": "Glubschis - Miss Crayon auf heißer Spur", "series": "Glubschis", "episodes": "Miss Crayon auf heißer Spur", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001335-50004104-b-Vu4KpbqP.png" }, +{ "no": "765", "model": "10001336", "audio_id": ["1661846281"], "hash": ["E0F91E10F96527FA1488BB1DE25BE6CFFD120996"], "title": "Planet Omar - Planet Omar", "series": "Planet Omar", "episodes": "Planet Omar", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001336-50004108-b-1koH3ee0.png" }, +{ "no": "766", "model": "10001337", "audio_id": ["1662106484"], "hash": ["E6E86E56C09EE3565AFA4D5A8B5437677ED2EEF7"], "title": "Sesamstraße - Ernies Mitmachmärchen", "series": "Sesamstraße", "episodes": "Ernies Mitmachmärchen", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001337-50004112-b-F5kvcFfK.png" }, +{ "no": "767", "model": "10001357", "audio_id": [], "hash": [], "title": "Didier Jeunesse - Écoute Et Devine Les Instruments", "series": "Didier Jeunesse", "episodes": "Écoute Et Devine Les Instruments", "tracks": [], "release": "0", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001357-50004172-b-7svkOcTe.png" }, +{ "no": "768", "model": "10001366", "audio_id": ["1618228258"], "hash": ["31FC68590D790FD76CCAF3152627DD085508CA94"], "title": "GoNoodle x tonies® Mindfulness Tonie - ", "series": "GoNoodle x tonies® Mindfulness Tonie", "episodes": "", "tracks": [], "release": "1619481600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-GoNoodle-Transparent.png?v=1619539126" }, +{ "no": "769", "model": "10001386", "audio_id": [], "hash": [], "title": "Beatrix Potter - Jemima Puddleduck", "series": "Beatrix Potter", "episodes": "Jemima Puddleduck", "tracks": [], "release": "1664496000", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001386-50004542-b-YpuXzqSJ.png" }, +{ "no": "770", "model": "10001388", "audio_id": [], "hash": [], "title": "Cocomelon - CoComelon", "series": "Cocomelon", "episodes": "CoComelon", "tracks": [], "release": "1660867200", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001388-50004550-b-MjYKvS-B.png" }, +{ "no": "771", "model": "10001472", "audio_id": ["1666872595"], "hash": ["F9584E7F3F8B9E81FE9AA28CA13B5A4A28BC2970"], "title": "Paw Patrol - Der Piratenschatz", "series": "Paw Patrol", "episodes": "Der Piratenschatz", "tracks": [], "release": "1668038400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001472-50004898-b-HHfglRee.png" }, +{ "no": "772", "model": "10001475", "audio_id": [], "hash": [], "title": "Disney - Winnie L'Ourson", "series": "Disney", "episodes": "Winnie L'Ourson", "tracks": [], "release": "1650499200", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001475-50004728-b-tPt54tQR.png" }, +{ "no": "773", "model": "10001477", "audio_id": [], "hash": [], "title": "Disney - Vaiana", "series": "Disney", "episodes": "Vaiana", "tracks": [], "release": "1652918400", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001477-50004732-b-Jv_fZWab.png" }, +{ "no": "774", "model": "10001480", "audio_id": [], "hash": [], "title": "Mes Comptines Préférées - Pour Apprendre", "series": "Mes Comptines Préférées", "episodes": "Pour Apprendre", "tracks": [], "release": "1657756800", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001480-50004744-b--nRiHpv90.png" }, +{ "no": "775", "model": "10001523", "audio_id": [], "hash": [], "title": "Peppa Pig - George", "series": "Peppa Pig", "episodes": "George", "tracks": [], "release": "1655769600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-george-transparent.png?v=1662132238" }, +{ "no": "776", "model": "10001538", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Meerjungfrau", "series": "", "episodes": "Kreativ-Tonie Meerjungfrau", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001538-50005057-ST-k0AbQLcI.png" }, +{ "no": "777", "model": "10001539", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Polizist (Neuauflage 2022)", "series": "", "episodes": "Kreativ-Tonie Polizist (Neuauflage 2022)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001539-50005061-b-OddYv7uo.png" }, +{ "no": "778", "model": "10001540", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Blanko (Neuauflage 2022)", "series": "", "episodes": "Kreativ-Tonie Blanko (Neuauflage 2022)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001540-50005065-b-r2lTCHdp.png" }, +{ "no": "779", "model": "10001541", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Superheld (Neuauflage 2022)", "series": "", "episodes": "Kreativ-Tonie Superheld (Neuauflage 2022)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001541-50005067-b-UggPhSxP.png" }, +{ "no": "780", "model": "10001542", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Fußballer", "series": "", "episodes": "Kreativ-Tonie Fußballer", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001542-50005073F-b-c9cNnPnX.png" }, +{ "no": "781", "model": "10001543", "audio_id": [], "hash": [], "title": " - Sängerin (Neuauflage 2022)", "series": "", "episodes": "Sängerin (Neuauflage 2022)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001543-50005077-b-TuWYQM2U.png" }, +{ "no": "782", "model": "10001544", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Gitarrist", "series": "", "episodes": "Kreativ-Tonie Gitarrist", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001544-50005081-ST-CLimIW1V.png" }, +{ "no": "783", "model": "10001642", "audio_id": [], "hash": [], "title": "Disney - Toy Story 2", "series": "Disney", "episodes": "Toy Story 2", "tracks": [], "release": "1655942400", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001642-50005171-b-3xECJKIm.png" }, +{ "no": "784", "model": "10001727", "audio_id": [], "hash": [], "title": "Mes Classiques Préférés - Peter Pan Et 2 Autres Classiques", "series": "Mes Classiques Préférés", "episodes": "Peter Pan Et 2 Autres Classiques", "tracks": [], "release": "1646870400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001727-50005517-b-L9GGVFmg.png" }, +{ "no": "785", "model": "10001766", "audio_id": [], "hash": [], "title": "Halloween & Spooky Songs - ", "series": "Halloween & Spooky Songs", "episodes": "", "tracks": [], "release": "1663027200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-spookysongs-transparent.png?v=1662748488" }, +{ "no": "786", "model": "10001797", "audio_id": [], "hash": [], "title": "Steiff Soft Cuddly Friends - Hoppie Rabbit", "series": "Steiff Soft Cuddly Friends", "episodes": "Hoppie Rabbit", "tracks": [], "release": "1634688000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/080920-Hoppie_Hase-b-463zgk_F.png" }, +{ "no": "787", "model": "10001798", "audio_id": [], "hash": [], "title": "Steiff Soft Cuddly Friends - Jimmy Bear", "series": "Steiff Soft Cuddly Friends", "episodes": "Jimmy Bear", "tracks": [], "release": "1634688000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/113888-Jimmy_Baer-b-wNLLOsxP.png" }, +{ "no": "788", "model": "10001799", "audio_id": [], "hash": [], "title": "Steiff Soft Cuddly Friends - Lita Lamb", "series": "Steiff Soft Cuddly Friends", "episodes": "Lita Lamb", "tracks": [], "release": "1634688000", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/074097-Lita_Lamm-b-nDLA8ils.png" }, +{ "no": "789", "model": "10001826", "audio_id": ["1629876957"], "hash": ["127C09AEBF9D36DACC54C726EEB3ABE7388DC56A"], "title": "LeVar Burton Tonie - ", "series": "LeVar Burton Tonie", "episodes": "", "tracks": [], "release": "1628467200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-LeVar-transparent.png?v=1628179778" }, +{ "no": "790", "model": "10001845", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Feuerwehrmann (Neuauflage 2022)", "series": "", "episodes": "Kreativ-Tonie Feuerwehrmann (Neuauflage 2022)", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001845-50005742-b-JLyH34Sh.png" }, +{ "no": "791", "model": "10001846", "audio_id": [], "hash": [], "title": " - Kreativ-Tonie Sleepy", "series": "", "episodes": "Kreativ-Tonie Sleepy", "tracks": [], "release": "0", "language": "de-de", "category": "Kreativ-Tonies", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001846-50005746-ST-b20TTUo7.png" }, +{ "no": "792", "model": "10001884", "audio_id": [], "hash": [], "title": " - Mermaid/dark brown", "series": "", "episodes": "Mermaid/dark brown", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001884-50005894-ST-GkNkic-I.png" }, +{ "no": "793", "model": "10001885", "audio_id": [], "hash": [], "title": " - Sleepy/dark brown", "series": "", "episodes": "Sleepy/dark brown", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001885-50005898-ST-F6zoKrlh.png" }, +{ "no": "794", "model": "10001886", "audio_id": [], "hash": [], "title": " - Superhero Blue (dark-brown)", "series": "", "episodes": "Superhero Blue (dark-brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001886-50005903-g--JOmsCCj.png" }, +{ "no": "795", "model": "10001888", "audio_id": [], "hash": [], "title": " - Footballer/dark brown", "series": "", "episodes": "Footballer/dark brown", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001888-50005907F-g-DQXQM_97.png" }, +{ "no": "796", "model": "10001889", "audio_id": [], "hash": [], "title": " - Blank (relaunch)", "series": "", "episodes": "Blank (relaunch)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001889-50005909-g-fk3avtba.png" }, +{ "no": "797", "model": "10001890", "audio_id": [], "hash": [], "title": " - Firefighter (light-brown)", "series": "", "episodes": "Firefighter (light-brown)", "tracks": [], "release": "0", "language": "en-gb", "category": "Creative-Tonies", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001845-50005742-g-1PMcTQpL.png" }, +{ "no": "798", "model": "10002016", "audio_id": ["1643291363"], "hash": ["F7BE4F5BCCCAFCCB018908A4574D65D4ADB6F907"], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Bodo Schimpanse", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Bodo Schimpanse", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/067365-Bodo_Affe-b-INtBsLJb.png" }, +{ "no": "799", "model": "10002017", "audio_id": ["1636727956"], "hash": ["FABC777C5114FA83FDF29421357D9A3EA8EDEB2A"], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Dinkie Esel", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Dinkie Esel", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/067341-Dinkie_Esel-b--RjoQgmG.png" }, +{ "no": "800", "model": "10002020", "audio_id": [], "hash": [], "title": "Conni - Conni kommt in den Kindergarten/ Conni geht aufs Töpfchen", "series": "Conni", "episodes": "Conni kommt in den Kindergarten/ Conni geht aufs Töpfchen", "tracks": [], "release": "1668038400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10002020-50006595-b-R7CbS2u_.png" }, +{ "no": "801", "model": "10002023", "audio_id": ["1666854957"], "hash": ["5D3DF5D24D4AA5F28C3D507687C270EF78313C7E"], "title": "Secret Science Club - Secret Science Club: Abwehrstark - Rund um Viren, Abwehrkräfte und Immunhelfer! mit Özlem & Ugur", "series": "Secret Science Club", "episodes": "Secret Science Club: Abwehrstark - Rund um Viren, Abwehrkräfte und Immunhelfer! mit Özlem & Ugur", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10002023-50006608-b-a6WWvPfk.png" }, +{ "no": "802", "model": "10002027", "audio_id": [], "hash": [], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Joshi T-Rex", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Joshi T-Rex", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10002027-Joshi_Baby_-98A8KZld.png" }, +{ "no": "803", "model": "10002028", "audio_id": [], "hash": [], "title": "Steiff Soft Cuddly Friends mit Hörspiel - Unica Einhorn", "series": "Steiff Soft Cuddly Friends mit Hörspiel", "episodes": "Unica Einhorn", "tracks": [], "release": "1663113600", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10002028-Unica_Einho-l-SIJEr8.png" }, +{ "no": "804", "model": "10002064", "audio_id": [], "hash": [], "title": "Disney - Doc McStuffins", "series": "Disney", "episodes": "Doc McStuffins", "tracks": [], "release": "1660953600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10002064-50006795-b-GK3e7nAN.png" }, +{ "no": "805", "model": "10002065", "audio_id": [], "hash": [], "title": "Disney - Pocahontas", "series": "Disney", "episodes": "Pocahontas", "tracks": [], "release": "1663718400", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10002065-50006797-b-iRdWoMfQ.png" }, +{ "no": "806", "model": "10002083", "audio_id": [], "hash": [], "title": "tonies und Steiff - Ben Teddybär Hörspiel", "series": "tonies und Steiff", "episodes": "Ben Teddybär Hörspiel", "tracks": [], "release": "1657670400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/Produktbild_Ben-Stei-ir5uXDO_.png" }, +{ "no": "807", "model": "10002150", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Disney Adventure Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Disney Adventure Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/nostalgic_Bundle-V2yItoi_.png" }, +{ "no": "808", "model": "10002164", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Disney Little Explorers Tonies Collection", "series": "Tonies Collection Bundle", "episodes": "Disney Little Explorers Tonies Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/modern_Bundle%281%29-EGR-2Di7Ryaa.png" }, +{ "no": "809", "model": "10002165", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Preschool Classics Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Preschool Classics Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/Nursey1_Bundle1%29-csWGHiFv.png" }, +{ "no": "810", "model": "10002166", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Tiny Tots Tales Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Tiny Tots Tales Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/Nursery2_Bundlecopy-uCOuTcVQ.png" }, +{ "no": "811", "model": "10002167", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Older Kids Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Older Kids Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/Olderkidsbundle_Bund-mP8zvMXN.png" }, +{ "no": "812", "model": "10002168", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Audiobook Favourites Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Audiobook Favourites Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/Audiobook_Bundle-NH7-iiTaBvsh.png" }, +{ "no": "813", "model": "10002169", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Dreamworks Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Dreamworks Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/Dreamworks_Bundle%281%29-HvNWpibN.png" }, +{ "no": "814", "model": "10002170", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - TV Favourites Tonies Collection", "series": "Tonies Collection Bundle", "episodes": "TV Favourites Tonies Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/TV_favourites_Bundle-GlA6-_Jn.png" }, +{ "no": "815", "model": "10002171", "audio_id": [], "hash": [], "title": "Tonies Collection Bundle - Classical Music Tonie Collection", "series": "Tonies Collection Bundle", "episodes": "Classical Music Tonie Collection", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/Classical_music_Bund-zoJB7Ee0.png" }, +{ "no": "816", "model": "10002429", "audio_id": [], "hash": [], "title": "Collections - Collection Ostern", "series": "Collections", "episodes": "Collection Ostern", "tracks": [], "release": "0", "language": "de-de", "category": "audio-play-songs", "pic": "https://res.cloudinary.com/tonies/image/fetch/f_auto,q_auto,c_fill,w_480,h_360/https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/oster_bundle_02-bzH4KU1s.png" }, +{ "no": "817", "model": "10000908", "audio_id": ["1668785697"], "hash": ["802E3667543AC87FEE9CC11A60865BE95CC0AAD8"], "title": "Die kleine Raupe Nimmersatt - Schlaf gut! Die kleine Raupe Nimmersatt und weitere Geschichten", "series": "Die kleine Raupe Nimmersatt", "episodes": "Schlaf gut! Die kleine Raupe Nimmersatt und weitere Geschichten", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000908-50002975-b-zPLNtEEh.png" }, +{ "no": "818", "model": "10000928", "audio_id": [], "hash": [], "title": "PJ Masks - Zeit ein Held zu sein", "series": "PJ Masks", "episodes": "Zeit ein Held zu sein", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000928-50003046-b-eGVrdHYp.png" }, +{ "no": "819", "model": "10000929", "audio_id": [], "hash": [], "title": "My Little Pony - My Little Pony - Das Original-Hörspiel zum Film", "series": "My Little Pony", "episodes": "My Little Pony - Das Original-Hörspiel zum Film", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000929-50003048-b-cZC_wGNq.png" }, +{ "no": "820", "model": "10001332", "audio_id": [], "hash": [], "title": "PJ Masks - Los geht’s Pyjamahelden", "series": "PJ Masks", "episodes": "Los geht’s Pyjamahelden", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001332-50004092-b-d53girS6.png" }, +{ "no": "821", "model": "10001328", "audio_id": [], "hash": [], "title": "PJ Masks - Ein mächtiges Mondproblem", "series": "PJ Masks", "episodes": "Ein mächtiges Mondproblem", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001328-50004078-b-6SE-pg1S.png" }, +{ "no": "822", "model": "10001490", "audio_id": [], "hash": [], "title": "Disney - Tinkerbell", "series": "Disney", "episodes": "Tinkerbell", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001490-50004786-b-GJbKcPCF.png" }, +{ "no": "823", "model": "10002000", "audio_id": [], "hash": [], "title": "Karmas Welt - Karmas Welt", "series": "Karmas Welt", "episodes": "Karmas Welt", "tracks": [], "release": "1670371200", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10002000-50006244-b-DMVdOnuk.png" }, +{ "no": "824", "model": "10000818", "audio_id": [], "hash": [], "title": "Gute Nacht, Gorilla - Gute Nacht, Gorilla und weitere Einschlafhörspiele", "series": "Gute Nacht, Gorilla", "episodes": "Gute Nacht, Gorilla und weitere Einschlafhörspiele", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000818-50002654-b-MRO-LMMU.png" }, +{ "no": "825", "model": "10000997", "audio_id": [], "hash": [], "title": "Peppa Pig - Die schönsten Geschichten von Schorsch", "series": "Peppa Pig", "episodes": "Die schönsten Geschichten von Schorsch", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10000997-50003255-b-2qlFT5GR.png" }, +{ "no": "826", "model": "10001327", "audio_id": [], "hash": [], "title": "Ein Freund wie kein anderer - Ein Freund wie kein Anderer", "series": "Ein Freund wie kein anderer", "episodes": "Ein Freund wie kein Anderer", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001327-50004076-b-znhUvRoi.png" }, +{ "no": "827", "model": "10001367", "audio_id": [], "hash": [], "title": "Der Grolltroll - Der Grolltroll – Das Liederalbum", "series": "Der Grolltroll", "episodes": "Der Grolltroll – Das Liederalbum", "tracks": [], "release": "1675814400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001367-50004262-b-rV7vhfw0.png" }, +{ "no": "828", "model": "10001686", "audio_id": [], "hash": [], "title": "Asterix - Die goldene Sichel", "series": "Asterix", "episodes": "Die goldene Sichel", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001686-50005328-b-3yjj2SnY.png" }, +{ "no": "829", "model": "10001693", "audio_id": [], "hash": [], "title": "Rolf Zuckowski - Rolfs Hasengeschichte", "series": "Rolf Zuckowski", "episodes": "Rolfs Hasengeschichte", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001693-50005358-b-wZV9k8ig.png" }, +{ "no": "830", "model": "10002021", "audio_id": [], "hash": [], "title": "Conni - Conni auf dem Bauernhof / Conni und das neue Baby (Neuauflage 2023)", "series": "Conni", "episodes": "Conni auf dem Bauernhof / Conni und das neue Baby (Neuauflage 2023)", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10002021-50006599-b-C2ex3EWj.png" }, +{ "no": "831", "model": "10001397", "audio_id": [], "hash": [], "title": "Schlummerbande - Klassik zum Einschlafen - Träum schön, kleiner Schlummerhase", "series": "Schlummerbande", "episodes": "Klassik zum Einschlafen - Träum schön, kleiner Schlummerhase", "tracks": [], "release": "1675814400", "language": "de-de", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001397-50004792-b-ND0m_DbY.png" }, +{ "no": "832", "model": "10001485", "audio_id": [], "hash": [], "title": "Disney - Buh machst du! & 3 weitere Geschichten", "series": "Disney", "episodes": "Buh machst du! & 3 weitere Geschichten", "tracks": [], "release": "1675814400", "language": "de-de", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001485-50004760-b-t5EplUH-.png" }, +{ "no": "833", "model": "10001315", "audio_id": [], "hash": [], "title": "Giraffes Can't Dance - Giraffes Can't Dance", "series": "Giraffes Can't Dance", "episodes": "Giraffes Can't Dance", "tracks": [], "release": "0", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001315-50004027-b-l4dK5pE4.png" }, +{ "no": "834", "model": "10001310", "audio_id": [], "hash": [], "title": "Nat Geo - Horse", "series": "Nat Geo", "episodes": "Horse", "tracks": [], "release": "1669507200", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001310-50004013-b-ubyMMvzq.png" }, +{ "no": "835", "model": "10000837", "audio_id": [], "hash": [], "title": "Blue's Clues & You! - Blue's Clues and You", "series": "Blue's Clues & You!", "episodes": "Blue's Clues and You", "tracks": [], "release": "1666828800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000837-50002730-b-w4mwCivA.png" }, +{ "no": "836", "model": "10000481", "audio_id": [], "hash": [], "title": "My Little Pony - Sunny", "series": "My Little Pony", "episodes": "Sunny", "tracks": [], "release": "1666396800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000481-50001509-b-PONj5Idz.png" }, +{ "no": "837", "model": "10000940", "audio_id": [], "hash": [], "title": "Roald Dahl - James and the Giant Peach", "series": "Roald Dahl", "episodes": "James and the Giant Peach", "tracks": [], "release": "1666656000", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000940-50003091-b-DElun9n2.png" }, +{ "no": "838", "model": "10001309", "audio_id": [], "hash": [], "title": "Disney - Olaf's Frozen Adventure", "series": "Disney", "episodes": "Olaf's Frozen Adventure", "tracks": [], "release": "1666656000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001309-50004015-b-6m3Rd2IM.png" }, +{ "no": "839", "model": "10001891", "audio_id": [], "hash": [], "title": "Disney - Coco", "series": "Disney", "episodes": "Coco", "tracks": [], "release": "1666137600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001891-50005919-b-0Nf6C1aU.png" }, +{ "no": "840", "model": "10001881", "audio_id": [], "hash": [], "title": "Favourite Children’s Songs - Animal Songs (relaunch)", "series": "Favourite Children’s Songs", "episodes": "Animal Songs (relaunch)", "tracks": [], "release": "1667088000", "language": "en-gb", "category": "music", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/animal_songs-UOzCXphB.png" }, +{ "no": "841", "model": "10001234", "audio_id": [], "hash": [], "title": "Eloise - Eloise Audio Collection", "series": "Eloise", "episodes": "Eloise Audio Collection", "tracks": [], "release": "1668729600", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001234-50003764-b-S-Wmyy0h.png" }, +{ "no": "842", "model": "10001875", "audio_id": [], "hash": [], "title": "Disney - Sleeping Beauty", "series": "Disney", "episodes": "Sleeping Beauty", "tracks": [], "release": "1669161600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001875-50005871-b-Z4Vh-E8b.png" }, +{ "no": "843", "model": "10001518", "audio_id": [], "hash": [], "title": "Gabby's Dollhouse - Gabby's Dollhouse", "series": "Gabby's Dollhouse", "episodes": "Gabby's Dollhouse", "tracks": [], "release": "1668816000", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10001518-50004928-b-AqV88I6t.png" }, +{ "no": "844", "model": "10001651", "audio_id": [], "hash": [], "title": "Paw Patrol - Rubble", "series": "Paw Patrol", "episodes": "Rubble", "tracks": [], "release": "1674777600", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/50004896-Tonie_Shado-CyUv0Jhs.png" }, +{ "no": "845", "model": "10002066", "audio_id": [], "hash": [], "title": "Karma's World - Karma's World", "series": "Karma's World", "episodes": "Karma's World", "tracks": [], "release": "1672185600", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10002066-50006808-b-l6-XU7UL.png" }, +{ "no": "846", "model": "10001517", "audio_id": [], "hash": [], "title": "Disney - Lilo & Stitch", "series": "Disney", "episodes": "Lilo & Stitch", "tracks": [], "release": "1675209600", "language": "en-gb", "category": "audio-book", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/10000936-50003073-b-7fHD9Oec.png" }, +{ "no": "847", "model": "10001324", "audio_id": [], "hash": [], "title": "Ben & Holly's Little Kingdom - Ben and Holly's Little Kingdom", "series": "Ben & Holly's Little Kingdom", "episodes": "Ben and Holly's Little Kingdom", "tracks": [], "release": "1675382400", "language": "en-gb", "category": "audio-play", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/50004057-Ben_&_Holly-Uedywnrn.png" }, +{ "no": "848", "model": "10000658", "audio_id": [], "hash": [], "title": "Disney - Brave", "series": "Disney", "episodes": "Brave", "tracks": [], "release": "1675036800", "language": "en-gb", "category": "audio-play-songs", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/98-1342-Tonie_Shadow-stduIU3A.png" }, +{ "no": "849", "model": "11000458", "audio_id": [], "hash": [], "title": " - Calm", "series": "", "episodes": "Calm", "tracks": [], "release": "0", "language": "en-gb", "category": "", "pic": "https://08ee523e746768fd7148-f76a52ba8f0c340564df978383fc4de2.ssl.cf3.rackcdn.com/11000457-51002839-g-CtkjoPe8.png" }, +{ "no": "850", "model": "10001661", "audio_id": [], "hash": [], "title": "La Pat' Patrouille - Ruben", "series": "La Pat' Patrouille", "episodes": "Ruben", "tracks": [], "release": "1671062400", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001661-50005239-b--d8vzbxB8.png" }, +{ "no": "851", "model": "10001283", "audio_id": [], "hash": [], "title": "Molang - Molang", "series": "Molang", "episodes": "Molang", "tracks": [], "release": "1665619200", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001283-50003934-b--dPDodBwI.png" }, +{ "no": "852", "model": "10001288", "audio_id": [], "hash": [], "title": "Didou - Didou", "series": "Didou", "episodes": "Didou", "tracks": [], "release": "1665619200", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001288-50003952-b--G3Nz_1i2.png" }, +{ "no": "853", "model": "10001349", "audio_id": ["1664284580"], "hash": ["75DE0AA33CED69BB6A7509CAB3406DFF1D89C52F"], "title": "Les Copains Du Dodo - Doudou Mouton", "series": "Les Copains Du Dodo", "episodes": "Doudou Mouton", "tracks": [], "release": "1665619200", "language": "fr-fr", "category": "music", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001349-50004169-b--SpCDnTrk.png" }, +{ "no": "854", "model": "10001272", "audio_id": [], "hash": [], "title": "Astérix - Astérix Et La Serpe D'Or", "series": "Astérix", "episodes": "Astérix Et La Serpe D'Or", "tracks": [], "release": "1667433600", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001272-50003893-b--JDLJs0Hz.png" }, +{ "no": "855", "model": "10001273", "audio_id": ["1664204178"], "hash": ["C5B809E777D88B91B2570BF155A4D0853F674FE6"], "title": "Astérix - Le Tour De Gaule D'Astérix", "series": "Astérix", "episodes": "Le Tour De Gaule D'Astérix", "tracks": [], "release": "1667433600", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001273-50003897-b--_Eo2hIRn.png" }, +{ "no": "856", "model": "10001479", "audio_id": [], "hash": [], "title": "Masha Et Michka - Masha", "series": "Masha Et Michka", "episodes": "Masha", "tracks": [], "release": "1667433600", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001479-50004738-b--mzFf_LO6.png" }, +{ "no": "857", "model": "10001491", "audio_id": [], "hash": [], "title": "Didier Jeunesse - Monsieur Mozart", "series": "Didier Jeunesse", "episodes": "Monsieur Mozart", "tracks": [], "release": "1670457600", "language": "fr-fr", "category": "audio-book-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001491-50004822-b--wMRjf4E5.png" }, +{ "no": "858", "model": "10001277", "audio_id": [], "hash": [], "title": "Les Schtroumpfs - L'Aéroschtroumpf", "series": "Les Schtroumpfs", "episodes": "L'Aéroschtroumpf", "tracks": [], "release": "1668643200", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001277-50003913-b--q2GzDoFL.png" }, +{ "no": "859", "model": "10001278", "audio_id": [], "hash": [], "title": "Les Schtroumpfs - La Grande Schtroumpfette", "series": "Les Schtroumpfs", "episodes": "La Grande Schtroumpfette", "tracks": [], "release": "1668643200", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001278-50003917-b--OWEuEaz0.png" }, +{ "no": "860", "model": "10001495", "audio_id": [], "hash": [], "title": "Babar - Les Chasses Au Trésor De Babar", "series": "Babar", "episodes": "Les Chasses Au Trésor De Babar", "tracks": [], "release": "1669852800", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001495-50004836-b--bRfzls3o.png" }, +{ "no": "861", "model": "10001406", "audio_id": [], "hash": [], "title": "Mouk - Découvre Le Monde Avec Mouk", "series": "Mouk", "episodes": "Découvre Le Monde Avec Mouk", "tracks": [], "release": "1669852800", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001406-50004810-b--mcxNSmpb.png" }, +{ "no": "862", "model": "10001481", "audio_id": [], "hash": [], "title": "Pirata Et Capitano - Pirata", "series": "Pirata Et Capitano", "episodes": "Pirata", "tracks": [], "release": "1669852800", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001481-50004748-b--VMA83ukJ.png" }, +{ "no": "863", "model": "10001289", "audio_id": [], "hash": [], "title": "L'École Des Loisirs - Florilège D'Émotions", "series": "L'École Des Loisirs", "episodes": "Florilège D'Émotions", "tracks": [], "release": "1669852800", "language": "fr-fr", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001289-50003956-b--0vihtrqw.png" }, +{ "no": "864", "model": "10001012", "audio_id": [], "hash": [], "title": "Disney - La Princesse Et La Grenouille", "series": "Disney", "episodes": "La Princesse Et La Grenouille", "tracks": [], "release": "1670457600", "language": "fr-fr", "category": "audio-play-songs", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001012-50003325-b--nVc8zfrL.png" }, +{ "no": "865", "model": "10001290", "audio_id": [], "hash": [], "title": "Marlène Jobert Raconte - Les Sorcières De La Rue Des Tempêtes Et 2 Autres Contes", "series": "Marlène Jobert Raconte", "episodes": "Les Sorcières De La Rue Des Tempêtes Et 2 Autres Contes", "tracks": [], "release": "1671408000", "language": "fr-fr", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/10001290-50003960-b--NzAsTZMz.png" }, +{ "no": "866", "model": "10001775", "audio_id": [], "hash": [], "title": "Mes Classiques Préférés - Les Trois Mousquetaires", "series": "Mes Classiques Préférés", "episodes": "Les Trois Mousquetaires", "tracks": [], "release": "1673481600", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/50005545-Tonie_Shado-1Vn9YuXf.png" }, +{ "no": "867", "model": "10001496", "audio_id": [], "hash": [], "title": "Ma Pause Zen - Cours Yoga De Sergio Lama", "series": "Ma Pause Zen", "episodes": "Cours Yoga De Sergio Lama", "tracks": [], "release": "1673481600", "language": "fr-fr", "category": "audio-play", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/50004838-Tonie_Shado-vuqAZpwH.png" }, +{ "no": "868", "model": "10001589", "audio_id": [], "hash": [], "title": "Ma Pause Zen - Séances Méditatives De Max Larelax", "series": "Ma Pause Zen", "episodes": "Séances Méditatives De Max Larelax", "tracks": [], "release": "1673481600", "language": "fr-fr", "category": "audio-book", "pic": "https://278163f382d2bab4b036-4f5ec62496a160f3570d3b6e48fc4516.ssl.cf3.rackcdn.com/98-1196-Tonie_Shadow-kWEW19Lw.png" }, +{ "no": "869", "model": "10001135", "audio_id": [], "hash": [], "title": "Brown Bear and Friends - ", "series": "Brown Bear and Friends", "episodes": "", "tracks": [], "release": "1674604800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-brownbear-transparent.png?v=1674509110" }, +{ "no": "870", "model": "10002001", "audio_id": [], "hash": [], "title": "Worldwide Tales: West African Tales - ", "series": "Worldwide Tales: West African Tales", "episodes": "", "tracks": [], "release": "1674432000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-westafricantales-transparent.png?v=1674248860" }, +{ "no": "871", "model": "11000447", "audio_id": [], "hash": [], "title": "Planet Omar: Accidental Trouble Magnet - ", "series": "Planet Omar: Accidental Trouble Magnet", "episodes": "", "tracks": [], "release": "1674432000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-planetomar-transparent.png?v=1674248694" }, +{ "no": "872", "model": "10000804", "audio_id": [], "hash": [], "title": "Dragons Love Tacos - ", "series": "Dragons Love Tacos", "episodes": "", "tracks": [], "release": "1674432000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-dragonslovetacos-transparent.png?v=1674242723" }, +{ "no": "873", "model": "10000936", "audio_id": [], "hash": [], "title": "Disney Lilo & Stitch - ", "series": "Disney Lilo & Stitch", "episodes": "", "tracks": [], "release": "1674432000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-liloandstitch-transparent.png?v=1674242590" }, +{ "no": "874", "model": "10000650", "audio_id": [], "hash": [], "title": "Curious George - ", "series": "Curious George", "episodes": "", "tracks": [], "release": "1673568000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-curiousgeorge-transparent.png?v=1673564837" }, +{ "no": "875", "model": "10001073", "audio_id": [], "hash": [], "title": "Disney and Pixar Brave - ", "series": "Disney and Pixar Brave", "episodes": "", "tracks": [], "release": "1671580800", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-brave-transparent.png?v=1671487059" }, +{ "no": "876", "model": "10000788", "audio_id": [], "hash": [], "title": "James and the Giant Peach - ", "series": "James and the Giant Peach", "episodes": "", "tracks": [], "release": "1671494400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-jamesandthegiantpeach-transparent.png?v=1670875897" }, +{ "no": "877", "model": "10000819", "audio_id": [], "hash": [], "title": "Laurie Berkner - ", "series": "Laurie Berkner", "episodes": "", "tracks": [], "release": "1671494400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-laurieberkner-transparent.png?v=1671487165" }, +{ "no": "878", "model": "10001343", "audio_id": [], "hash": [], "title": "Giraffes Can't Dance - ", "series": "Giraffes Can't Dance", "episodes": "", "tracks": [], "release": "1670371200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-giraffescan_tdance-transparent.png?v=1670268647" }, +{ "no": "879", "model": "10000888", "audio_id": [], "hash": [], "title": "Tee and Mo - ", "series": "Tee and Mo", "episodes": "", "tracks": [], "release": "1670371200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-teeandmo-transparent.png?v=1670268529" }, +{ "no": "880", "model": "10001870", "audio_id": [], "hash": [], "title": "Pete the Cat: Rock On! - ", "series": "Pete the Cat: Rock On!", "episodes": "", "tracks": [], "release": "1669334400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-petethecat2-transparent.png?v=1669148341" }, +{ "no": "881", "model": "10001714", "audio_id": [], "hash": [], "title": "PAW Patrol: Rubble - ", "series": "PAW Patrol: Rubble", "episodes": "", "tracks": [], "release": "1668902400", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-rubble-transparent.png?v=1668728402" }, +{ "no": "882", "model": "10002571", "audio_id": [], "hash": [], "title": "tonies® x Steiff Hoppie Rabbit - ", "series": "tonies® x Steiff Hoppie Rabbit", "episodes": "", "tracks": [], "release": "1668556800", "language": "en-US", "category": "Accessory", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-hoppie-transparent.png?v=1668614747" }, +{ "no": "883", "model": "10002570", "audio_id": [], "hash": [], "title": "tonies® x Steiff Jimmy Bear - ", "series": "tonies® x Steiff Jimmy Bear", "episodes": "", "tracks": [], "release": "1668556800", "language": "en-US", "category": "Accessory", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-jimmybear-transparent.png?v=1668614742" }, +{ "no": "884", "model": "11000457", "audio_id": [], "hash": [], "title": "Calm x tonies® - ", "series": "Calm x tonies®", "episodes": "", "tracks": [], "release": "1668384000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-Calm-transparent.png?v=1668452134" }, +{ "no": "885", "model": "10000776", "audio_id": [], "hash": [], "title": "Blaze and the Monster Machines - ", "series": "Blaze and the Monster Machines", "episodes": "", "tracks": [], "release": "1667779200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-blaze-transparent.png?v=1667855173" }, +{ "no": "886", "model": "10000790", "audio_id": [], "hash": [], "title": "Clark the Shark - ", "series": "Clark the Shark", "episodes": "", "tracks": [], "release": "1667779200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-clarktheshark-transparent.png?v=1667855290" }, +{ "no": "887", "model": "10000569", "audio_id": [], "hash": [], "title": "Favorite Classics - Puss in Boots - ", "series": "Favorite Classics - Puss in Boots", "episodes": "", "tracks": [], "release": "1667779200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-pussinboots-transparent.png?v=1667855375" }, +{ "no": "888", "model": "10001240", "audio_id": [], "hash": [], "title": "Karma's World - ", "series": "Karma's World", "episodes": "", "tracks": [], "release": "1667779200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-karmasworld-transparent.png?v=1666376587" }, +{ "no": "889", "model": "10001257", "audio_id": [], "hash": [], "title": "Christmas Tales - ", "series": "Christmas Tales", "episodes": "", "tracks": [], "release": "1667433600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-christmastales-transparent.png?v=1666650250" }, +{ "no": "890", "model": "10000791", "audio_id": [], "hash": [], "title": "How The Grinch Stole Christmas! - ", "series": "How The Grinch Stole Christmas!", "episodes": "", "tracks": [], "release": "1667433600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-grinch-transparent.png?v=1666650322" }, +{ "no": "891", "model": "10001133", "audio_id": [], "hash": [], "title": "Disney Frozen: Olaf - ", "series": "Disney Frozen: Olaf", "episodes": "", "tracks": [], "release": "1667433600", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-olaf-transparent.png?v=1667252530" }, +{ "no": "892", "model": "10000931", "audio_id": [], "hash": [], "title": "National Geographic Kids: Horse - ", "series": "National Geographic Kids: Horse", "episodes": "", "tracks": [], "release": "1666915200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-natgeohorse-transparent.png?v=1666816661" }, +{ "no": "893", "model": "10001134", "audio_id": [], "hash": [], "title": "Disney Sleeping Beauty - ", "series": "Disney Sleeping Beauty", "episodes": "", "tracks": [], "release": "1666915200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-sleepingbeauty-transparent.png?v=1666816749" }, +{ "no": "894", "model": "10000652", "audio_id": [], "hash": [], "title": "Disney and Pixar Coco - ", "series": "Disney and Pixar Coco", "episodes": "", "tracks": [], "release": "1666656000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-coco-transparent.png?v=1666373466" }, +{ "no": "895", "model": "10001132", "audio_id": [], "hash": [], "title": "Disney Holiday Mickey - ", "series": "Disney Holiday Mickey", "episodes": "", "tracks": [], "release": "1666224000", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-holidaymickey-transparent.png?v=1666305800" }, +{ "no": "896", "model": "10001342", "audio_id": [], "hash": [], "title": "We're Going On A Bear Hunt - ", "series": "We're Going On A Bear Hunt", "episodes": "", "tracks": [], "release": "1666051200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-wgoabh-transparent.png?v=1665768689" }, +{ "no": "897", "model": "10001078", "audio_id": [], "hash": [], "title": "Super Why! - ", "series": "Super Why!", "episodes": "", "tracks": [], "release": "1666051200", "language": "en-US", "category": "Tonie", "pic": "https://cdn.shopify.com/s/files/1/0403/5431/6439/products/Tonies-PDP-Assets-superwhy-transparent.png?v=1665768673" } +] From 12220e0577ec3300317ccb13d38151273b369a8f Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Tue, 25 Jul 2023 10:37:19 +0200 Subject: [PATCH 22/52] omit first 4k of ogg files when playing back --- src/server.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server.c b/src/server.c index 58975f35..2adba715 100644 --- a/src/server.c +++ b/src/server.c @@ -69,7 +69,7 @@ error_t handleOgg(HttpConnection *connection, const char_t *uri_full, const char // Retrieve the size of the specified file error = fsGetFileSize(connection->buffer, &length); // The specified URI cannot be found? - if (error) + if (error || length < 4096) { TRACE_ERROR("File does not exist '%s'\r\n", connection->buffer); return ERROR_NOT_FOUND; @@ -85,7 +85,7 @@ error_t handleOgg(HttpConnection *connection, const char_t *uri_full, const char // TODO add status 416 on invalid ranges if (connection->request.Range.start > 0) { - connection->request.Range.size = length; + connection->request.Range.size = length - 4096; if (connection->request.Range.end >= connection->request.Range.size || connection->request.Range.end == 0) connection->request.Range.end = connection->request.Range.size - 1; @@ -120,11 +120,12 @@ error_t handleOgg(HttpConnection *connection, const char_t *uri_full, const char if (connection->request.Range.start > 0 && connection->request.Range.start < connection->request.Range.size) { TRACE_DEBUG("Seeking file to %" PRIu64 "\r\n", connection->request.Range.start); - fsSeekFile(file, connection->request.Range.start, FS_SEEK_SET); + fsSeekFile(file, connection->request.Range.start + 4096, FS_SEEK_SET); } else { TRACE_DEBUG("No seeking, sending from beginning\r\n"); + fsSeekFile(file, 4096, FS_SEEK_SET); } // Send response body From 80eccba0766d3d0adf558c90780e42dad7915fb6 Mon Sep 17 00:00:00 2001 From: SciLor Date: Tue, 25 Jul 2023 09:15:40 +0000 Subject: [PATCH 23/52] dynamic contentPath --- include/handler_cloud.h | 4 ++-- src/handler_cloud.c | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/include/handler_cloud.h b/include/handler_cloud.h index 966156ae..196b99e2 100644 --- a/include/handler_cloud.h +++ b/include/handler_cloud.h @@ -23,8 +23,8 @@ typedef struct TonieboxAudioFileHeader *tafHeader; } tonie_info_t; -void getContentPathFromCharRUID(char ruid[17], char contentPath[30]); -void getContentPathFromUID(uint64_t uid, char contentPath[30]); +void getContentPathFromCharRUID(char ruid[17], char **pcontentPath); +void getContentPathFromUID(uint64_t uid, char **pcontentPath); tonie_info_t getTonieInfo(const char *contentPath); void freeTonieInfo(tonie_info_t *tonieInfo); diff --git a/src/handler_cloud.c b/src/handler_cloud.c index f0d1a051..85435176 100644 --- a/src/handler_cloud.c +++ b/src/handler_cloud.c @@ -138,7 +138,7 @@ static void cbrCloudBodyPassthrough(void *src_ctx, void *cloud_ctx, const char * char ruid[17]; osStrncpy(ruid, &ctx->uri[12], sizeof(ruid)); ruid[16] = 0; - getContentPathFromCharRUID(ruid, ctx->tonieInfo.contentPath); + getContentPathFromCharRUID(ruid, &ctx->tonieInfo.contentPath); char tmpPath[34]; ctx->tonieInfo = getTonieInfo(ctx->tonieInfo.contentPath); osMemcpy(tmpPath, ctx->tonieInfo.contentPath, 30); @@ -233,14 +233,17 @@ static req_cbr_t getCloudCbr(HttpConnection *connection, const char_t *uri, cons return cbr; } -void getContentPathFromCharRUID(char ruid[17], char contentPath[30]) +void getContentPathFromCharRUID(char ruid[17], char **pcontentPath) { - osSprintf(contentPath, "www/CONTENT/%.8s/%.8s", ruid, &ruid[8]); - strupr(&contentPath[4]); - contentPath[30] = '\0'; + *pcontentPath = osAllocMem(30); + char filePath[18]; + osSprintf(filePath, "%.8s/%.8s", ruid, &ruid[8]); + strupr(filePath); + + osSprintf(*pcontentPath, "www/CONTENT/%s", filePath); } -void getContentPathFromUID(uint64_t uid, char contentPath[30]) +void getContentPathFromUID(uint64_t uid, char **pcontentPath) { uint16_t cuid[9]; osSprintf((char *)cuid, "%016" PRIX64 "", uid); @@ -250,7 +253,7 @@ void getContentPathFromUID(uint64_t uid, char contentPath[30]) cruid[i] = cuid[7 - i]; } cruid[8] = 0; - getContentPathFromCharRUID((char *)cruid, contentPath); + getContentPathFromCharRUID((char *)cruid, pcontentPath); } tonie_info_t getTonieInfo(const char *contentPath) @@ -481,7 +484,7 @@ error_t handleCloudClaim(HttpConnection *connection, const char_t *uri, const ch TRACE_INFO(" >> client authenticated with %02X%02X%02X%02X...\r\n", token[0], token[1], token[2], token[3]); tonie_info_t tonieInfo; - getContentPathFromCharRUID(ruid, tonieInfo.contentPath); + getContentPathFromCharRUID(ruid, &tonieInfo.contentPath); tonieInfo = getTonieInfo(tonieInfo.contentPath); if (!tonieInfo.nocloud && checkCustomTonie(ruid, token)) @@ -531,7 +534,7 @@ error_t handleCloudContent(HttpConnection *connection, const char_t *uri, const TRACE_INFO(" >> client authenticated with %02X%02X%02X%02X...\r\n", token[0], token[1], token[2], token[3]); tonie_info_t tonieInfo; - getContentPathFromCharRUID(ruid, tonieInfo.contentPath); + getContentPathFromCharRUID(ruid, &tonieInfo.contentPath); tonieInfo = getTonieInfo(tonieInfo.contentPath); if (!tonieInfo.nocloud && !noPassword && checkCustomTonie(ruid, token)) @@ -655,7 +658,7 @@ error_t handleCloudFreshnessCheck(HttpConnection *connection, const char_t *uri, } } tonie_info_t tonieInfo; - getContentPathFromUID(freshReq->tonie_infos[i]->uid, tonieInfo.contentPath); + getContentPathFromUID(freshReq->tonie_infos[i]->uid, &tonieInfo.contentPath); tonieInfo = getTonieInfo(tonieInfo.contentPath); tonieInfo.updated = (freshReq->tonie_infos[i]->audio_id < tonieInfo.tafHeader->audio_id); From bd95f67f6b00b42b81fc1808a4ddd7aed527dc1f Mon Sep 17 00:00:00 2001 From: SciLor Date: Tue, 25 Jul 2023 09:33:21 +0000 Subject: [PATCH 24/52] uppercase CONTENT --- contrib/www/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index e1fb3f06..355ae48a 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -882,7 +882,7 @@

File Viewer

) : ( - + {filename} {' '.repeat(maxLen - filename.length)} @@ -891,7 +891,7 @@

File Viewer

{file.desc.startsWith('TAF,') &&
From 28d6273b582fa1f8a275fdd01f14b3b16bab4b50 Mon Sep 17 00:00:00 2001 From: g3gg0 Date: Tue, 25 Jul 2023 12:40:15 +0200 Subject: [PATCH 25/52] immediately upload certs after confirmation --- contrib/www/index.html | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/contrib/www/index.html b/contrib/www/index.html index e1fb3f06..f6de1f50 100644 --- a/contrib/www/index.html +++ b/contrib/www/index.html @@ -3,7 +3,7 @@ TeddyCloud administration interface - +