so://phie

rx

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_IMPL

5#include <libstr.h>

6

7#define RX_BYB_URL "https://playerservices.streamtheworld.com/api/livestream?station=BYB_RADIO&transports=http%2Chls&version=1.10&request.preventCache=1735994936887"

8

9size_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}

15

16char *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}