A terminal-based radio player
git clone git://soophie.de/rx
blob: ce9c9cdc994ebb8ee705531b65b04dec1173eb04 (1455 bytes)[doc][blame][raw]
1
#include <stdlib.h>2
#include <string.h>3
#include <curl/curl.h>4
#define LIB_STR_IMPL5
#include <libstr.h>7
#define RX_BYB_URL "https://playerservices.streamtheworld.com/api/livestream?station=BYB_RADIO&transports=http%2Chls&version=1.10&request.preventCache=1735994936887"9
size_t rx_curl_write(void *ptr, size_t size, size_t nmemb, void *data) {10
size_t len = size * nmemb;11
char **curl_data = (char **) data;12
str_append_len(curl_data, ptr, len);13
return len;14
}16
char *rx_resolve(void) {17
CURL *curl = curl_easy_init();18
if (!curl) {19
fprintf(stderr, "CURL init failed!\n");20
return NULL;21
}22
char *curl_data = NULL;23
curl_easy_setopt(curl, CURLOPT_URL, RX_BYB_URL);24
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, rx_curl_write);25
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &curl_data);26
CURLcode code = curl_easy_perform(curl);27
if (code != CURLE_OK) {28
curl_easy_cleanup(curl);29
fprintf(stderr, "CURL fetch failed!\n%s\n", curl_easy_strerror(code));30
return NULL;31
}32
curl_easy_cleanup(curl);33
char *url = NULL;34
size_t set = 0;35
for (size_t i = 0; i < strlen(curl_data); i++) {36
if(strncmp(curl_data + i, "<ip>", 4) == 0) {37
set = i + 4;38
continue;39
}40
if (set && curl_data[i] == '<') {41
size_t len = i - set;42
str_append(&url, "https://");43
str_append_len(&url, curl_data + set, len);44
str_append(&url, "/BYB_RADIO.mp3");45
break;46
}47
}48
free(curl_data);49
return url;50
}