costruisci il grafo della tua rete sociale

"it will not solve the Cambridge Analytica problem: If everyone used Open Source networks or returned to blogging and homepages, their public content can and will still be data-mined by third parties"

Geert Lovink, https://amsterdamalternative.nl/articles/5518

I dati di un'instanza mastodon possono essere ottenuti quasi esclusivamente usando le API, ma bisogna avere un account sull'instanza ed autenticarsi. Diversamente, utilizzando le API pubbliche (json activitystream) si possono ottenere i dati anonimamente.

Il punto di partenza per l'esplorazione di un account è webfinger

GET https://mastodon.bida.im/.well-known/webfinger?resource=acct:void@mastodon.bida.im

che vi restituirà una serie di link (feed o pagine html) sull'utente. Ci interessa il feed activity stream

{
  "rel": "self",
  "type": "application/activity+json",
  "href": "https://mastodon.bida.im/users/void"
},

per ottenere i link alle api following e followers

GET https://mastodon.bida.im/users/void
Accept: application/activity+json

{
...
"following": "https://mastodon.bida.im/users/void/following",
"followers": "https://mastodon.bida.im/users/void/followers",
...
}

Lo script di seguito, come puro esempio, ricava tutti i followers dell'utente

#!/usr/bin/env bash

instance="https://mastodon.bida.im"
user="void"

json=$(curl -s -H "Accept: application/activity+json" $instance/users/$user/followers?page=1)
echo $json | jq -r .orderedItems[] | xargs -I% echo "<%> <follows> <$instance/user/$user> ."
next=$(echo $json | jq -r .next)

while true; do
    json=$(curl -s -H "Accept: application/activity+json" $next)
    echo $json | jq -r .orderedItems[] | xargs -I% echo "<%> <follows> <$instance/user/$user> ."
    next=$(echo $json | jq -r .next)
    if [ -z "$next" ]; then
        break
    fi
done

e restituisce un output in n-triples

<https://mastodon.bida.im/users/spleen> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/jops> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/nibble> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/jigen> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/lykos> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/makhno> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/nerofumo> <follows> <https://mastodon.bida.im/user/void> .
<https://mastodon.bida.im/users/zeppe> <follows> <https://mastodon.bida.im/user/void> .
...

Esercizio:

catturare il grafo degli utenti di un'istanza, caricarlo in un db a grafo (ma anche un db relazionale può essere usato allo scopo), ed eseguire delle query utili ad immaginare alcune relazioni significative.

scelte possibili: db rdf, neo4j, cayley, lemongraph
(l'ultimo dicono sia sviluppato da persone che se ne intendono di grafi)


void@autistici.org, Fri Jun 29 09:39:24 CEST 2018