Det store Facebook-tyveriet

Beretningen om da jeg brøt meg inn i Facebook-hvelvet for å hente ut alle dataene mine.

Nylig skrev jeg om hvordan jeg hentet alle Instagram-bildene til familien min og ga dem til dem i julegave som bildebøker. Det var ikke lett å få til dette, men ikke så vanskelig heller. Jeg brukte bare et verktøy noen allerede har laget for dette.

I høst skal jeg altså teste ut hvor lett det er å hente dataene mine fra tjenestene jeg bruker, og gjøre det på en slik måte at jeg kan bruke dem til noe. I teorien skal EUs personvernforordning GDPR nå ha gjort det slik at jeg eier dataene mine hos Facebook, Twitter, Google og andre tjenester, og kan ta dem med meg videre når jeg vil. Stemmer dette?

I dag har turen kommet til Facebook. Jeg begynte å bruke Facebook i 2011. Jeg så på det som en slags blogg. Derfor er nesten alt jeg har lagt ut der offentlig. Disse innleggene ønsker jeg å hente ut og legge ut på nettstedet mitt på en måte som ser ålreit ut. Har det noe verdi det som ligger der? Ikke egentlig. Det er mest en prinsippsak. Mye av det som ligger der er dumt og verdiløst, men det var jeg som skrev disse dumme og verdiløse tingene, helt gratis, og så sitter Facebook der og vokter på dem.

Det er på tide med et innbrudd i Facebooks datahvelv. Det vil si, først prøver jeg å gå inn hovedinngangen. På samme måte som for Instagram finnes det nemlig en enkel måte å hente ut alle dataene dine fra Facebook. Du går bare inn på siden Download your information og bestiller en kopi av alt de har om deg. Etter noen timer kan du laste ned en stor fil. Den første planen min ser derfor slik ut:

Plan 1

  1. Gå inn og hent ut alle innleggene mine
  2. Last dem opp til nettstedet mitt

Enkelt og greit. Det begynner lovende. Facebook lar deg velge om du vil hente dataene som HTML eller JSON. HTML betyr at du kan åpne dataene i en browser. JSON er et dataformat som du i teorien kan importere til et annet system.

Jeg prøver først å hente dem som HTML. Målet mitt er jo å legge ut alt på nettstedet mitt. Kanskje jeg bare kan bruke filene slik de er? Men nei. Innholdet i HTML-arkivet fungerer nok greit som et privat arkiv, hvis jeg bare vil ha det selv for ettertiden. Sånn sett er det et bra arkiv. Her er det mye mer enn bare innleggene mine. Bilder, likes, venner, alt ligger her, inkludert hvilke annonsetemaer Facebook tror jeg er interessert i. Dette kan selvsagt være interessant å ha, men hvis jeg ønsker å bruke dataene til noe er dette ganske verdiløst. Alle innleggene er for eksempel samlet i én eneste stor HTML-fil. Det er 10 år med data, det. Filen inneholder dessuten alle innlegg jeg har skrevet, ikke bare det jeg har lagt ut offentlig. Det er ikke en gang mulig for meg å se om et innlegg ble lagt ut offentlig eller bare var ment for nære venner.

Når jeg blar i fila ser jeg også at en del av innleggene er helt tomme. Det viser seg at dette er tilfeller hvor jeg har delt et Facebook-innlegg uten å legge på en egen kommentar. Selve innlegget jeg har delt er jo teknisk sett ikke “mitt”, og er derfor fjernet. Enda verre er det at dette også gjelder vanlige linker jeg har delt. Når du deler en link på Facebook, vises tittel, bilde og et tekstudrag automatisk i innlegget ditt. Alt dette er borte. Det eneste som er igjen er selve URL’en. Det ser ikke pent ut.

Fila er med andre ord verdiløs for det jeg vil bruke den til. Da er altså alternativet JSON. Bloggplatformen jeg bruker, Hugo, kan lese JSON-filer, men den takler formatet Markdown bedre. Det er lett å konvertere fra JSON til Markdown. Jeg formulerer derfor en ny plan:

Plan 2

  1. Hent ut arkivet mitt som JSON
  2. Lag et script som konverterer innleggene til Markdown
  3. Design malen som en hjemmeside på GeoCities fra slutten av 1990-tallet

Kanskje ikke 3, da. Det var mer et plutselig innfall jeg fikk midt på natta mens jeg satt oppe og ventet på at ettåringen skulle sovne igjen. Ideen virker ikke like fornuftig i dagslys. Men 1 og 2 bør jeg vel få til.

Jeg henter ut arkivet mitt i JSON-format, og begynner å lage konverteringsscriptet og malen jeg trenger. Jeg oppdager raskt at dataene er like dårlige og mangelfulle som de som lå i HTML-arkivet. Normalt er det slik at et dataformat inneholder mer og bedre data enn et presentasjonsformat. Slik er det ikke her. Informasjonen om linker jeg har delt er borte, her også. Fila inneholder ikke en gang en URL til det opprinnelige innlegget i Facebook, slik at man kunne klikket på en link for å se originalen. Det gjør HTML-eksporten. JSON-eksporten er derfor enda mer verdiløs enn HTML-eksporten.

Jeg kan ikke bruke dette heller.

Jeg graver videre og oppdager at Facebook har en tjeneste som heter Graph API, som brukes av alle som utvikler ulike tjenester og apper knyttet til Facebook. Et API er en tjeneste som er laget for å brukes av programmer, ikke vises i browsere. Graph API lar deg blant annet søke opp innlegg, og gir mye mer informasjon enn du får i dataeksporten. Blant annet får du ut tittel, bilde og tekstutdrag fra eksterne linker du har delt. Jeg formulerer en ny plan:

Plan 3

  1. Finn et ferdig verktøy som lar meg hente ut alle innleggene mine via Graph API
  2. Lag et script som konverter innleggene til Markdown
  3. Design malen som en hjemmeside på GeoCities fra slutten av 1990-tallet

Jeg finner imidlertid ikke noe verktøy for å hente Facebook-innlegg. Dette er litt rart, egentlig. Jeg har kanskje ikke lett godt nok. Uansett ender jeg opp med en ny plan:

Plan 4

  1. Lag et script som henter alle innleggene mine via Graph API
  2. Lag et script som konverter innleggene til Markdown
  3. Design malen som en hjemmeside på GeoCities fra slutten av 1990-tallet

Å jobbe mot et godt API er gøy. Graph API er ganske godt, og har fine utviklerverktøy. Men å gå gjennom alle mine innlegg fra start til slutt og systematisk hente alle sammen er ikke lett. APIet har blant annet en streng tilgangskontroll som jeg støter borti stadig vekk. Jeg har rett og slett ikke tilgang til enkelte av mine egne innlegg. Dette er egentlig en god ting. Facebook vil gjøre det vanskelig for deg å gi bort mer data til en applikasjon enn du var klar over. De ønsker ikke flere Cambridge Analytica-skandaler. Det er ikke akkurat slik at Facebook bryr seg om privatlivet ditt. Det er mer slik at de selv vil ha full kontroll over hvem som skal få lov til å invadere det. Derfor er det greit at Graph API har en streng tilgangskontroll. Men feilmeldingene er uhjelpsomme og det er vanskelig å bla forbi innholdet jeg ikke kan se. I tillegg er det flere funksjoner som ikke fungerer slik dokumentasjonen påstår. I blant klager APIet på at jeg har gjort for mange kall på for kort tid, og stenger meg ute en dag.

Etter å ha prøvd meg fram en stund ender jeg til slutt opp med et Python-script som fungerer ganske greit. Det starter i 2020, og beveger seg sakte og metodisk bakover til 2011. Jeg får hentet ut det meste av innholdet mitt. Resten er det ikke så farlig med. Scriptet lagrer innleggene på Markdown-format, og jeg lager en Hugo-mal som presenterer innholdet.

Dette er med andre ord ikke noe hvem som helst kan gjøre. De som er nysgjerrige finner koden til scriptet jeg endte opp med her. Hvis du vil kjøre dette selv, må du først registrere en Facebook for Developers-konto og generere et accesstoken med mange tilganger. Du kan neppe bruke scriptet slik det er. Algoritmen jeg har endt opp med fungerer for det jeg ønsker å hente ut fra min feed, men kanskje ikke for din. Bruk den som et utgangspunkt.

Resultatet finner du her. Det er en del huller der, og designet kan jeg sikkert pynte litt mer på. Jeg bryr meg ikke nok til å gjøre dette perfekt. Selve innholdet er ikke mye å være stolt av heller, akkurat. Ti år med Facebook-innlegg. Mye av det er ikke akkurat det smarteste eller beste jeg har skrevet, og Facebook var aldri en platform som fikk frem det beste i folk. Kanskje er det like greit at det meste av det folk har skrevet der forsvinner inn i tåka. Det er nå likevel gøy å ha hentet det ut. Det føles som å ha brutt seg inn i Facebooks hvelv for å stjele tilbake mine egne data.

Det siste punktet i planen min, å designe dette som en GeoCities-hjemmeside fra slutten av 1990-tallet, har jeg ved nærmere ettertanke besluttet å utsette.