ett mycket enkelt sätt att förstå vad en databasfil är att tänka på det en mapp som innehåller en massa excel-liknande tabeller. Ungefär som större eller företagskvalitet databaser kan du ansluta och komma åt data i databasen på olika sätt.
använda Python och pandor
i den här handledningen använder jag Python och den fantastiska pandas-modulen för att ansluta till databasen, utforska tabellerna och data som den innehåller och sedan läsa dessa data från lämpliga tabeller.,
ovan ansluter vi till databasen och utforskar vilka tabeller som finns där. Jag fann att det finns några tabeller i databasen, inklusive ett kallat meddelande och andra namn chat, hantera och bilaga. Låt oss utforska meddelandetabellen eftersom det är den som låter mest lovande att hålla våra iMessages. Jag gör det genom att överföra tabellen till en pandas dataframe, en typ av fil som är mycket lättare att utforska och manipulera för data analyis projekt.
# get the 10 entries of the message table using pandas
messages = pd.read_sql_query("select * from message limit 10", conn)
få meddelandetexten och telefonnumret
vi slog bingo!, Meddelandetabellen verkar verkligen hålla alla sparade iMessages. Det har ett textfält med det faktiska skickade eller mottagna meddelandet, ett datumfält (mer om det nedan) och ett handtags-id. Efter lite utforskning fann jag att handle_id är en kod för varje telefonnummer eller Apple-id som du har haft en konversation med. För att kartlägga handle_id tillbaka till Apple-id kan vi använda en tabell i databasen (lämpligt) namngivna handtag och gå på handle_id.
lägga till ett chatt-id
på samma sätt innehåller meddelandetabellen också en chat_id som mappar varje meddelande tillbaka till unik chatt., Detta kan vara användbart när du gör analys på chattar med flera personer i dem. Vi kan få chat_id för varje meddelande Genom att gå med i meddelandetabellen med (igen, lämpligt namngiven) chat_message_join tabellen på message_id.
att få datumet
meddelandetabellen innehåller också en datumkolumn och det var lite knepigt för mig att avkoda eftersom det inte är exakt i något format som används i branschen. Dessutom är det sätt som denna kolumn registreras lite annorlunda i nyare version av Mac OS X jämfört med äldre.,
kredit till denna stackoverflow sida som hjälpte mig att räkna ut detta.
i Mac OS X-versioner före High Sierra (som är version 10.13 och släpptes i September 2017) är datumkolumnen en epoktyp, men till skillnad från standarden för att räkna sekunderna från 1970-01-01 räknar den sekunderna från 2001-01-01., För att konvertera den typen till ett datafält kan vi faktiskt förstå att vi kan använda ett kommando medan vi frågar meddelandetabellen för att skapa ett nytt fält (vi kommer att kalla det date_utc, eftersom det ger ett UTC-tidszondatum som ett resultat) baserat på datumfältet.
i Mac OS X High Sierra och ovan är det samma sak men datumformatet är nu mycket mer granulärt: det är i nano-andra nivån. Så nu måste vi dela med 1,000,000,000
innan vi tillämpar samma kodavsnitt som vi tillämpade ovan.,
sätta ihop allt
Du kan hitta anteckningsboken här med all kod för att du ska kunna extrahera dina iMessages från din bärbara dator och börja analysera!
det bör bara ta några minuter och i slutet av det bör du ha en grundläggande historia av din iMessage data som innehåller telefonnummer (eller e-post), texten, en unik chatt för varje unik grupp av människor du hade en chatt med och tidsstämpel (i UTC tidszon) för varje meddelande skickas.
Du kan faktiskt hitta mer data i databasen, till exempel detaljer om meddelandet levererades och lästes samt bilagor., Jag Rör inte på de attributen på det här inlägget.