Contourner la limite de recherche de LinkedIn en jouant avec l'API

Limites


Étant un réseau professionnel de premier ordre, LinkedIn, malheureusement, pour les comptes gratuits, connaît des limitations telle que la Limite d'Usage Commercial (CUL).

Il est fort probable que vous, tout comme moi jusqu'à récemment, n'ayez jamais rencontré et entendu parler de cette chose.


image



Le but de la limitation commerciale est que lorsque vous recherchez trop souvent des personnes en dehors de vos connexions/réseaux, vos résultats de recherche seront limités avec seulement 3 profils affichés au lieu de 1000 (100 pages avec 10 profils par page par défaut).

Personne ne sait combien de fois on mesure le nombre de connexions, il n'y a pas de mesures précises ; l'algorithme le décide en fonction de vos actions - combien de fois vous avez cherché et combien de connexions vous avez ajoutées.

Le CUL pour les comptes gratuits se réinitialise à minuit le 1er de chaque mois, et vous obtenez à nouveau vos 1000 résultats de recherche, pour qui sait combien de temps. Bien entendu, les comptes Premium ne sont pas soumis à une telle limite.

Cependant, il n'y a pas si longtemps, j'ai commencé à jouer avec LinkedIn pour m'éclater un peu, et je me suis soudainement retrouvé coincé avec cette limitation commerciale. Évidemment, je n'ai pas aimé ça ; après tout, je n'ai pas utilisé la recherche à des fins commerciales. Donc, ma première pensée a été d'explorer cette limite et d'essayer de la contourner.

[Précision importante - tous les documents sources dans cet article sont présentés uniquement à des fins d'information et d'éducation. L'auteur n'encourage pas leur utilisation à des fins commerciales].

Etude du problème


Ce que nous avons obtenu : au lieu de 10 profils avec pagination, l'outil de recherche n'en affiche que 3, qui sont suivis d'une " recommandation " d'acheter un compte Premium, puis vous voyez d'autres profils flous et non cliquables.


La première chose que vous avez à faire en tant que développeur est d'ouvrir les outils de développement du navigateur pour examiner ces profils cachés/flous - vous pourriez peut-être supprimer certains styles responsables du flou, ou extraire les données du bloc de mise en page/marquage. Mais, comme on pouvait s'y attendre, ces profils sont présentés comme des placeholder d’images qui ne contiennent aucune donnée.


image


Ok, maintenant allons dans un onglet Réseau et vérifions si les résultats de la recherche alternative ne renvoient vraiment que 3 profils. Donc, nous trouvons la requête qui nous intéresse - "/api/search/blended" - et regardons la réponse.


image


Les profils sont contenus dans le tableau `inclus', mais il y a aussi déjà 15 entités dans ce tableau. Dans ce cas, les 3 premières sont les objets avec des données supplémentaires - chaque objet contient des informations sur un profil particulier (par exemple, si le profil est un profil Premium).


Les 12 profils suivants sont réels - il s'agit en fait de résultats de recherche, dont trois seulement nous seront présentés.


Comme vous pouvez déjà le deviner, LinkedIn n'affiche que les profils qui ont reçu les informations complémentaires (les 3 premiers objets).


Par exemple, si vous explorez la réponse du profil sans limite, vous obtiendrez 28 entités - 10 objets avec des informations supplémentaires et 18 profils.


Réponse pour un profil qui ne comporte pas de limite

image


image


Je ne sais pas encore pourquoi il y a plus de 10 profils retournés, alors que 10 sont demandés, et qu'ils ne sont pas affichés à l'utilisateur - vous ne les verrez même pas sur la page suivante.

 Si vous analysez l'URL de la requête, vous verrez que le compte est de 10 (combien de profils sont retournés dans la réponse, 49 étant le maximum).


image


Tout commentaire à ce sujet serait très apprécié et intéressant pour la culture générale.


Expérimentations


Ok, maintenant nous savons la chose la plus importante - la réponse vient avec plus de profils que ce que LinkedIn nous montre.

Donc, nous pouvons obtenir plus de données, malgré le CUL. Essayons d'extraire l'API nous-mêmes depuis la console, en utilisant "fetch".


image


Comme prévu, nous obtenons l'erreur 403. C'est un problème de sécurité - ici nous n'envoyons pas de jeton CSRF (CSRF sur Wikipedia).

En bref, il s'agit d'un jeton unique qui est ajouté à chaque requête, et dont l'authenticité est vérifiée du côté du serveur.


image


Vous pouvez le copier à partir de toute autre requête réussie ou de cookies, où il est stocké dans le champ "JSESSIONID".

Où trouver un jeton (token)

En-tête de toute autre demande :


image


Des cookies, directement dans la console :


image


Essayons à nouveau ; cette fois, nous passons les paramètres à récupérer. Dans les paramètres, nous spécifions notre jeton CSRF comme paramètre dans l'en-tête.


image


Succès, les 10 profils sont retournés. :tada :

En raison de la différence entre les en-têtes, la structure des réponses diffère légèrement de celle de la demande initiale. Vous pouvez obtenir la même structure exacte si vous ajoutez 'Accept:' application/vnd.linkedin.normalized+json+2.1' dans notre objet, à côté du jeton CSRF.


Exemple d'une réponse avec l'en-tête ajouté
image


En savoir plus sur l'en-tête Accepter

What's Next?

Vous pouvez maintenant éditer (manuellement ou automatiquement) le paramètre " start " qui spécifie l'index, à partir duquel nous pouvons recevoir 10 profils (par défaut = 0) de l'ensemble du résultat de la recherche.

En d'autres termes, en l'incrémentant de 10 après chaque requête, nous obtenons notre pagination habituelle, 10 profils par page.

A ce stade, j'ai assez de données et de liberté pour continuer à travailler sur le projet marrant. Mais ce serait un péché de ne pas essayer d'afficher ces données tout de suite puisqu'elles sont entre mes mains.

On ne va pas plonger dans la braise utilisée pour le frontend.

Comme le JQuery a été intégré sur le site web, vous pouvez sortir de votre mémoire la connaissance de la syntaxe de base, et créer la chose suivante en quelques minutes.

JQuery Code

Lien disponible sur github : https://github.com/edubaschool/scripts-blog/blob/master/linkedin-search.js

Si vous faites cette action directement dans la console sur la page de recherche, vous ajouterez un bouton qui charge 10 nouveaux profils à chaque fois que vous cliquez dessus, et les rendra sous forme de liste. Bien sûr, vous devrez changer un token et une URL de façon appropriée pour ceux qui sont nécessaires. Le bloc de profil contiendra un nom, un poste, un emplacement, un lien vers le profil et une image de remplacement.


image


Conclusion

Ainsi, avec un minimum d'effort, nous avons pu trouver un point faible et retrouver notre option de recherche sans aucune limitation. Il a suffi d'analyser les données et leur cheminement et de regarder dans la requête elle-même.


Je ne peux pas dire que c'est un problème sérieux pour LinkedIn car il ne représente aucune menace. Le pire qui puisse arriver est une perte de profit à cause de ce "contournement", qui permet de ne pas acheter un compte Premium. Peut-être que la réponse d'un tel serveur est nécessaire pour que les autres parties du site fonctionnent correctement, ou c'est simplement la paresse des développeurs par manque de ressources, qui ne permet pas de faire mieux (L'ULC est apparue en janvier 2015, avant qu'il n'y ait plus de limite du tout).


P. S.


Old P. S.

Bien sûr, le code jQuery est un exemple assez primitif de capacités. Actuellement, j'ai créé une extension de navigateur pour répondre à mes besoins. Elle ajoute des boutons de contrôle et rend des profils complets avec des images, un bouton d'invitation, et des connexions mutuelles. De plus, il collecte dynamiquement des filtres de lieux, d'entreprises et d'autres choses, et extrait un jeton des cookies. Vous n'avez donc pas besoin de coder en dur quoi que ce soit. De plus, l'extension ajoute des champs de paramètres supplémentaires, par exemple "combien de profils à demander en même temps, jusqu'à 49".


example


Je travaille toujours sur cette extension, et je prévois de la rendre publique.


Envoyez-moi un message si vous êtes intéressé.


À la demande générale de publier cette extension en tant que produit open-source, j'ai créé une extension pour navigateur et l'ai mise en ligne pour un usage public (gratuit et même sans mineurs). Il a non seulement la fonctionnalité de contournement de limite mais aussi quelques autres caractéristiques. Vous pouvez y jeter un coup d'oeil et le télécharger ici – adam4leos.github.io


Comme il s'agit d'une version alpha, n'hésitez pas à me signaler les bugs, vos idées, ou même une interface utilisateur super cool. Je continue à améliorer l'extension et je posterai de nouvelles versions de temps en temps.


Tu as bien aimé l'article ou tu as mal aux yeux :

Voici le PDF

Article écrit par :
Mikael Monjour
Data et Automatisation