Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf4-24:analyse-scripts [2024/03/08 15:29] Ivo Blöchligerlehrkraefte:blc:informatik:glf4-24:analyse-scripts [2024/03/18 17:42] (current) – [Youtube Englisch] Ivo Blöchliger
Line 1: Line 1:
 +===== Analyse-Scripts =====
 +Folgende Scripts konvertieren die Social-Media-Daten in eine .csv-Datei. 
 +
 +
 +==== Spotify ====
 +<code python spotify.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +import os        # Files suchen
 +import json
 +# Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor.
 +
 +rootdir = "C:/Users/Simon.Knaus/OneDrive - Kt. SG BLD/ksbg/Informatik/bigdata/spotify_data"
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +# Wie viele Kontrollausgaben?
 +debug = 100
 +
 +# Alle HTML-Dateien im Verzeicznis anzeigen            
 +for root, dirs, files in os.walk(rootdir):
 +    for file in files:
 +        if file.endswith(".json"):
 +            filepath = os.path.join(root, file) 
 +            # Datei oeffnen
 +            
 +            f = open(filepath, "r")
 +            #html = f.read()  # Alles einlesen
 +            data=json.load(f)
 +            print(data)
 +            f.close()        # Datei schliessen
 +
 +            for d in (data):
 +                # Einträge in Zahlen umwandeln
 +                # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +                #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +            
 +
 +                # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +                # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +    
 +
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, produziert folgendes Format
 +                    print(d["endTime"])   # 2021-01-06 21:23:12
 +                    debug -= 1  # Um 1 vermindern
 +
 +
 +                # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +                # \n heisst neue Zeile.
 +                csv += str(d["endTime"])+";"+str(d["msPlayed"])+"\n"
 +
 +            # Ausgabe in Datei schreiben
 +        f = open("resultat_spotify.csv", "w")
 +        f.write(csv)
 +        f.close() </code>
 +==== Twitter ====
 +
 +<code python twitter.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +import os        # Files suchen
 +
 +# Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor.
 +
 +rootdir = "C:/Users/Simon.Knaus/OneDrive - Kt. SG BLD/ksbg/Informatik/bigdata/twitter/data"
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +# Wie viele Kontrollausgaben?
 +debug = 100
 +
 +# Alle HTML-Dateien im Verzeicznis anzeigen            
 +for root, dirs, files in os.walk(rootdir):
 +    for file in files:
 +        if file.endswith(".js"):
 +            filepath = os.path.join(root, file) 
 +            # Datei oeffnen
 +            f = open(filepath, "r")
 +            html = f.read()  # Alles einlesen
 +            f.close()        # Datei schliessen
 +
 +
 +            # Datum der aus zwei verschiedenen Formaten einlesen
 +            # Alle nötigen Angaben werden in Klammern "ge-captured"
 +            daten = re.findall("(\d{1,4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2}).000Z", html)
 +            daten2 = re.findall("(\d{1,4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})", html)
 +            #print(daten2)
 +            #print(daten2)
 +            
 +            if(debug>0):
 +                print(file,": ",len((daten+daten2)))
 +                debug-=1
 +
 +
 +            # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag
 +            for d in (daten2+daten):
 +                # Einträge in Zahlen umwandeln
 +                # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +                #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +    
 +                e = [int(x) for x in d]
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren
 +                    print(e) # [1, 6, 2021, 21, 23, 12]
 +                    debug -= 1  # Um 1 vermindern
 +
 +                # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +                # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +                datum = datetime.datetime(e[0], e[1], e[2], e[3], e[4],e[5])
 +
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, produziert folgendes Format
 +                    print(datum)   # 2021-01-06 21:23:12
 +                    debug -= 1  # Um 1 vermindern
 +
 +
 +                # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +                # \n heisst neue Zeile.
 +                csv += datum.strftime("%Y-%m-%d %H:%M:%S;"+os.path.splitext(file)[0]+"\n" #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann.
 +
 +            # Ausgabe in Datei schreiben
 +        f = open("resultat_twitter.csv", "w")
 +        f.write(csv)
 +        f.close()
 +</code>
 +==== Snapchat Datum-Zeit Angaben ====
 +<code python snapchat.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +import os        # Files suchen
 +
 +# Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor.
 +
 +rootdir = "C:/Users/Simon.Knaus/OneDrive - Kt. SG BLD/ksbg/Informatik/bigdata/mydata_1678177023208/html"
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +# Wie viele Kontrollausgaben?
 +debug = 30
 +
 +# Alle HTML-Dateien im Verzeicznis anzeigen            
 +for root, dirs, files in os.walk(rootdir):
 +    for file in files:
 +        if file.endswith(".html"):
 +            filepath = os.path.join(root, file) 
 +            # Datei oeffnen
 +            f = open(filepath, "r")
 +            html = f.read()  # Alles einlesen
 +            f.close()        # Datei schliessen
 +
 +
 +            # Datum der Form 30.12.2021, 22:13 einlesen
 +            # Alle nötigen Angaben werden in Klammern "ge-captured"
 +            daten = re.findall("(\d{1,4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2}) UTC", html)
 +            if(debug>0):
 +                print(file,": ",len(daten))
 +                debug-=1
 +
 +
 +            # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag
 +            for d in daten:
 +                # Einträge in Zahlen umwandeln
 +                # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +                #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +
 +                e = [int(x) for x in d]
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren
 +                    print(e) # [1, 6, 2021, 21, 23, 12]
 +                    debug -= 1  # Um 1 vermindern
 +
 +                # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +                # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +                datum = datetime.datetime(e[0], e[1], e[2], e[3], e[4],e[5])
 +
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, produziert folgendes Format
 +                    print(datum)   # 2021-01-06 21:23:12
 +                    debug -= 1  # Um 1 vermindern
 +
 +
 +                # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +                # \n heisst neue Zeile.
 +                csv += datum.strftime("%Y-%m-%d %H:%M:%S;"+os.path.splitext(file)[0]+"\n" #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann.
 +
 +            # Ausgabe in Datei schreiben
 +        f = open("resultat_snapchat.csv", "w")
 +        f.write(csv)
 +        f.close()
 +</code>
 +
 +==== Snapchat Location Data ====
 +<code python snapchat_locations.py>
 +import json
 +import re
 +import datetime
 +
 +
 +filename = "location_history.json"
 +with open(filename) as f:
 +    mydata = json.load(f)
 +
 +#print(mydata.keys())
 +#toplevelkeys = ['Frequent Locations', 'Latest Location', 'Home & Work', 'Daily Top Locations', 'Top Locations Per Six-Day Period', 'Location History', 'Businesses and public places you may have visited', 'Areas you may have visited in the last two years']
 +
 +# Kopfzeile der CSV-Datei
 +csv = ""
 +
 +# Muster zum extrahieren der Koordinaten
 +geomuster = re.compile("([0-9.]+).*?, ([0-9.]+)")
 +
 +# Muster der Zeitangabe
 +zeitformat = "%Y/%m/%d %H:%M:%S"
 +
 +minlat = 100
 +maxlat = -100
 +minlon = 200
 +maxlon = -200
 +
 +# Alle Anagaben in 'Location History' durchgehen und als CSV-Zeile anfügen
 +for location in mydata['Location History']:
 +    # Extrahieren der geographischen Koordinaten
 +    res = geomuster.search(location['Latitude, Longitude'])
 +    try:
 +        latitude = float(res.group(1))
 +        longitude = float(res.group(2))
 +        minlat = min([minlat, latitude])
 +        maxlat = max([maxlat, latitude])
 +        minlon = min([minlon, longitude])
 +        maxlon = max([maxlon, longitude])
 +        # Umwandlunmaxer Datum/Zeitangabe in internes Format
 +        dt = datetime.datetime.strptime(location['Time'], zeitformat)
 +        # Zeile in der CSV Datei
 +        csv += f"{dt},{latitude},{longitude}\n"
 +    except AttributeError:
 +        pass
 +
 +
 +# Noch einen Header mit den minimalen/maximalen Koordinaten ausgeben
 +csv = f"Time,Latitude,Longitude, \"minLong minLat maxLong maxLat\",{minlat},{minlon},{maxlat},{maxlon}\n"+csv
 +
 +# CSV Datei schreiben
 +with open("location_history.csv","w") as f:
 +    f.write(csv)
 +</code>
 +
 +Visualisierung mit Excel:
 +  * https://data.solita.fi/visualizing-location-data-by-time-excel-3d-map/
 +  * https://jmw-geo.com/showing-geographic-data-with-spreadsheet-software/
 +  * https://www.youtube.com/watch?v=f2bZ7EkIcpU
 +  * https://locationhistoryvisualizer.com/heatmap/
 +
 +==== Instagram Deutsch ====
 +<code python insta_deutsch.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +import os        # Files suchen
 +
 +# Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor.
 +
 +rootdir = "C:/pfad/zum/entpackten/instagram/ordner/"
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +# Wie viele Kontrollausgaben?
 +debug = 10
 +
 +# Alle HTML-Dateien im Verzeicznis anzeigen            
 +for root, dirs, files in os.walk(rootdir):
 +    for file in files:
 +        if file.endswith(".html"):
 +            filepath = os.path.join(root, file) 
 +            # Datei oeffnen
 +            f = open(filepath, "r")
 +            html = f.read()  # Alles einlesen
 +            f.close()        # Datei schliessen
 +            
 +            
 +            # Datum der Form 30.12.2021, 22:13 einlesen
 +            # Alle nötigen Angaben werden in Klammern "ge-captured"
 +            daten = re.findall("(\d{1,2}).(\d{1,2}).(\d{1,4}), (\d{1,2}):(\d{1,2})", html)
 +            if(debug>0):
 +                print(file,": ",len(daten))
 +                debug-=1
 +                   
 +         
 +            # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag
 +            for d in daten:
 +                # Einträge in Zahlen umwandeln
 +                # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +                #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +                
 +                e = [int(x) for x in d]
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren
 +                    print(e) # [1, 6, 2021, 21, 23, 12]
 +                    debug -= 1  # Um 1 vermindern
 +            
 +                # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +                # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +                datum = datetime.datetime(e[2], e[1], e[0], e[3], e[4],0)
 +
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, produziert folgendes Format
 +                    print(datum)   # 2021-01-06 21:23:12
 +                    debug -= 1  # Um 1 vermindern
 +            
 +                
 +                # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +                # \n heisst neue Zeile.
 +                csv += datum.strftime("%Y-%m-%d %H:%M:%S;"+os.path.splitext(file)[0]+"\n" #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann.
 +            
 +            # Ausgabe in Datei schreiben
 +        f = open("resultat.csv", "w")
 +        f.write(csv)
 +        f.close()
 +</code>
 +==== Instagram Englisch ====
 +<code python insta_englisch.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +import os        # Files suchen
 +
 +# Erklärungen zu diesem Code sind Analog dem Youtube-Extraktor.
 +
 +rootdir = "C:/pfad/zum/entpackten/instagram/ordner/"
 +mnum = {"Jan":1, "Feb":2, "Mar":3, "Apr":4, "May":5, "Jun":6, "Jul":7, "Aug":8, "Sep":9, "Oct":10,"Nov":11, "Dec":12}; 
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +# Wie viele Kontrollausgaben?
 +debug = 10
 +
 +# Alle HTML-Dateien im Verzeicznis anzeigen            
 +for root, dirs, files in os.walk(rootdir):
 +    for file in files:
 +        if file.endswith(".html"):
 +            filepath = os.path.join(root, file) 
 +            # Datei oeffnen
 +            f = open(filepath, "r")
 +            html = f.read()  # Alles einlesen
 +            f.close()        # Datei schliessen
 +            
 +            
 +            # Datum der Form 30.12.2021, 22:13 einlesen
 +            # Alle nötigen Angaben werden in Klammern "ge-captured"
 +            daten = re.findall("([A-Z][a-z][a-z]) (\d{1,2}), (\d{4}), (\d{1,2}):(\d{1,2}) ([AP]M)", html)
 +
 +            
 +            if(debug>0):
 +                print(file,": ",len(daten))
 +                debug-=1
 +                   
 +         
 +            # Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag
 +            for d in daten:
 +                # Einträge in Zahlen umwandeln
 +                # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +                #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +                
 +                e = [mnum[d[0]]] + [int(x) for x in d[1:-1]]
 +                if d[5]=="PM":  # Nachmittag? Plus 12 Stunden (Ausser Mitternacht = 0)
 +                   e[3]=(e[3]+12) % 24
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren
 +                    print(e) # [1, 6, 2021, 21, 23, 12]
 +                    debug -= 1  # Um 1 vermindern
 +            
 +                # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +                # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +                datum = datetime.datetime(e[2], e[1], e[0], e[3], e[4],0)
 +
 +                if debug>0:
 +                    # Ausgabe zur Kontrolle, produziert folgendes Format
 +                    print(datum)   # 2021-01-06 21:23:12
 +                    debug -= 1  # Um 1 vermindern
 +            
 +                # Wochentag (Mo=0, Di=1, ..., So=6)
 +                # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: https://docs.python.org/3/library/datetime.html#datetime-objects
 +                wday = datum.weekday()
 +            
 +                # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +                # \n heisst neue Zeile.
 +                csv += datum.strftime("%Y-%m-%d %H:%M:%S;"+os.path.splitext(file)[0]+"\n" #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann.
 +            
 +            # Ausgabe in Datei schreiben
 +        f = open("resultat.csv", "w")
 +        f.write(csv)
 +        f.close()
 +</code>
 +
 +==== Youtube JSON-Export ====
 +<code python youtube-json.py>
 +import sys,os,glob
 +import json
 +import datetime
 +
 +# Diese Zeile anpassen (kann auch z.B. *.json sein)
 +defaultFilePattern = "watch-history.json"
 +
 +
 +# Sucht nach passenden Dateien
 +def searchForInputFiles():
 +    if len(sys.argv)==2:
 +        if os.path.exists(sys.argv[1]):
 +            if os.path.isfile(sys.argv[1]):
 +                return [sys.argv[1]]
 +            else:
 +                return glob.glob(sys.argv[1]+"/**/"+defaultFilePattern)
 +    return glob.glob("**/"+defaultFilePattern)
 +
 +def showHelp():
 +    print("Als Parameter kann direkt eine Datei angeben werden.\nAlternativ kann auch ein Verzeichnis angegeben werden,\ndas dann rekursiv nach dem Must\n")
 +    print(defaultFilePattern)
 +    print("durchsucht wird.")
 +    print("Wird nichts angegben, wird vom aktuellen Verzeichnis aus gesucht.")
 +
 +
 +files = searchForInputFiles()
 +if len(files)==0:
 +    print("Keine Inputdateien gefunden\n")
 +    showHelp()
 +
 +with open("output.csv", 'w') as output:
 +    for file in files:
 +        with open(file, "r") as f:
 +            data = json.load(f)
 +        for d in data:
 +            # Zeitangabe in Python datetime objekt umwandeln (Das Z kennt Python nicht)
 +            zeit = datetime.datetime.fromisoformat(d['time'].replace("Z", "+00:00"))
 +            # Folgende Zeile anpassen, falls Excel nicht mit diesem Datumsformat umgegehn kann
 +            output.write(zeit.strftime("%Y-%m-%d %H:%M:%S\n"))
 +</code>
 +
 +==== Youtube Englisch (HTML-Export)====
 +<code python youtube_englisch.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +
 +# Erklärungen zu diesem Code gibt es auch als Video hier:
 +# https://web.microsoftstream.com/video/4c478e5b-609d-4429-bc20-78b9f8abab93
 +# und für Datensparsame und solche ohne BLDSG-Account auch hier:
 +# https://fginfo.ksbg.ch/~ivo/videos/informatik/vierte-klasse/daten-extraktion-youtube-watchtime-extraktion.mp4
 +
 +# Daten einlesen
 +# Entweder vollständiger Pfad zur Datei oder (wie z.B. C:\Users\Hansli\Desktop\watch-history.html) oder
 +# nur Dateiname, wenn die Datei im gleichen Verzeichnis wie das Pythonprogramm liegt.
 +f = open("jan14-history.html", "r")
 +html = f.read()  # Alles einlesen
 +f.close()        # Datei schliessen
 +
 +
 +# Datum der Form Jan 6, 2021, 9:23:12 PM CET
 +# Alle nötigen Angaben werden in Klammern "ge-captured"
 +daten = re.findall(r"([A-Z][a-z][a-z]) (\d{1,2}), (\d{4}), (\d{1,2}):(\d{1,2}):(\d{1,2}) ([AP]M) CET", html)
 +
 +#Erste 3 Einträge zur Kontrolle ausgeben
 +print(daten[0:3])
 +
 +# Zuordnung der Monatsnamen zu Monatsnummern, z.B. ist mnum["Jul"] gleich 7
 +mnum = {"Jan":1, "Feb":2, "Mar":3, "Apr":4, "May":5, "Jun":6, "Jul":7, "Aug":8, "Sep":9, "Oct":10,"Nov":11, "Dec":12}; 
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +
 +# Wie viele Kontrollausgaben?
 +debug = 10
 +
 +# Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag
 +for d in daten:
 +    # Einträge in Zahlen umwandeln
 +    # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +    #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +    e = [mnum[d[0]]] + [int(x) for x in d[1:-1]]
 +    if d[6]=="PM":  # Nachmittag? Plus 12 Stunden (Ausser Mitternacht = 0)
 +        e[3]=(e[3]+12) % 24
 +    
 +    if debug>0:
 +        # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren
 +        print(e) # [1, 6, 2021, 21, 23, 12]
 +        debug -= 1  # Um 1 vermindern
 +
 +    # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +    # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +    datum = datetime.datetime(e[2], e[0], e[1], e[3], e[4], e[5])
 +
 +    if debug>0:
 +        # Ausgabe zur Kontrolle, produziert folgendes Format
 +        print(datum)   # 2021-01-06 21:23:12
 +        debug -= 1  # Um 1 vermindern
 +
 +    # Wochentag (Mo=0, Di=1, ..., So=6)
 +    # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: https://docs.python.org/3/library/datetime.html#datetime-objects
 +    wday = datum.weekday()
 +
 +    # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +    # \n heisst neue Zeile.
 +    csv += datum.strftime("%Y-%m-%d %H:%M:%S\n" #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann.
 +
 +# Ausgabe in Datei schreiben
 +f = open("resultat.csv", "w")
 +f.write(csv)
 +f.close()
 +</code>
 +
 +==== Youtube Deutsch (HTML-Export) ====
 +<code python youtube_deutsch.py>
 +import re        # Regular Expressions
 +import datetime  # Datum/Zeit 
 +
 +# VERSION FUER DEUTSCHE EXPORTE, Datumsangabe in der Form 09.02.2012, 14:15:59 MEZ
 +
 +# Erklärungen zu diesem Code gibt es auch als Video hier:
 +# https://web.microsoftstream.com/video/4c478e5b-609d-4429-bc20-78b9f8abab93
 +# und für Datensparsame und solche ohne BLDSG-Account auch hier:
 +# https://fginfo.ksbg.ch/~ivo/videos/informatik/vierte-klasse/daten-extraktion-youtube-watchtime-extraktion.mp4
 +
 +# Daten einlesen
 +# Entweder vollständiger Pfad zur Datei oder (wie z.B. C:\Users\Hansli\Desktop\watch-history.html) oder
 +# nur Dateiname, wenn die Datei im gleichen Verzeichnis wie das Pythonprogramm liegt.
 +f = open("jan14-history.html", "r")
 +html = f.read()  # Alles einlesen
 +f.close()        # Datei schliessen
 +
 +
 +# Datum der Form Jan 6, 2021, 9:23:12 PM CET
 +# Alle nötigen Angaben werden in Klammern "ge-captured"
 +
 +# Datum der Form 09.02.2012, 14:15:59 MESZ
 +daten = re.findall(r"(\d{2})\.(\d{2})\.(\d{4}), (\d{2}):(\d{2}):(\d{2}) MESZ", html)
 +
 +
 +#Erste 3 Einträge zur Kontrolle ausgeben
 +print(daten[0:3])
 +
 +# Zuordnung der Monatsnamen zu Monatsnummern, z.B. ist mnum["Jul"] gleich 7
 +mnum = {"Jan":1, "Feb":2, "Mar":3, "Apr":4, "May":5, "Jun":6, "Jul":7, "Aug":8, "Sep":9, "Oct":10,"Nov":11, "Dec":12}; 
 +
 +# Resultat, das am Schluss geschrieben werden soll
 +csv = ""   # Comma separated values
 +
 +# Wie viele Kontrollausgaben?
 +debug = 10
 +
 +# Alle Einträge durchgehen, d enthält jeweils den nächsten Eintrag
 +for d in daten:
 +    # Einträge in Zahlen umwandeln
 +    # Monat plus die anderen Einträge (ohne AM/PM) in Zahlen umgewandelt 
 +    #   Die Zeichenkette "42" ist nicht das gleiche wie die Zahl 42.
 +    e = [int(x) for x in d]
 +
 +    if debug>0:
 +        # Ausgabe zur Kontrolle, sollte folgendes Format Produzieren
 +        print(e) # [1, 6, 2021, 21, 23, 12]
 +        debug -= 1  # Um 1 vermindern
 +
 +    # Datum daraus generieren (macht die Datumsmanipulation einfacher).
 +    # Jahr, Monat, Tag, Stunde, Minute, Sekunde
 +    datum = datetime.datetime(e[2], e[1], e[0], e[3], e[4], e[5])
 +
 +    if debug>0:
 +        # Ausgabe zur Kontrolle, produziert folgendes Format
 +        print(datum)   # 2021-01-06 21:23:12
 +        debug -= 1  # Um 1 vermindern
 +
 +    # Wochentag (Mo=0, Di=1, ..., So=6)
 +    # Sämtliche Methoden für datetime-Objekte sind hier beschrieben: https://docs.python.org/3/library/datetime.html#datetime-objects
 +    wday = datum.weekday()
 +
 +    # Formatierte Ausgabe des Datums, siehe https://www.w3schools.com/python/python_datetime.asp
 +    # \n heisst neue Zeile.
 +    csv += datum.strftime("%Y-%m-%d %H:%M:%S\n" #Das Format soll so angepasst werden, damit die Tabellenkalkulation dann damit umgehen kann.
 +
 +# Ausgabe in Datei schreiben
 +f = open("resultat.csv", "w")
 +f.write(csv)
 +f.close()
 +
 +</code>