Comment regarder un film aléatoire sur Netflix ?
C’est la question que je me pose quand ça fait 20 minutes que je recherche un film à regarder et que finalement, je finis par quitter Netflix pour aller sur YouTube ou Twitch.
Il paraît que certaines personnes sur Netflix et sur certaines machines ont accès à une feature de Netflix qui permet de lancer un film ou une série aléatoirement. Malheureusement, ce n’est pas encore le cas pour tout le monde alors j’ai décidé de créer une extension Chrome pour lancer un film aléatoire dans ma liste de recommandations (~500 films).
De quoi as-t-on besoin ?
Mis à part un compte Netflix, voici ce qu’on va utiliser:
- NodeJS pour un serveur qui nous enverra l’id du film coupler à Google Cloud
- Python pour le scrapping avec mitmproxy
- Bash pour automatiser tout cela
Comment fonctionne Netflix ?
Si jamais vous êtes un peu curieux comme moi, et que vous regardez à quoi ressemble les requêtes Netflix, vous vous poserez beaucoup de questions tellement la plupart des requêtes ne semblent pas avoir de sens.
On laisse de côté pour cet article les requêtes MSL qui sont là pour cryptés les films eux-même afin d’éviter le piratage, mais si cela vous intéresse c’est par ici.
Ce qui nous intéresse, c’est les requêtes POST avec comme URL
netflix.com/nq/website/memberapi/…
Si on regarde de plus près ces requêtes, on s’aperçoit que la requête contient des IDs de films ou séries quand on se balade sur le site de Netflix.
En récupérant ces requêtes on peut donc facilement récupérer des IDs de films puis piocher dans ces IDs pour lancer un film.
Le Scrapping des films
Pour le scrapping on a besoin de deux choses:
- Un proxy pour récupérer les requêtes ainsi que les IDs des films
- Un web scrapper pour automatiser la recherche
J’ai décidé de me tourner vers mitmproxy ainsi que Selenium pour effectuer cette tâche.
La récupération des requêtes
La partie un peu complexe était surtout de récupérer les IDs des films de manière clean car la forme des requêtes n’étaient pas toujours identiques.
Les caractères spéciaux étaient écrits sous leur forme ASCII:
%2C = ","; %20 = " "; %5B = "["; %5D = "]"
Il fallait donc les supprimer et savoir comment la délimitation était faite. Voici le code:
On lance ensuite le script avec la commande suivante:
mitmdump -s getdb.py
Le Web Scrapper
Pour l’automatisation de navigation, je me suis inspiré d’un bot Linkedin que j’avais fait auparavant.
La configuration est simple. Il suffit de mettre l’email, le mot de passe et le profil dans un fichier que le script va lire.
J’ai décidé de récupérer les films uniquement dans ma liste de recommandation à l’adresse suivante:
https://www.netflix.com/browse/genre/34399?so=su
Le code ici est un peu long et pas spécialement intéressant à montrer, mais vous pouvez checker le fichier scrap.py si vous le souhaitez.
Le Serveur
Le serveur permet juste de stocker les IDs des films et de choisir aléatoirement un film.
Il n’y a rien de très compliqué dans cette partie. Je vous partage le code:
On deploy ensuite le serveur sur le cloud très simplement avec la commande:
gcloud app deploy
L’extension Chrome
Je ne vais pas expliquer dans les détails comment créer une extension chrome, surtout que celle-ci est très simple. On veut juste appuyer sur un bouton pour lancer un film.
Si vous voulez des infos sur la création d’extension, le tutoriel de Google fera l’affaire.
L’extension possède deux fichiers principaux:
- le script
- le manifeste
Le script va effectuer une requête à notre serveur et recevra un lien vers un film. Une fois reçu, on va demander d’ouvrir une nouvelle fenêtre et lancer le film.
Le manifeste permet l’utilisation de l’extension sur Chrome.
Mise à jour des IDs
Notre extension est prête à être utiliser. Le seul problème, c’est que Netflix change régulièrement sa liste de films et on ne veut pas s’amuser à mettre a jour cette liste manuellement régulièrement.
On va donc rajouter un petit script qui va nous permettre d’automatiser le scrapping et le déploiement du serveur.
On ajoute ce script à notre crontab qu’on peut lancer 1 fois par semaine et notre extension est totalement automatique.