Je suis le seul Ă  avoir un entourage qui me force Ă  m’inscrire sur Letterboxd ?

Le truc c’est que je viens de TV Time. L’appli est notoire pour empĂȘcher d’accĂ©der Ă  ses donnĂ©es. Du coup je suis un peu obligĂ© de passer par un autre moyen, car j’ai plusieurs centaines de films Ă  ajouter.

Une appli monopage codée avec Flutter

Heureusement pour nous, il est possible d’accĂ©der Ă  TV Time via le web.

  1. Se connecter
  2. Aller sur le profil
  3. Voir la liste des films vus.

Je me rends vite compte que le DOM HTML n’est pas accessible. C’est en raison du shadow DOM que permet Flutter (si j’ai bien compris).

On va donc devoir manƓuvrer autrement.

L’onglet Network

Dans la console dĂ©veloppeur (Ctrl/Cmd + Shift + C), aller dans l’onglet Network.

En faisant un hard refresh un json assez gros est récupéré.

L’URL du json correspond Ă  https://app.tvtime.com/sidecar?o=https%3A%2F%2Fmsapi.tvtime.com%2Fprod%2Fv1%2Ftracking%2Fcgw%2Ffollows%2Fuser%2F<user_id>&entity_type=movie&sort=watched_date%2Cdesc. Il pĂšse ~400kb pour ~200 films regardĂ©s.

Cliquer dessus, et dans l’onglet Response le rĂ©sultat ressemble en gros Ă  ça :

{
    "status": "success",
    "data": {
        "user_id": 12345678,
        "type": "list",
        "objects": [
            {
                "uuid": "1f663b20-66d9-5f07-b6eb-59225ffea406",
                "type": "follow",
                "...": "..."
            }
        ]
    }
}

Récupérer le json sur Firefox

Récupérer le json sur Chrome/Chromium

Si c’est le bon, copier son contenu et le coller dans un fichier tvtime.json.

Manipulation avec jq

Letterboxd a un outil d’import de fichiers csv. C’est pourquoi il faut convertir le json pour qu’il soit lu par Letterboxd.

Il faut une liste avec les titres, les années de sortie et les dates de visionnage des films.

Installez donc jq au préalable.

Dans la colonne WatchedDate, je rĂ©cupĂšre la date de visionnage. Comme certains films n’ont pas la valeur de remplie, j’ai dĂ» mettre une date par dĂ©faut.

Pensez donc Ă  remplacer le 2025-05-19.

jq -r '
  (["Title","Year","WatchedDate"]),
  ( .data.objects[] |
    [
      .meta.name,
      (.meta.first_release_date | split("-")[0]),
      (.watched_at // "" | if length > 0 then split("T")[0] else "2025-05-19" end)
    ]
  )
  | @csv
' tvtime.json > letterboxd.csv

Un Ă©quivalent sur PowerShell pour Windows (n’utilise pas jq)

$json = Get-Content -Raw -Path "tvtime.json" | ConvertFrom-Json
$csvLines = @()
$csvLines += '"Title","Year","WatchedDate"'

foreach ($item in $json.data.objects) {
    $title = $item.meta.name
    $year = ($item.meta.first_release_date -split "-")[0]

    if ($item.watched_at) {
        $watchedDate = ($item.watched_at -split "T")[0]
    } else {
        $watchedDate = "2025-05-19"
    }

    $csvLine = '"' + $title.Replace('"', '""') + '","' + $year + '","' + $watchedDate + '"'
    $csvLines += $csvLine
}

$csvLines | Set-Content -Path "letterboxd.csv" -Encoding UTF8

Import du csv dans Letterboxd

Sur la page d’importation, ouvrir le fichier letterboxd.csv gĂ©nĂ©rĂ© au-dessus.

Il faut ajouter manuellement les films qui n’ont pas Ă©tĂ© reconnus. Activer Hide successful matches pour les complĂ©ter.

Puis cliquer sur Import films.


Si vous avez des questions ou des suggestions, n’hĂ©sitez pas Ă  me contacter par mail, sur LinkedIn ou directement en envoyant une issue sur GitHub