Skip to content

Instantly share code, notes, and snippets.

@nicktimko
Created January 24, 2018 22:21
Show Gist options
  • Save nicktimko/fe6ae34fee0f97445774450d849d403e to your computer and use it in GitHub Desktop.
Save nicktimko/fe6ae34fee0f97445774450d849d403e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import datetime\n",
"import time\n",
"\n",
"import pytz\n",
"import requests"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Scraper"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note: this is done by the script now, this is just for reference.\n",
"```\n",
"# 24/7 ASC Stream Metadata URL\n",
"URL = 'https://www.npr.org/templates/music/data/GetLatestPlayingSong.php?streamId=129729686'\n",
"PLAYLIST = 'playlist.csv'\n",
"\n",
"def write_row(filename, row, echo=True):\n",
" entry = ','.join('\"{}\"'.format(x) for x in row) + '\\n'\n",
" if echo:\n",
" print(entry, end='')\n",
" with open(filename, mode='a', encoding='utf-8') as f:\n",
" f.write(entry)\n",
"\n",
" \n",
"def get_song():\n",
" response = requests.get(URL)\n",
" assert response.status_code == 200\n",
" return response.json()\n",
"\n",
"last_song = get_song()\n",
"write_row(PLAYLIST, ['started', 'artist', 'title'])\n",
"while True:\n",
" time.sleep(15)\n",
" current_song = get_song()\n",
" if current_song == last_song:\n",
" continue\n",
" \n",
" now = datetime.datetime.now(tz=pytz.utc).isoformat()\n",
" write_row(PLAYLIST, [now, current_song['artist'], current_song['title']])\n",
" last_song = current_song\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Process "
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\"2018-01-24T09:26:05.111202+00:00\",\"Fenster\",\"Better Days\"\r\n",
"\"2018-01-24T09:29:22.474648+00:00\",\"Cults\",\"Abducted\"\r\n",
"\"2018-01-24T09:32:09.385931+00:00\",\"Frances Cone\",\"Arizona\"\r\n",
"\"2018-01-24T09:35:26.837074+00:00\",\"tUnE-yArDs\",\"Killa\"\r\n",
"Traceback (most recent call last):\r\n",
" File \"247scrape.py\", line 41, in <module>\r\n",
" main()\r\n",
" File \"247scrape.py\", line 36, in main\r\n",
" write_row(PLAYLIST, [now, current_song['artist'], current_song['title']])\r\n",
"KeyError: 'artist'\r\n"
]
}
],
"source": [
"!tail 247scrape.log"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" return request('get', url, params=params, **kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/api.py\", line 58, in request\r\n",
" return session.request(method=method, url=url, **kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/sessions.py\", line 508, in request\r\n",
" resp = self.send(prep, **send_kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/sessions.py\", line 618, in send\r\n",
" r = adapter.send(request, **kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/adapters.py\", line 508, in send\r\n",
" raise ConnectionError(e, request=request)\r\n",
"requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.npr.org', port=443): Max retries exceeded with url: /templates/music/data/GetLatestPlayingSong.php?streamId=129729686 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f9fdccb8eb8>: Failed to establish a new connection: [Errno 101] Network is unreachable',))\r\n"
]
}
],
"source": [
"!tail 247scrape.log"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" return request('get', url, params=params, **kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/api.py\", line 58, in request\r\n",
" return session.request(method=method, url=url, **kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/sessions.py\", line 508, in request\r\n",
" resp = self.send(prep, **send_kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/sessions.py\", line 618, in send\r\n",
" r = adapter.send(request, **kwargs)\r\n",
" File \"/home/ec2-user/notebook/venv/lib64/python3.6/site-packages/requests/adapters.py\", line 508, in send\r\n",
" raise ConnectionError(e, request=request)\r\n",
"requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.npr.org', port=443): Max retries exceeded with url: /templates/music/data/GetLatestPlayingSong.php?streamId=129729686 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f9fdccb8eb8>: Failed to establish a new connection: [Errno 101] Network is unreachable',))\r\n"
]
}
],
"source": [
"!tail 247scrape.log"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"29979\n"
]
}
],
"source": [
"%%bash\n",
"nohup python 247scrape.py >>247scrape.log 2>&1 &\n",
"echo $! | tee 247scrape.pid"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"ec2-user 6702 0.0 5.7 477992 58460 ? Ssl Jan19 2:37 /home/ec2-user/notebook/venv/bin/python3 /home/ec2-user/notebook/venv/bin/jupyter-notebook --no-browser\r\n",
"ec2-user 26902 0.0 10.7 945476 109120 ? Ssl 04:36 0:06 /home/ec2-user/notebook/venv/bin/python3 -m ipykernel_launcher -f /home/ec2-user/.local/share/jupyter/runtime/kernel-69120829-26fb-4b6b-8e42-664f14006efc.json\r\n",
"ec2-user 29979 0.2 2.3 230140 23996 ? S 22:19 0:00 python 247scrape.py\r\n",
"ec2-user 29999 0.0 0.2 120168 2680 pts/2 Ss+ 22:20 0:00 /usr/bin/sh -c ps aux | grep python\r\n",
"ec2-user 30001 0.0 0.0 119708 824 pts/2 S+ 22:20 0:00 grep python\r\n"
]
}
],
"source": [
"!ps aux | grep python"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 1626 playlist.csv\r\n",
" 824 playlistold.csv\r\n",
" 2450 total\r\n"
]
}
],
"source": [
"!wc -l playlist*.csv"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Inspection"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import collections\n",
"import csv\n",
"\n",
"import iso8601"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"HEADER = ['started', 'artist', 'title']\n",
"\n",
"def unmojibake(string, wrong_encoding='latin-1', right_encoding='utf-8'):\n",
" return string.encode(wrong_encoding).decode(right_encoding)\n",
"\n",
"assert unmojibake('Högni') == 'Högni'\n",
"\n",
"def read_playlist(filename):\n",
" with open(filename, mode='r') as f:\n",
" rows = []\n",
" for row in csv.reader(f):\n",
" if row == HEADER:\n",
" continue\n",
" row = dict(zip(HEADER, row))\n",
" row['started'] = iso8601.parse_date(row['started'])\n",
" row['artist'] = unmojibake(row['artist'])\n",
" row['title'] = unmojibake(row['title'])\n",
" rows.append(row)\n",
" return rows"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2435"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"entries = read_playlist('playlistold.csv') + read_playlist('playlist.csv')\n",
"len(entries)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Most Common"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"949 distinct artists\n"
]
},
{
"data": {
"text/plain": [
"[('The Beatles', 26),\n",
" ('Lydia Ainsworth', 19),\n",
" ('Kendrick Lamar', 18),\n",
" ('Jay Som', 17),\n",
" ('ALA.NI', 17),\n",
" ('Big Thief', 16),\n",
" ('Grandaddy', 16),\n",
" ('The Blow', 15),\n",
" ('Waxahatchee', 15),\n",
" ('Moses Sumney', 14),\n",
" ('Beck', 14),\n",
" ('Broken Social Scene', 13),\n",
" ('Partner', 12),\n",
" ('Phoebe Bridgers', 12),\n",
" ('Anna Meredith', 11),\n",
" ('Aldous Harding', 11),\n",
" ('The National', 11),\n",
" ('Dan Auerbach', 11),\n",
" ('Chastity Belt', 11),\n",
" ('St. Vincent', 11)]"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"artists = collections.Counter(r['artist'] for r in entries)\n",
"print(len(artists), 'distinct artists')\n",
"artists.most_common(n=20)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1538 distinct songs\n"
]
},
{
"data": {
"text/plain": [
"[(('Imagining My Man', 'Aldous Harding'), 11),\n",
" (('I Came To Sing The Song', 'Adam Torres'), 10),\n",
" (('Stuck', 'Chastity Belt'), 10),\n",
" (('Sell It Back', 'Katie Von Schleicher'), 10),\n",
" (('Thirty', 'The Weather Station'), 10),\n",
" (('Doomed', 'Moses Sumney'), 9),\n",
" (('The Bus Song', 'Jay Som'), 9),\n",
" (('Get Up', 'The Blow'), 9),\n",
" (('123', 'Girlpool'), 8),\n",
" (('Moonshine Freeze', 'This Is The Kit'), 8),\n",
" (('#53', 'Weaves'), 8),\n",
" (('Fly Me Back In Time', 'Danny Ayala'), 8),\n",
" (('Why !steria', 'Kalbells'), 8),\n",
" (('Deathless', 'Ibeyi'), 7),\n",
" (('Cherry Blossom', 'ALA.NI'), 7)]"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"names = collections.Counter((r['title'], r['artist']) for r in entries)\n",
"print(len(names), 'distinct songs')\n",
"names.most_common(n=15)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [],
"source": [
"songs_by_artist = collections.defaultdict(collections.Counter)\n",
"for row in entries:\n",
" songs_by_artist[row['artist']][row['title']] += 1\n",
"songs_by_artist = dict(songs_by_artist)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Counter({'All You Need Is Love': 1,\n",
" 'And Your Bird Can Sing': 1,\n",
" 'Back In The USSR': 1,\n",
" 'Blue Jay Way': 1,\n",
" \"Can't Buy Me Love\": 1,\n",
" 'Cry Baby Cry': 1,\n",
" 'Doctor Robert': 1,\n",
" 'Getting Better': 1,\n",
" \"I'm Looking Through You\": 1,\n",
" 'If I Needed Someone': 1,\n",
" 'In My Life': 1,\n",
" \"It's All Too Much\": 1,\n",
" 'Lady Madonna': 2,\n",
" 'Martha My Dear': 1,\n",
" 'Nowhere Man': 1,\n",
" 'Paperback Writer': 2,\n",
" 'Revolution': 1,\n",
" 'Revolution 9': 1,\n",
" 'She Said She Said': 1,\n",
" 'Tomorrow Never Knows': 1,\n",
" \"Why Don't We Do It In The Road?\": 1,\n",
" 'With A Little Help From My Friends': 1,\n",
" 'Within You Without You': 1,\n",
" 'You Never Give Me Your Money': 1})"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"songs_by_artist['The Beatles']"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Counter({'Halfway Home': 3,\n",
" 'Hug Of Thunder': 5,\n",
" 'Skyline': 4,\n",
" 'World Sick': 1})"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"songs_by_artist['Broken Social Scene']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## New over time"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"def chunks(l, n):\n",
" \"\"\"Yield successive n-sized chunks from l.\"\"\"\n",
" for i in range(0, len(l), n):\n",
" yield l[i:i + n]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"artists = set()\n",
"songs = set()\n",
"\n",
"new_artists = []\n",
"new_songs = []\n",
"\n",
"for chunk in chunks(entries, 50):\n",
" chunk_artists = [r['artist'] for r in chunk]\n",
" new_artists.append(set(chunk_artists) - artists)\n",
" artists.update(chunk_artists)\n",
" \n",
" chunk_songs = [(r['title'], r['artist']) for r in chunk]\n",
" new_songs.append(set(chunk_songs) - songs)\n",
" songs.update(chunk_songs)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f31f3002898>"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f31f2d3d978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"f, ax = plt.subplots()\n",
"ax.plot([len(c) for c in new_artists], label='artists')\n",
"ax.plot([len(c) for c in new_songs], label='songs')\n",
"ax.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment