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