en meget enkel måde at forstå, hvad en databasefil er, er at tænke på det en mappe, der indeholder en masse e .cel-lignende tabeller. Meget gerne større eller enterprise-grade databaser kan du tilslutte og få adgang til data i databasen i en række forskellige måder.
brug af Python og pandas
i denne tutorial bruger jeg Python og det fantastiske pandas-modul til at oprette forbindelse til databasen, udforske de tabeller og data, den indeholder, og læs derefter disse data fra de relevante tabeller.,
ovenfor opretter vi forbindelse til databasen og undersøger, hvilke tabeller der er derinde. Jeg fandt, at der er et par tabeller i databasen, herunder en kaldet besked og andre navne chat, håndtere og vedhæftet fil. Lad os udforske meddelelsestabellen, fordi det er den, der lyder mest lovende at holde vores iMessages. Det gør jeg ved at overføre tabellen til en pandas dataframe, en type fil, der er meget lettere at udforske og manipulere til data analyis-projekter.
# get the 10 entries of the message table using pandas
messages = pd.read_sql_query("select * from message limit 10", conn)
at få meddelelsesteksten og telefonnummeret
vi ramte bingo!, Meddelelsestabellen ser faktisk ud til at indeholde alle de gemte iMessages. Det har et tekstfelt med den faktiske sendte eller modtagne besked, et datofelt (mere om det nedenfor) og et håndtag id. Efter lidt udforskning fandt jeg, at handle_id er en kode for hvert telefonnummer eller Apple-id, som du har haft en samtale med. For at kortlægge handle_id tilbage til Apple-id kan vi bruge en tabel i databasen (passende) navngivet håndtag og deltage på handle_id.
tilføjelse af et chat-id
på samme måde indeholder meddelelsestabellen også et chat_id, der kortlægger hver meddelelse tilbage til unik chat., Dette kan være nyttigt, når du analyserer chats med flere personer i dem. Vi kan få chat_id for hver meddelelse ved at slutte sig til meddelelsestabellen med (igen, passende navngivet) chat_message_join-tabellen på message_id.
at få datoen
meddelelsestabellen indeholder også en datokolonne, og det var lidt vanskeligt for mig at afkode, da det ikke er nøjagtigt i noget format, der er vidt brugt i branchen. Desuden er den måde, hvorpå denne kolonne er optaget, lidt anderledes i nyere version af Mac OS.sammenlignet med ældre.,
kredit til denne stackoverflo. – side, der hjalp mig med at finde ud af det.
I Mac OS X-versioner før High Sierra (som er version 10.13 og udgivet i September 2017), dato kolonne er en epoke type, men, i modsætning til standard for at tælle sekunder fra 1970-01-01, det er at tælle sekunder fra 2001-01-01., For at konvertere denne type i en data felt kan vi rent faktisk forstå, vi kan bruge en kommando, samtidig med at forespørge besked tabel for at oprette et nyt felt (vi kalder det date_utc, da det giver en UTC-tidszonen, datoen som et resultat), der er baseret på dato feltet.
i Mac OS High High Sierra og derover er det det samme, men datoformatet er nu meget mere granulært: det er i nano-andet niveau. Så nu skal vi dividere med 1,000,000,000
før vi anvender det samme kodestykke, som vi anvendte ovenfor.,
sæt det hele sammen
Du kan finde den bærbare computer her med al koden, så du kan udtrække dine iMessages fra din bærbare computer og begynde at analysere!
det skal kun tage et par minutter, og i slutningen af det skal du have en grundlæggende historie med dine iMessage-data, der inkluderer telefonnummeret (eller e-mailen), teksten, en unik chat for hver unik gruppe mennesker, du havde en chat med, og tidsstemplet (i UTC-tids .one) for hver sendt meddelelse.
Du kan faktisk finde flere data i databasen såsom detaljer, hvis meddelelsen blev leveret og læst samt vedhæftede filer., Jeg rører ikke på disse attributter på dette indlæg.