├── .gitignore ├── README.md ├── TODOS.md ├── data ├── archived │ ├── lookups │ │ └── state-codes.csv │ └── samples │ │ └── npr-stations-api.json ├── collected │ └── npr-stations │ │ ├── AK.json │ │ ├── AL.json │ │ ├── AR.json │ │ ├── AZ.json │ │ ├── CA.json │ │ ├── CO.json │ │ ├── CT.json │ │ ├── DC.json │ │ ├── DE.json │ │ ├── FL.json │ │ ├── GA.json │ │ ├── HI.json │ │ ├── IA.json │ │ ├── ID.json │ │ ├── IL.json │ │ ├── IN.json │ │ ├── KS.json │ │ ├── KY.json │ │ ├── LA.json │ │ ├── MA.json │ │ ├── MD.json │ │ ├── ME.json │ │ ├── MI.json │ │ ├── MN.json │ │ ├── MO.json │ │ ├── MS.json │ │ ├── MT.json │ │ ├── NC.json │ │ ├── ND.json │ │ ├── NE.json │ │ ├── NH.json │ │ ├── NJ.json │ │ ├── NM.json │ │ ├── NV.json │ │ ├── NY.json │ │ ├── OH.json │ │ ├── OK.json │ │ ├── OR.json │ │ ├── PA.json │ │ ├── RI.json │ │ ├── SC.json │ │ ├── SD.json │ │ ├── TN.json │ │ ├── TX.json │ │ ├── UT.json │ │ ├── VA.json │ │ ├── VT.json │ │ ├── WA.json │ │ ├── WI.json │ │ ├── WV.json │ │ └── WY.json └── compiled │ └── npr-stations.csv └── scripts ├── collect └── collect_npr_stations.py └── compile └── compile_npr_stations.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Dan Nguyen's custom bashfoo 2 | 3 | 4 | # names for data stash folders that shouldn't be committed 5 | _drafts/ 6 | junk/ 7 | zunk/ 8 | ZUNK/ 9 | 10 | # try to prevent the inclusion of credentials 11 | creds/ 12 | creds*.* 13 | passwords/ 14 | apikeys/ 15 | apikey*.* 16 | 17 | # Shouldn't be including compressed files 18 | *.zip 19 | *.gz 20 | 21 | # spreadsheet/db intermediate files 22 | ~$*.xlsx 23 | # libre 24 | .~lock.* 25 | 26 | 27 | 28 | 29 | # OS stuff 30 | .DS_Store 31 | .Trashes 32 | .Spotlight-V100 33 | Thumbs.db 34 | 35 | 36 | # Byte-compiled / optimized / DLL files 37 | __pycache__/ 38 | *.py[cod] 39 | *$py.class 40 | 41 | # C extensions 42 | *.so 43 | 44 | # Distribution / packaging 45 | .Python 46 | build/ 47 | develop-eggs/ 48 | dist/ 49 | downloads/ 50 | eggs/ 51 | .eggs/ 52 | lib/ 53 | lib64/ 54 | parts/ 55 | sdist/ 56 | var/ 57 | wheels/ 58 | *.egg-info/ 59 | .installed.cfg 60 | *.egg 61 | MANIFEST 62 | 63 | # PyInstaller 64 | # Usually these files are written by a python script from a template 65 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 66 | *.manifest 67 | *.spec 68 | .pytest_cache/ 69 | 70 | # Installer logs 71 | pip-log.txt 72 | pip-delete-this-directory.txt 73 | 74 | # Unit test / coverage reports 75 | htmlcov/ 76 | .tox/ 77 | .coverage 78 | .coverage.* 79 | .cache 80 | nosetests.xml 81 | coverage.xml 82 | *.cover 83 | .hypothesis/ 84 | 85 | # Translations 86 | *.mo 87 | *.pot 88 | 89 | # Django stuff: 90 | *.log 91 | .static_storage/ 92 | .media/ 93 | local_settings.py 94 | 95 | # Flask stuff: 96 | instance/ 97 | .webassets-cache 98 | 99 | # Scrapy stuff: 100 | .scrapy 101 | 102 | # Sphinx documentation 103 | docs/_build/ 104 | 105 | # PyBuilder 106 | target/ 107 | 108 | # Jupyter Notebook 109 | .ipynb_checkpoints 110 | 111 | # pyenv 112 | .python-version 113 | 114 | # celery beat schedule file 115 | celerybeat-schedule 116 | 117 | # SageMath parsed files 118 | *.sage.py 119 | 120 | # Environments 121 | .env 122 | .venv 123 | env/ 124 | venv/ 125 | ENV/ 126 | env.bak/ 127 | venv.bak/ 128 | 129 | # Spyder project settings 130 | .spyderproject 131 | .spyproject 132 | 133 | # Rope project settings 134 | .ropeproject 135 | 136 | # mkdocs documentation 137 | /site 138 | 139 | # mypy 140 | .mypy_cache/ 141 | 142 | 143 | # js/svelte stuff 144 | node_modules 145 | public/bundle.* 146 | 147 | # jekyll stuff 148 | _site 149 | .sass-cache 150 | .jekyll-cache 151 | .jekyll-metadata 152 | vendor 153 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Local News Data Project 2 | 3 | #### i.e. a list of all the local news sites in the United States 4 | 5 | how easy is it to gather all the local news sites in the U.S.? Extremely hard I bet but I'm going to sketch some thoughts out while this [tweet complaint](https://twitter.com/skonradb/status/1257701147068043264) about the incompleteness of [NYT's World Press Freedom local news database](https://twitter.com/nytimes/status/1256987337726271488) is fresh in my mind. 6 | 7 | 8 | 9 | ## Criteria for inclusion 10 | 11 | - Must have a website and URL (for now) 12 | - Must specialize in original content for a specified geographic entity, e.g. *not* the New York Times, Bloomberg, ESPN, etc. 13 | - More original content than syndicated 14 | - Publish at least biweekly 15 | - Bylined original content 16 | - At least 1 editor and 1 reporter living in/near the geographic coverage area 17 | - Not a [web of content farms](https://www.nytimes.com/2019/10/21/us/michigan-metric-media-news.html) 18 | - Part of an established distributed platform like Patch, Chalkbeat, SBNation(?) 19 | 20 | ## Data to capture 21 | 22 | - name 23 | - state (primary market) 24 | - city (metro area, mailing address) 25 | - motto/tagline 26 | - description 27 | - mailing zipcode (just for reference) 28 | - url 29 | - RSS feed? 30 | - wikipedia 31 | - specific geographical entities (e.g. Atlanta metro area) 32 | - owner/conglomerate 33 | - ownership type (private/public, ["investment company"](https://www.usnewsdeserts.com/methodology/)) 34 | - funding model 35 | - approx date established 36 | - approx circulation 37 | - publishing_frequency 38 | - paywall/subscription model, etc. 39 | - pivotal_operating_events, e.g. LAT bought from Tronc, Village Voice and LA Weekly gutted, Advance Media cutting daily print 40 | - current_operating_status, e.g. "OK" to "zombie storefront for other news org" e.g. [Rocky Mountain News](https://rockymountainnews.com/) 41 | - major awards 42 | 43 | 44 | ## TODO/lo-hanging-fruit 45 | 46 | - Public radio 47 | - iterate through this API: https://www.npr.org/stations/ 48 | - Big Chain newspapers: 49 | - Gannett/Gatehouse https://www.niemanlab.org/2019/12/newsonomics-this-is-how-the-5-biggest-newspaper-chains-could-become-2-and-it-all-comes-down-to-one-day-june-30-2020/ 50 | - McClatchy 51 | - TRONC 52 | - Lee 53 | - Advance https://en.wikipedia.org/wiki/List_of_Advance_subsidiaries 54 | - Distributed platforms 55 | - Patch 56 | - Chalkbeat (education) 57 | - TV affiliates 58 | - Digital independents and orgs 59 | - Texas Tribune 60 | - ProPublica IL 61 | - Berkeleyside 62 | - Oakland: https://www.berkeleyside.com/oakland/ 63 | - The Tyler Loop https://thetylerloop.com/ 64 | - Collegiate papers 65 | - Independents (Stanford Daily, Maneater) 66 | - j-school (Peninsula Press, Columbia Missourian) 67 | 68 | ## References 69 | 70 | ### Studies 71 | 72 | - [The topography of local news: A new map (New Jersey, 2020)](https://www.cjr.org/tow_center/local-news-map-topography-new-jersey.php) 73 | - Montclair State University News Ecosystems: https://newsecosystems.org/ 74 | - https://twitter.com/jbenton/status/1255641899504939008 75 | - The Expanding News Desert (2016-2018) https://www.usnewsdeserts.com/ 76 | - https://twitter.com/jbenton/status/1052992555586084864 77 | - https://www.usnewsdeserts.com/methodology/ 78 | - [Pew Research 2005: Local News in a Digital Age](https://www.journalism.org/2015/03/05/local-news-in-a-digital-age/): an in-depth study and survey of the news ecosystems and consumers in 3 specific cities: Denver, Macon, and Sioux City 79 | - https://twitter.com/JesseHolcomb/status/1257732800125571072 80 | 81 | 82 | ### Articles 83 | 84 | - [When the Student Newspaper Is the Only Daily Paper in Town](https://www.nytimes.com/2019/10/19/us/news-desert-ann-arbor-michigan.html) 85 | - [Dozens of new websites appear to be Michigan local news outlets, but with political bent](https://www.lansingstatejournal.com/story/news/local/2019/10/21/lansing-sun-new-sites-michigan-local-news-outlets/3984689002/) 86 | - [Mimicking Local News, a Network of Michigan Websites Pushes Politics](https://www.nytimes.com/2019/10/21/us/michigan-metric-media-news.html) 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /TODOS.md: -------------------------------------------------------------------------------- 1 | # TODOS 2 | 3 | 4 | scripts/compile/compile_npr_stations.py 5 | 6 | - probably should be a wrangle script 7 | - do a simple join of JSON data and output JSON for compile step 8 | - in wrangle step, filter out music stations 9 | - are there any NPR affiliates not associated with a state? 10 | -------------------------------------------------------------------------------- /data/archived/lookups/state-codes.csv: -------------------------------------------------------------------------------- 1 | name,ap,usps,fips,is_state 2 | Alabama,Ala.,AL,01,TRUE 3 | Alaska,Alaska,AK,02,TRUE 4 | American Samoa,,AS,60,FALSE 5 | Arizona,Ariz.,AZ,04,TRUE 6 | Arkansas,Ark.,AR,05,TRUE 7 | California,Calif.,CA,06,TRUE 8 | Colorado,Colo.,CO,08,TRUE 9 | Connecticut,Conn.,CT,09,TRUE 10 | Delaware,Del.,DE,10,TRUE 11 | District of Columbia,D.C.,DC,11,FALSE 12 | Florida,Fla.,FL,12,TRUE 13 | Georgia,Ga.,GA,13,TRUE 14 | Guam,,GU,66,FALSE 15 | Hawaii,Hawaii,HI,15,TRUE 16 | Idaho,Idaho,ID,16,TRUE 17 | Illinois,Ill.,IL,17,TRUE 18 | Indiana,Ind.,IN,18,TRUE 19 | Iowa,Iowa,IA,19,TRUE 20 | Kansas,Kan.,KS,20,TRUE 21 | Kentucky,Ky.,KY,21,TRUE 22 | Louisiana,La.,LA,22,TRUE 23 | Maine,Maine,ME,23,TRUE 24 | Maryland,Md.,MD,24,TRUE 25 | Massachusetts,Mass.,MA,25,TRUE 26 | Michigan,Mich.,MI,26,TRUE 27 | Minnesota,Minn.,MN,27,TRUE 28 | Mississippi,Miss.,MS,28,TRUE 29 | Missouri,Mo.,MO,29,TRUE 30 | Montana,Mont.,MT,30,TRUE 31 | Nebraska,Neb.,NE,31,TRUE 32 | Nevada,Nev.,NV,32,TRUE 33 | New Hampshire,N.H.,NH,33,TRUE 34 | New Jersey,N.J.,NJ,34,TRUE 35 | New Mexico,N.M.,NM,35,TRUE 36 | New York,N.Y.,NY,36,TRUE 37 | North Carolina,N.C.,NC,37,TRUE 38 | North Dakota,N.D.,ND,38,TRUE 39 | Northern Mariana Islands,,MP,69,FALSE 40 | Ohio,Ohio,OH,39,TRUE 41 | Oklahoma,Okla.,OK,40,TRUE 42 | Oregon,Ore.,OR,41,TRUE 43 | Pennsylvania,Pa.,PA,42,TRUE 44 | Puerto Rico,,PR,72,FALSE 45 | Rhode Island,R.I.,RI,44,TRUE 46 | South Carolina,S.C.,SC,45,TRUE 47 | South Dakota,S.D.,SD,46,TRUE 48 | Tennessee,Tenn.,TN,47,TRUE 49 | Texas,Texas,TX,48,TRUE 50 | Utah,Utah,UT,49,TRUE 51 | Vermont,Vt.,VT,50,TRUE 52 | Virginia,Va.,VA,51,TRUE 53 | Virgin Islands,Wash.,VI,78,FALSE 54 | Washington,W.Va.,WA,53,TRUE 55 | West Virginia,Wis.,WV,54,TRUE 56 | Wisconsin,Wyo.,WI,55,TRUE 57 | Wyoming,,WY,56,TRUE 58 | -------------------------------------------------------------------------------- /data/collected/npr-stations/CT.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "CT" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/547", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wnpr-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "547", 26 | "network": { 27 | "name": "Connecticut Public Radio", 28 | "inheritingFrom": "546", 29 | "usesInheritance": true, 30 | "currentOrgId": "547", 31 | "tier1": { 32 | "name": "Connecticut Public Radio", 33 | "id": "546", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "WNPR-FM", 39 | "id": "547", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "WEDW-FM", 44 | "id": "548", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "WPKT-FM", 49 | "id": "549", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "WRLI-FM", 54 | "id": "550", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "WECS-FM", 59 | "id": "1077", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "WVOF-FM", 64 | "id": "1157", 65 | "usesInheritance": true 66 | } 67 | ] 68 | } 69 | ] 70 | } 71 | }, 72 | "newscast": { 73 | "id": "546", 74 | "recency": 240 75 | }, 76 | "guid": "4fcf70111acd4f39ae7f81f177796624", 77 | "brand": { 78 | "band": "FM", 79 | "call": "WNPR", 80 | "frequency": "90.5", 81 | "marketCity": "Meriden", 82 | "marketState": "CT", 83 | "name": "Connecticut Public Radio", 84 | "tagline": "Media for the curious." 85 | }, 86 | "streamsV2": [ 87 | { 88 | "urls": [ 89 | { 90 | "typeName": "Audio MP3 Stream", 91 | "guid": "37ebc1aaf61f476898d1f3f25e264ba5", 92 | "typeId": "10", 93 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WNPRFM.mp3" 94 | } 95 | ], 96 | "guid": "4fcf71560d524fd08e6a34685d3fbe6e", 97 | "title": "WNPR", 98 | "primary": true 99 | } 100 | ] 101 | }, 102 | "items": [], 103 | "links": { 104 | "brand": [ 105 | { 106 | "rel": "homepage", 107 | "href": "http://wnpr.org", 108 | "content-type": "text/html" 109 | }, 110 | { 111 | "rel": "logo", 112 | "href": "https://media.npr.org/images/stations/nprone_logos/wnpr.png", 113 | "content-type": "image/png" 114 | }, 115 | { 116 | "rel": "small-logo", 117 | "href": "https://media.npr.org/images/stations/logos/wnpr.gif", 118 | "content-type": "image/gif" 119 | }, 120 | { 121 | "rel": "station-message-audio", 122 | "href": "https://ondemand.npr.org/npr-mp4/message/546_99115e465222e01e8d20b3f17764e5ee.mp4", 123 | "content-type": "audio/aac" 124 | }, 125 | { 126 | "rel": "station-message-audio", 127 | "href": "https://ondemand.npr.org/npr-mp4/message/546_69242893737bf7562fcf548886d7d86d.mp4?1499354878187", 128 | "content-type": "audio/aac" 129 | }, 130 | { 131 | "rel": "station-message-audio", 132 | "href": "https://ondemand.npr.org/npr-mp4/message/546_239ec67d4fb047ca479d04abebd50cc2.mp4", 133 | "content-type": "audio/aac" 134 | }, 135 | { 136 | "rel": "station-message-audio", 137 | "href": "https://ondemand.npr.org/npr-mp4/message/546_ed0ebce54ea228aa444d5663d64daace.mp4", 138 | "content-type": "audio/aac" 139 | }, 140 | { 141 | "rel": "station-message-audio", 142 | "href": "https://ondemand.npr.org/npr-mp4/message/546_a0b98f24c67bad7c2b34d2bd484975ef.mp4?1499354555154", 143 | "content-type": "audio/aac" 144 | }, 145 | { 146 | "rel": "station-message-audio", 147 | "href": "https://ondemand.npr.org/npr-mp4/message/546_3fad0dfb02d8df3db1a5303044dcbcc9.mp4", 148 | "content-type": "audio/aac" 149 | }, 150 | { 151 | "rel": "station-message-audio", 152 | "href": "https://ondemand.npr.org/npr-mp4/message/546_184ef1b0aa38e3dbf4a4d125c4bcf2a8.mp4", 153 | "content-type": "audio/aac" 154 | }, 155 | { 156 | "rel": "hello-id-audio", 157 | "href": "https://ondemand.npr.org/npr-mp4/stationid/546_a6889e8b85e84be0c2fd9fbf2ce7ba4c.mp4", 158 | "content-type": "audio/aac" 159 | }, 160 | { 161 | "rel": "hello-id-audio", 162 | "href": "https://ondemand.npr.org/npr-mp4/stationid/546_b56fa56a5e43932bcb3ee88e2ea560e6.mp4", 163 | "content-type": "audio/aac" 164 | }, 165 | { 166 | "rel": "hello-id-audio", 167 | "href": "https://ondemand.npr.org/npr-mp4/stationid/546_5c03d7779dbbb19aafc0f40147c67ab8.mp4", 168 | "content-type": "audio/aac" 169 | }, 170 | { 171 | "rel": "hello-id-audio", 172 | "href": "https://ondemand.npr.org/npr-mp4/stationid/546_a4faa7944fc825ca0833f6cc7cec5f79.mp4", 173 | "content-type": "audio/aac" 174 | }, 175 | { 176 | "rel": "facebook", 177 | "href": "https://www.facebook.com/WNPRNews", 178 | "content-type": "text/html" 179 | }, 180 | { 181 | "rel": "twitter", 182 | "href": "https://twitter.com/wnpr", 183 | "content-type": "text/html" 184 | } 185 | ], 186 | "streams": [ 187 | { 188 | "guid": "37ebc1aaf61f476898d1f3f25e264ba5", 189 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WNPRFM.mp3", 190 | "isPrimaryStream": true, 191 | "title": "WNPR", 192 | "typeId": "10", 193 | "typeName": "Audio MP3 Stream" 194 | } 195 | ], 196 | "podcasts": [ 197 | { 198 | "guid": "37c699d30cde41418e09cf487d562e55", 199 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/ffd16754-9f56-4929-b5a9-a707010871e1/725c03dc-cc3b-4cb7-8226-a707010871ea/podcast.rss", 200 | "title": "Faith Middleton Food Schmooze", 201 | "typeId": "9", 202 | "typeName": "Podcast" 203 | }, 204 | { 205 | "guid": "da5dcf0c3729415d826975e51ddfdb88", 206 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/f7efad51-a088-437f-919d-a893011d06ab/4e6b3f56-90a8-4eb4-b734-a89301287cc0/podcast.rss", 207 | "title": "Extra Credit", 208 | "typeId": "9", 209 | "typeName": "Podcast" 210 | }, 211 | { 212 | "guid": "07a5b9700fd44190a01ace9b5daaada7", 213 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/71dc4a0f-e8ca-4021-aec9-aa030026042d/b695cb87-f6a9-4c76-8f11-aa030026043b/podcast.rss", 214 | "title": "The Colin McEnroe Show", 215 | "typeId": "9", 216 | "typeName": "Podcast" 217 | }, 218 | { 219 | "guid": "84cc0543f1d142f099008b718b0c6011", 220 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/eacb4e2f-1b3b-4a2d-a3f7-a9fb00618620/1580ec4b-de35-48fe-95b6-a9fb00618620/podcast.rss", 221 | "title": "Where We Live", 222 | "typeId": "9", 223 | "typeName": "Podcast" 224 | }, 225 | { 226 | "guid": "b1c84ba1350048bd9e0b8fe40becd2c8", 227 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/253f0668-0463-4ab4-8eb3-a9fb004c97e7/095040de-af32-45ce-990f-a9fb004c97f5/podcast.rss", 228 | "title": "The Wheelhouse", 229 | "typeId": "9", 230 | "typeName": "Podcast" 231 | }, 232 | { 233 | "guid": "cdfa26437e0d4575a1cce8f85a729d8b", 234 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/6776aa14-61df-4f78-bda7-a953010b8526/df805e57-fe15-4b3c-b5f6-a953010b852a/podcast.rss", 235 | "title": "The Second First Season", 236 | "typeId": "9", 237 | "typeName": "Podcast" 238 | }, 239 | { 240 | "guid": "22853dd4bdea4e7a8eb3dc26788245e0", 241 | "href": "https://feeds.wnpr.org/next", 242 | "title": "NEXT", 243 | "typeId": "9", 244 | "typeName": "Podcast" 245 | }, 246 | { 247 | "guid": "351e60b0c1aa4f35bdf3959d96a3832c", 248 | "href": "https://feeds.wnpr.org/radius", 249 | "title": "The Radius Project", 250 | "typeId": "9", 251 | "typeName": "Podcast" 252 | }, 253 | { 254 | "guid": "d79e54af1b66478d88d879762ab91be5", 255 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/7b664a92-b7c6-49e5-80d1-ab1901584e92/68155972-f82c-43d6-88a8-ab19015aed52/podcast.rss", 256 | "title": "Pardon Me \u2013 Another Damn Impeachment Show", 257 | "typeId": "9", 258 | "typeName": "Podcast" 259 | }, 260 | { 261 | "guid": "c6a2654eba1c4964bb5517cdd09c56a9", 262 | "href": "https://www.omnycontent.com/d/playlist/ac0be969-d7df-460c-a66c-a6f900e1ebd1/a9da3866-a00c-4c01-92ac-ab9100d9ea79/10c78da3-7fc3-48ee-b8ad-ab9100e0bb2f/podcast.rss", 263 | "title": "Us. In The Time Of Coronavirus", 264 | "typeId": "9", 265 | "typeName": "Podcast" 266 | } 267 | ], 268 | "donation": [ 269 | { 270 | "guid": "74709cd013424a1095e14026051c407d", 271 | "href": "https://www.pledgecart.org/pledgeCart3/?campaign=95A53710-3B90-4899-80C1-6EECECF0F446&source=ASW0000WBNPR", 272 | "title": "Support WNPR News", 273 | "typeId": "4", 274 | "typeName": "Pledge Page" 275 | }, 276 | { 277 | "guid": "ecbb7a479a4e48d8a5b6d1d88578a957", 278 | "href": "https://www.pledgecart.org/pledgeCart3/?campaign=C5FC9CB6-53BB-4A75-9BBF-13D5827F40BE&source=", 279 | "title": "Support WNPR News", 280 | "typeId": "27", 281 | "typeName": "Station NPR One Pledge Page" 282 | }, 283 | { 284 | "guid": "e869f01548fa4b50a27089cede98bd1d", 285 | "href": "https://ondemand.npr.org/npr-mp4/donation/546_54f10b461fbf44f1905637f95800418d.mp4", 286 | "title": "PS science donation ask", 287 | "typeId": "28", 288 | "typeName": "Station Pledge Audio" 289 | }, 290 | { 291 | "guid": "5dc4cc48a93945078554d17a30e9614c", 292 | "href": "https://ondemand.npr.org/npr-mp4/donation/546_b1e9149d8667e88f1780d55c8f93d4bb.mp4", 293 | "title": null, 294 | "typeId": "28", 295 | "typeName": "Station Pledge Audio" 296 | } 297 | ] 298 | }, 299 | "errors": [] 300 | }, 301 | { 302 | "version": "1.0", 303 | "href": "https://api.npr.org/stationfinder/v3/stations/611", 304 | "attributes": { 305 | "eligibility": { 306 | "localization": "Show everywhere", 307 | "nprOne": true, 308 | "format": "", 309 | "status": "1", 310 | "musicOnly": false 311 | }, 312 | "programFeeds": [ 313 | { 314 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wshu-fm.rss", 315 | "programId": "morningedition" 316 | } 317 | ], 318 | "orgId": "611", 319 | "network": { 320 | "name": "WSHU", 321 | "inheritingFrom": "610", 322 | "usesInheritance": true, 323 | "currentOrgId": "611", 324 | "tier1": { 325 | "name": "WSHU Public Radio Group", 326 | "id": "610", 327 | "usesInheritance": false, 328 | "status": "10", 329 | "tier2": [ 330 | { 331 | "name": "WSHU-FM", 332 | "id": "611", 333 | "usesInheritance": true, 334 | "tier3": [ 335 | { 336 | "name": "WSHU-AM", 337 | "id": "612", 338 | "usesInheritance": true 339 | }, 340 | { 341 | "name": "WSUF-FM", 342 | "id": "613", 343 | "usesInheritance": true 344 | }, 345 | { 346 | "name": "WESU-FM", 347 | "id": "933", 348 | "usesInheritance": true 349 | }, 350 | { 351 | "name": "WQQQ-FM", 352 | "id": "1213", 353 | "usesInheritance": true 354 | } 355 | ] 356 | }, 357 | { 358 | "name": "WYBC-AM", 359 | "id": "1215", 360 | "usesInheritance": true 361 | } 362 | ] 363 | } 364 | }, 365 | "newscast": { 366 | "id": "610", 367 | "recency": 120 368 | }, 369 | "guid": "4fcf701202614ba3a85034c5448af493", 370 | "brand": { 371 | "band": "FM", 372 | "call": "WSHU", 373 | "frequency": "91.1", 374 | "marketCity": "Fairfield", 375 | "marketState": "CT", 376 | "name": "WSHU", 377 | "tagline": "NPR News and Classical Music" 378 | }, 379 | "streamsV2": [ 380 | { 381 | "urls": [ 382 | { 383 | "typeName": "Audio MP3 Stream", 384 | "guid": "6e50057c250248f1b5deb844899581b6", 385 | "typeId": "10", 386 | "href": "https://wshu-iad.streamguys1.com/wshu-classical" 387 | } 388 | ], 389 | "guid": "0d27ef132036461e96973c2e3a141505", 390 | "title": "WSHU All Classical", 391 | "primary": false 392 | }, 393 | { 394 | "urls": [ 395 | { 396 | "typeName": "Audio MP3 Stream", 397 | "guid": "2a2692864ff446778636c17b19ca18e7", 398 | "typeId": "10", 399 | "href": "https://wshu-iad.streamguys1.com/wshu-air" 400 | } 401 | ], 402 | "guid": "4fcf71520b084a46bce1a326b90e76fa", 403 | "title": "WSHU News & Classical", 404 | "primary": false 405 | }, 406 | { 407 | "urls": [ 408 | { 409 | "typeName": "Audio MP3 Stream", 410 | "guid": "e0a20c452a774bbfbd8ce6294de4dd9c", 411 | "typeId": "10", 412 | "href": "https://wshu-iad.streamguys1.com/wshu-news" 413 | } 414 | ], 415 | "guid": "4fcf7152115f441fa7192bac337f0e89", 416 | "title": "WSHU News & Talk", 417 | "primary": true 418 | } 419 | ] 420 | }, 421 | "items": [], 422 | "links": { 423 | "brand": [ 424 | { 425 | "rel": "homepage", 426 | "href": "http://www.wshu.org/", 427 | "content-type": "text/html" 428 | }, 429 | { 430 | "rel": "logo", 431 | "href": "https://media.npr.org/images/stations/nprone_logos/wshu.png", 432 | "content-type": "image/png" 433 | }, 434 | { 435 | "rel": "small-logo", 436 | "href": "https://media.npr.org/images/stations/logos/wshu.gif", 437 | "content-type": "image/gif" 438 | }, 439 | { 440 | "rel": "hello-id-audio", 441 | "href": "https://ondemand.npr.org/npr-mp4/stationid/610_2308bc202f79f9173745b4f14b52e7e9.mp4", 442 | "content-type": "audio/aac" 443 | }, 444 | { 445 | "rel": "facebook", 446 | "href": "http://www.facebook.com/WSHUpublicradio", 447 | "content-type": "text/html" 448 | } 449 | ], 450 | "streams": [ 451 | { 452 | "guid": "6e50057c250248f1b5deb844899581b6", 453 | "href": "https://wshu-iad.streamguys1.com/wshu-classical", 454 | "isPrimaryStream": false, 455 | "title": "WSHU All Classical", 456 | "typeId": "10", 457 | "typeName": "Audio MP3 Stream" 458 | }, 459 | { 460 | "guid": "2a2692864ff446778636c17b19ca18e7", 461 | "href": "https://wshu-iad.streamguys1.com/wshu-air", 462 | "isPrimaryStream": false, 463 | "title": "WSHU News & Classical", 464 | "typeId": "10", 465 | "typeName": "Audio MP3 Stream" 466 | }, 467 | { 468 | "guid": "e0a20c452a774bbfbd8ce6294de4dd9c", 469 | "href": "https://wshu-iad.streamguys1.com/wshu-news", 470 | "isPrimaryStream": true, 471 | "title": "WSHU News & Talk", 472 | "typeId": "10", 473 | "typeName": "Audio MP3 Stream" 474 | } 475 | ], 476 | "podcasts": [ 477 | { 478 | "guid": "e340b27384af4a619225ab82601689d0", 479 | "href": "https://wshu.drupal.publicbroadcasting.net/podcasts/3635/rss.xml", 480 | "title": "A Few Well Chosen Words", 481 | "typeId": "9", 482 | "typeName": "Podcast" 483 | }, 484 | { 485 | "guid": "49c1121500914b8ead151bada1a724f1", 486 | "href": "https://wshu.drupal.publicbroadcasting.net/podcasts/43023/rss.xml", 487 | "title": "Music Respawn", 488 | "typeId": "9", 489 | "typeName": "Podcast" 490 | }, 491 | { 492 | "guid": "88c13d7dd8f54b08b7b6651e3a7f2b71", 493 | "href": "https://wshu.drupal.publicbroadcasting.net/podcasts/111022/rss.xml", 494 | "title": "C19", 495 | "typeId": "9", 496 | "typeName": "Podcast" 497 | }, 498 | { 499 | "guid": "52ff70d6e205429289eae68b82a2f47a", 500 | "href": "https://wshu.drupal.publicbroadcasting.net/podcasts/73459/rss.xml", 501 | "title": "Off the Path from New York to Boston", 502 | "typeId": "9", 503 | "typeName": "Podcast" 504 | }, 505 | { 506 | "guid": "9e99ff93c8724570bec1a78609118b8f", 507 | "href": "https://wshu.drupal.publicbroadcasting.net/podcasts/72027/rss.xml", 508 | "title": "Baum on Books", 509 | "typeId": "9", 510 | "typeName": "Podcast" 511 | }, 512 | { 513 | "guid": "37c8a5302f3243ea8a562361d65dc157", 514 | "href": "https://wshu.drupal.publicbroadcasting.net/podcasts/90603/rss.xml", 515 | "title": "The Full Story", 516 | "typeId": "9", 517 | "typeName": "Podcast" 518 | }, 519 | { 520 | "guid": "5fdaafdf1ebe40fb98671fa1b133e4ed", 521 | "href": "https://sundaybaroque.org/podcasts/podcasts.xml", 522 | "title": "Sunday Baroque Conversations", 523 | "typeId": "9", 524 | "typeName": "Podcast" 525 | } 526 | ], 527 | "donation": [ 528 | { 529 | "guid": "51bd47061a9f4881a0cdc0b8f172f75f", 530 | "href": "https://www.pledgecart.org/pledgeCart3/?campaign=AEF72C98-4288-41E3-82D1-5553FDD1A4AE&source=P1912NPR#/home", 531 | "title": "How to Donate", 532 | "typeId": "4", 533 | "typeName": "Pledge Page" 534 | }, 535 | { 536 | "guid": "25888f78086340bb812250429af9a3ac", 537 | "href": "https://www.pledgecart.org/pledgeCart3/?campaign=AEF72C98-4288-41E3-82D1-5553FDD1A4AE&source=P1912NPR#/home", 538 | "title": "How to Donate", 539 | "typeId": "27", 540 | "typeName": "Station NPR One Pledge Page" 541 | } 542 | ] 543 | }, 544 | "errors": [] 545 | }, 546 | { 547 | "version": "1.0", 548 | "href": "https://api.npr.org/stationfinder/v3/stations/1072", 549 | "attributes": { 550 | "newscast": { 551 | "id": "1072", 552 | "recency": 120 553 | }, 554 | "eligibility": { 555 | "localization": "Show everywhere", 556 | "nprOne": true, 557 | "format": "Public Radio", 558 | "status": "1", 559 | "musicOnly": false 560 | }, 561 | "guid": "4fcf701413ac4c879a741904a58ff693", 562 | "brand": { 563 | "band": "FM", 564 | "call": "WHDD", 565 | "frequency": "91.9", 566 | "marketCity": "Sharon", 567 | "marketState": "CT", 568 | "name": "WHDD", 569 | "tagline": "Robin Hood Radio" 570 | }, 571 | "orgId": "1072", 572 | "network": { 573 | "inheritingFrom": "1072", 574 | "usesInheritance": false, 575 | "currentOrgId": "1072", 576 | "tier1": { 577 | "name": "WHDD-FM", 578 | "id": "1072", 579 | "usesInheritance": false, 580 | "status": "1", 581 | "tier2": [ 582 | { 583 | "name": "WHDD-AM", 584 | "id": "1073", 585 | "usesInheritance": true 586 | }, 587 | { 588 | "name": "WBSL-FM", 589 | "id": "1095", 590 | "usesInheritance": true 591 | }, 592 | { 593 | "name": "WLHV-FM", 594 | "id": "1359", 595 | "usesInheritance": true 596 | } 597 | ] 598 | } 599 | } 600 | }, 601 | "items": [], 602 | "links": { 603 | "brand": [ 604 | { 605 | "rel": "homepage", 606 | "href": "https://robinhoodradio.com", 607 | "content-type": "text/html" 608 | }, 609 | { 610 | "rel": "small-logo", 611 | "href": "https://media.npr.org/images/stations/logos/whdd_fm.gif", 612 | "content-type": "image/gif" 613 | }, 614 | { 615 | "rel": "hello-id-audio", 616 | "href": "https://ondemand.npr.org/npr-mp4/stationid/1072.mp4", 617 | "content-type": "audio/aac" 618 | }, 619 | { 620 | "rel": "facebook", 621 | "href": "http://www.facebook.com/pages/WHDD-robinhoodradiocom/101953475811", 622 | "content-type": "text/html" 623 | }, 624 | { 625 | "rel": "twitter", 626 | "href": "https://twitter.com/whdd", 627 | "content-type": "text/html" 628 | } 629 | ], 630 | "donation": [ 631 | { 632 | "guid": "b59c2a7f4ab240d6a9aece0f7b7612f2", 633 | "href": "http://www.robinhoodradio.com/donate.html", 634 | "title": "Support", 635 | "typeId": "4", 636 | "typeName": "Pledge Page" 637 | }, 638 | { 639 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/1072.mp4", 640 | "typeId": "29", 641 | "typeName": "Station Thank You Audio" 642 | } 643 | ] 644 | }, 645 | "errors": [] 646 | } 647 | ], 648 | "links": {}, 649 | "errors": [] 650 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/DC.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "DC" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/305", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "Public Radio", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wamu-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "305", 26 | "network": { 27 | "inheritingFrom": "305", 28 | "usesInheritance": false, 29 | "currentOrgId": "305", 30 | "tier1": { 31 | "name": "WAMU-FM", 32 | "id": "305", 33 | "usesInheritance": false, 34 | "status": "1", 35 | "tier2": [ 36 | { 37 | "name": "WRAU-FM", 38 | "id": "1162", 39 | "usesInheritance": true 40 | } 41 | ] 42 | } 43 | }, 44 | "newscast": { 45 | "id": "305", 46 | "recency": 360 47 | }, 48 | "guid": "4fcf701003f74f83946fc90857d03ef8", 49 | "brand": { 50 | "band": "FM", 51 | "call": "WAMU", 52 | "frequency": "88.5", 53 | "marketCity": "Washington", 54 | "marketState": "DC", 55 | "name": "WAMU 88.5", 56 | "tagline": "" 57 | }, 58 | "streamsV2": [ 59 | { 60 | "urls": [ 61 | { 62 | "typeName": "Audio MP3 Stream", 63 | "guid": "cdd555a05d1e4fe4bcb6f23de62fea13", 64 | "typeId": "10", 65 | "href": "https://static.wamu.org/streams/live/1/live_ssl.pls" 66 | }, 67 | { 68 | "typeName": "Audio AAC Stream", 69 | "guid": "b48940f0091f4c6c91b65bdf06281bc6", 70 | "typeId": "13", 71 | "href": "https://static.wamu.org/streams/live/1/live_aac_ssl.pls" 72 | } 73 | ], 74 | "guid": "4fcf71471a22460b8c99eb9f58fac6ca", 75 | "title": "WAMU 88.5 (HD 88.5-1)", 76 | "primary": true 77 | } 78 | ] 79 | }, 80 | "items": [], 81 | "links": { 82 | "brand": [ 83 | { 84 | "rel": "homepage", 85 | "href": "http://wamu.org", 86 | "content-type": "text/html" 87 | }, 88 | { 89 | "rel": "logo", 90 | "href": "https://media.npr.org/images/stations/nprone_logos/wamu_fm.png", 91 | "content-type": "image/png" 92 | }, 93 | { 94 | "rel": "small-logo", 95 | "href": "https://media.npr.org/images/stations/logos/wamu_fm.gif", 96 | "content-type": "image/gif" 97 | }, 98 | { 99 | "rel": "station-message-audio", 100 | "href": "https://ondemand.npr.org/npr-mp4/message/305_0ebaeb04e8f8d376fe34aa8ab3a2f02b.mp4", 101 | "content-type": "audio/aac" 102 | }, 103 | { 104 | "rel": "station-message-audio", 105 | "href": "https://ondemand.npr.org/npr-mp4/message/305_af61215cc407f283516024d5f828cf3a.mp4", 106 | "content-type": "audio/aac" 107 | }, 108 | { 109 | "rel": "station-message-audio", 110 | "href": "https://ondemand.npr.org/npr-mp4/message/305_a4924814fbbc77c33cb299459e3b9387.mp4", 111 | "content-type": "audio/aac" 112 | }, 113 | { 114 | "rel": "station-message-audio", 115 | "href": "https://ondemand.npr.org/npr-mp4/message/305_1ae975a0ef9f5644bad5c43946902a4f.mp4", 116 | "content-type": "audio/aac" 117 | }, 118 | { 119 | "rel": "station-message-audio", 120 | "href": "https://ondemand.npr.org/npr-mp4/message/305_b47b02018ee90b1602b750589d2174c8.mp4", 121 | "content-type": "audio/aac" 122 | }, 123 | { 124 | "rel": "hello-id-audio", 125 | "href": "https://ondemand.npr.org/npr-mp4/stationid/305.mp4", 126 | "content-type": "audio/aac" 127 | }, 128 | { 129 | "rel": "facebook", 130 | "href": "http://www.facebook.com/wamu885", 131 | "content-type": "text/html" 132 | }, 133 | { 134 | "rel": "twitter", 135 | "href": "http://twitter.com/wamu885", 136 | "content-type": "text/html" 137 | } 138 | ], 139 | "streams": [ 140 | { 141 | "guid": "cdd555a05d1e4fe4bcb6f23de62fea13", 142 | "href": "https://static.wamu.org/streams/live/1/live_ssl.pls", 143 | "isPrimaryStream": true, 144 | "title": "WAMU 88.5 (HD 88.5-1)", 145 | "typeId": "10", 146 | "typeName": "Audio MP3 Stream" 147 | }, 148 | { 149 | "guid": "b48940f0091f4c6c91b65bdf06281bc6", 150 | "href": "https://static.wamu.org/streams/live/1/live_aac_ssl.pls", 151 | "isPrimaryStream": true, 152 | "title": "WAMU 88.5 (HD 88.5-1)", 153 | "typeId": "13", 154 | "typeName": "Audio AAC Stream" 155 | } 156 | ], 157 | "podcasts": [ 158 | { 159 | "guid": "675985eb0b2141c9923749c8bd8c4945", 160 | "href": "https://wamu.org/feed/podcast/unprecedented", 161 | "title": "Unprecedented", 162 | "typeId": "9", 163 | "typeName": "Podcast" 164 | }, 165 | { 166 | "guid": "bfee88ec87b14a63a2799a578fb1aee1", 167 | "href": "https://thekojonnamdishow.org/rss/npr/kn_podcast.php", 168 | "title": "The Kojo Nnamdi Show", 169 | "typeId": "9", 170 | "typeName": "Podcast" 171 | }, 172 | { 173 | "guid": "dbc6f4c500fd4fb2a616b0286f0d73d6", 174 | "href": "https://wamu.org/feed/podcast/dating-while-gray", 175 | "title": "Dating While Gray", 176 | "typeId": "9", 177 | "typeName": "Podcast" 178 | }, 179 | { 180 | "guid": "c930caec4e384e8b87d21c738410a9fd", 181 | "href": "https://thekojonnamdishow.org/rss/npr/kns_dc_politics.xml", 182 | "title": "The Kojo Nnamdi Show: Politics Hour", 183 | "typeId": "9", 184 | "typeName": "Podcast" 185 | }, 186 | { 187 | "guid": "82fb21a0a38b4c9ea8f9b7f16459585b", 188 | "href": "https://dianerehm.org/rss/npr/dr_podcast.xml", 189 | "title": "Diane Rehm: On My Mind", 190 | "typeId": "9", 191 | "typeName": "Podcast" 192 | }, 193 | { 194 | "guid": "38ee12a2be67449f9c689e2e80ce6c9b", 195 | "href": "https://wamu.org/rss/npr/metropocalypse.rss", 196 | "title": "Metropocalypse", 197 | "typeId": "9", 198 | "typeName": "Podcast" 199 | }, 200 | { 201 | "guid": "ff9694108b0d4f49ae39c0fd616b6908", 202 | "href": "https://podshop.libsyn.com/rss", 203 | "title": "The Podshop", 204 | "typeId": "9", 205 | "typeName": "Podcast" 206 | }, 207 | { 208 | "guid": "9ea7820b04bc4ced865ee654e688ff7d", 209 | "href": "https://wamu.org/feed/podcast/whats-with-washington", 210 | "title": "What's With Washington", 211 | "typeId": "9", 212 | "typeName": "Podcast" 213 | }, 214 | { 215 | "guid": "e8be392c6e274a16915b90ef34bc2697", 216 | "href": "https://wamu.org/feed/podcast/dishcity", 217 | "title": "Dish City", 218 | "typeId": "9", 219 | "typeName": "Podcast" 220 | }, 221 | { 222 | "guid": "fd9c8d890ac145be90a39c57c58bb37d", 223 | "href": "https://wamu.org/rss/npr/mobile/wamu_news_podcast.rss", 224 | "title": "Local News from WAMU 88.5", 225 | "typeId": "9", 226 | "typeName": "Podcast" 227 | } 228 | ], 229 | "donation": [ 230 | { 231 | "guid": "d084a56ff1644d33a4a5bcf1c491f68e", 232 | "href": "https://wamu.org/donate/npr", 233 | "title": "Support WAMU", 234 | "typeId": "4", 235 | "typeName": "Pledge Page" 236 | }, 237 | { 238 | "guid": "baffa8f9391849d08335ab672947004d", 239 | "href": "https://wamu.org/donate/npr", 240 | "title": "Support WAMU", 241 | "typeId": "27", 242 | "typeName": "Station NPR One Pledge Page" 243 | }, 244 | { 245 | "guid": "11cbe7694c0d47c2a97973742280216b", 246 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_76864242220cb7300ab379409f880a7d.mp4", 247 | "title": "Jeffrey Katz - Comprehensive Journalism", 248 | "typeId": "28", 249 | "typeName": "Station Pledge Audio" 250 | }, 251 | { 252 | "guid": "f1b28fcfcd6d44c4bc78a517c507b564", 253 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_8b25f907d2e072fc463bdf33c092d945.mp4", 254 | "title": "Kathleen Boyles - NPR One", 255 | "typeId": "28", 256 | "typeName": "Station Pledge Audio" 257 | }, 258 | { 259 | "guid": "8ffc12dd72744ff79015e11cbb8eabf7", 260 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_0d5d4eeec116addb8a2ebbf87b27c329.mp4", 261 | "title": "Eva Sullivan - NPR One", 262 | "typeId": "28", 263 | "typeName": "Station Pledge Audio" 264 | }, 265 | { 266 | "guid": "4dc91f3ff4594b77933b4a42a4335196", 267 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_94862a34a5f672a1f39aa16eb24810db.mp4", 268 | "title": "Kojo Nnamdi - WAMU Mission (NPR One)", 269 | "typeId": "28", 270 | "typeName": "Station Pledge Audio" 271 | }, 272 | { 273 | "guid": "33bdacd25f4d42de8a1e298998bd312a", 274 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_bdbc599654abf5acab87ba794a1f5d17.mp4", 275 | "title": "Tyler Koch - NPR One", 276 | "typeId": "28", 277 | "typeName": "Station Pledge Audio" 278 | }, 279 | { 280 | "guid": "f577cfa5ec994e04a524561d693d5ce4", 281 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_1cec36b6f874c3cd14def6ac850d7dbe.mp4", 282 | "title": "Samantha Powers - NPR One", 283 | "typeId": "28", 284 | "typeName": "Station Pledge Audio" 285 | }, 286 | { 287 | "guid": "95d6abfaca444606a1aae90a1aaff5ae", 288 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_41441acb667fad00b57343fa07b2ba33.mp4", 289 | "title": "Matt McCleskey - CAFB NPR One", 290 | "typeId": "28", 291 | "typeName": "Station Pledge Audio" 292 | }, 293 | { 294 | "guid": "9bff1d4cbec9432587f5f618591884aa", 295 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_b841e4b5b889067aa98a027d9aa62952.mp4", 296 | "title": null, 297 | "typeId": "28", 298 | "typeName": "Station Pledge Audio" 299 | }, 300 | { 301 | "guid": "dda0502616604012b0e345e0caa3b8d6", 302 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_2e75d169294cfa52a26e710317bda63e.mp4?1553528585613", 303 | "title": "Kojo Nnamdi - Your Support (NPR One)", 304 | "typeId": "28", 305 | "typeName": "Station Pledge Audio" 306 | }, 307 | { 308 | "guid": "674a90f4604e40368fee94bbdf9bf1e7", 309 | "href": "https://ondemand.npr.org/npr-mp4/donation/305_ceb921a4ffb6e4a8817ca06ccf20ea0a.mp4", 310 | "title": "Ari Shapiro - Remarkable Times", 311 | "typeId": "28", 312 | "typeName": "Station Pledge Audio" 313 | }, 314 | { 315 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/305.mp4", 316 | "typeId": "29", 317 | "typeName": "Station Thank You Audio" 318 | } 319 | ] 320 | }, 321 | "errors": [] 322 | }, 323 | { 324 | "version": "1.0", 325 | "href": "https://api.npr.org/stationfinder/v3/stations/372", 326 | "attributes": { 327 | "eligibility": { 328 | "localization": "Exclude from news contexts", 329 | "nprOne": false, 330 | "format": "Classical", 331 | "status": "1", 332 | "musicOnly": true 333 | }, 334 | "orgId": "372", 335 | "network": { 336 | "inheritingFrom": "372", 337 | "usesInheritance": false, 338 | "currentOrgId": "372", 339 | "tier1": { 340 | "name": "WETA-FM", 341 | "id": "372", 342 | "usesInheritance": false, 343 | "status": "1", 344 | "tier2": [ 345 | { 346 | "name": "WGMS-FM", 347 | "id": "373", 348 | "usesInheritance": true 349 | } 350 | ] 351 | } 352 | }, 353 | "guid": "4fcf7010141e482db2ff6fe0ffd2e08d", 354 | "brand": { 355 | "band": "FM", 356 | "call": "WETA", 357 | "frequency": "90.9", 358 | "marketCity": "Washington", 359 | "marketState": "DC", 360 | "name": "Classical WETA", 361 | "tagline": "Classical for Washington" 362 | }, 363 | "streamsV2": [ 364 | { 365 | "urls": [ 366 | { 367 | "typeName": "Audio MP3 Stream", 368 | "guid": "3d5ec777e6f7444d9753220b6bd46119", 369 | "typeId": "10", 370 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAVLV.mp3" 371 | }, 372 | { 373 | "typeName": "Audio AAC Stream", 374 | "guid": "b8a233ac5cd74c489280c129a0944b3e", 375 | "typeId": "13", 376 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAVLVAAC.aac" 377 | } 378 | ], 379 | "guid": "c34a5ef8249043a3a5d30b8aa86dd4e9", 380 | "title": "VivaLaVoce", 381 | "primary": false 382 | }, 383 | { 384 | "urls": [ 385 | { 386 | "typeName": "Audio MP3 Stream", 387 | "guid": "dca7de034085424e82085c4cba379e47", 388 | "typeId": "10", 389 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAFM.mp3" 390 | }, 391 | { 392 | "typeName": "Audio AAC Stream", 393 | "guid": "7b0415f6633140279f5131a1e8f0cdab", 394 | "typeId": "13", 395 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAFMAAC.aac" 396 | } 397 | ], 398 | "guid": "808eb32aba46479dad9f0a953c4a7084", 399 | "title": "Classical WETA", 400 | "primary": true 401 | } 402 | ] 403 | }, 404 | "items": [], 405 | "links": { 406 | "brand": [ 407 | { 408 | "rel": "homepage", 409 | "href": "https://weta.org", 410 | "content-type": "text/html" 411 | }, 412 | { 413 | "rel": "logo", 414 | "href": "https://media.npr.org/images/stations/nprone_logos/weta_fm.png", 415 | "content-type": "image/png" 416 | }, 417 | { 418 | "rel": "small-logo", 419 | "href": "https://media.npr.org/images/stations/logos/weta_fm.gif", 420 | "content-type": "image/gif" 421 | }, 422 | { 423 | "rel": "hello-id-audio", 424 | "href": "https://ondemand.npr.org/npr-mp4/stationid/372_a49204ddc48f892b3cc54fa9ac937860.mp4", 425 | "content-type": "audio/aac" 426 | }, 427 | { 428 | "rel": "facebook", 429 | "href": "http://www.facebook.com/pages/Classical-WETA-and-WETA-Public-Television/34740117468", 430 | "content-type": "text/html" 431 | }, 432 | { 433 | "rel": "twitter", 434 | "href": "https://twitter.com/wetatvfm", 435 | "content-type": "text/html" 436 | } 437 | ], 438 | "streams": [ 439 | { 440 | "guid": "3d5ec777e6f7444d9753220b6bd46119", 441 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAVLV.mp3", 442 | "isPrimaryStream": false, 443 | "title": "VivaLaVoce", 444 | "typeId": "10", 445 | "typeName": "Audio MP3 Stream" 446 | }, 447 | { 448 | "guid": "dca7de034085424e82085c4cba379e47", 449 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAFM.mp3", 450 | "isPrimaryStream": true, 451 | "title": "Classical WETA", 452 | "typeId": "10", 453 | "typeName": "Audio MP3 Stream" 454 | }, 455 | { 456 | "guid": "7b0415f6633140279f5131a1e8f0cdab", 457 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAFMAAC.aac", 458 | "isPrimaryStream": true, 459 | "title": "Classical WETA", 460 | "typeId": "13", 461 | "typeName": "Audio AAC Stream" 462 | }, 463 | { 464 | "guid": "b8a233ac5cd74c489280c129a0944b3e", 465 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WETAVLVAAC.aac", 466 | "isPrimaryStream": false, 467 | "title": "VivaLaVoce", 468 | "typeId": "13", 469 | "typeName": "Audio AAC Stream" 470 | } 471 | ], 472 | "podcasts": [ 473 | { 474 | "guid": "33559cf985224b06ba6621816184392d", 475 | "href": "https://weta.org/podcasts/classicalbreakdown.xml", 476 | "title": "Classical Breakdown", 477 | "typeId": "9", 478 | "typeName": "Podcast" 479 | }, 480 | { 481 | "guid": "3bbe5a5472794df690fba85db52f3e87", 482 | "href": "https://blogs.weta.org/tellyvisions/podcast.xml", 483 | "title": "Telly Visions: The Podcast", 484 | "typeId": "9", 485 | "typeName": "Podcast" 486 | } 487 | ], 488 | "donation": [ 489 | { 490 | "guid": "5b1e51b70aeb4daea3694b8a8cd6f405", 491 | "href": "https://weta.org/npr", 492 | "title": "Support Classical WETA", 493 | "typeId": "4", 494 | "typeName": "Pledge Page" 495 | }, 496 | { 497 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/372.mp4", 498 | "typeId": "29", 499 | "typeName": "Station Thank You Audio" 500 | } 501 | ] 502 | }, 503 | "errors": [] 504 | } 505 | ], 506 | "links": {}, 507 | "errors": [] 508 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/DE.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "DE" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/1333", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "Public Radio", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "orgId": "1333", 20 | "network": { 21 | "inheritingFrom": "1333", 22 | "usesInheritance": false, 23 | "currentOrgId": "1333", 24 | "tier1": { 25 | "name": "WDDE-FM", 26 | "id": "1333", 27 | "usesInheritance": false, 28 | "status": "1", 29 | "tier2": [ 30 | { 31 | "name": "WMPH-FM", 32 | "id": "1420", 33 | "usesInheritance": false 34 | } 35 | ] 36 | } 37 | }, 38 | "newscast": { 39 | "id": "1333", 40 | "recency": 360 41 | }, 42 | "guid": "503e284e059740e8af5dda6c864866ca", 43 | "brand": { 44 | "band": "FM", 45 | "call": "WDDE", 46 | "frequency": "91.1", 47 | "marketCity": "Dover", 48 | "marketState": "DE", 49 | "name": "Delaware Public Media", 50 | "tagline": "Delaware's NPR News station" 51 | }, 52 | "streamsV2": [ 53 | { 54 | "urls": [ 55 | { 56 | "typeName": "Audio MP3 Stream", 57 | "guid": "d643c0fffb17474a895fcb5d1d4e1ad1", 58 | "typeId": "10", 59 | "href": "https://playerservices.streamtheworld.com/pls/WDDEFM.pls" 60 | } 61 | ], 62 | "guid": "13f5cfa2bd602064d36af42879862023", 63 | "title": "Delaware Public Media", 64 | "primary": true 65 | } 66 | ] 67 | }, 68 | "items": [], 69 | "links": { 70 | "brand": [ 71 | { 72 | "rel": "homepage", 73 | "href": "http://delawarepublic.org", 74 | "content-type": "text/html" 75 | }, 76 | { 77 | "rel": "logo", 78 | "href": "https://media.npr.org/images/stations/nprone_logos/wdde_fm.png", 79 | "content-type": "image/png" 80 | }, 81 | { 82 | "rel": "small-logo", 83 | "href": "https://media.npr.org/images/stations/logos/wdde_fm.gif", 84 | "content-type": "image/gif" 85 | }, 86 | { 87 | "rel": "hello-id-audio", 88 | "href": "https://ondemand.npr.org/npr-mp4/stationid/1333.mp4", 89 | "content-type": "audio/aac" 90 | }, 91 | { 92 | "rel": "facebook", 93 | "href": "https://www.facebook.com/WDDE911", 94 | "content-type": "text/html" 95 | }, 96 | { 97 | "rel": "twitter", 98 | "href": "https://twitter.com/WDDE911", 99 | "content-type": "text/html" 100 | } 101 | ], 102 | "streams": [ 103 | { 104 | "guid": "d643c0fffb17474a895fcb5d1d4e1ad1", 105 | "href": "https://playerservices.streamtheworld.com/pls/WDDEFM.pls", 106 | "isPrimaryStream": true, 107 | "title": "Delaware Public Media", 108 | "typeId": "10", 109 | "typeName": "Audio MP3 Stream" 110 | } 111 | ], 112 | "podcasts": [ 113 | { 114 | "guid": "f4d07c81c7b741489f0eb2a3e49790c4", 115 | "href": "https://wdde.drupal.publicbroadcasting.net/podcasts/495/rss.xml", 116 | "title": "The Green", 117 | "typeId": "9", 118 | "typeName": "Podcast" 119 | } 120 | ], 121 | "donation": [ 122 | { 123 | "guid": "f0f325cbd5d848cb8f83218d1a3aeb51", 124 | "href": "https://donate.firstgiving.com/secure/donate/9d045cc8-2023-11e0-a279-4061860da51d?parentPath=http://www.wdde.org/", 125 | "title": "Support", 126 | "typeId": "4", 127 | "typeName": "Pledge Page" 128 | }, 129 | { 130 | "guid": "146f80bbdcfc4d68b30d5385cdd4520b", 131 | "href": "https://donate.firstgiving.com/secure/donate/9d045cc8-2023-11e0-a279-4061860da51d?parentPath=http://www.wdde.org/", 132 | "title": "Delaware Public Media Donate", 133 | "typeId": "27", 134 | "typeName": "Station NPR One Pledge Page" 135 | }, 136 | { 137 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/1333.mp4", 138 | "typeId": "29", 139 | "typeName": "Station Thank You Audio" 140 | } 141 | ] 142 | }, 143 | "errors": [] 144 | }, 145 | { 146 | "version": "1.0", 147 | "href": "https://api.npr.org/stationfinder/v3/stations/600", 148 | "attributes": { 149 | "eligibility": { 150 | "localization": "Exclude from news contexts", 151 | "nprOne": false, 152 | "format": "", 153 | "status": "1", 154 | "musicOnly": false 155 | }, 156 | "guid": "4fcf701126a14de8b4bf0c580de65392", 157 | "brand": { 158 | "band": "FM", 159 | "call": "WRTX", 160 | "frequency": "91.7", 161 | "marketCity": "Dover", 162 | "marketState": "DE", 163 | "name": "WRTI Your Classical and Jazz Source", 164 | "tagline": "Your Member-Supported Classical & Jazz Source" 165 | }, 166 | "orgId": "600", 167 | "network": { 168 | "name": "WRTI Your Classical and Jazz Source", 169 | "inheritingFrom": "596", 170 | "usesInheritance": true, 171 | "currentOrgId": "600", 172 | "tier1": { 173 | "name": "Temple University Public Radio", 174 | "id": "596", 175 | "usesInheritance": false, 176 | "status": "10", 177 | "tier2": [ 178 | { 179 | "name": "WRTI-FM", 180 | "id": "597", 181 | "usesInheritance": true, 182 | "tier3": [ 183 | { 184 | "name": "WJAZ-FM", 185 | "id": "598", 186 | "usesInheritance": true 187 | }, 188 | { 189 | "name": "WRTQ-FM", 190 | "id": "599", 191 | "usesInheritance": true 192 | }, 193 | { 194 | "name": "WRTX-FM", 195 | "id": "600", 196 | "usesInheritance": true 197 | }, 198 | { 199 | "name": "WRTY-FM", 200 | "id": "601", 201 | "usesInheritance": true 202 | }, 203 | { 204 | "name": "WRTJ-FM", 205 | "id": "1148", 206 | "usesInheritance": true 207 | }, 208 | { 209 | "name": "WRTL-FM", 210 | "id": "1149", 211 | "usesInheritance": true 212 | } 213 | ] 214 | } 215 | ] 216 | } 217 | }, 218 | "streamsV2": [ 219 | { 220 | "urls": [ 221 | { 222 | "typeName": "Audio MP3 Stream", 223 | "guid": "d14703918140455fbf14e128aba3364a", 224 | "typeId": "10", 225 | "href": "https://playerservices.streamtheworld.com/pls/WRTI_JAZZ.pls" 226 | } 227 | ], 228 | "guid": "4fcf71670e8640288e97d8a2e62b66b1", 229 | "title": "WRTI Jazz", 230 | "primary": false 231 | }, 232 | { 233 | "urls": [ 234 | { 235 | "typeName": "Audio MP3 Stream", 236 | "guid": "bd265b402a94406d849d4b4ad1baec60", 237 | "typeId": "10", 238 | "href": "https://playerservices.streamtheworld.com/pls/WRTI_CLASSICAL.pls" 239 | } 240 | ], 241 | "guid": "4fcf7167072149d79cf30787888ac482", 242 | "title": "WRTI Classical", 243 | "primary": true 244 | } 245 | ] 246 | }, 247 | "items": [], 248 | "links": { 249 | "brand": [ 250 | { 251 | "rel": "homepage", 252 | "href": "http://www.wrti.org/", 253 | "content-type": "text/html" 254 | }, 255 | { 256 | "rel": "logo", 257 | "href": "https://media.npr.org/images/stations/nprone_logos/wrti.png", 258 | "content-type": "image/png" 259 | }, 260 | { 261 | "rel": "small-logo", 262 | "href": "https://media.npr.org/images/stations/logos/wrti.gif", 263 | "content-type": "image/gif" 264 | }, 265 | { 266 | "rel": "facebook", 267 | "href": "http://www.facebook.com/WRTImusic", 268 | "content-type": "text/html" 269 | }, 270 | { 271 | "rel": "twitter", 272 | "href": "http://twitter.com/wrtimusic", 273 | "content-type": "text/html" 274 | } 275 | ], 276 | "streams": [ 277 | { 278 | "guid": "d14703918140455fbf14e128aba3364a", 279 | "href": "https://playerservices.streamtheworld.com/pls/WRTI_JAZZ.pls", 280 | "isPrimaryStream": false, 281 | "title": "WRTI Jazz", 282 | "typeId": "10", 283 | "typeName": "Audio MP3 Stream" 284 | }, 285 | { 286 | "guid": "bd265b402a94406d849d4b4ad1baec60", 287 | "href": "https://playerservices.streamtheworld.com/pls/WRTI_CLASSICAL.pls", 288 | "isPrimaryStream": true, 289 | "title": "WRTI Classical", 290 | "typeId": "10", 291 | "typeName": "Audio MP3 Stream" 292 | } 293 | ], 294 | "donation": [ 295 | { 296 | "guid": "bafd39df159147ffbe34d054692737f5", 297 | "href": "https://wrti.secureallegiance.com/wrti/WebModule/Donate.aspx?P=STNDNPR&PAGETYPE=PLG&CHECK=P3OoUfZNiCPytilwxMSziuzWDeZ%2beA1M", 298 | "title": "Support WRTI", 299 | "typeId": "4", 300 | "typeName": "Pledge Page" 301 | } 302 | ] 303 | }, 304 | "errors": [] 305 | }, 306 | { 307 | "version": "1.0", 308 | "href": "https://api.npr.org/stationfinder/v3/stations/1420", 309 | "attributes": { 310 | "eligibility": { 311 | "localization": "Exclude from news contexts", 312 | "nprOne": false, 313 | "format": "Grade School (K-12)", 314 | "status": "15", 315 | "musicOnly": false 316 | }, 317 | "guid": "5329c04b20ca49d588333aef11afc0da", 318 | "brand": { 319 | "band": "FM", 320 | "call": "WMPH", 321 | "frequency": "91.7", 322 | "marketCity": "Wilmington", 323 | "marketState": "DE", 324 | "name": "WMPH-FM", 325 | "tagline": null 326 | }, 327 | "orgId": "1420", 328 | "network": { 329 | "inheritingFrom": "1420", 330 | "usesInheritance": false, 331 | "currentOrgId": "1420" 332 | } 333 | }, 334 | "items": [], 335 | "links": { 336 | "brand": [] 337 | }, 338 | "errors": [] 339 | } 340 | ], 341 | "links": {}, 342 | "errors": [] 343 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/ME.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "ME" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/496", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wmea-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "496", 26 | "network": { 27 | "name": "Maine Public", 28 | "inheritingFrom": "495", 29 | "usesInheritance": true, 30 | "currentOrgId": "496", 31 | "tier1": { 32 | "name": "Maine Public Broadcasting Network", 33 | "id": "495", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "WMEA-FM", 39 | "id": "496", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "WBQF-FM", 44 | "id": "1549", 45 | "usesInheritance": false 46 | }, 47 | { 48 | "name": "WBQE-FM", 49 | "id": "1555", 50 | "usesInheritance": false 51 | }, 52 | { 53 | "name": "WBQA-FM", 54 | "id": "1574", 55 | "usesInheritance": false 56 | } 57 | ] 58 | }, 59 | { 60 | "name": "WMEH-FM", 61 | "id": "497", 62 | "usesInheritance": true, 63 | "tier3": [ 64 | { 65 | "name": "WMED-FM", 66 | "id": "498", 67 | "usesInheritance": true 68 | }, 69 | { 70 | "name": "WMEF-FM", 71 | "id": "499", 72 | "usesInheritance": true 73 | }, 74 | { 75 | "name": "WMEM-FM", 76 | "id": "500", 77 | "usesInheritance": true 78 | }, 79 | { 80 | "name": "WMEW-FM", 81 | "id": "501", 82 | "usesInheritance": true 83 | }, 84 | { 85 | "name": "WMEP-FM", 86 | "id": "875", 87 | "usesInheritance": true 88 | } 89 | ] 90 | } 91 | ] 92 | } 93 | }, 94 | "newscast": { 95 | "id": "495", 96 | "recency": 120 97 | }, 98 | "guid": "4fcf70110e134f9e96058572b97350f9", 99 | "brand": { 100 | "band": "FM", 101 | "call": "WMEA", 102 | "frequency": "90.1", 103 | "marketCity": "Lewiston", 104 | "marketState": "ME", 105 | "name": "Maine Public", 106 | "tagline": "Stay connected with Maine Public!" 107 | }, 108 | "streamsV2": [ 109 | { 110 | "urls": [ 111 | { 112 | "typeName": "Audio MP3 Stream", 113 | "guid": "1c8a15e0bdf04e0e841d2aa2eeedb889", 114 | "typeId": "10", 115 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WMEA_CLASSICAL.mp3" 116 | } 117 | ], 118 | "guid": "1424de07e71017945cdb421c098e90f9", 119 | "title": "Maine Public Classical", 120 | "primary": false 121 | }, 122 | { 123 | "urls": [ 124 | { 125 | "typeName": "Audio MP3 Stream", 126 | "guid": "2053d613d7e14253907b70977ea6ec3f", 127 | "typeId": "10", 128 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WMEAFM.mp3" 129 | } 130 | ], 131 | "guid": "148603a81d00090492fb94eb60450d93", 132 | "title": "Maine Public Radio", 133 | "primary": true 134 | } 135 | ] 136 | }, 137 | "items": [], 138 | "links": { 139 | "brand": [ 140 | { 141 | "rel": "homepage", 142 | "href": "https://mainepublic.org", 143 | "content-type": "text/html" 144 | }, 145 | { 146 | "rel": "logo", 147 | "href": "https://media.npr.org/images/stations/nprone_logos/mpbn.png", 148 | "content-type": "image/png" 149 | }, 150 | { 151 | "rel": "small-logo", 152 | "href": "https://media.npr.org/images/stations/logos/mpbn.gif", 153 | "content-type": "image/gif" 154 | }, 155 | { 156 | "rel": "facebook", 157 | "href": "http://www.facebook.com/MainePublicBroadcastingNetwork", 158 | "content-type": "text/html" 159 | }, 160 | { 161 | "rel": "twitter", 162 | "href": "http://twitter.com/MPBNnews", 163 | "content-type": "text/html" 164 | } 165 | ], 166 | "streams": [ 167 | { 168 | "guid": "1c8a15e0bdf04e0e841d2aa2eeedb889", 169 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WMEA_CLASSICAL.mp3", 170 | "isPrimaryStream": false, 171 | "title": "Maine Public Classical", 172 | "typeId": "10", 173 | "typeName": "Audio MP3 Stream" 174 | }, 175 | { 176 | "guid": "2053d613d7e14253907b70977ea6ec3f", 177 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WMEAFM.mp3", 178 | "isPrimaryStream": true, 179 | "title": "Maine Public Radio", 180 | "typeId": "10", 181 | "typeName": "Audio MP3 Stream" 182 | } 183 | ], 184 | "podcasts": [ 185 | { 186 | "guid": "91a7e87e145f40b2875065a97cf0e1df", 187 | "href": "https://mpbn.drupal.publicbroadcasting.net/podcasts/68139/rss.xml", 188 | "title": "Maine's Political Pulse", 189 | "typeId": "9", 190 | "typeName": "Podcast" 191 | }, 192 | { 193 | "guid": "e6c9abc0bbb1446fbc2383207c4cf653", 194 | "href": "https://mpbn.drupal.publicbroadcasting.net/podcasts/1171/rss.xml", 195 | "title": "Speaking in Maine", 196 | "typeId": "9", 197 | "typeName": "Podcast" 198 | }, 199 | { 200 | "guid": "6139b10f7e7e40d2821f1aeae7eacaac", 201 | "href": "https://mpbn.drupal.publicbroadcasting.net/podcasts/7/rss.xml", 202 | "title": "Maine Calling", 203 | "typeId": "9", 204 | "typeName": "Podcast" 205 | }, 206 | { 207 | "guid": "ccd20246b8664599ac6885ce2079076d", 208 | "href": "https://mpbn.drupal.publicbroadcasting.net/podcasts/71670/rss.xml", 209 | "title": "SoundBites", 210 | "typeId": "9", 211 | "typeName": "Podcast" 212 | }, 213 | { 214 | "guid": "873caa4ac1ea44b7974bd9fe2ebeb706", 215 | "href": "https://feeds.feedburner.com/ThisDayinMaine", 216 | "title": "This Day in Maine", 217 | "typeId": "9", 218 | "typeName": "Podcast" 219 | } 220 | ], 221 | "donation": [ 222 | { 223 | "guid": "afb4cd8bb47d4472b1d431e03f020328", 224 | "href": "https://www.callswithoutwalls.com/pledgeCart3/?campaign=ADF0CB77-2EF2-4CD5-A73E-6879D1CB6CFA&source=", 225 | "title": "Donate to Maine Public", 226 | "typeId": "4", 227 | "typeName": "Pledge Page" 228 | }, 229 | { 230 | "guid": "35d9bc22183540509f03d25b7c11b730", 231 | "href": "https://www.callswithoutwalls.com/pledgeCart3/?campaign=ADF0CB77-2EF2-4CD5-A73E-6879D1CB6CFA&source=", 232 | "title": null, 233 | "typeId": "27", 234 | "typeName": "Station NPR One Pledge Page" 235 | } 236 | ] 237 | }, 238 | "errors": [] 239 | }, 240 | { 241 | "version": "1.0", 242 | "href": "https://api.npr.org/stationfinder/v3/stations/1574", 243 | "attributes": { 244 | "eligibility": { 245 | "localization": "Exclude from news contexts", 246 | "nprOne": false, 247 | "format": "Classical", 248 | "status": "1", 249 | "musicOnly": true 250 | }, 251 | "guid": "58bfd3e61587457c9afaa2d254d598cf", 252 | "brand": { 253 | "band": "FM", 254 | "call": "WBQA", 255 | "frequency": "96.7", 256 | "marketCity": "Boothbay Harbor", 257 | "marketState": "ME", 258 | "name": "WBQA-FM", 259 | "tagline": null 260 | }, 261 | "orgId": "1574", 262 | "network": { 263 | "inheritingFrom": "1574", 264 | "usesInheritance": false, 265 | "currentOrgId": "1574" 266 | } 267 | }, 268 | "items": [], 269 | "links": { 270 | "brand": [] 271 | }, 272 | "errors": [] 273 | }, 274 | { 275 | "version": "1.0", 276 | "href": "https://api.npr.org/stationfinder/v3/stations/1555", 277 | "attributes": { 278 | "eligibility": { 279 | "localization": "Exclude from news contexts", 280 | "nprOne": false, 281 | "format": "Classical", 282 | "status": "1", 283 | "musicOnly": true 284 | }, 285 | "guid": "1155b7cd080c4b7f861f1a9a4ee3afc1", 286 | "brand": { 287 | "band": "FM", 288 | "call": "WBQE", 289 | "frequency": "93.7", 290 | "marketCity": "Milbridge", 291 | "marketState": "ME", 292 | "name": "WBQE-FM", 293 | "tagline": null 294 | }, 295 | "orgId": "1555", 296 | "network": { 297 | "inheritingFrom": "1555", 298 | "usesInheritance": false, 299 | "currentOrgId": "1555" 300 | } 301 | }, 302 | "items": [], 303 | "links": { 304 | "brand": [] 305 | }, 306 | "errors": [] 307 | }, 308 | { 309 | "version": "1.0", 310 | "href": "https://api.npr.org/stationfinder/v3/stations/1549", 311 | "attributes": { 312 | "eligibility": { 313 | "localization": "Exclude from news contexts", 314 | "nprOne": false, 315 | "format": "Classical", 316 | "status": "1", 317 | "musicOnly": true 318 | }, 319 | "guid": "5735ce6fb7434b15881d164a5ee3ec96", 320 | "brand": { 321 | "band": "FM", 322 | "call": "WBQF", 323 | "frequency": "91.5", 324 | "marketCity": "Fryeburg", 325 | "marketState": "ME", 326 | "name": "Maine Public", 327 | "tagline": null 328 | }, 329 | "orgId": "1549", 330 | "network": { 331 | "inheritingFrom": "1549", 332 | "usesInheritance": false, 333 | "currentOrgId": "1549" 334 | }, 335 | "streamsV2": [ 336 | { 337 | "urls": [ 338 | { 339 | "typeName": "Audio MP3 Stream", 340 | "guid": "1c8a15e0bdf04e0e841d2aa2eeedb889", 341 | "typeId": "10", 342 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WMEA_CLASSICAL.mp3" 343 | } 344 | ], 345 | "guid": "1424de07e71017945cdb421c098e90f9", 346 | "title": "Maine Public Classical", 347 | "primary": true 348 | } 349 | ] 350 | }, 351 | "items": [], 352 | "links": { 353 | "brand": [ 354 | { 355 | "rel": "homepage", 356 | "href": "http://mainepublic.org/schedule/classical", 357 | "content-type": "text/html" 358 | }, 359 | { 360 | "rel": "logo", 361 | "href": "https://media.npr.org/images/stations/nprone_logos/wfyb_fm.png", 362 | "content-type": "image/png" 363 | }, 364 | { 365 | "rel": "small-logo", 366 | "href": "https://media.npr.org/images/stations/logos/wfyb_fm.gif", 367 | "content-type": "image/gif" 368 | } 369 | ], 370 | "streams": [ 371 | { 372 | "guid": "1c8a15e0bdf04e0e841d2aa2eeedb889", 373 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/WMEA_CLASSICAL.mp3", 374 | "isPrimaryStream": true, 375 | "title": "Maine Public Classical", 376 | "typeId": "10", 377 | "typeName": "Audio MP3 Stream" 378 | } 379 | ], 380 | "donation": [ 381 | { 382 | "guid": "3e0eff271aa04c14bd58b39b53e2cf62", 383 | "href": "https://www.callswithoutwalls.com/pledgeCart3/?campaign=ADF0CB77-2EF2-4CD5-A73E-6879D1CB6CFA&source=", 384 | "title": "", 385 | "typeId": "4", 386 | "typeName": "Pledge Page" 387 | }, 388 | { 389 | "guid": "cbd7417fcd6c4ba98c66df9d7bb09e5f", 390 | "href": "https://www.callswithoutwalls.com/pledgeCart3/?campaign=ADF0CB77-2EF2-4CD5-A73E-6879D1CB6CFA&source=", 391 | "title": "", 392 | "typeId": "27", 393 | "typeName": "Station NPR One Pledge Page" 394 | } 395 | ] 396 | }, 397 | "errors": [] 398 | } 399 | ], 400 | "links": {}, 401 | "errors": [] 402 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/MS.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "MS" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/510", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "Public Radio", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wmpn-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "510", 26 | "network": { 27 | "inheritingFrom": "510", 28 | "usesInheritance": false, 29 | "currentOrgId": "510", 30 | "tier1": { 31 | "name": "WMPN-FM", 32 | "id": "510", 33 | "usesInheritance": false, 34 | "status": "1", 35 | "tier2": [ 36 | { 37 | "name": "WMAB-FM", 38 | "id": "511", 39 | "usesInheritance": true 40 | }, 41 | { 42 | "name": "WMAE-FM", 43 | "id": "512", 44 | "usesInheritance": true 45 | }, 46 | { 47 | "name": "WMAH-FM", 48 | "id": "513", 49 | "usesInheritance": true 50 | }, 51 | { 52 | "name": "WMAO-FM", 53 | "id": "514", 54 | "usesInheritance": true 55 | }, 56 | { 57 | "name": "WMAU-FM", 58 | "id": "515", 59 | "usesInheritance": true 60 | }, 61 | { 62 | "name": "WMAV-FM", 63 | "id": "516", 64 | "usesInheritance": true 65 | }, 66 | { 67 | "name": "WMAW-FM", 68 | "id": "517", 69 | "usesInheritance": true 70 | } 71 | ] 72 | } 73 | }, 74 | "newscast": { 75 | "id": "510", 76 | "recency": 360 77 | }, 78 | "guid": "4fcf701112704f51a4e222a58560e19c", 79 | "brand": { 80 | "band": "FM", 81 | "call": "WMPN", 82 | "frequency": "91.3", 83 | "marketCity": "Jackson", 84 | "marketState": "MS", 85 | "name": "MPB Think Radio", 86 | "tagline": "Mississippi is our Mission." 87 | }, 88 | "streamsV2": [ 89 | { 90 | "urls": [ 91 | { 92 | "typeName": "Audio MP3 Stream", 93 | "guid": "45ff218025d84ca689ca4e1819391b14", 94 | "typeId": "10", 95 | "href": "https://playerservices.streamtheworld.com/pls/WMPNFM_56.pls" 96 | } 97 | ], 98 | "guid": "13f1f33492900b9459c92b3e3ad6a5ad", 99 | "title": "MPB Music Radio", 100 | "primary": false 101 | }, 102 | { 103 | "urls": [ 104 | { 105 | "typeName": "Audio MP3 Stream", 106 | "guid": "47dbf8ed72e24ec084141d2531615c5b", 107 | "typeId": "10", 108 | "href": "https://playerservices.streamtheworld.com/pls/WMPNHD3_56.pls" 109 | } 110 | ], 111 | "guid": "4fcf712f0e98465e99293bcc196a2dae", 112 | "title": "MPB Think Radio", 113 | "primary": true 114 | } 115 | ] 116 | }, 117 | "items": [], 118 | "links": { 119 | "brand": [ 120 | { 121 | "rel": "homepage", 122 | "href": "http://www.mpbonline.org", 123 | "content-type": "text/html" 124 | }, 125 | { 126 | "rel": "logo", 127 | "href": "https://media.npr.org/images/stations/nprone_logos/wmpn_fm.png", 128 | "content-type": "image/png" 129 | }, 130 | { 131 | "rel": "small-logo", 132 | "href": "https://media.npr.org/images/stations/logos/wmpn_fm.gif", 133 | "content-type": "image/gif" 134 | }, 135 | { 136 | "rel": "station-message-audio", 137 | "href": "https://ondemand.npr.org/npr-mp4/message/510_645e79373939536b53a9d31d8d64e390.mp4", 138 | "content-type": "audio/aac" 139 | }, 140 | { 141 | "rel": "station-message-audio", 142 | "href": "https://ondemand.npr.org/npr-mp4/message/510_8885be1de4027f0309ed24dc7c1ccf1a.mp4", 143 | "content-type": "audio/aac" 144 | }, 145 | { 146 | "rel": "hello-id-audio", 147 | "href": "https://ondemand.npr.org/npr-mp4/stationid/510_7a56f24aaeec46a774f9f221fbcbaba5.mp4", 148 | "content-type": "audio/aac" 149 | }, 150 | { 151 | "rel": "facebook", 152 | "href": "http://www.facebook.com/MPBOnline", 153 | "content-type": "text/html" 154 | } 155 | ], 156 | "streams": [ 157 | { 158 | "guid": "45ff218025d84ca689ca4e1819391b14", 159 | "href": "https://playerservices.streamtheworld.com/pls/WMPNFM_56.pls", 160 | "isPrimaryStream": false, 161 | "title": "MPB Music Radio", 162 | "typeId": "10", 163 | "typeName": "Audio MP3 Stream" 164 | }, 165 | { 166 | "guid": "47dbf8ed72e24ec084141d2531615c5b", 167 | "href": "https://playerservices.streamtheworld.com/pls/WMPNHD3_56.pls", 168 | "isPrimaryStream": true, 169 | "title": "MPB Think Radio", 170 | "typeId": "10", 171 | "typeName": "Audio MP3 Stream" 172 | } 173 | ], 174 | "podcasts": [ 175 | { 176 | "guid": "2d9a8cc84b1945cb8a404f89ad676614", 177 | "href": "https://feeds.acast.com/public/shows/5c7d614909e215fd7b527542", 178 | "title": "Deep South Dining", 179 | "typeId": "9", 180 | "typeName": "Podcast" 181 | }, 182 | { 183 | "guid": "ea5730cec82c4144bef21dbb80d9bfec", 184 | "href": "https://feeds.acast.com/public/shows/5d893336bd7d8a2b67020ead", 185 | "title": "Now You're Talking with Marshall Ramsey", 186 | "typeId": "9", 187 | "typeName": "Podcast" 188 | }, 189 | { 190 | "guid": "d51c50c2e3db4a8ea779fb1ec646c172", 191 | "href": "https://feeds.acast.com/public/shows/5c82f1828aad6b8827ee23a0", 192 | "title": "Southern Remedy", 193 | "typeId": "9", 194 | "typeName": "Podcast" 195 | }, 196 | { 197 | "guid": "36ac960f559b40118b55b1bb934bf5bc", 198 | "href": "https://feeds.acast.com/public/shows/5d8932fa719a100a4a0192c0", 199 | "title": "Next Stop, Mississippi", 200 | "typeId": "9", 201 | "typeName": "Podcast" 202 | }, 203 | { 204 | "guid": "08cd2d56102a46ed9596bfee1ebb2106", 205 | "href": "https://feeds.acast.com/public/shows/5c82f085c1f1f55f193322c5", 206 | "title": "The Gestalt Gardener", 207 | "typeId": "9", 208 | "typeName": "Podcast" 209 | }, 210 | { 211 | "guid": "e0742ecc97ef40cfaccc9e99f49c93c0", 212 | "href": "https://feeds.acast.com/public/shows/5cffdbed5d22166347cec3d8", 213 | "title": "Conversations", 214 | "typeId": "9", 215 | "typeName": "Podcast" 216 | }, 217 | { 218 | "guid": "c445d77083c240d4a4cea309cae7d851", 219 | "href": "https://feeds.acast.com/public/shows/5e32e846f85b2ea1184099da", 220 | "title": "MPB's Season Pass", 221 | "typeId": "9", 222 | "typeName": "Podcast" 223 | }, 224 | { 225 | "guid": "5ff1b0ffaa564524806755f41de7caad", 226 | "href": "https://feeds.acast.com/public/shows/5d892b22719a100a4a0192bd", 227 | "title": "Mississippi Edition", 228 | "typeId": "9", 229 | "typeName": "Podcast" 230 | }, 231 | { 232 | "guid": "e5659a75495e430ea4d2a19a42524a89", 233 | "href": "https://feeds.acast.com/public/shows/5c82f148f1ba53a405a4c227", 234 | "title": "Fix It 101", 235 | "typeId": "9", 236 | "typeName": "Podcast" 237 | }, 238 | { 239 | "guid": "96d9e722a29641c5be2ce32e7292834b", 240 | "href": "https://feeds.acast.com/public/shows/5cd31efb995459133c97ab7d", 241 | "title": "Money Talks", 242 | "typeId": "9", 243 | "typeName": "Podcast" 244 | }, 245 | { 246 | "guid": "44e368d1e9c54c01af77efff709652f4", 247 | "href": "https://feeds.acast.com/public/shows/5cd2d68043b416d4617f91c9", 248 | "title": "In Legal Terms", 249 | "typeId": "9", 250 | "typeName": "Podcast" 251 | }, 252 | { 253 | "guid": "67679258917046c7879e35b5b593c47a", 254 | "href": "https://feeds.acast.com/public/shows/5cd2da93d59f73d577da1cd5", 255 | "title": "Auto Correct", 256 | "typeId": "9", 257 | "typeName": "Podcast" 258 | }, 259 | { 260 | "guid": "cfe2b7efe97a4633bd205dd5033a0136", 261 | "href": "https://feeds.acast.com/public/shows/5cd42df8e8b7d3577670d4a1", 262 | "title": "Creature Comforts", 263 | "typeId": "9", 264 | "typeName": "Podcast" 265 | }, 266 | { 267 | "guid": "68576689b9c34f3b8be9266004ca2006", 268 | "href": "https://feeds.acast.com/public/shows/5c82f2368aad6b8827ee23a2", 269 | "title": "Everyday Tech", 270 | "typeId": "9", 271 | "typeName": "Podcast" 272 | } 273 | ], 274 | "donation": [ 275 | { 276 | "guid": "af37c7e8f6284713ac066fc7a6629f6d", 277 | "href": "https://be.mpbfoundation.org/donate/index.html", 278 | "title": "Support", 279 | "typeId": "4", 280 | "typeName": "Pledge Page" 281 | }, 282 | { 283 | "guid": "ac08ba828d77417bb95943243deb85d6", 284 | "href": "https://be.mpbfoundation.org/donate/index.html", 285 | "title": null, 286 | "typeId": "27", 287 | "typeName": "Station NPR One Pledge Page" 288 | }, 289 | { 290 | "guid": "45a44222e7d1467280fa0771c225a4d2", 291 | "href": "https://ondemand.npr.org/npr-mp4/donation/510_5e1f66d7d116c954ae20c49c6bf0c456.mp4", 292 | "title": "Donation Audio", 293 | "typeId": "28", 294 | "typeName": "Station Pledge Audio" 295 | }, 296 | { 297 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/510.mp4", 298 | "typeId": "29", 299 | "typeName": "Station Thank You Audio" 300 | } 301 | ] 302 | }, 303 | "errors": [] 304 | }, 305 | { 306 | "version": "1.0", 307 | "href": "https://api.npr.org/stationfinder/v3/stations/460", 308 | "attributes": { 309 | "eligibility": { 310 | "localization": "Show everywhere", 311 | "nprOne": true, 312 | "format": "Jazz", 313 | "status": "1", 314 | "musicOnly": true 315 | }, 316 | "guid": "4fcf701105ed4c51bf4328f5545ae5f4", 317 | "brand": { 318 | "band": "FM", 319 | "call": "WJSU", 320 | "frequency": "88.5", 321 | "marketCity": "Jackson", 322 | "marketState": "MS", 323 | "name": "WJSU", 324 | "tagline": "WJSU is \"Cool and Current\"" 325 | }, 326 | "orgId": "460", 327 | "network": { 328 | "inheritingFrom": "460", 329 | "usesInheritance": false, 330 | "currentOrgId": "460", 331 | "tier1": { 332 | "name": "WJSU-FM", 333 | "id": "460", 334 | "usesInheritance": false, 335 | "status": "1" 336 | } 337 | } 338 | }, 339 | "items": [], 340 | "links": { 341 | "brand": [ 342 | { 343 | "rel": "homepage", 344 | "href": "http://wjsu.org", 345 | "content-type": "text/html" 346 | }, 347 | { 348 | "rel": "small-logo", 349 | "href": "https://media.npr.org/images/stations/logos/wjsu_fm.gif", 350 | "content-type": "image/gif" 351 | }, 352 | { 353 | "rel": "hello-id-audio", 354 | "href": "https://ondemand.npr.org/npr-mp4/stationid/460.mp4", 355 | "content-type": "audio/aac" 356 | }, 357 | { 358 | "rel": "facebook", 359 | "href": "http://www.facebook.com/WJSUstation", 360 | "content-type": "text/html" 361 | }, 362 | { 363 | "rel": "twitter", 364 | "href": "https://twitter.com/wjsu885", 365 | "content-type": "text/html" 366 | } 367 | ], 368 | "podcasts": [ 369 | { 370 | "guid": "43318c0fe0b946c39fe4b4ecea5d6531", 371 | "href": "https://wjsu.drupal.publicbroadcasting.net/podcasts", 372 | "title": "WJSU", 373 | "typeId": "9", 374 | "typeName": "Podcast" 375 | } 376 | ], 377 | "donation": [ 378 | { 379 | "guid": "b38df24f7a794ce59aff4d0cd2b47b4a", 380 | "href": "https://secure.publicbroadcasting.net/wjsu/default/form.pledgemain", 381 | "title": "Support", 382 | "typeId": "4", 383 | "typeName": "Pledge Page" 384 | }, 385 | { 386 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/460.mp4", 387 | "typeId": "29", 388 | "typeName": "Station Thank You Audio" 389 | } 390 | ] 391 | }, 392 | "errors": [] 393 | }, 394 | { 395 | "version": "1.0", 396 | "href": "https://api.npr.org/stationfinder/v3/stations/582", 397 | "attributes": { 398 | "eligibility": { 399 | "localization": "Show everywhere", 400 | "nprOne": true, 401 | "format": "Public Radio", 402 | "status": "1", 403 | "musicOnly": false 404 | }, 405 | "guid": "4fcf701122e4441f9e34c6c15ae00336", 406 | "brand": { 407 | "band": "FM", 408 | "call": "WPRL", 409 | "frequency": "91.7", 410 | "marketCity": "Lorman", 411 | "marketState": "MS", 412 | "name": "WPRL", 413 | "tagline": "Alcorn Public Radio" 414 | }, 415 | "orgId": "582", 416 | "network": { 417 | "inheritingFrom": "582", 418 | "usesInheritance": false, 419 | "currentOrgId": "582", 420 | "tier1": { 421 | "name": "WPRL-FM", 422 | "id": "582", 423 | "usesInheritance": false, 424 | "status": "1" 425 | } 426 | } 427 | }, 428 | "items": [], 429 | "links": { 430 | "brand": [ 431 | { 432 | "rel": "homepage", 433 | "href": "http://www.wprl.org/", 434 | "content-type": "text/html" 435 | }, 436 | { 437 | "rel": "hello-id-audio", 438 | "href": "https://ondemand.npr.org/npr-mp4/stationid/582.mp4", 439 | "content-type": "audio/aac" 440 | } 441 | ], 442 | "donation": [ 443 | { 444 | "guid": "0fbd74ec09e1460e96eed6b91302a573", 445 | "href": "http://www.wprl.org/support-us", 446 | "title": "Support", 447 | "typeId": "4", 448 | "typeName": "Pledge Page" 449 | }, 450 | { 451 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/582.mp4", 452 | "typeId": "29", 453 | "typeName": "Station Thank You Audio" 454 | } 455 | ] 456 | }, 457 | "errors": [] 458 | }, 459 | { 460 | "version": "1.0", 461 | "href": "https://api.npr.org/stationfinder/v3/stations/670", 462 | "attributes": { 463 | "eligibility": { 464 | "localization": "Show everywhere", 465 | "nprOne": true, 466 | "format": "Public Radio", 467 | "status": "1", 468 | "musicOnly": false 469 | }, 470 | "guid": "4fcf7012106b40838c53c863e5f843d2", 471 | "brand": { 472 | "band": "FM", 473 | "call": "WURC", 474 | "frequency": "88.1", 475 | "marketCity": "Holly Springs", 476 | "marketState": "MS", 477 | "name": "WURC", 478 | "tagline": "Your station that cares" 479 | }, 480 | "orgId": "670", 481 | "network": { 482 | "inheritingFrom": "670", 483 | "usesInheritance": false, 484 | "currentOrgId": "670", 485 | "tier1": { 486 | "name": "WURC-FM", 487 | "id": "670", 488 | "usesInheritance": false, 489 | "status": "1" 490 | } 491 | } 492 | }, 493 | "items": [], 494 | "links": { 495 | "brand": [ 496 | { 497 | "rel": "homepage", 498 | "href": "http://www.wurc.org/", 499 | "content-type": "text/html" 500 | }, 501 | { 502 | "rel": "hello-id-audio", 503 | "href": "https://ondemand.npr.org/npr-mp4/stationid/670.mp4", 504 | "content-type": "audio/aac" 505 | } 506 | ], 507 | "donation": [ 508 | { 509 | "guid": "00b0403e8c844a99a5004df611803f95", 510 | "href": "http://www.wurc.org/index.htm", 511 | "title": "Support", 512 | "typeId": "4", 513 | "typeName": "Pledge Page" 514 | }, 515 | { 516 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/670.mp4", 517 | "typeId": "29", 518 | "typeName": "Station Thank You Audio" 519 | } 520 | ] 521 | }, 522 | "errors": [] 523 | } 524 | ], 525 | "links": {}, 526 | "errors": [] 527 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/MT.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "MT" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/215", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kufm-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "215", 26 | "network": { 27 | "name": "Montana Public Radio", 28 | "inheritingFrom": "214", 29 | "usesInheritance": true, 30 | "currentOrgId": "215", 31 | "tier1": { 32 | "name": "Montana Public Radio", 33 | "id": "214", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "KUFM-FM", 39 | "id": "215", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "KAPC-FM", 44 | "id": "216", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "KUFN-FM", 49 | "id": "217", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "KUHM-FM", 54 | "id": "218", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "KUKL-FM", 59 | "id": "219", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "KGPR-FM", 64 | "id": "795", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "KPJH-FM", 69 | "id": "1440", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "KUFL-FM", 74 | "id": "1441", 75 | "usesInheritance": true 76 | } 77 | ] 78 | } 79 | ] 80 | } 81 | }, 82 | "guid": "4fcf700f14f14b4ca61dfcf3888954ad", 83 | "brand": { 84 | "band": "FM", 85 | "call": "KUFM", 86 | "frequency": "89.1", 87 | "marketCity": "Missoula", 88 | "marketState": "MT", 89 | "name": "Montana Public Radio", 90 | "tagline": "Learn something new every day." 91 | }, 92 | "streamsV2": [ 93 | { 94 | "urls": [ 95 | { 96 | "typeName": "Audio MP3 Stream", 97 | "guid": "acb11ba9fb804f42ad92bcf36e6843aa", 98 | "typeId": "10", 99 | "href": "https://playerservices.streamtheworld.com/pls/KUFMFM.pls" 100 | } 101 | ], 102 | "guid": "4fcf716904ad46ea9e33790f9a437eac", 103 | "title": "Montana Public Radio Stream", 104 | "primary": true 105 | } 106 | ] 107 | }, 108 | "items": [], 109 | "links": { 110 | "brand": [ 111 | { 112 | "rel": "homepage", 113 | "href": "https://www.mtpr.org", 114 | "content-type": "text/html" 115 | }, 116 | { 117 | "rel": "logo", 118 | "href": "https://media.npr.org/images/stations/nprone_logos/mtpr.png", 119 | "content-type": "image/png" 120 | }, 121 | { 122 | "rel": "small-logo", 123 | "href": "https://media.npr.org/images/stations/logos/mtpr.gif", 124 | "content-type": "image/gif" 125 | }, 126 | { 127 | "rel": "hello-id-audio", 128 | "href": "https://ondemand.npr.org/npr-mp4/stationid/214_421e9d2cb10434215571c62d039c2795.mp4", 129 | "content-type": "audio/aac" 130 | }, 131 | { 132 | "rel": "hello-id-audio", 133 | "href": "https://ondemand.npr.org/npr-mp4/stationid/214_bc456bf1d4692bc518a5f2ca16088189.mp4?1512515260923", 134 | "content-type": "audio/aac" 135 | }, 136 | { 137 | "rel": "hello-id-audio", 138 | "href": "https://ondemand.npr.org/npr-mp4/stationid/214_66f5c46ad01c9e9b0abf3b84a2f35d83.mp4", 139 | "content-type": "audio/aac" 140 | }, 141 | { 142 | "rel": "hello-id-audio", 143 | "href": "https://ondemand.npr.org/npr-mp4/stationid/214_1e52ba672a9b1686563708cb6d1b29e8.mp4?1512515063960", 144 | "content-type": "audio/aac" 145 | }, 146 | { 147 | "rel": "facebook", 148 | "href": "http://www.facebook.com/mtpublicradio", 149 | "content-type": "text/html" 150 | }, 151 | { 152 | "rel": "twitter", 153 | "href": "http://twitter.com/mtpublicradio", 154 | "content-type": "text/html" 155 | } 156 | ], 157 | "streams": [ 158 | { 159 | "guid": "acb11ba9fb804f42ad92bcf36e6843aa", 160 | "href": "https://playerservices.streamtheworld.com/pls/KUFMFM.pls", 161 | "isPrimaryStream": true, 162 | "title": "Montana Public Radio Stream", 163 | "typeId": "10", 164 | "typeName": "Audio MP3 Stream" 165 | } 166 | ], 167 | "podcasts": [ 168 | { 169 | "guid": "ff17e71878d14991b3fd5e520a0a5c1b", 170 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/3484/rss.xml", 171 | "title": "Field Notes", 172 | "typeId": "9", 173 | "typeName": "Podcast" 174 | }, 175 | { 176 | "guid": "54f0aa90c8c04aa490e9e17a6a62baac", 177 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/36564/rss.xml", 178 | "title": "Montana Wildfire News", 179 | "typeId": "9", 180 | "typeName": "Podcast" 181 | }, 182 | { 183 | "guid": "e93737e965274841adb1bd9788e09099", 184 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/68741/rss.xml", 185 | "title": "SubSurface: Resisting Montana's Underwater Invaders", 186 | "typeId": "9", 187 | "typeName": "Podcast" 188 | }, 189 | { 190 | "guid": "be3fc6cc94ac418e8e78d744f9f21462", 191 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/term/50/rss.xml", 192 | "title": "Montana News", 193 | "typeId": "9", 194 | "typeName": "Podcast" 195 | }, 196 | { 197 | "guid": "1ad04a2c3ba54448a96f552932e88a63", 198 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/598/rss.xml", 199 | "title": "Musician's Spotlight", 200 | "typeId": "9", 201 | "typeName": "Podcast" 202 | }, 203 | { 204 | "guid": "ec8e465b001e4492ac2b3ba06b43c8ec", 205 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/term/209/rss.xml", 206 | "title": "Montana Public Radio Evening Newscasts", 207 | "typeId": "9", 208 | "typeName": "Podcast" 209 | }, 210 | { 211 | "guid": "c0ec866541a04fa0ae697ad2d15afeaf", 212 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/3483/rss.xml", 213 | "title": "Front Row Center", 214 | "typeId": "9", 215 | "typeName": "Podcast" 216 | }, 217 | { 218 | "guid": "f1b8b2edb98a41daa9ce83456092c21f", 219 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/67143/rss.xml", 220 | "title": "Can Do: Lessons From Savvy Montana Entrepreneurs", 221 | "typeId": "9", 222 | "typeName": "Podcast" 223 | }, 224 | { 225 | "guid": "4dc466b78308484297cef3ed95728987", 226 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/83869/rss.xml", 227 | "title": "Richest Hill", 228 | "typeId": "9", 229 | "typeName": "Podcast" 230 | }, 231 | { 232 | "guid": "8c026d562329425aa53103d9ac0188b5", 233 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/43771/rss.xml", 234 | "title": "Campaign Beat", 235 | "typeId": "9", 236 | "typeName": "Podcast" 237 | }, 238 | { 239 | "guid": "29f381ceba1b413f9d0f52daae80b113", 240 | "href": "https://thresholdpodcast.libsyn.com/rss", 241 | "title": "Threshold", 242 | "typeId": "9", 243 | "typeName": "Podcast" 244 | }, 245 | { 246 | "guid": "f7d03aa6e7514621940eaee67c89a484", 247 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/1788/rss.xml", 248 | "title": "The Write Question", 249 | "typeId": "9", 250 | "typeName": "Podcast" 251 | }, 252 | { 253 | "guid": "e5ad9ec39a26481e8605b2c6429b1672", 254 | "href": "https://kufm.drupal.publicbroadcasting.net/podcasts/56954/rss.xml", 255 | "title": "Capitol Talk", 256 | "typeId": "9", 257 | "typeName": "Podcast" 258 | } 259 | ], 260 | "donation": [ 261 | { 262 | "guid": "3774d463881645d1bd8c320df73cd1e6", 263 | "href": "http://mtpr.org/donate-mtpr", 264 | "title": "MTPR Donation Page", 265 | "typeId": "4", 266 | "typeName": "Pledge Page" 267 | }, 268 | { 269 | "guid": "3c69e024a2424a568836543850fcc950", 270 | "href": "https://www.mtpr.org/donate-mtpr?utm_source=npr&utm_medium=donate", 271 | "title": "Pledge Online", 272 | "typeId": "4", 273 | "typeName": "Pledge Page" 274 | }, 275 | { 276 | "guid": "a58467856559422cac079d202f685181", 277 | "href": "https://www.mtpr.org/donate-mtpr?utm_source=npr&utm_medium=donate", 278 | "title": "Donate to MTPR", 279 | "typeId": "27", 280 | "typeName": "Station NPR One Pledge Page" 281 | } 282 | ] 283 | }, 284 | "errors": [] 285 | }, 286 | { 287 | "version": "1.0", 288 | "href": "https://api.npr.org/stationfinder/v3/stations/71", 289 | "attributes": { 290 | "eligibility": { 291 | "localization": "Show everywhere", 292 | "nprOne": true, 293 | "format": "", 294 | "status": "1", 295 | "musicOnly": false 296 | }, 297 | "programFeeds": [ 298 | { 299 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kemc-fm.rss", 300 | "programId": "morningedition" 301 | } 302 | ], 303 | "orgId": "71", 304 | "network": { 305 | "name": "Yellowstone Public Radio", 306 | "inheritingFrom": "70", 307 | "usesInheritance": true, 308 | "currentOrgId": "71", 309 | "tier1": { 310 | "name": "Yellowstone Public Radio", 311 | "id": "70", 312 | "usesInheritance": false, 313 | "status": "10", 314 | "tier2": [ 315 | { 316 | "name": "KEMC-FM", 317 | "id": "71", 318 | "usesInheritance": true, 319 | "tier3": [ 320 | { 321 | "name": "KBMC-FM", 322 | "id": "72", 323 | "usesInheritance": true 324 | }, 325 | { 326 | "name": "KYPR-FM", 327 | "id": "73", 328 | "usesInheritance": true 329 | }, 330 | { 331 | "name": "KPRQ-FM", 332 | "id": "1056", 333 | "usesInheritance": true 334 | } 335 | ] 336 | } 337 | ] 338 | } 339 | }, 340 | "guid": "4fcf700e1253430aa32f81247683a1af", 341 | "brand": { 342 | "band": "FM", 343 | "call": "KEMC", 344 | "frequency": "91.7", 345 | "marketCity": "Billings", 346 | "marketState": "MT", 347 | "name": "Yellowstone Public Radio", 348 | "tagline": "Yellowstone Public Radio" 349 | }, 350 | "streamsV2": [ 351 | { 352 | "urls": [ 353 | { 354 | "typeName": "Audio MP3 Stream", 355 | "guid": "105fd2816b6e44d3a7c2570b7bdd652a", 356 | "typeId": "10", 357 | "href": "https://ypr.streamguys1.com/live" 358 | }, 359 | { 360 | "typeName": "Audio AAC Stream", 361 | "guid": "f107c215d857440da8018fb4f6833522", 362 | "typeId": "13", 363 | "href": "https://ypr.streamguys1.com/live-aac" 364 | } 365 | ], 366 | "guid": "4fcf71540f114dd29dd3d0d1b45055d6", 367 | "title": "KEMC Yellowstone Public Radio", 368 | "primary": true 369 | } 370 | ] 371 | }, 372 | "items": [], 373 | "links": { 374 | "brand": [ 375 | { 376 | "rel": "homepage", 377 | "href": "http://ypradio.org/", 378 | "content-type": "text/html" 379 | } 380 | ], 381 | "streams": [ 382 | { 383 | "guid": "105fd2816b6e44d3a7c2570b7bdd652a", 384 | "href": "https://ypr.streamguys1.com/live", 385 | "isPrimaryStream": true, 386 | "title": "KEMC Yellowstone Public Radio", 387 | "typeId": "10", 388 | "typeName": "Audio MP3 Stream" 389 | }, 390 | { 391 | "guid": "f107c215d857440da8018fb4f6833522", 392 | "href": "https://ypr.streamguys1.com/live-aac", 393 | "isPrimaryStream": true, 394 | "title": "KEMC Yellowstone Public Radio", 395 | "typeId": "13", 396 | "typeName": "Audio AAC Stream" 397 | } 398 | ], 399 | "donation": [ 400 | { 401 | "guid": "97be3266f9884abbb01ce99fac6d94ea", 402 | "href": "http://ypradio.org/support", 403 | "title": "Pledge Online", 404 | "typeId": "4", 405 | "typeName": "Pledge Page" 406 | } 407 | ] 408 | }, 409 | "errors": [] 410 | } 411 | ], 412 | "links": {}, 413 | "errors": [] 414 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/ND.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "ND" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/47", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/KCND-FM.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "47", 26 | "network": { 27 | "name": "Prairie Public Broadcasting", 28 | "inheritingFrom": "46", 29 | "usesInheritance": true, 30 | "currentOrgId": "47", 31 | "tier1": { 32 | "name": "Prairie Public Broadcasting", 33 | "id": "46", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "KCND-FM", 39 | "id": "47", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "KDPR-FM", 44 | "id": "48", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "KDSU-FM", 49 | "id": "49", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "KMPR-FM", 54 | "id": "50", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "KPPR-FM", 59 | "id": "51", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "KPRJ-FM", 64 | "id": "52", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "KUND-FM", 69 | "id": "53", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "KFJM-FM", 74 | "id": "902", 75 | "usesInheritance": true 76 | }, 77 | { 78 | "name": "KPPD-FM", 79 | "id": "1373", 80 | "usesInheritance": true 81 | }, 82 | { 83 | "name": "KPPW-FM", 84 | "id": "1374", 85 | "usesInheritance": true 86 | } 87 | ] 88 | } 89 | ] 90 | } 91 | }, 92 | "newscast": { 93 | "id": "46", 94 | "recency": 360 95 | }, 96 | "guid": "4fcf700e0b2c4701bf967497304cabdc", 97 | "brand": { 98 | "band": "FM", 99 | "call": "KCND", 100 | "frequency": "90.5", 101 | "marketCity": "Bismarck", 102 | "marketState": "ND", 103 | "name": "Prairie Public Broadcasting", 104 | "tagline": "Prairie Public" 105 | }, 106 | "streamsV2": [ 107 | { 108 | "urls": [ 109 | { 110 | "typeName": "Audio MP3 Stream", 111 | "guid": "e61363e0b3e948e181ca1a6dbd2f74c3", 112 | "typeId": "10", 113 | "href": "https://playerservices.streamtheworld.com/pls/KCNDHD3.pls" 114 | } 115 | ], 116 | "guid": "4fcf7134116241928a3e1b42a0475921", 117 | "title": "KDSU-FM", 118 | "primary": false 119 | }, 120 | { 121 | "urls": [ 122 | { 123 | "typeName": "Audio MP3 Stream", 124 | "guid": "c098233479cb407aab35f6d390516c21", 125 | "typeId": "10", 126 | "href": "https://playerservices.streamtheworld.com/pls/KCNDHD2.pls" 127 | } 128 | ], 129 | "guid": "4fcf71340aa844b78431388de34fa6e7", 130 | "title": "PPB News Channel", 131 | "primary": true 132 | }, 133 | { 134 | "urls": [ 135 | { 136 | "typeName": "Audio MP3 Stream", 137 | "guid": "ed35b7b886f44e2e9e38ca81c86fd5a1", 138 | "typeId": "10", 139 | "href": "https://playerservices.streamtheworld.com/pls/KCNDFM.pls" 140 | } 141 | ], 142 | "guid": "4fcf713400234b6a98bded95a006bef9", 143 | "title": "PPB FM 2: Roots, Rock, and Jazz", 144 | "primary": false 145 | } 146 | ] 147 | }, 148 | "items": [], 149 | "links": { 150 | "brand": [ 151 | { 152 | "rel": "homepage", 153 | "href": "http://www.prairiepublic.org/radio/", 154 | "content-type": "text/html" 155 | }, 156 | { 157 | "rel": "logo", 158 | "href": "https://media.npr.org/images/stations/nprone_logos/ndpr.png", 159 | "content-type": "image/png" 160 | }, 161 | { 162 | "rel": "small-logo", 163 | "href": "https://media.npr.org/images/stations/logos/ndpr.gif", 164 | "content-type": "image/gif" 165 | }, 166 | { 167 | "rel": "station-message-audio", 168 | "href": "https://ondemand.npr.org/npr-mp4/message/46_04536984293a38f7252661e21337f57b.mp4", 169 | "content-type": "audio/aac" 170 | }, 171 | { 172 | "rel": "station-message-audio", 173 | "href": "https://ondemand.npr.org/npr-mp4/message/46_02ba4d8d49523c6bb02f17ad92a25e61.mp4", 174 | "content-type": "audio/aac" 175 | }, 176 | { 177 | "rel": "station-message-audio", 178 | "href": "https://ondemand.npr.org/npr-mp4/message/46_839c85ce670045f973f55e3e52d9e651.mp4", 179 | "content-type": "audio/aac" 180 | }, 181 | { 182 | "rel": "station-message-audio", 183 | "href": "https://ondemand.npr.org/npr-mp4/message/46_7415b1c179bbab58d6845ead1fabf81f.mp4", 184 | "content-type": "audio/aac" 185 | }, 186 | { 187 | "rel": "station-message-audio", 188 | "href": "https://ondemand.npr.org/npr-mp4/message/46_e02ee69b8e0dd796bf981c4ca8f5c3d2.mp4", 189 | "content-type": "audio/aac" 190 | }, 191 | { 192 | "rel": "station-message-audio", 193 | "href": "https://ondemand.npr.org/npr-mp4/message/46_e67a0a3a0d9014d7c260af1662498900.mp4", 194 | "content-type": "audio/aac" 195 | }, 196 | { 197 | "rel": "hello-id-audio", 198 | "href": "https://ondemand.npr.org/npr-mp4/stationid/46_e238ad0094721ee759b7fa55d3e76f48.mp4", 199 | "content-type": "audio/aac" 200 | }, 201 | { 202 | "rel": "facebook", 203 | "href": "http://www.facebook.com/pages/Prairie-Public/93328308021", 204 | "content-type": "text/html" 205 | }, 206 | { 207 | "rel": "twitter", 208 | "href": "http://twitter.com/prairiepublic", 209 | "content-type": "text/html" 210 | } 211 | ], 212 | "streams": [ 213 | { 214 | "guid": "e61363e0b3e948e181ca1a6dbd2f74c3", 215 | "href": "https://playerservices.streamtheworld.com/pls/KCNDHD3.pls", 216 | "isPrimaryStream": false, 217 | "title": "KDSU-FM", 218 | "typeId": "10", 219 | "typeName": "Audio MP3 Stream" 220 | }, 221 | { 222 | "guid": "c098233479cb407aab35f6d390516c21", 223 | "href": "https://playerservices.streamtheworld.com/pls/KCNDHD2.pls", 224 | "isPrimaryStream": true, 225 | "title": "PPB News Channel", 226 | "typeId": "10", 227 | "typeName": "Audio MP3 Stream" 228 | }, 229 | { 230 | "guid": "ed35b7b886f44e2e9e38ca81c86fd5a1", 231 | "href": "https://playerservices.streamtheworld.com/pls/KCNDFM.pls", 232 | "isPrimaryStream": false, 233 | "title": "PPB FM 2: Roots, Rock, and Jazz", 234 | "typeId": "10", 235 | "typeName": "Audio MP3 Stream" 236 | } 237 | ], 238 | "podcasts": [ 239 | { 240 | "guid": "b7efa9cd288545cc96557c54fb5660cf", 241 | "href": "https://ndpr.drupal.publicbroadcasting.net/podcasts/89501/rss.xml", 242 | "title": "Dakota Datebook", 243 | "typeId": "9", 244 | "typeName": "Podcast" 245 | }, 246 | { 247 | "guid": "4e94af9b75ce433aa8a2fefa608e94e8", 248 | "href": "https://ndpr.drupal.publicbroadcasting.net/podcasts/89525/rss.xml", 249 | "title": "Plains Folk", 250 | "typeId": "9", 251 | "typeName": "Podcast" 252 | }, 253 | { 254 | "guid": "252299bd5855480798dadddc886706fa", 255 | "href": "https://ndpr.drupal.publicbroadcasting.net/podcasts/89526/rss.xml", 256 | "title": "Matt Olien's Movie Reviews", 257 | "typeId": "9", 258 | "typeName": "Podcast" 259 | }, 260 | { 261 | "guid": "82bb2a07509a427a9a343c00431008f6", 262 | "href": "https://ndpr.drupal.publicbroadcasting.net/podcasts/term/1603/rss.xml", 263 | "title": "Natural North Dakota", 264 | "typeId": "9", 265 | "typeName": "Podcast" 266 | }, 267 | { 268 | "guid": "d84fbb21e14b4e64990476fd9587fa87", 269 | "href": "https://ndpr.drupal.publicbroadcasting.net/podcasts/11132/rss.xml", 270 | "title": "Why? Philosophical Discussions About Everyday Life", 271 | "typeId": "9", 272 | "typeName": "Podcast" 273 | }, 274 | { 275 | "guid": "a31fc66fb1d74e42b801ea0fea9dc6ec", 276 | "href": "https://ndpr.drupal.publicbroadcasting.net/podcasts/19744/rss.xml", 277 | "title": "Main Street", 278 | "typeId": "9", 279 | "typeName": "Podcast" 280 | } 281 | ], 282 | "donation": [ 283 | { 284 | "guid": "22436632526a4b6288206b8d682cf7c9", 285 | "href": "https://PrairiePublic.secureallegiance.com/pptv/WebModule/Donate.aspx?P=WEBRD&PAGETYPE=PLG&CHECK=fMfqRA7apNTiQl%2byqVkEd4HJipnY8PNT", 286 | "title": "Pledge Online", 287 | "typeId": "4", 288 | "typeName": "Pledge Page" 289 | }, 290 | { 291 | "guid": "b93fdf9aabe14d6daf384eafb2a11d2c", 292 | "href": "https://ondemand.npr.org/npr-mp4/donation/46_2660f79087bdbf8e263f5b4a3380ed2b.mp4", 293 | "title": "NPR One funder update 7-17", 294 | "typeId": "28", 295 | "typeName": "Station Pledge Audio" 296 | }, 297 | { 298 | "guid": "321ba14210dc45f09a42cab4ed30d43f", 299 | "href": "https://ondemand.npr.org/npr-mp4/donation/46_10c8208c13065007f668cfb9bd0097c6.mp4", 300 | "title": null, 301 | "typeId": "28", 302 | "typeName": "Station Pledge Audio" 303 | } 304 | ] 305 | }, 306 | "errors": [] 307 | } 308 | ], 309 | "links": {}, 310 | "errors": [] 311 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/NE.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "NE" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/94", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "Public Radio", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kios-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "94", 26 | "network": { 27 | "inheritingFrom": "94", 28 | "usesInheritance": false, 29 | "currentOrgId": "94", 30 | "tier1": { 31 | "name": "KIOS-FM", 32 | "id": "94", 33 | "usesInheritance": false, 34 | "status": "1" 35 | } 36 | }, 37 | "guid": "4fcf700e19ab4162a38f4c3312ebd99f", 38 | "brand": { 39 | "band": "FM", 40 | "call": "KIOS", 41 | "frequency": "91.5", 42 | "marketCity": "Omaha", 43 | "marketState": "NE", 44 | "name": "KIOS", 45 | "tagline": "Omaha Public Radio" 46 | }, 47 | "streamsV2": [ 48 | { 49 | "urls": [ 50 | { 51 | "typeName": "Audio MP3 Stream", 52 | "guid": "8b71f901b7c44c0bb80c453509fec6c4", 53 | "typeId": "10", 54 | "href": "https://playerservices.streamtheworld.com/pls/KIOSFM.pls" 55 | } 56 | ], 57 | "guid": "4fcf7159241a4870ac5fd352889fe465", 58 | "title": "KIOS-FM", 59 | "primary": true 60 | } 61 | ] 62 | }, 63 | "items": [], 64 | "links": { 65 | "brand": [ 66 | { 67 | "rel": "homepage", 68 | "href": "http://www.kios.org", 69 | "content-type": "text/html" 70 | }, 71 | { 72 | "rel": "logo", 73 | "href": "https://media.npr.org/images/stations/nprone_logos/kios_fm.png", 74 | "content-type": "image/png" 75 | }, 76 | { 77 | "rel": "small-logo", 78 | "href": "https://media.npr.org/images/stations/logos/kios_fm.gif", 79 | "content-type": "image/gif" 80 | }, 81 | { 82 | "rel": "hello-id-audio", 83 | "href": "https://ondemand.npr.org/npr-mp4/stationid/94.mp4", 84 | "content-type": "audio/aac" 85 | }, 86 | { 87 | "rel": "facebook", 88 | "href": "http://www.facebook.com/pages/KIOS-Omaha/396943800873", 89 | "content-type": "text/html" 90 | }, 91 | { 92 | "rel": "twitter", 93 | "href": "https://twitter.com/KIOSOmaha", 94 | "content-type": "text/html" 95 | } 96 | ], 97 | "streams": [ 98 | { 99 | "guid": "8b71f901b7c44c0bb80c453509fec6c4", 100 | "href": "https://playerservices.streamtheworld.com/pls/KIOSFM.pls", 101 | "isPrimaryStream": true, 102 | "title": "KIOS-FM", 103 | "typeId": "10", 104 | "typeName": "Audio MP3 Stream" 105 | } 106 | ], 107 | "podcasts": [ 108 | { 109 | "guid": "b19de28a273040f19e3381e988f8ba36", 110 | "href": "https://kios.drupal.publicbroadcasting.net/podcasts/119389/rss.xml", 111 | "title": "Made in the Middle", 112 | "typeId": "9", 113 | "typeName": "Podcast" 114 | } 115 | ], 116 | "donation": [ 117 | { 118 | "guid": "9cbf124dbdb84e57b63e86d72323f79c", 119 | "href": "https://kios.secureallegiance.com/kios/WebModule/Donate.aspx?P=KIOSNPR20&PAGETYPE=PLG&CHECK=xHSr6l9MnUjLLxZsvbv6hK1gzMC6uhq5nDjkJobrCdg%3d", 120 | "title": "Support", 121 | "typeId": "4", 122 | "typeName": "Pledge Page" 123 | }, 124 | { 125 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/94.mp4", 126 | "typeId": "29", 127 | "typeName": "Station Thank You Audio" 128 | } 129 | ] 130 | }, 131 | "errors": [] 132 | }, 133 | { 134 | "version": "1.0", 135 | "href": "https://api.npr.org/stationfinder/v3/stations/204", 136 | "attributes": { 137 | "eligibility": { 138 | "localization": "Show everywhere", 139 | "nprOne": true, 140 | "format": "", 141 | "status": "1", 142 | "musicOnly": false 143 | }, 144 | "programFeeds": [ 145 | { 146 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kucv-fm.rss", 147 | "programId": "morningedition" 148 | } 149 | ], 150 | "orgId": "204", 151 | "network": { 152 | "name": "NET Radio", 153 | "inheritingFrom": "203", 154 | "usesInheritance": true, 155 | "currentOrgId": "204", 156 | "tier1": { 157 | "name": "Nebraska Public Radio Network", 158 | "id": "203", 159 | "usesInheritance": false, 160 | "status": "10", 161 | "tier2": [ 162 | { 163 | "name": "KUCV-FM", 164 | "id": "204", 165 | "usesInheritance": true, 166 | "tier3": [ 167 | { 168 | "name": "KCNE-FM", 169 | "id": "205", 170 | "usesInheritance": true 171 | }, 172 | { 173 | "name": "KHNE-FM", 174 | "id": "206", 175 | "usesInheritance": true 176 | }, 177 | { 178 | "name": "KLNE-FM", 179 | "id": "207", 180 | "usesInheritance": true 181 | }, 182 | { 183 | "name": "KMNE-FM", 184 | "id": "208", 185 | "usesInheritance": true 186 | }, 187 | { 188 | "name": "KPNE-FM", 189 | "id": "209", 190 | "usesInheritance": true 191 | }, 192 | { 193 | "name": "KRNE-FM", 194 | "id": "210", 195 | "usesInheritance": true 196 | }, 197 | { 198 | "name": "KTNE-FM", 199 | "id": "211", 200 | "usesInheritance": true 201 | }, 202 | { 203 | "name": "KXNE-FM", 204 | "id": "212", 205 | "usesInheritance": true 206 | } 207 | ] 208 | } 209 | ] 210 | } 211 | }, 212 | "newscast": { 213 | "id": "203", 214 | "recency": 120 215 | }, 216 | "guid": "4fcf700f12294fd7b21cc8123ddf4131", 217 | "brand": { 218 | "band": "FM", 219 | "call": "KUCV", 220 | "frequency": "91.1", 221 | "marketCity": "Lincoln", 222 | "marketState": "NE", 223 | "name": "NET Radio", 224 | "tagline": "Nebraska's NPR Station" 225 | }, 226 | "streamsV2": [ 227 | { 228 | "urls": [ 229 | { 230 | "typeName": "Audio MP3 Stream", 231 | "guid": "20548ce525d44101940a58608eae5a65", 232 | "typeId": "10", 233 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/KUCVHD2.mp3" 234 | } 235 | ], 236 | "guid": "4fcf71611f1543db9aec59a4246bd5d8", 237 | "title": "NET Radio HD2", 238 | "primary": false 239 | }, 240 | { 241 | "urls": [ 242 | { 243 | "typeName": "Audio MP3 Stream", 244 | "guid": "fd7bbfba94eb4a688032103af7d65eac", 245 | "typeId": "10", 246 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/KUCVFM.mp3" 247 | } 248 | ], 249 | "guid": "4fcf7161150e4d21a94e079d05ddba40", 250 | "title": "NET Radio", 251 | "primary": true 252 | } 253 | ] 254 | }, 255 | "items": [], 256 | "links": { 257 | "brand": [ 258 | { 259 | "rel": "homepage", 260 | "href": "http://netnebraska.org/basic-page/radio/radio", 261 | "content-type": "text/html" 262 | }, 263 | { 264 | "rel": "logo", 265 | "href": "https://media.npr.org/images/stations/nprone_logos/net.png", 266 | "content-type": "image/png" 267 | }, 268 | { 269 | "rel": "small-logo", 270 | "href": "https://media.npr.org/images/stations/logos/net.gif", 271 | "content-type": "image/gif" 272 | }, 273 | { 274 | "rel": "facebook", 275 | "href": "http://www.facebook.com/pages/NET-Radio/58056117013", 276 | "content-type": "text/html" 277 | }, 278 | { 279 | "rel": "twitter", 280 | "href": "https://twitter.com/netnewsnebraska", 281 | "content-type": "text/html" 282 | } 283 | ], 284 | "streams": [ 285 | { 286 | "guid": "20548ce525d44101940a58608eae5a65", 287 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/KUCVHD2.mp3", 288 | "isPrimaryStream": false, 289 | "title": "NET Radio HD2", 290 | "typeId": "10", 291 | "typeName": "Audio MP3 Stream" 292 | }, 293 | { 294 | "guid": "fd7bbfba94eb4a688032103af7d65eac", 295 | "href": "https://playerservices.streamtheworld.com/api/livestream-redirect/KUCVFM.mp3", 296 | "isPrimaryStream": true, 297 | "title": "NET Radio", 298 | "typeId": "10", 299 | "typeName": "Audio MP3 Stream" 300 | } 301 | ], 302 | "podcasts": [ 303 | { 304 | "guid": "24603ced43144d75857ce00b9e3f7eb1", 305 | "href": "https://feeds.feedburner.com/news_features", 306 | "title": "Nebraska News", 307 | "typeId": "9", 308 | "typeName": "Podcast" 309 | }, 310 | { 311 | "guid": "ff704a06d07e4ee4bf2e3ad7b0fb3887", 312 | "href": "https://feeds.feedburner.com/friday_live", 313 | "title": "Friday LIVE", 314 | "typeId": "9", 315 | "typeName": "Podcast" 316 | }, 317 | { 318 | "guid": "0bcfbe2e515349e9b2914b56a0209e4a", 319 | "href": "https://feeds.feedburner.com/all_about_books", 320 | "title": "All About Books", 321 | "typeId": "9", 322 | "typeName": "Podcast" 323 | }, 324 | { 325 | "guid": "e556932ff87547a8af5104d73f5b40df", 326 | "href": "https://www.spreaker.com/show/3599528/episodes/feed", 327 | "title": "The PlainStory", 328 | "typeId": "9", 329 | "typeName": "Podcast" 330 | }, 331 | { 332 | "guid": "2c54907f34044b1a94fd8ef52450a42d", 333 | "href": "https://feeds.feedburner.com/humanities_desk", 334 | "title": "Humanities Desk", 335 | "typeId": "9", 336 | "typeName": "Podcast" 337 | }, 338 | { 339 | "guid": "8915431180da496ca2d747a8bc8f18cc", 340 | "href": "https://feeds.feedburner.com/big_red", 341 | "title": "Big Red Wrap-Up", 342 | "typeId": "9", 343 | "typeName": "Podcast" 344 | }, 345 | { 346 | "guid": "3b3f87986e5d416cad6539ea4df4e3ec", 347 | "href": "https://feeds.feedburner.com/friday_live_extra", 348 | "title": "Friday LIVE Extra", 349 | "typeId": "9", 350 | "typeName": "Podcast" 351 | }, 352 | { 353 | "guid": "aaf9277e8d3e46128943397eb29248a5", 354 | "href": "https://netsync.unl.edu/on-the-table.rss", 355 | "title": "On The Table", 356 | "typeId": "9", 357 | "typeName": "Podcast" 358 | } 359 | ], 360 | "donation": [ 361 | { 362 | "guid": "279bfa90862c495d929f8e4e9349d86b", 363 | "href": "https://netnebraska.org/donate", 364 | "title": "Support NET Radio", 365 | "typeId": "4", 366 | "typeName": "Pledge Page" 367 | } 368 | ] 369 | }, 370 | "errors": [] 371 | } 372 | ], 373 | "links": {}, 374 | "errors": [] 375 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/NH.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "NH" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/376", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wevo-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "376", 26 | "network": { 27 | "name": "New Hampshire Public Radio", 28 | "inheritingFrom": "375", 29 | "usesInheritance": true, 30 | "currentOrgId": "376", 31 | "tier1": { 32 | "name": "New Hampshire Public Radio", 33 | "id": "375", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "WEVO-FM", 39 | "id": "376", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "WEVC-FM", 44 | "id": "377", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "WEVH-FM", 49 | "id": "378", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "WEVN-FM", 54 | "id": "379", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "WEVJ-FM", 59 | "id": "808", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "WEVS-FM", 64 | "id": "946", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "WEVF-FM", 69 | "id": "1239", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "WEVQ-FM", 74 | "id": "1283", 75 | "usesInheritance": true 76 | }, 77 | { 78 | "name": "WCNH-FM", 79 | "id": "1478", 80 | "usesInheritance": false 81 | }, 82 | { 83 | "name": "StateImpact New Hampshire", 84 | "id": "20003", 85 | "usesInheritance": false 86 | } 87 | ] 88 | } 89 | ] 90 | } 91 | }, 92 | "newscast": { 93 | "id": "375", 94 | "recency": 240 95 | }, 96 | "guid": "4fcf70101510449dae07d2ce3f8d1a9d", 97 | "brand": { 98 | "band": "FM", 99 | "call": "WEVO", 100 | "frequency": "89.1", 101 | "marketCity": "Concord", 102 | "marketState": "NH", 103 | "name": "New Hampshire Public Radio", 104 | "tagline": "New Hampshire Public Radio" 105 | }, 106 | "streamsV2": [ 107 | { 108 | "urls": [ 109 | { 110 | "typeName": "Audio MP3 Stream", 111 | "guid": "f7f04bcd1ffa44669f3244835ed72224", 112 | "typeId": "10", 113 | "href": "https://nhpr-ice.streamguys1.com/nhpr" 114 | } 115 | ], 116 | "guid": "4fcf713d03ea47fc85731a707dd9d6d5", 117 | "title": "NHPR", 118 | "primary": true 119 | } 120 | ] 121 | }, 122 | "items": [], 123 | "links": { 124 | "brand": [ 125 | { 126 | "rel": "logo", 127 | "href": "https://media.npr.org/images/stations/nprone_logos/nhpr.png", 128 | "content-type": "image/png" 129 | }, 130 | { 131 | "rel": "small-logo", 132 | "href": "https://media.npr.org/images/stations/logos/nhpr.gif", 133 | "content-type": "image/gif" 134 | }, 135 | { 136 | "rel": "hello-id-audio", 137 | "href": "https://ondemand.npr.org/npr-mp4/stationid/375.mp4", 138 | "content-type": "audio/aac" 139 | }, 140 | { 141 | "rel": "facebook", 142 | "href": "http://www.facebook.com/nhpublicradio", 143 | "content-type": "text/html" 144 | }, 145 | { 146 | "rel": "twitter", 147 | "href": "http://www.nhpr.org/nhpr", 148 | "content-type": "text/html" 149 | } 150 | ], 151 | "streams": [ 152 | { 153 | "guid": "f7f04bcd1ffa44669f3244835ed72224", 154 | "href": "https://nhpr-ice.streamguys1.com/nhpr", 155 | "isPrimaryStream": true, 156 | "title": "NHPR", 157 | "typeId": "10", 158 | "typeName": "Audio MP3 Stream" 159 | } 160 | ], 161 | "podcasts": [ 162 | { 163 | "guid": "1fe26b23e58045468d0ae862ab8b5dcf", 164 | "href": "https://feeds.megaphone.fm/ADL2362946801", 165 | "title": "Supervision", 166 | "typeId": "9", 167 | "typeName": "Podcast" 168 | }, 169 | { 170 | "guid": "d7b998a50eed4cf7b8e30d44c4f0d983", 171 | "href": "https://feeds.megaphone.fm/PPY5156495451", 172 | "title": "Outside/In", 173 | "typeId": "9", 174 | "typeName": "Podcast" 175 | }, 176 | { 177 | "guid": "fe672600e1064f29befe82e312b45385", 178 | "href": "https://feeds.megaphone.fm/ADL1256921019", 179 | "title": "Stranglehold", 180 | "typeId": "9", 181 | "typeName": "Podcast" 182 | }, 183 | { 184 | "guid": "6bc0308c256e470dadd01b7c4cf4526c", 185 | "href": "https://nhpr.drupal.publicbroadcasting.net/podcasts/114/rss.xml", 186 | "title": "The Exchange", 187 | "typeId": "9", 188 | "typeName": "Podcast" 189 | }, 190 | { 191 | "guid": "74aa5eb7f1344b15b1e56bc606bd9d9e", 192 | "href": "https://feeds.megaphone.fm/ADL2418094798", 193 | "title": "Second Greatest Show On Earth", 194 | "typeId": "9", 195 | "typeName": "Podcast" 196 | }, 197 | { 198 | "guid": "8afce3ef9b4149b0a88149d88df70ac5", 199 | "href": "https://feeds.megaphone.fm/PPY1168790592", 200 | "title": "Civics 101", 201 | "typeId": "9", 202 | "typeName": "Podcast" 203 | }, 204 | { 205 | "guid": "624492e7d92341beb7450d38201bc415", 206 | "href": "https://feeds.megaphone.fm/patientzero", 207 | "title": "Patient Zero: Lyme Disease", 208 | "typeId": "9", 209 | "typeName": "Podcast" 210 | }, 211 | { 212 | "guid": "2c48f4275b8d4a0699422d390a8ca120", 213 | "href": "https://feeds.megaphone.fm/PPY4168247956", 214 | "title": "10 Minute Writer's Workshop", 215 | "typeId": "9", 216 | "typeName": "Podcast" 217 | }, 218 | { 219 | "guid": "7a35b12aabbd44168a434d58ff1f6138", 220 | "href": "https://feeds.megaphone.fm/bearbrook", 221 | "title": "Bear Brook", 222 | "typeId": "9", 223 | "typeName": "Podcast" 224 | } 225 | ], 226 | "donation": [ 227 | { 228 | "guid": "266ea983d689419bbcf76d440de9874e", 229 | "href": "http://nhpr.convio.net/site/Donation2?df_id=3566&mfc_pref=T&3566.donation=form1&s_src=NPR&s_subsrc=COVID", 230 | "title": "Support NHPR", 231 | "typeId": "4", 232 | "typeName": "Pledge Page" 233 | }, 234 | { 235 | "guid": "e0505c07dbdf4bcda7533fda28b9a3f4", 236 | "href": "https://ondemand.npr.org/npr-mp4/donation/375_c9d6e978de043491d2b95f8e6031e92c.mp4", 237 | "title": "Give during crisis GANLEY", 238 | "typeId": "28", 239 | "typeName": "Station Pledge Audio" 240 | }, 241 | { 242 | "guid": "5574843c3ebe45178851da42ec23e280", 243 | "href": "https://ondemand.npr.org/npr-mp4/donation/375_e694f3ba989e40bcbc6af88bf8c5e714.mp4", 244 | "title": "Give during crisis KNOY", 245 | "typeId": "28", 246 | "typeName": "Station Pledge Audio" 247 | }, 248 | { 249 | "guid": "b0f557a276044bc39860a82168bf2357", 250 | "href": "https://ondemand.npr.org/npr-mp4/donation/375_df540dc603af04b27eec3380cdb25582.mp4", 251 | "title": "Give during crisis BIELLO", 252 | "typeId": "28", 253 | "typeName": "Station Pledge Audio" 254 | }, 255 | { 256 | "guid": "b6eb8515fae647ce860ddacb79af053c", 257 | "href": "https://ondemand.npr.org/npr-mp4/donation/375_23984b54ce22038ffca38bc586c619f2.mp4", 258 | "title": "Community JOurnalsim sustain #2", 259 | "typeId": "28", 260 | "typeName": "Station Pledge Audio" 261 | }, 262 | { 263 | "guid": "75eb608c149e41efb2e1a006aee7aa78", 264 | "href": "https://ondemand.npr.org/npr-mp4/donation/375_98900e79ebe06d92dec03756993b9a78.mp4", 265 | "title": "Community JOurnalsim sustain #1", 266 | "typeId": "28", 267 | "typeName": "Station Pledge Audio" 268 | } 269 | ] 270 | }, 271 | "errors": [] 272 | }, 273 | { 274 | "version": "1.0", 275 | "href": "https://api.npr.org/stationfinder/v3/stations/1478", 276 | "attributes": { 277 | "eligibility": { 278 | "localization": "Exclude from news contexts", 279 | "nprOne": false, 280 | "format": "Classical", 281 | "status": "1", 282 | "musicOnly": true 283 | }, 284 | "guid": "5423193410a446929a70a80a25f71bc1", 285 | "brand": { 286 | "band": "FM", 287 | "call": "WCNH", 288 | "frequency": "91.5", 289 | "marketCity": "Bow", 290 | "marketState": "NH", 291 | "name": "WCNH-FM", 292 | "tagline": null 293 | }, 294 | "orgId": "1478", 295 | "network": { 296 | "inheritingFrom": "1478", 297 | "usesInheritance": false, 298 | "currentOrgId": "1478" 299 | } 300 | }, 301 | "items": [], 302 | "links": { 303 | "brand": [] 304 | }, 305 | "errors": [] 306 | } 307 | ], 308 | "links": {}, 309 | "errors": [] 310 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/RI.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "RI" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/333", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": false, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "orgId": "333", 20 | "network": { 21 | "name": "The Public's Radio", 22 | "inheritingFrom": "1289", 23 | "usesInheritance": true, 24 | "currentOrgId": "333", 25 | "tier1": { 26 | "name": "Rhode Island Public Radio", 27 | "id": "1289", 28 | "usesInheritance": false, 29 | "status": "10", 30 | "tier2": [ 31 | { 32 | "name": "WNPN-FM", 33 | "id": "333", 34 | "usesInheritance": true, 35 | "tier3": [ 36 | { 37 | "name": "WELH-FM", 38 | "id": "1298", 39 | "usesInheritance": true 40 | }, 41 | { 42 | "name": "WCVY-FM", 43 | "id": "1300", 44 | "usesInheritance": true 45 | }, 46 | { 47 | "name": "WNPE-FM", 48 | "id": "1587", 49 | "usesInheritance": true 50 | } 51 | ] 52 | } 53 | ] 54 | } 55 | }, 56 | "guid": "4fcf70100b5f44f7b5887c17c58a19c1", 57 | "brand": { 58 | "band": "FM", 59 | "call": "WNPN", 60 | "frequency": "89.3", 61 | "marketCity": "Newport", 62 | "marketState": "RI", 63 | "name": "The Public's Radio", 64 | "tagline": "89.3 FM in Rhode Island and The Southcoast" 65 | }, 66 | "streamsV2": [ 67 | { 68 | "urls": [ 69 | { 70 | "typeName": "Audio MP3 Stream", 71 | "guid": "f6850221fdf645ccb861863dfb4e166c", 72 | "typeId": "10", 73 | "href": "https://amber.streamguys1.com:5595/stationconnect" 74 | } 75 | ], 76 | "guid": "4fcf715f122e441280fddfb5117f402b", 77 | "title": "The Public's Radio", 78 | "primary": true 79 | } 80 | ] 81 | }, 82 | "items": [], 83 | "links": { 84 | "brand": [ 85 | { 86 | "rel": "homepage", 87 | "href": "http://www.thepublicsradio.org", 88 | "content-type": "text/html" 89 | }, 90 | { 91 | "rel": "logo", 92 | "href": "https://media.npr.org/images/stations/nprone_logos/ripr.png", 93 | "content-type": "image/png" 94 | }, 95 | { 96 | "rel": "small-logo", 97 | "href": "https://media.npr.org/images/stations/logos/ripr.gif", 98 | "content-type": "image/gif" 99 | }, 100 | { 101 | "rel": "hello-id-audio", 102 | "href": "https://ondemand.npr.org/npr-mp4/stationid/1289_c0e37daa813d35bf69b42afd44f6d9bf.mp4", 103 | "content-type": "audio/aac" 104 | } 105 | ], 106 | "streams": [ 107 | { 108 | "guid": "f6850221fdf645ccb861863dfb4e166c", 109 | "href": "https://amber.streamguys1.com:5595/stationconnect", 110 | "isPrimaryStream": true, 111 | "title": "The Public's Radio", 112 | "typeId": "10", 113 | "typeName": "Audio MP3 Stream" 114 | } 115 | ], 116 | "podcasts": [ 117 | { 118 | "guid": "43f1504d353e41129e3ae765921c73d9", 119 | "href": "https://thepublicsradio.org/show/artscape/feed.xml", 120 | "title": "Artscape", 121 | "typeId": "9", 122 | "typeName": "Podcast" 123 | }, 124 | { 125 | "guid": "2e600c493c1b4c3e92c8e86452bac8fe", 126 | "href": "https://ripr.net/news/DirCasterV09j/dircaster.php", 127 | "title": "The Public's Radio Local Newscast", 128 | "typeId": "9", 129 | "typeName": "Podcast" 130 | } 131 | ], 132 | "donation": [ 133 | { 134 | "guid": "35191fd9f4614f438ea0d844a2653f93", 135 | "href": "http://www.thepublicsradio.org/give", 136 | "title": "Support", 137 | "typeId": "4", 138 | "typeName": "Pledge Page" 139 | } 140 | ] 141 | }, 142 | "errors": [] 143 | } 144 | ], 145 | "links": {}, 146 | "errors": [] 147 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/SC.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "SC" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/488", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wltr-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "488", 26 | "network": { 27 | "name": "South Carolina Public Radio", 28 | "inheritingFrom": "486", 29 | "usesInheritance": true, 30 | "currentOrgId": "488", 31 | "tier1": { 32 | "name": "SOUTH CAROLINA EDUCATIONAL TV COMMISSION", 33 | "id": "486", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "WLTR-FM", 39 | "id": "487", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "WEPR-FM", 44 | "id": "488", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "WHMC-FM", 49 | "id": "489", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "WJWJ-FM", 54 | "id": "490", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "WLJK-FM", 59 | "id": "491", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "WNSC-FM", 64 | "id": "492", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "WRJA-FM", 69 | "id": "493", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "WSCI-FM", 74 | "id": "494", 75 | "usesInheritance": true 76 | } 77 | ] 78 | } 79 | ] 80 | } 81 | }, 82 | "newscast": { 83 | "id": "486", 84 | "recency": 120 85 | }, 86 | "guid": "4fcf70110c3b4f26bb1c50f1aaf40b7b", 87 | "brand": { 88 | "band": "FM", 89 | "call": "WEPR", 90 | "frequency": "90.1", 91 | "marketCity": "Greenville", 92 | "marketState": "SC", 93 | "name": "South Carolina Public Radio", 94 | "tagline": "South Carolina Public Radio" 95 | }, 96 | "streamsV2": [ 97 | { 98 | "urls": [ 99 | { 100 | "typeName": "Audio MP3 Stream", 101 | "guid": "977d3b04b1664062aefcfa8e63f3847f", 102 | "typeId": "10", 103 | "href": "https://playerservices.streamtheworld.com/pls/WRJAFM.pls" 104 | } 105 | ], 106 | "guid": "1499bbaada2000a440bbf90fb72744b2", 107 | "title": "South Carolina Public Radio: News", 108 | "primary": true 109 | }, 110 | { 111 | "urls": [ 112 | { 113 | "typeName": "Audio MP3 Stream", 114 | "guid": "8de3f1fa0b334c37af909fdd64abca7c", 115 | "typeId": "10", 116 | "href": "https://playerservices.streamtheworld.com/pls/WLTRFM.pls" 117 | } 118 | ], 119 | "guid": "1499bb447b102b94e998bdfab0f55100", 120 | "title": "South Carolina Public Radio: Classical", 121 | "primary": false 122 | } 123 | ] 124 | }, 125 | "items": [], 126 | "links": { 127 | "brand": [ 128 | { 129 | "rel": "homepage", 130 | "href": "http://www.southcarolinapublicradio.org", 131 | "content-type": "text/html" 132 | }, 133 | { 134 | "rel": "logo", 135 | "href": "https://media.npr.org/images/stations/nprone_logos/scpub.png", 136 | "content-type": "image/png" 137 | }, 138 | { 139 | "rel": "small-logo", 140 | "href": "https://media.npr.org/images/stations/logos/scern.gif", 141 | "content-type": "image/gif" 142 | }, 143 | { 144 | "rel": "hello-id-audio", 145 | "href": "https://ondemand.npr.org/npr-mp4/stationid/486_2a8901377f9fe0c42d2bccf73c03b512.mp4", 146 | "content-type": "audio/aac" 147 | }, 148 | { 149 | "rel": "hello-id-audio", 150 | "href": "https://ondemand.npr.org/npr-mp4/stationid/486_9eef159c12aab34c89466c0cb9f4043a.mp4", 151 | "content-type": "audio/aac" 152 | }, 153 | { 154 | "rel": "facebook", 155 | "href": "http://www.facebook.com/SouthCarolinaETV", 156 | "content-type": "text/html" 157 | }, 158 | { 159 | "rel": "twitter", 160 | "href": "https://twitter.com/scetvradio", 161 | "content-type": "text/html" 162 | } 163 | ], 164 | "streams": [ 165 | { 166 | "guid": "977d3b04b1664062aefcfa8e63f3847f", 167 | "href": "https://playerservices.streamtheworld.com/pls/WRJAFM.pls", 168 | "isPrimaryStream": true, 169 | "title": "South Carolina Public Radio: News", 170 | "typeId": "10", 171 | "typeName": "Audio MP3 Stream" 172 | }, 173 | { 174 | "guid": "8de3f1fa0b334c37af909fdd64abca7c", 175 | "href": "https://playerservices.streamtheworld.com/pls/WLTRFM.pls", 176 | "isPrimaryStream": false, 177 | "title": "South Carolina Public Radio: Classical", 178 | "typeId": "10", 179 | "typeName": "Audio MP3 Stream" 180 | } 181 | ], 182 | "podcasts": [ 183 | { 184 | "guid": "273a944a9cb04dde95a2b13aea71996b", 185 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/814/rss.xml", 186 | "title": "South Carolina from A to Z", 187 | "typeId": "9", 188 | "typeName": "Podcast" 189 | }, 190 | { 191 | "guid": "a71722b5630842c29f3e25a704a8cbdf", 192 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/80033/rss.xml", 193 | "title": "My Telehealth Podcast", 194 | "typeId": "9", 195 | "typeName": "Podcast" 196 | }, 197 | { 198 | "guid": "0c77f431f3af4676bde4f968c9518989", 199 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/813/rss.xml", 200 | "title": "A Minute with Miles", 201 | "typeId": "9", 202 | "typeName": "Podcast" 203 | }, 204 | { 205 | "guid": "be29f0ab9654476cbda921d4826051b1", 206 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/7617/rss.xml", 207 | "title": "State House Week", 208 | "typeId": "9", 209 | "typeName": "Podcast" 210 | }, 211 | { 212 | "guid": "769dabbe02a348b3a18816dbb0481215", 213 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/38377/rss.xml", 214 | "title": "Narrative", 215 | "typeId": "9", 216 | "typeName": "Podcast" 217 | }, 218 | { 219 | "guid": "8b3535a9355544529d2be5ea616c58e8", 220 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/654/rss.xml", 221 | "title": "NatureNotes", 222 | "typeId": "9", 223 | "typeName": "Podcast" 224 | }, 225 | { 226 | "guid": "1d94434222f04136873518d43a2e1318", 227 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/12597/rss.xml", 228 | "title": "The South Carolina Business Review", 229 | "typeId": "9", 230 | "typeName": "Podcast" 231 | }, 232 | { 233 | "guid": "9a8dd995fd754bbcb3486abb8bce6ae4", 234 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/76884/rss.xml", 235 | "title": "South Carolina Lede", 236 | "typeId": "9", 237 | "typeName": "Podcast" 238 | }, 239 | { 240 | "guid": "456a50cdfe7f405488e73385189b474c", 241 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/11367/rss.xml", 242 | "title": "South Carolina Focus", 243 | "typeId": "9", 244 | "typeName": "Podcast" 245 | }, 246 | { 247 | "guid": "2333249212ad4e94bfc455ab1e764803", 248 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/657/rss.xml", 249 | "title": "\"Making it Grow\" Minutes", 250 | "typeId": "9", 251 | "typeName": "Podcast" 252 | }, 253 | { 254 | "guid": "8e74c1271c5b4b24817d9e3250c1913c", 255 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/363/rss.xml", 256 | "title": "Walter Edgar's Journal", 257 | "typeId": "9", 258 | "typeName": "Podcast" 259 | }, 260 | { 261 | "guid": "6fb55d9d5f1e4cdc9f6774e513839733", 262 | "href": "https://wltr.drupal.publicbroadcasting.net/podcasts/9529/rss.xml", 263 | "title": "Health Focus", 264 | "typeId": "9", 265 | "typeName": "Podcast" 266 | } 267 | ], 268 | "donation": [ 269 | { 270 | "guid": "d648c8ca647e4610be830e6eec7142cc", 271 | "href": "https://etvendowment.thankyou4caring.org/npr", 272 | "title": "Support South Carolina Public Radio", 273 | "typeId": "4", 274 | "typeName": "Pledge Page" 275 | }, 276 | { 277 | "guid": "da7dade9524d4929ab448f9b2dfb22ca", 278 | "href": "https://ondemand.npr.org/npr-mp4/donation/486_6d68a6a47dc414b55c957783c4229a93.mp4", 279 | "title": "NPR One 13 Greene", 280 | "typeId": "28", 281 | "typeName": "Station Pledge Audio" 282 | }, 283 | { 284 | "guid": "726aa187303042eeab3a5d51234c8064", 285 | "href": "https://ondemand.npr.org/npr-mp4/donation/486_79b01e41203517f2e639e27c8e3c32f2.mp4", 286 | "title": "PLEDGE - Short - Turner", 287 | "typeId": "28", 288 | "typeName": "Station Pledge Audio" 289 | }, 290 | { 291 | "guid": "2fd2e23cbb5141a4a2f91b2666e1005d", 292 | "href": "https://ondemand.npr.org/npr-mp4/donation/486_6e3fed9af9d2763a66702dd008a98434.mp4", 293 | "title": "NPR One 18 Eaddy", 294 | "typeId": "28", 295 | "typeName": "Station Pledge Audio" 296 | }, 297 | { 298 | "guid": "564e21d469114aae9f2fba16f93696de", 299 | "href": "https://ondemand.npr.org/npr-mp4/donation/486_1da3a9f5518bbe78ccc417f8ff1e45be.mp4", 300 | "title": "NPR One Eisenberg", 301 | "typeId": "28", 302 | "typeName": "Station Pledge Audio" 303 | } 304 | ] 305 | }, 306 | "errors": [] 307 | }, 308 | { 309 | "version": "1.0", 310 | "href": "https://api.npr.org/stationfinder/v3/stations/778", 311 | "attributes": { 312 | "eligibility": { 313 | "localization": "Show everywhere", 314 | "nprOne": true, 315 | "format": "Jazz", 316 | "status": "1", 317 | "musicOnly": true 318 | }, 319 | "guid": "4fcf701301604cf6b7ef2521445b520a", 320 | "brand": { 321 | "band": "FM", 322 | "call": "WSSB", 323 | "frequency": "90.3", 324 | "marketCity": "Orangeburg", 325 | "marketState": "SC", 326 | "name": "WSSB", 327 | "tagline": "South Carolina's Jazz Station" 328 | }, 329 | "orgId": "778", 330 | "network": { 331 | "inheritingFrom": "778", 332 | "usesInheritance": false, 333 | "currentOrgId": "778", 334 | "tier1": { 335 | "name": "WSSB-FM", 336 | "id": "778", 337 | "usesInheritance": false, 338 | "status": "1" 339 | } 340 | } 341 | }, 342 | "items": [], 343 | "links": { 344 | "brand": [ 345 | { 346 | "rel": "homepage", 347 | "href": "http://www.wssbradio.org", 348 | "content-type": "text/html" 349 | }, 350 | { 351 | "rel": "small-logo", 352 | "href": "https://media.npr.org/images/stations/logos/wssb_fm.gif", 353 | "content-type": "image/gif" 354 | }, 355 | { 356 | "rel": "hello-id-audio", 357 | "href": "https://ondemand.npr.org/npr-mp4/stationid/778.mp4", 358 | "content-type": "audio/aac" 359 | }, 360 | { 361 | "rel": "facebook", 362 | "href": "http://www.facebook.com/pages/WSSB-Radio-903-FM/110667559000009", 363 | "content-type": "text/html" 364 | } 365 | ], 366 | "donation": [ 367 | { 368 | "guid": "e698ebba861c4a39bc4c2d436d37b4ae", 369 | "href": "https://scstateconnect.scsu.edu/sslpage.aspx?pid=378", 370 | "title": "Support", 371 | "typeId": "4", 372 | "typeName": "Pledge Page" 373 | }, 374 | { 375 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/778.mp4", 376 | "typeId": "29", 377 | "typeName": "Station Thank You Audio" 378 | } 379 | ] 380 | }, 381 | "errors": [] 382 | } 383 | ], 384 | "links": {}, 385 | "errors": [] 386 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/SD.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "SD" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/238", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kusd-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "238", 26 | "network": { 27 | "name": "SDPB Radio", 28 | "inheritingFrom": "237", 29 | "usesInheritance": true, 30 | "currentOrgId": "238", 31 | "tier1": { 32 | "name": "South Dakota Public Radio", 33 | "id": "237", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "KUSD-FM", 39 | "id": "238", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "KBHE-FM", 44 | "id": "239", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "KCSD-FM", 49 | "id": "240", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "KDSD-FM", 54 | "id": "241", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "KESD-FM", 59 | "id": "242", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "KPSD-FM", 64 | "id": "243", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "KQSD-FM", 69 | "id": "244", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "KTSD-FM", 74 | "id": "245", 75 | "usesInheritance": true 76 | }, 77 | { 78 | "name": "KZSD-FM", 79 | "id": "246", 80 | "usesInheritance": true 81 | }, 82 | { 83 | "name": "KYSD-FM", 84 | "id": "1219", 85 | "usesInheritance": true 86 | }, 87 | { 88 | "name": "KJSD-FM", 89 | "id": "1356", 90 | "usesInheritance": true 91 | } 92 | ] 93 | } 94 | ] 95 | } 96 | }, 97 | "newscast": { 98 | "id": "237", 99 | "recency": 360 100 | }, 101 | "guid": "4fcf700f1a53459ea7dc777ef23d8820", 102 | "brand": { 103 | "band": "FM", 104 | "call": "KUSD", 105 | "frequency": "89.7", 106 | "marketCity": "Vermillion", 107 | "marketState": "SD", 108 | "name": "SDPB Radio", 109 | "tagline": "Learn. Dream. Grow." 110 | }, 111 | "streamsV2": [ 112 | { 113 | "urls": [ 114 | { 115 | "typeName": "Audio MP3 Stream", 116 | "guid": "82f612d63e62453c921c769556a2befc", 117 | "typeId": "10", 118 | "href": "https://playerservices.streamtheworld.com/pls/KUSDFM.pls" 119 | } 120 | ], 121 | "guid": "4fcf71462167431989e5291c3bc26218", 122 | "title": "SDPB Radio", 123 | "primary": true 124 | }, 125 | { 126 | "urls": [ 127 | { 128 | "typeName": "Audio MP3 Stream", 129 | "guid": "ce75df76809f40d79525aaa0c8a157d8", 130 | "typeId": "10", 131 | "href": "https://playerservices.streamtheworld.com/pls/KUSDHD2.pls" 132 | } 133 | ], 134 | "guid": "4fcf7147068e4bf6af553b4ebec18acf", 135 | "title": "SDPB Classical", 136 | "primary": false 137 | } 138 | ] 139 | }, 140 | "items": [], 141 | "links": { 142 | "brand": [ 143 | { 144 | "rel": "homepage", 145 | "href": "https://listen.sdpb.org", 146 | "content-type": "text/html" 147 | }, 148 | { 149 | "rel": "logo", 150 | "href": "https://media.npr.org/images/stations/nprone_logos/sdpb.png", 151 | "content-type": "image/png" 152 | }, 153 | { 154 | "rel": "small-logo", 155 | "href": "https://media.npr.org/images/stations/logos/sdpb.gif", 156 | "content-type": "image/gif" 157 | }, 158 | { 159 | "rel": "facebook", 160 | "href": "http://www.facebook.com/SoDakPB", 161 | "content-type": "text/html" 162 | }, 163 | { 164 | "rel": "twitter", 165 | "href": "https://twitter.com/sodakpb", 166 | "content-type": "text/html" 167 | } 168 | ], 169 | "streams": [ 170 | { 171 | "guid": "82f612d63e62453c921c769556a2befc", 172 | "href": "https://playerservices.streamtheworld.com/pls/KUSDFM.pls", 173 | "isPrimaryStream": true, 174 | "title": "SDPB Radio", 175 | "typeId": "10", 176 | "typeName": "Audio MP3 Stream" 177 | }, 178 | { 179 | "guid": "ce75df76809f40d79525aaa0c8a157d8", 180 | "href": "https://playerservices.streamtheworld.com/pls/KUSDHD2.pls", 181 | "isPrimaryStream": false, 182 | "title": "SDPB Classical", 183 | "typeId": "10", 184 | "typeName": "Audio MP3 Stream" 185 | } 186 | ], 187 | "podcasts": [ 188 | { 189 | "guid": "e9c987aa96db4cfbb51bd3dd482c6928", 190 | "href": "https://sdpb.drupal.publicbroadcasting.net/podcasts/106130/rss.xml", 191 | "title": "In the Moment", 192 | "typeId": "9", 193 | "typeName": "Podcast" 194 | }, 195 | { 196 | "guid": "3141ccc5912744c583fc97765efb39bc", 197 | "href": "https://sdpb.drupal.publicbroadcasting.net/podcasts/80101/rss.xml", 198 | "title": "Statehouse: SDPB Radio\u2019s Legislative Podcast", 199 | "typeId": "9", 200 | "typeName": "Podcast" 201 | }, 202 | { 203 | "guid": "7fbfed0fb4ec42d9a1becb3908d210bc", 204 | "href": "https://sdpb.drupal.publicbroadcasting.net/podcasts/11724/rss.xml", 205 | "title": "Tech Radio", 206 | "typeId": "9", 207 | "typeName": "Podcast" 208 | } 209 | ], 210 | "donation": [ 211 | { 212 | "guid": "ca4d4c464c4c49418f0466c7e5aaa999", 213 | "href": "http://sdpb.org/donate", 214 | "title": "Donate", 215 | "typeId": "4", 216 | "typeName": "Pledge Page" 217 | }, 218 | { 219 | "guid": "c15ed895755044fbb390bf4748a709bc", 220 | "href": "https://sdpb.secureallegiance.com/sdpb/WebModule/Donate.aspx?P=ONLINEINST&PAGETYPE=PLG&CHECK=l65dT%2fJDBFQEVS8d%2bDYJ7b1YhDw50SikSh2nq0qouhg%3d", 221 | "title": "Donate", 222 | "typeId": "27", 223 | "typeName": "Station NPR One Pledge Page" 224 | } 225 | ] 226 | }, 227 | "errors": [] 228 | }, 229 | { 230 | "version": "1.0", 231 | "href": "https://api.npr.org/stationfinder/v3/stations/830", 232 | "attributes": { 233 | "eligibility": { 234 | "localization": "Exclude from news contexts", 235 | "nprOne": false, 236 | "format": "Classical", 237 | "status": "1", 238 | "musicOnly": true 239 | }, 240 | "guid": "4fcf70130c264d2a8d6415210d4912c2", 241 | "brand": { 242 | "band": "FM", 243 | "call": "KRSD", 244 | "frequency": "88.1", 245 | "marketCity": "Sioux Falls", 246 | "marketState": "SD", 247 | "name": "Classical MPR", 248 | "tagline": "Member supported" 249 | }, 250 | "orgId": "830", 251 | "network": { 252 | "inheritingFrom": "830", 253 | "usesInheritance": false, 254 | "currentOrgId": "830" 255 | }, 256 | "streamsV2": [ 257 | { 258 | "urls": [ 259 | { 260 | "typeName": "Audio MP3 Stream", 261 | "guid": "a68b15f946004a17a4cc0fae3581ff39", 262 | "typeId": "10", 263 | "href": "https://cms.stream.publicradio.org/cms-npr.mp3" 264 | }, 265 | { 266 | "typeName": "Audio AAC Stream", 267 | "guid": "dfcd3a2ae0694e91b6bb7beeb0562feb", 268 | "typeId": "13", 269 | "href": "https://cms.stream.publicradio.org/cms-npr.aac" 270 | } 271 | ], 272 | "guid": "4fcf714123f54bc69e2913e58703bd8b", 273 | "title": "Classical MPR", 274 | "primary": true 275 | } 276 | ] 277 | }, 278 | "items": [], 279 | "links": { 280 | "brand": [ 281 | { 282 | "rel": "homepage", 283 | "href": "http://www.mpr.org/", 284 | "content-type": "text/html" 285 | }, 286 | { 287 | "rel": "logo", 288 | "href": "https://media.npr.org/images/stations/nprone_logos/krsd_fm.png", 289 | "content-type": "image/png" 290 | }, 291 | { 292 | "rel": "small-logo", 293 | "href": "https://media.npr.org/images/stations/logos/krsd_fm.gif", 294 | "content-type": "image/gif" 295 | }, 296 | { 297 | "rel": "hello-id-audio", 298 | "href": "https://ondemand.npr.org/npr-mp4/stationid/830.mp4", 299 | "content-type": "audio/aac" 300 | } 301 | ], 302 | "streams": [ 303 | { 304 | "guid": "a68b15f946004a17a4cc0fae3581ff39", 305 | "href": "https://cms.stream.publicradio.org/cms-npr.mp3", 306 | "isPrimaryStream": true, 307 | "title": "Classical MPR", 308 | "typeId": "10", 309 | "typeName": "Audio MP3 Stream" 310 | }, 311 | { 312 | "guid": "dfcd3a2ae0694e91b6bb7beeb0562feb", 313 | "href": "https://cms.stream.publicradio.org/cms-npr.aac", 314 | "isPrimaryStream": true, 315 | "title": "Classical MPR", 316 | "typeId": "13", 317 | "typeName": "Audio AAC Stream" 318 | } 319 | ], 320 | "donation": [ 321 | { 322 | "guid": "606f121b608741f6b69abafe43212ab1", 323 | "href": "http://minnesota.publicradio.org/support/", 324 | "title": "Support MPR", 325 | "typeId": "4", 326 | "typeName": "Pledge Page" 327 | }, 328 | { 329 | "href": "https://ondemand.npr.org/npr-mp4/thankyou/830.mp4", 330 | "typeId": "29", 331 | "typeName": "Station Thank You Audio" 332 | } 333 | ] 334 | }, 335 | "errors": [] 336 | } 337 | ], 338 | "links": {}, 339 | "errors": [] 340 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/WV.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "WV" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/688", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wvpb-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "688", 26 | "network": { 27 | "name": "West Virginia Public Broadcasting", 28 | "inheritingFrom": "681", 29 | "usesInheritance": true, 30 | "currentOrgId": "688", 31 | "tier1": { 32 | "name": "West Virginia Public Broadcasting", 33 | "id": "681", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "WVPB-FM", 39 | "id": "682", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "WVDS-FM", 44 | "id": "683", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "WVEP-FM", 49 | "id": "684", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "WVNP-FM", 54 | "id": "685", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "WVBY-FM", 59 | "id": "686", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "WVPG-FM", 64 | "id": "687", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "WVPM-FM", 69 | "id": "688", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "WVPW-FM", 74 | "id": "689", 75 | "usesInheritance": true 76 | }, 77 | { 78 | "name": "WVWV-FM", 79 | "id": "690", 80 | "usesInheritance": true 81 | }, 82 | { 83 | "name": "WVBL-FM", 84 | "id": "1456", 85 | "usesInheritance": true 86 | }, 87 | { 88 | "name": "WVWS-FM", 89 | "id": "1457", 90 | "usesInheritance": true 91 | }, 92 | { 93 | "name": "WVKM-FM", 94 | "id": "1567", 95 | "usesInheritance": false 96 | } 97 | ] 98 | } 99 | ] 100 | } 101 | }, 102 | "newscast": { 103 | "id": "681", 104 | "recency": 360 105 | }, 106 | "guid": "4fcf701214f54e558f0fd29aeb26e554", 107 | "brand": { 108 | "band": "FM", 109 | "call": "WVPM", 110 | "frequency": "90.9", 111 | "marketCity": "Morgantown", 112 | "marketState": "WV", 113 | "name": "West Virginia Public Broadcasting", 114 | "tagline": "Telling West Virginia's Story" 115 | }, 116 | "streamsV2": [ 117 | { 118 | "urls": [ 119 | { 120 | "typeName": "Audio MP3 Stream", 121 | "guid": "54bad8dcae814662ba6adb9a64b32c6b", 122 | "typeId": "10", 123 | "href": "https://s2.radio.co/sd4fccca83/listen" 124 | } 125 | ], 126 | "guid": "5b6ece581b8341108971883b6738740b", 127 | "title": "Mountain State Radio", 128 | "primary": false 129 | }, 130 | { 131 | "urls": [ 132 | { 133 | "typeName": "Audio MP3 Stream", 134 | "guid": "2d565efc847a4a2888f87dfbc5427131", 135 | "typeId": "10", 136 | "href": "https://wvpublic.streamguys1.com/wvpb" 137 | }, 138 | { 139 | "typeName": "Audio AAC Stream", 140 | "guid": "eca0cc487f964f548a1fe54e85223573", 141 | "typeId": "13", 142 | "href": "https://wvpublic.streamguys1.com/wvpb64k.aac" 143 | } 144 | ], 145 | "guid": "148f0be433303cb44d1b831fafaa54af", 146 | "title": "West Virginia Public Broadcasting", 147 | "primary": true 148 | } 149 | ] 150 | }, 151 | "items": [], 152 | "links": { 153 | "brand": [ 154 | { 155 | "rel": "homepage", 156 | "href": "https://www.wvpublic.org", 157 | "content-type": "text/html" 158 | }, 159 | { 160 | "rel": "logo", 161 | "href": "https://media.npr.org/images/stations/nprone_logos/wvpb.png", 162 | "content-type": "image/png" 163 | }, 164 | { 165 | "rel": "small-logo", 166 | "href": "https://media.npr.org/images/stations/logos/wvpb.gif", 167 | "content-type": "image/gif" 168 | }, 169 | { 170 | "rel": "hello-id-audio", 171 | "href": "https://ondemand.npr.org/npr-mp4/stationid/681_d900722aa9eabcd5298b1d316b8bdf19.mp4", 172 | "content-type": "audio/aac" 173 | }, 174 | { 175 | "rel": "facebook", 176 | "href": "http://www.facebook.com/wvpublic", 177 | "content-type": "text/html" 178 | }, 179 | { 180 | "rel": "twitter", 181 | "href": "http://twitter.com/wvpublicnews", 182 | "content-type": "text/html" 183 | } 184 | ], 185 | "streams": [ 186 | { 187 | "guid": "54bad8dcae814662ba6adb9a64b32c6b", 188 | "href": "https://s2.radio.co/sd4fccca83/listen", 189 | "isPrimaryStream": false, 190 | "title": "Mountain State Radio", 191 | "typeId": "10", 192 | "typeName": "Audio MP3 Stream" 193 | }, 194 | { 195 | "guid": "2d565efc847a4a2888f87dfbc5427131", 196 | "href": "https://wvpublic.streamguys1.com/wvpb", 197 | "isPrimaryStream": true, 198 | "title": "West Virginia Public Broadcasting", 199 | "typeId": "10", 200 | "typeName": "Audio MP3 Stream" 201 | }, 202 | { 203 | "guid": "eca0cc487f964f548a1fe54e85223573", 204 | "href": "https://wvpublic.streamguys1.com/wvpb64k.aac", 205 | "isPrimaryStream": true, 206 | "title": "West Virginia Public Broadcasting", 207 | "typeId": "13", 208 | "typeName": "Audio AAC Stream" 209 | } 210 | ], 211 | "podcasts": [ 212 | { 213 | "guid": "eda9ba45cd2e4ab9b8180e2943af5561", 214 | "href": "https://feeds.feedburner.com/usthempodcast", 215 | "title": "Us & Them", 216 | "typeId": "9", 217 | "typeName": "Podcast" 218 | }, 219 | { 220 | "guid": "5f9d5cc6e31443e898cdbbe3a2ff6518", 221 | "href": "https://feedpress.me/thefrontporchpodcast", 222 | "title": "The Front Porch", 223 | "typeId": "9", 224 | "typeName": "Podcast" 225 | }, 226 | { 227 | "guid": "82ced992654647a1bd631b9cb1c01b4b", 228 | "href": "https://feedpress.me/viewpoint", 229 | "title": "Viewpoint", 230 | "typeId": "9", 231 | "typeName": "Podcast" 232 | }, 233 | { 234 | "guid": "4dfebe0d6a4a478db46d916a6fa73aa0", 235 | "href": "https://feedpress.me/legtodaypodcast", 236 | "title": "The Legislature Today", 237 | "typeId": "9", 238 | "typeName": "Podcast" 239 | }, 240 | { 241 | "guid": "6cb4018bc0e449869aff7e0ab57a6178", 242 | "href": "https://feedpress.me/WestVirginaMorning", 243 | "title": "West Virginia Morning", 244 | "typeId": "9", 245 | "typeName": "Podcast" 246 | }, 247 | { 248 | "guid": "af3322f01d064cf68cf4779a4a9ab5df", 249 | "href": "https://feedpress.me/mountainstagepodcast", 250 | "title": "Mountain Stage Podcast", 251 | "typeId": "9", 252 | "typeName": "Podcast" 253 | }, 254 | { 255 | "guid": "ed8ddae4769f4c979955ebd7fc69d81b", 256 | "href": "https://feedpress.me/InsideAppalachia", 257 | "title": "Inside Appalachia", 258 | "typeId": "9", 259 | "typeName": "Podcast" 260 | } 261 | ], 262 | "donation": [ 263 | { 264 | "guid": "42764d62e64e469b89f3e3d45dbaab7c", 265 | "href": "https://afg.secureallegiance.com/wvpb/WebModule/Donate.aspx?P=WVPBGVGTUE&PAGETYPE=PLG&CHECK=1s4aTkc5iRkUCiTeBD%2bOlb1YhDw50SikSh2nq0qouhg%3d", 266 | "title": "Pledge Online", 267 | "typeId": "4", 268 | "typeName": "Pledge Page" 269 | }, 270 | { 271 | "guid": "1968b1ea543b4442818e4d08a6d2deda", 272 | "href": "https://ondemand.npr.org/npr-mp4/donation/681_0409cfa6a9bc71c57bcd752cd61cba02.mp4", 273 | "title": null, 274 | "typeId": "28", 275 | "typeName": "Station Pledge Audio" 276 | }, 277 | { 278 | "guid": "c3cba85e568a4dbaaa201399d30b09f2", 279 | "href": "https://ondemand.npr.org/npr-mp4/donation/681_f85700a373060d2c9b206496446161fd.mp4", 280 | "title": null, 281 | "typeId": "28", 282 | "typeName": "Station Pledge Audio" 283 | }, 284 | { 285 | "guid": "d5b47c7f30c74d158b6e7b0df51af429", 286 | "href": "https://ondemand.npr.org/npr-mp4/donation/681_618c764cec123e61d8e4b699a8819939.mp4", 287 | "title": null, 288 | "typeId": "28", 289 | "typeName": "Station Pledge Audio" 290 | }, 291 | { 292 | "guid": "52828a5be2c44c219795d932f0bfccdb", 293 | "href": "https://ondemand.npr.org/npr-mp4/donation/681_ff207826581e1e6cad95611678e24e83.mp4", 294 | "title": null, 295 | "typeId": "28", 296 | "typeName": "Station Pledge Audio" 297 | } 298 | ] 299 | }, 300 | "errors": [] 301 | }, 302 | { 303 | "version": "1.0", 304 | "href": "https://api.npr.org/stationfinder/v3/stations/1567", 305 | "attributes": { 306 | "eligibility": { 307 | "localization": "Show everywhere", 308 | "nprOne": true, 309 | "format": "Public Radio", 310 | "status": "1", 311 | "musicOnly": false 312 | }, 313 | "guid": "a654bdc4d70144408ce63340f5dd8c65", 314 | "programFeeds": [ 315 | { 316 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/wvpb-fm.rss", 317 | "programId": "morningedition" 318 | } 319 | ], 320 | "brand": { 321 | "band": "FM", 322 | "call": "WVKM", 323 | "frequency": "106.7", 324 | "marketCity": "Matewan", 325 | "marketState": "WV", 326 | "name": "WVKM-FM", 327 | "tagline": null 328 | }, 329 | "orgId": "1567", 330 | "network": { 331 | "inheritingFrom": "1567", 332 | "usesInheritance": false, 333 | "currentOrgId": "1567" 334 | } 335 | }, 336 | "items": [], 337 | "links": { 338 | "brand": [] 339 | }, 340 | "errors": [] 341 | } 342 | ], 343 | "links": {}, 344 | "errors": [] 345 | } -------------------------------------------------------------------------------- /data/collected/npr-stations/WY.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "href": "https://api.npr.org/stationfinder/v3/stations", 4 | "attributes": { 5 | "query": "WY" 6 | }, 7 | "items": [ 8 | { 9 | "version": "1.0", 10 | "href": "https://api.npr.org/stationfinder/v3/stations/256", 11 | "attributes": { 12 | "eligibility": { 13 | "localization": "Show everywhere", 14 | "nprOne": true, 15 | "format": "", 16 | "status": "1", 17 | "musicOnly": false 18 | }, 19 | "programFeeds": [ 20 | { 21 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kuwr-fm.rss", 22 | "programId": "morningedition" 23 | } 24 | ], 25 | "orgId": "256", 26 | "network": { 27 | "name": "Wyoming Public Radio", 28 | "inheritingFrom": "255", 29 | "usesInheritance": true, 30 | "currentOrgId": "256", 31 | "tier1": { 32 | "name": "Wyoming Public Radio Network", 33 | "id": "255", 34 | "usesInheritance": false, 35 | "status": "10", 36 | "tier2": [ 37 | { 38 | "name": "KUWR-FM", 39 | "id": "256", 40 | "usesInheritance": true, 41 | "tier3": [ 42 | { 43 | "name": "KBUW-FM", 44 | "id": "257", 45 | "usesInheritance": true 46 | }, 47 | { 48 | "name": "KDUW-FM", 49 | "id": "258", 50 | "usesInheritance": true 51 | }, 52 | { 53 | "name": "KSUW-FM", 54 | "id": "259", 55 | "usesInheritance": true 56 | }, 57 | { 58 | "name": "KUWA-FM", 59 | "id": "260", 60 | "usesInheritance": true 61 | }, 62 | { 63 | "name": "KUWC-FM", 64 | "id": "261", 65 | "usesInheritance": true 66 | }, 67 | { 68 | "name": "KUWD-FM", 69 | "id": "262", 70 | "usesInheritance": true 71 | }, 72 | { 73 | "name": "KUWG-FM", 74 | "id": "263", 75 | "usesInheritance": true 76 | }, 77 | { 78 | "name": "KUWJ-FM", 79 | "id": "264", 80 | "usesInheritance": true 81 | }, 82 | { 83 | "name": "KUWN-FM", 84 | "id": "265", 85 | "usesInheritance": true 86 | }, 87 | { 88 | "name": "KUWP-FM", 89 | "id": "266", 90 | "usesInheritance": true 91 | }, 92 | { 93 | "name": "KUWT-FM", 94 | "id": "267", 95 | "usesInheritance": true 96 | }, 97 | { 98 | "name": "KUWX-FM", 99 | "id": "268", 100 | "usesInheritance": true 101 | }, 102 | { 103 | "name": "KUWZ-FM", 104 | "id": "269", 105 | "usesInheritance": true 106 | }, 107 | { 108 | "name": "KUWY-FM", 109 | "id": "1057", 110 | "usesInheritance": true 111 | }, 112 | { 113 | "name": "KUWL-FM", 114 | "id": "1058", 115 | "usesInheritance": true 116 | }, 117 | { 118 | "name": "KUWI-FM", 119 | "id": "1417", 120 | "usesInheritance": true 121 | }, 122 | { 123 | "name": "KUWE-FM", 124 | "id": "1537", 125 | "usesInheritance": false 126 | }, 127 | { 128 | "name": "KUWV-FM", 129 | "id": "1538", 130 | "usesInheritance": false 131 | }, 132 | { 133 | "name": "KZUW-FM", 134 | "id": "1543", 135 | "usesInheritance": false 136 | }, 137 | { 138 | "name": "KUWW-FM", 139 | "id": "1544", 140 | "usesInheritance": false 141 | }, 142 | { 143 | "name": "KUWK-FM", 144 | "id": "1545", 145 | "usesInheritance": true 146 | }, 147 | { 148 | "name": "KEUW-FM", 149 | "id": "1546", 150 | "usesInheritance": false 151 | }, 152 | { 153 | "name": "KAIW-FM", 154 | "id": "1714", 155 | "usesInheritance": true 156 | } 157 | ] 158 | } 159 | ] 160 | } 161 | }, 162 | "newscast": { 163 | "id": "255", 164 | "recency": 240 165 | }, 166 | "guid": "4fcf700f1dfc44dda771f8ce3cddcd68", 167 | "brand": { 168 | "band": "FM", 169 | "call": "KUWR", 170 | "frequency": "91.9", 171 | "marketCity": "Laramie", 172 | "marketState": "WY", 173 | "name": "Wyoming Public Radio", 174 | "tagline": "Wyoming Public Media Statewide Network" 175 | }, 176 | "streamsV2": [ 177 | { 178 | "urls": [ 179 | { 180 | "typeName": "Audio MP3 Stream", 181 | "guid": "000ca24a6bdc44d0bbd380293895f4f2", 182 | "typeId": "10", 183 | "href": "https://wyoming-public-ice.streamguys1.com/JZZ128MP3" 184 | } 185 | ], 186 | "guid": "4fcf7152031542988296837ae0dd52ad", 187 | "title": "Jazz Wyoming", 188 | "primary": false 189 | }, 190 | { 191 | "urls": [ 192 | { 193 | "typeName": "Audio MP3 Stream", 194 | "guid": "89437f8116694d828d540175cdd080c9", 195 | "typeId": "10", 196 | "href": "https://wyoming-public-ice.streamguys1.com/WYS128MP3" 197 | } 198 | ], 199 | "guid": "df8dd1c3d0954abb8382b95b245d5bc7", 200 | "title": "Wyoming Sounds", 201 | "primary": false 202 | }, 203 | { 204 | "urls": [ 205 | { 206 | "typeName": "Audio MP3 Stream", 207 | "guid": "b62bae2982ec4bc79657e00bf49346f6", 208 | "typeId": "10", 209 | "href": "https://wyoming-public-ice.streamguys1.com/CLS128MP3" 210 | } 211 | ], 212 | "guid": "13f0fb3328c02244ea988707b7816b25", 213 | "title": "Classical Wyoming", 214 | "primary": false 215 | }, 216 | { 217 | "urls": [ 218 | { 219 | "typeName": "Audio MP3 Stream", 220 | "guid": "bdbf36f5490e48de8468716d6fc7bf83", 221 | "typeId": "10", 222 | "href": "https://wyoming-public-ice.streamguys1.com/WPR128MP3" 223 | } 224 | ], 225 | "guid": "4fcf715118864bbbb504f32d22a19868", 226 | "title": "Wyoming Public Radio", 227 | "primary": true 228 | } 229 | ] 230 | }, 231 | "items": [], 232 | "links": { 233 | "brand": [ 234 | { 235 | "rel": "homepage", 236 | "href": "https://www.wyomingpublicmedia.org", 237 | "content-type": "text/html" 238 | }, 239 | { 240 | "rel": "logo", 241 | "href": "https://media.npr.org/images/stations/nprone_logos/wprn.png", 242 | "content-type": "image/png" 243 | }, 244 | { 245 | "rel": "small-logo", 246 | "href": "https://media.npr.org/images/stations/logos/wprn.gif", 247 | "content-type": "image/gif" 248 | }, 249 | { 250 | "rel": "facebook", 251 | "href": "https://www.facebook.com/WyomingPublicMedia", 252 | "content-type": "text/html" 253 | }, 254 | { 255 | "rel": "twitter", 256 | "href": "https://twitter.com/WYPublicMedia", 257 | "content-type": "text/html" 258 | } 259 | ], 260 | "streams": [ 261 | { 262 | "guid": "000ca24a6bdc44d0bbd380293895f4f2", 263 | "href": "https://wyoming-public-ice.streamguys1.com/JZZ128MP3", 264 | "isPrimaryStream": false, 265 | "title": "Jazz Wyoming", 266 | "typeId": "10", 267 | "typeName": "Audio MP3 Stream" 268 | }, 269 | { 270 | "guid": "89437f8116694d828d540175cdd080c9", 271 | "href": "https://wyoming-public-ice.streamguys1.com/WYS128MP3", 272 | "isPrimaryStream": false, 273 | "title": "Wyoming Sounds", 274 | "typeId": "10", 275 | "typeName": "Audio MP3 Stream" 276 | }, 277 | { 278 | "guid": "b62bae2982ec4bc79657e00bf49346f6", 279 | "href": "https://wyoming-public-ice.streamguys1.com/CLS128MP3", 280 | "isPrimaryStream": false, 281 | "title": "Classical Wyoming", 282 | "typeId": "10", 283 | "typeName": "Audio MP3 Stream" 284 | }, 285 | { 286 | "guid": "bdbf36f5490e48de8468716d6fc7bf83", 287 | "href": "https://wyoming-public-ice.streamguys1.com/WPR128MP3", 288 | "isPrimaryStream": true, 289 | "title": "Wyoming Public Radio", 290 | "typeId": "10", 291 | "typeName": "Audio MP3 Stream" 292 | } 293 | ], 294 | "podcasts": [ 295 | { 296 | "guid": "725aff9d0f344810aee5ec1a12cee165", 297 | "href": "https://feeds.podtrac.com/0HsQUhE5lGnQ", 298 | "title": "HumaNature", 299 | "typeId": "9", 300 | "typeName": "Podcast" 301 | }, 302 | { 303 | "guid": "f95b8211823e49d0a9e4a8b4ca851884", 304 | "href": "https://feeds.podtrac.com/IDG2gabM8Gsg", 305 | "title": "Open Spaces", 306 | "typeId": "9", 307 | "typeName": "Podcast" 308 | }, 309 | { 310 | "guid": "dc72592d8e6946ae8433776dac0899ac", 311 | "href": "https://feeds.podtrac.com/nVrxU9wSWwad", 312 | "title": "Spoken Words", 313 | "typeId": "9", 314 | "typeName": "Podcast" 315 | }, 316 | { 317 | "guid": "7833ad6f02244869812d84c8b4ece199", 318 | "href": "https://feeds.podtrac.com/tEYH22ImV_a0", 319 | "title": "The Modern West", 320 | "typeId": "9", 321 | "typeName": "Podcast" 322 | } 323 | ], 324 | "donation": [ 325 | { 326 | "guid": "90c77baff48349068ee202e6d3417ab0", 327 | "href": "https://donate.nprstations.org/wpr/wyomingpublicradio", 328 | "title": "Donate ", 329 | "typeId": "4", 330 | "typeName": "Pledge Page" 331 | }, 332 | { 333 | "guid": "f3397e80e0b944e9ac9c0f2789833377", 334 | "href": "https://donate.nprstations.org/wpr/wyomingpublicradio", 335 | "title": "Donate", 336 | "typeId": "27", 337 | "typeName": "Station NPR One Pledge Page" 338 | }, 339 | { 340 | "guid": "1ecd3437689b41bc82a23fa4b3014ebf", 341 | "href": "https://ondemand.npr.org/npr-mp4/donation/255_acbcb1bd4c0281e81a32c5c3c6809abd.mp4", 342 | "title": "NPR One Pledge Audio", 343 | "typeId": "28", 344 | "typeName": "Station Pledge Audio" 345 | } 346 | ] 347 | }, 348 | "errors": [] 349 | }, 350 | { 351 | "version": "1.0", 352 | "href": "https://api.npr.org/stationfinder/v3/stations/1546", 353 | "attributes": { 354 | "eligibility": { 355 | "localization": "Show everywhere", 356 | "nprOne": true, 357 | "format": "Public Radio", 358 | "status": "1", 359 | "musicOnly": false 360 | }, 361 | "guid": "8f962fd76b174e5ebc3c2864b48ab914", 362 | "brand": { 363 | "band": "FM", 364 | "call": "KEUW", 365 | "frequency": "89.9", 366 | "marketCity": "Torrington", 367 | "marketState": "WY", 368 | "name": "KEUW-FM", 369 | "tagline": null 370 | }, 371 | "orgId": "1546", 372 | "network": { 373 | "inheritingFrom": "1546", 374 | "usesInheritance": false, 375 | "currentOrgId": "1546" 376 | } 377 | }, 378 | "items": [], 379 | "links": { 380 | "brand": [] 381 | }, 382 | "errors": [] 383 | }, 384 | { 385 | "version": "1.0", 386 | "href": "https://api.npr.org/stationfinder/v3/stations/1544", 387 | "attributes": { 388 | "eligibility": { 389 | "localization": "Show everywhere", 390 | "nprOne": true, 391 | "format": "Public Radio", 392 | "status": "1", 393 | "musicOnly": false 394 | }, 395 | "guid": "d5f343d3e8b44b15b89d3cf30724cdab", 396 | "brand": { 397 | "band": "FM", 398 | "call": "KUWW", 399 | "frequency": "90.9", 400 | "marketCity": "Fort Washakie", 401 | "marketState": "WY", 402 | "name": "KUWW-FM", 403 | "tagline": null 404 | }, 405 | "orgId": "1544", 406 | "network": { 407 | "inheritingFrom": "1544", 408 | "usesInheritance": false, 409 | "currentOrgId": "1544" 410 | } 411 | }, 412 | "items": [], 413 | "links": { 414 | "brand": [] 415 | }, 416 | "errors": [] 417 | }, 418 | { 419 | "version": "1.0", 420 | "href": "https://api.npr.org/stationfinder/v3/stations/1056", 421 | "attributes": { 422 | "eligibility": { 423 | "localization": "Show everywhere", 424 | "nprOne": true, 425 | "format": "", 426 | "status": "1", 427 | "musicOnly": false 428 | }, 429 | "programFeeds": [ 430 | { 431 | "href": "https://replay.omny.fm/feeds/npr/morning-edition/kemc-fm.rss", 432 | "programId": "morningedition" 433 | } 434 | ], 435 | "orgId": "1056", 436 | "network": { 437 | "name": "Yellowstone Public Radio", 438 | "inheritingFrom": "70", 439 | "usesInheritance": true, 440 | "currentOrgId": "1056", 441 | "tier1": { 442 | "name": "Yellowstone Public Radio", 443 | "id": "70", 444 | "usesInheritance": false, 445 | "status": "10", 446 | "tier2": [ 447 | { 448 | "name": "KEMC-FM", 449 | "id": "71", 450 | "usesInheritance": true, 451 | "tier3": [ 452 | { 453 | "name": "KBMC-FM", 454 | "id": "72", 455 | "usesInheritance": true 456 | }, 457 | { 458 | "name": "KYPR-FM", 459 | "id": "73", 460 | "usesInheritance": true 461 | }, 462 | { 463 | "name": "KPRQ-FM", 464 | "id": "1056", 465 | "usesInheritance": true 466 | } 467 | ] 468 | } 469 | ] 470 | } 471 | }, 472 | "guid": "4fcf701410e041a690f404a22c86b8ef", 473 | "brand": { 474 | "band": "FM", 475 | "call": "KPRQ", 476 | "frequency": "88.1", 477 | "marketCity": "Sheridan", 478 | "marketState": "WY", 479 | "name": "Yellowstone Public Radio", 480 | "tagline": "Yellowstone Public Radio" 481 | }, 482 | "streamsV2": [ 483 | { 484 | "urls": [ 485 | { 486 | "typeName": "Audio MP3 Stream", 487 | "guid": "105fd2816b6e44d3a7c2570b7bdd652a", 488 | "typeId": "10", 489 | "href": "https://ypr.streamguys1.com/live" 490 | }, 491 | { 492 | "typeName": "Audio AAC Stream", 493 | "guid": "f107c215d857440da8018fb4f6833522", 494 | "typeId": "13", 495 | "href": "https://ypr.streamguys1.com/live-aac" 496 | } 497 | ], 498 | "guid": "4fcf71540f114dd29dd3d0d1b45055d6", 499 | "title": "KEMC Yellowstone Public Radio", 500 | "primary": true 501 | } 502 | ] 503 | }, 504 | "items": [], 505 | "links": { 506 | "brand": [ 507 | { 508 | "rel": "homepage", 509 | "href": "http://ypradio.org/", 510 | "content-type": "text/html" 511 | } 512 | ], 513 | "streams": [ 514 | { 515 | "guid": "105fd2816b6e44d3a7c2570b7bdd652a", 516 | "href": "https://ypr.streamguys1.com/live", 517 | "isPrimaryStream": true, 518 | "title": "KEMC Yellowstone Public Radio", 519 | "typeId": "10", 520 | "typeName": "Audio MP3 Stream" 521 | }, 522 | { 523 | "guid": "f107c215d857440da8018fb4f6833522", 524 | "href": "https://ypr.streamguys1.com/live-aac", 525 | "isPrimaryStream": true, 526 | "title": "KEMC Yellowstone Public Radio", 527 | "typeId": "13", 528 | "typeName": "Audio AAC Stream" 529 | } 530 | ], 531 | "donation": [ 532 | { 533 | "guid": "97be3266f9884abbb01ce99fac6d94ea", 534 | "href": "http://ypradio.org/support", 535 | "title": "Pledge Online", 536 | "typeId": "4", 537 | "typeName": "Pledge Page" 538 | } 539 | ] 540 | }, 541 | "errors": [] 542 | }, 543 | { 544 | "version": "1.0", 545 | "href": "https://api.npr.org/stationfinder/v3/stations/1543", 546 | "attributes": { 547 | "eligibility": { 548 | "localization": "Exclude from news contexts", 549 | "nprOne": false, 550 | "format": "Classical", 551 | "status": "1", 552 | "musicOnly": true 553 | }, 554 | "guid": "12f78ecfec0b4f84ae2e5bcadde43699", 555 | "brand": { 556 | "band": "FM", 557 | "call": "KZUW", 558 | "frequency": "88.5", 559 | "marketCity": "Reliance", 560 | "marketState": "WY", 561 | "name": "KZUW-FM", 562 | "tagline": null 563 | }, 564 | "orgId": "1543", 565 | "network": { 566 | "inheritingFrom": "1543", 567 | "usesInheritance": false, 568 | "currentOrgId": "1543" 569 | } 570 | }, 571 | "items": [], 572 | "links": { 573 | "brand": [] 574 | }, 575 | "errors": [] 576 | }, 577 | { 578 | "version": "1.0", 579 | "href": "https://api.npr.org/stationfinder/v3/stations/1537", 580 | "attributes": { 581 | "eligibility": { 582 | "localization": "Show everywhere", 583 | "nprOne": true, 584 | "format": "Public Radio", 585 | "status": "1", 586 | "musicOnly": false 587 | }, 588 | "guid": "c55d3bc9f230466281a6cc2a0e353024", 589 | "brand": { 590 | "band": "FM", 591 | "call": "KUWE", 592 | "frequency": "89.7", 593 | "marketCity": "Evanston", 594 | "marketState": "WY", 595 | "name": "KUWE-FM", 596 | "tagline": null 597 | }, 598 | "orgId": "1537", 599 | "network": { 600 | "inheritingFrom": "1537", 601 | "usesInheritance": false, 602 | "currentOrgId": "1537" 603 | } 604 | }, 605 | "items": [], 606 | "links": { 607 | "brand": [] 608 | }, 609 | "errors": [] 610 | }, 611 | { 612 | "version": "1.0", 613 | "href": "https://api.npr.org/stationfinder/v3/stations/1538", 614 | "attributes": { 615 | "eligibility": { 616 | "localization": "Show everywhere", 617 | "nprOne": true, 618 | "format": "Public Radio", 619 | "status": "1", 620 | "musicOnly": false 621 | }, 622 | "guid": "6904748b211b42d59d2f01532d42c714", 623 | "brand": { 624 | "band": "FM", 625 | "call": "KUWV", 626 | "frequency": "90.7", 627 | "marketCity": "Lingle", 628 | "marketState": "WY", 629 | "name": "KUWV-FM", 630 | "tagline": null 631 | }, 632 | "orgId": "1538", 633 | "network": { 634 | "inheritingFrom": "1538", 635 | "usesInheritance": false, 636 | "currentOrgId": "1538" 637 | } 638 | }, 639 | "items": [], 640 | "links": { 641 | "brand": [] 642 | }, 643 | "errors": [] 644 | } 645 | ], 646 | "links": {}, 647 | "errors": [] 648 | } -------------------------------------------------------------------------------- /scripts/collect/collect_npr_stations.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import csv 3 | import json 4 | from pathlib import Path 5 | import requests 6 | from urllib.parse import urlencode 7 | 8 | # example for California: https://www.npr.org/proxy/stationfinder/v3/stations?q=CA 9 | BASE_API_ENDPOINT = 'https://www.npr.org/proxy/stationfinder/v3/stations' 10 | DEST_DIR = Path('data', 'collected', 'npr-stations') 11 | 12 | SRC_PATH = Path('data', 'archived', 'lookups', 'state-codes.csv') 13 | 14 | 15 | def api_url(code): 16 | return f"{BASE_API_ENDPOINT}?{urlencode({'q': code})}" 17 | 18 | def dest_path(code): 19 | return DEST_DIR.joinpath(f'{code}.json') 20 | 21 | def fetch_api(url): 22 | resp = requests.get(url) 23 | return (True, resp.text) if resp.status_code == 200 else (False, resp.status_code) 24 | 25 | def load_state_codes(): 26 | return [row['usps'] for row in csv.DictReader(SRC_PATH.open()) if row['is_state'] == 'TRUE' or row['usps'] == 'DC' ] 27 | 28 | 29 | def loge(txt): 30 | print(txt) 31 | 32 | 33 | def main(): 34 | DEST_DIR.mkdir(exist_ok=True, parents=True) 35 | for state in load_state_codes(): 36 | url = api_url(state) 37 | loge(f"Fetching {url}") 38 | is_success, txt = fetch_api(url) 39 | 40 | if not is_success: 41 | loge(f"ERROR: got status code of {txt}") 42 | else: 43 | loge(f"Success: {len(txt)} chars") 44 | jdata = json.loads(txt) 45 | jtext = json.dumps(jdata, indent=2) 46 | dest = dest_path(state) 47 | dest.write_text(jtext) 48 | loge(f"Wrote {len(jdata['items'])} stations to {dest}") 49 | 50 | 51 | if __name__ == '__main__': 52 | main() 53 | -------------------------------------------------------------------------------- /scripts/compile/compile_npr_stations.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import csv 3 | import json 4 | from pathlib import Path 5 | 6 | DEST_PATH = Path('data', 'compiled', 'npr-stations.csv') 7 | SRC_DIR = Path('data', 'collected', 'npr-stations') 8 | 9 | 10 | def glob_files(): 11 | return SRC_DIR.glob('*.json') 12 | 13 | 14 | 15 | def main(): 16 | DEST_PATH.parent.mkdir(exist_ok=True, parents=True) 17 | stations = [] 18 | for src in glob_files(): 19 | data = json.loads(src.read_text()) 20 | for item in data['items']: 21 | s = {} 22 | atts = item['attributes'] 23 | s['org_id'] = atts['orgId'] 24 | 25 | brand = atts['brand'] 26 | s['name'] = brand['name'] 27 | s['band'] = brand['band'] 28 | s['callsign'] = brand['call'] 29 | s['tagline'] = brand['tagline'] 30 | 31 | net = atts['network'] 32 | s['network_name'] = net.get('name') 33 | # s['tier1_name'] = net['tier1']['name'] 34 | 35 | el = atts['eligibility'] 36 | s['eformat'] = el['format'] 37 | s['estatus'] = el['status'] 38 | s['music_only'] = el['musicOnly'] 39 | 40 | stations.append(s) 41 | 42 | with open(DEST_PATH, 'w') as dest: 43 | outs = csv.DictWriter(dest, fieldnames=stations[0].keys()) 44 | outs.writeheader() 45 | outs.writerows(stations) 46 | 47 | 48 | if __name__ == '__main__': 49 | main() 50 | --------------------------------------------------------------------------------