{"id":18074389,"url":"https://github.com/headwinds/loomradio","last_synced_at":"2025-09-04T02:34:05.912Z","repository":{"id":43813762,"uuid":"193386819","full_name":"headwinds/loomradio","owner":"headwinds","description":"a streaming radio player with metadata and google search built on react-player","archived":false,"fork":false,"pushed_at":"2023-01-06T01:55:17.000Z","size":4424,"stargazers_count":5,"open_issues_count":16,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-12T05:52:37.449Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"loomradio.vercel.app","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/headwinds.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-23T19:20:27.000Z","updated_at":"2023-07-10T14:58:48.000Z","dependencies_parsed_at":"2023-02-05T02:16:47.768Z","dependency_job_id":null,"html_url":"https://github.com/headwinds/loomradio","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/headwinds/loomradio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/headwinds%2Floomradio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/headwinds%2Floomradio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/headwinds%2Floomradio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/headwinds%2Floomradio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/headwinds","download_url":"https://codeload.github.com/headwinds/loomradio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/headwinds%2Floomradio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273542160,"owners_count":25124107,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-31T10:12:28.411Z","updated_at":"2025-09-04T02:34:05.857Z","avatar_url":"https://github.com/headwinds.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Loom Radio\n\nAfter discovering [React-Player](https://cookpete.com/react-player/), I wanted to strip it down to play shoutcast streams so that I could stream and switch between my favourite radio stations [bassdrive](http://www.basedrive.com) and [cbc radio](https://www.cbc.ca/radio/includes/stream.html).\n\nI wanted to make React Player easy to deploy with [now](https://zeit.co/now) and thus ported it into a simple create react app so I wouldn't have to worry about webpack config. I added [icecast-parse](https://www.npmjs.com/package/icecast-parser) so that I could see the current show title. Then I thought it would be nice to throw that title into a google search.\n\n[loomradio.now.sh](https://loomradio.now.sh/)\n\n#### Getting Started\n\n```\nyarn\nyarn start\n```\n\n#### Styles\n\nsee styles \u003e LoomRadio.css\n\n#### Google Search\n\nsign up for a free [google search](https://developers.google.com/custom-search/v1/overview) API which gives 100 searches per day.\n\nfind src \u003e config_sample.js and rename it to config.js - add your google API key to this file.\n\n## Pusher \n\nI want to see who is connected to various channels and track usage over time. While I'd prefer to use Socket.io, I couldn't find a decent way to install it on Zeit and didn't want to host with Heroku so I used the [Pusher](https://www.pusher.com) service instead to create the socket as a service. \n\n#### Deply to Zeit\n\n```\nnow\n```\n\n#### CBC Radio Schedules \n\nSince the stream meta is not available, could I scrape the schedules instead and display the show based on the current time?\n\nhttps://www.cbc.ca/m/touch/pg-r1.html\n\nTODO - Create a beautiful soup service\n\n\n#### Credit \n* [Create React App](https://github.com/facebook/create-react-app)\n* [React-Player](https://cookpete.com/react-player/)\n* [icecast-parse](https://www.npmjs.com/package/icecast-parser)\n* [google search](https://developers.google.com/custom-search/v1/overview)\n* [loom](https://www.eurogamer.net/articles/2015-04-26-remembering-loom-the-game-designed-to-be-completed)\n* [observable music viz](https://observablehq.com/@alandelip/music-viz)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheadwinds%2Floomradio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheadwinds%2Floomradio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheadwinds%2Floomradio/lists"}