Last active 1603471822

Export Spotify playlists to CSV script

Steven Smith revised this gist 1368481754. Go to revision

1 file changed, 9 insertions, 2 deletions

spCSVParse.py

@@ -1,7 +1,14 @@
1 - #!/usr/bin/env python
1 + #!/usr/bin/env python2
2 2 # Spotify URI list to CSV with track information
3 3 # by blha303 <stevensmith.ome@gmail.com>
4 - # Licensed under the Mozilla Public License 2.0 https://www.mozilla.org/MPL/2.0/
4 + # Licensed under the zlib license:
5 +
6 + # Copyright © 2013 Steven Smith
7 + # This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
8 + # Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
9 + # 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
10 + # 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
11 + # 3. This notice may not be removed or altered from any source distribution.
5 12
6 13 # Tested under Python 2.7.3. Small changes may need to be made to be backwards-compatible.
7 14 # Usage: spCSVParse.py <list of spotify uri's separated by spaces>

Steven Smith revised this gist 1368481130. Go to revision

1 file changed, 75 insertions

spCSVParse.py(file created)

@@ -0,0 +1,75 @@
1 + #!/usr/bin/env python
2 + # Spotify URI list to CSV with track information
3 + # by blha303 <stevensmith.ome@gmail.com>
4 + # Licensed under the Mozilla Public License 2.0 https://www.mozilla.org/MPL/2.0/
5 +
6 + # Tested under Python 2.7.3. Small changes may need to be made to be backwards-compatible.
7 + # Usage: spCSVParse.py <list of spotify uri's separated by spaces>
8 + # Select songs from a playlist in Spotify, right click when they're all selected,
9 + # click Copy Spotify URI, then paste in after 'spCSVParse.py '.
10 + # Alternatively, a file called playlists in the same folder
11 + # This file can contain other lines (e.g. section headings) if desired. The script
12 + # only parses lines starting with 'spotify:track' or 'spotify:local'
13 + # If you're making the playlists file by pasting from Spotify, make sure to:
14 + # 1. set the linebreaks to \n instead of \r\n (also known as UNIX mode, as opposed
15 + # to Windows mode)
16 + # 2. replace all spaces with \n. I did this by replacing " spotify" with "\nspotify"
17 + # If you have questions about this file, ask below, or on irc.esper.net #blha303
18 +
19 + import json
20 + from urllib import urlopen
21 + import sys
22 + import codecs
23 + import time
24 +
25 + def getJson(uri):
26 + data = urlopen("http://ws.spotify.com/lookup/1/.json?uri=%s" % uri).read()
27 + datad = json.loads(data)
28 + if datad["info"]["type"] != "track": #validating
29 + print "Invalid api reply for " + s
30 + sys.exit()
31 + return datad
32 +
33 + def csvEscape (s):
34 + if "," in s:
35 + s.replace(',', '""')
36 + s = '"' + s + '"'
37 + return s
38 +
39 + content = sys.argv[1:]
40 + if content == []:
41 + f = codecs.open("playlists", "r", "utf-8")
42 + content = f.readlines()
43 + f.close()
44 + nf = codecs.open("output.csv", "w", "utf-8")
45 + starttime = time.time()
46 + print "Started at " + str(int(starttime))
47 + for s in content:
48 + if s[:13] == "spotify:track":
49 + datad = getJson(s)
50 + name = csvEscape(datad["track"]["name"])
51 + artist = csvEscape(datad["track"]["artists"][0]["name"])
52 + album = csvEscape(datad["track"]["album"]["name"])
53 + output = artist + "," + name + "," + album
54 + nf.write(output + "\n")
55 + print s.replace("\n", "") + " : " + output
56 + elif s[:13] == "spotify:local":
57 + out = s.replace("spotify:local:", "").split(":")
58 + artist = csvEscape(out[0].replace("+", " "))
59 + album = csvEscape(out[1].replace("+", " "))
60 + name = csvEscape(out[2].replace("+", " "))
61 + output = artist + "," + name + "," + album
62 + nf.write(output + "\n")
63 + print s.replace("\n", "") + " : " + output
64 + else:
65 + print s.replace("\n", "")
66 + if "\n" in s:
67 + nf.write(s)
68 + else:
69 + nf.write(s + "\n")
70 +
71 + nf.close()
72 + endtime = time.time()
73 + print "Completed at " + str(int(endtime))
74 + duration = endtime - starttime
75 + print "Process completed in " + str(int(duration)) + " seconds"
Newer Older