Shazam-Daten exportieren

Wo sind meine Shazams

Spätestens wenn man sein iPhone zugunsten von Android tauscht, interessiert es einen, wo die Shazams sind. Sie zu exportieren und weiterzuverarbeiten, ist einfacher, als man denkt.

Diese Anleitung ist zuerst fürs iPhone, bei Android gehts im Prinzip genauso, wenn man nur die Shazam-Sqlite3-Datenbank vom Handy extrahiert hat.

Datenbank mit den Shazams extrahieren

Beim iPhone muss man zuerst ein unverschlüsseltes Backup mit iTunes erstellen.

Mit dem Total Commander oder einem anderen Tool sucht man in diesem Backup nach allen Dateien, die den String shazam enthalten. Diese Dateien öffnet man der Reihe nach mit dem Programm SQLiteBrowser https://sqlitebrowser.org/ und schaut, welche es ist. Es gibt sicher auch andere Möglichkeiten, die schnell zu finden. Hier ist es die Datei ace5….fa, die ich dann einfach auf den Desktop kopiert habe.

Vom SQLite-Browser aus kann man mit folgendem SQL-Query

select track.Z_PK as ZID, ZDATE, ZTRACKNAME, ZNAME from ZSHARTISTMO artist, ZSHTAGRESULTMO track where artist.ZTAGRESULT = track.Z_PK ORDER BY ZDATE

die Shazams ansehen und auch als .CSV-Datei exportieren.

Verarbeitung mit python

Man speichere die Datei unter anderem Namen wie shazam.db und kann sie fortan auch mit folgendem kurzen Python-Programm ausgeben. Bemerkenswert in diesem Zusammenhang, dass die Timestamps im Mac-Absolute-Timestamp-Format in Sekunden nach dem Datum 01.01.2001 gespeichert werden. Ob das bei Android auch so ist, kann noch ich nicht sagen.

  • Miniprogramm shazam.py
#!/usr/local/bin/python3.6
#import os
import sys
import sqlite3

#db_path = os.path.expanduser('shazam.db')
db_path='shazam.db'

#Shazam Timstamp
#These timestamps are sometimes labeled 'Mac absolute time'. A Core Data timestamp is the number of seconds since midnight, January 1, 2001
#sqlite>  select strftime('%s', '2001-01-01');
#978307200

connection = sqlite3.connect(db_path)
cursor = connection.cursor()
results = cursor.execute(
    '''
    SELECT artist.ZNAME, tag.ZTRACKNAME, datetime(tag.ZDATE + 978307200, 'unixepoch'),
           tag.ZLATITUDE latitude, tag.ZLONGITUDE longitude
    FROM   ZSHARTISTMO artist, ZSHTAGRESULTMO tag
    WHERE  artist.ZTAGRESULT = tag.Z_PK
    ORDER BY 
           tag.ZDATE ASC
    '''
)

for result in results:
    line = '{0} | {1:>2.2f} {2:>2.2f} | {3} - {4}'.format(result[2], result[3], result[4], result[0], result[1])
    sys.stdout.buffer.write (line.encode())
    sys.stdout.buffer.write (bytes([0x0a]))
  • Test des Programms
./shazam.py
[...]
2017-05-27 22:40:06 | 48.14 11.57 | Serge Devant & Damiano - Fearing Love (Club Mix)
2017-05-27 22:56:14 | 48.14 11.57 | Tello - La Verdolaga (Marco Santoro Remix)
2017-05-27 23:00:40 | 48.14 11.57 | David Penn - One Song (Club Mix)
2017-05-27 23:07:53 | 48.14 11.57 | Joris Voorn - Equape (Abgt204)
2017-05-27 23:12:17 | 48.14 11.57 | Alex Dimou - This Time
2017-05-27 23:15:34 | 48.14 11.57 | Technotronic - Pump Up The Jam (Sem Thomasson Remix)
2017-05-27 23:21:43 | 48.14 11.57 | Piem - Together
2017-05-27 23:27:00 | 48.14 11.57 | Sven Tasnadi - Train
2017-05-27 23:30:12 | 48.14 11.57 | Habischman - Moan
2017-05-27 23:38:17 | 48.14 11.57 | Stanny Abram - Talisman
2017-05-27 23:54:00 | 48.14 11.57 | Luna City Express - Victims Of The Funk (Dario D'attis Dubby Dub)
[...]
  • Programmversion, die auch die Location ausgibt (Langitude, Longitude)
#!/usr/local/bin/python3.6
import sys
#import os
import sqlite3
# pip install --user geopy
from geopy.geocoders import Nominatim


#db_path = os.path.expanduser('shazam.db')
db_path='shazam.db'

# Timestamps have this format because of the iPhone
# shazam timstamp is seconds 2001?
#These timestamps are sometimes labeled 'Mac absolute time'. 
# This Apple Cocoa Core Data timestamp is the number of seconds since midnight, January 1, 2001
#sqlite>  select strftime('%s', '2001-01-01');
#978307200

connection = sqlite3.connect(db_path)
cursor = connection.cursor()
results = cursor.execute(
    '''
    SELECT artist.ZNAME, tag.ZTRACKNAME, datetime(tag.ZDATE + 978307200, 'unixepoch'),
           tag.ZLATITUDE latitude, tag.ZLONGITUDE longitude
    FROM   ZSHARTISTMO artist, ZSHTAGRESULTMO tag
    WHERE  artist.ZTAGRESULT = tag.Z_PK
    ORDER BY 
           tag.ZDATE ASC
    '''
)

geolocator = Nominatim(user_agent="chris python programs")
for result in results:
    # print shazam
    line = '{0} | {1:>2.2f} {2:>2.2f} | {3} - {4}'.format(result[2], result[3], result[4], result[0], result[1])
    sys.stdout.buffer.write (line.encode())
    sys.stdout.buffer.write (bytes([0x0a]))
    # try to find detailed location
    if result[3] > 0 and result[4] > 0:
        arg = "{}, {}".format(result[3], result[4])
        location = geolocator.reverse("{}, {}".format(result[3], result[4]))
        sys.stdout.buffer.write("   @ {}".format(location).encode())
        sys.stdout.buffer.write (bytes([0x0a]))
  • Test dieses Programs
./shazam-loc.py
[...]
2017-05-27 22:40:06 | 48.14 11.57 | Serge Devant & Damiano - Fearing Love (Club Mix)
   @ Pacha, 5, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 22:56:14 | 48.14 11.57 | Tello - La Verdolaga (Marco Santoro Remix)
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:00:40 | 48.14 11.57 | David Penn - One Song (Club Mix)
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:07:53 | 48.14 11.57 | Joris Voorn - Equape (Abgt204)
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:12:17 | 48.14 11.57 | Alex Dimou - This Time
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:15:34 | 48.14 11.57 | Technotronic - Pump Up The Jam (Sem Thomasson Remix)
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:21:43 | 48.14 11.57 | Piem - Together
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:27:00 | 48.14 11.57 | Sven Tasnadi - Train
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:30:12 | 48.14 11.57 | Habischman - Moan
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:33:48 | 48.14 11.57 | Habischman - Moan
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:35:13 | 48.14 11.57 | Habischman - Moan
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:38:17 | 48.14 11.57 | Stanny Abram - Talisman
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
2017-05-27 23:54:00 | 48.14 11.57 | Luna City Express - Victims Of The Funk (Dario D'attis Dubby Dub)
   @ 2, Maximiliansplatz, Bezirksteil Königsplatz, München, Bayern, 80333, Deutschland
[...]

Viel Spass mit Shazam!

Artikel erstellt am: 30 September 2020 , aktualisiert am 30 September 2020