Kheys
423
modifications
(correction script auth_header + 3 nouveaux endpoints) |
(correction d'informations devenues erronées) |
||
| (9 versions intermédiaires par 3 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
{{Bannière Info|Contenu=Cette page documente l'API v4 de jeuxvideo.com. Le fonctionnement du site est quant à lui détaillé sur [[Fonctionnement technique de Jeuxvideo.com]].}} | |||
L''''API de [[jeuxvideo.com]]''', conçue par les développeurs du site pour l'application mobile, permet de programmatiser l'envoi de requêtes à JVC. | |||
Étant à l'origine réservée à un usage privé, on ne dispose pas de sa documentation officielle. Toutefois, il est possible de détailler son fonctionnement grâce à un travail de rétro-ingéniérie. | |||
Les anciennes versions sont toujours exploitables avec les ''tokens'' qui leur sont propres{{Commentaire|Autre= | En juin 2025, l'API est hébergée sur le sous-domaine ''api'', et est à sa quatrième version (''v4''). | ||
L'ancienne API ''jvc.gg'' était hébergée à ''api.jvc.gg'' jusqu'à son abandon en février 2025. Elle était utilisée par les pages Phoenix du site, notamment pour la recherche des jeux. Sa documentation (non-officielle) est toujours consultable sur cet article. | |||
Les anciennes versions sont toujours exploitables avec les ''tokens'' qui leur sont propres{{Commentaire|Autre=très probablement obsolète}}, mais certains ''endpoints'' renvoient des erreurs HTTP 403. | |||
<div id="jvclient"></div> | |||
=JVClient= | |||
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]] | |||
[https://www.npmjs.com/package/jv-client '''JVClient'''] est une '''librairie Node.js''' écrite en TypeScript qui fournit des classes et des fonctions permettant d'interagir avec l'API v4 de jeuxvideo.com ainsi que le site JVC lui-même. | |||
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le ''scraping'' de données sur des jeux, articles, forums, topics, etc. et pour l'exécution d'opérations nécessitant un compte connecté (comme poster des topics). Le code est ''open source'' et disponible sur Github<ref>https://github.com/Contrapunctus-XIV/jv-client</ref>. | |||
Elle dispose également d'une documentation complète<ref>https://contrapunctus-xiv.github.io/jv-client/</ref> qui explique en détail l'organisation des données de jeuxvideo.com. | |||
{{clear}} | |||
=Rétro-ingénierie de l'application mobile JVC= | =Rétro-ingénierie de l'application mobile JVC= | ||
| Ligne 131 : | Ligne 145 : | ||
<div id="sous-domaine"></div> | <div id="sous-domaine"></div> | ||
== Comportement du sous-domaine == | == Comportement du sous-domaine pour les forums == | ||
Il est intéressant de remarquer que l'API se comporte souvent en véritable | Il est intéressant de remarquer que l'API se comporte souvent en véritable site Web, qui réplique les forums du site www.jeuxvideo.com : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l'URL « www » par « api » et vous vous trouverez sur une page aux informations identiques quoique présentées de manière différente. Ainsi, les URL seront de la forme <code>https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm</code>. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API. | ||
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l'API.]] | [[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l'API.]] | ||
| Ligne 140 : | Ligne 154 : | ||
{{clear}} | {{clear}} | ||
==Endpoints | ==Endpoints de service== | ||
Il s'agit des ''endpoints'' « documentés » dans le code de l'application mobile et qui se comportent différemment des services de l'API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente). | Il s'agit des ''endpoints'' « documentés » dans le code de l'application mobile et qui se comportent différemment des services de l'API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente). | ||
On rappelle que l'accès à ces ''endpoints'' nécessite un token d'authentification à fournir dans le header ''Jvc-Authorization''. Voir l'[[#annexe|annexe]] pour le générer. | |||
'''URL de base''': ''<nowiki>https://api.jeuxvideo.com/v4/</nowiki>'' | '''URL de base''': ''<nowiki>https://api.jeuxvideo.com/v4/</nowiki>'' | ||
| Ligne 839 : | Ligne 854 : | ||
En second lieu, vous ne devrez pas seulement envoyer aux serveurs le contenu de votre message (et le titre du topic si besoin) : la requête ''POST'' devra aussi contenir des paires clés-valeurs générées par le site lui-même et qui agissent comme une sorte de protection. Celles-ci sont : ''fs_session'', ''fs_timestamp'', ''fs_version'', ''form_alias_rang'' ainsi qu'un ''hash''. | En second lieu, vous ne devrez pas seulement envoyer aux serveurs le contenu de votre message (et le titre du topic si besoin) : la requête ''POST'' devra aussi contenir des paires clés-valeurs générées par le site lui-même et qui agissent comme une sorte de protection. Celles-ci sont : ''fs_session'', ''fs_timestamp'', ''fs_version'', ''form_alias_rang'' ainsi qu'un ''hash''. | ||
'''Depuis mai 2025''', suite à une mise à jour de JVC, les informations ''"fs_" '', sont offusqués dans une chaîne en base 64. | |||
Les fs_ sont récupérables via la balise script : ''window.jvc.forumsAppPayload'' | |||
= | <script>window.jvc=window.jvc||{};window.jvc.forumsAppPayload=[CHAINE_A_RECUPERER]</script> | ||
Pour récupérer les valeurs dans la chaîne : | |||
const forumsAppPayload = [...document.scripts].map(s => s.textContent.match(/forumsAppPayload\s*=\s*["']([^"']+)["']/)).filter(Boolean)[0][1]; | |||
const decoded = JSON.parse(atob(forumsAppPayload)); | |||
Auparavant, ces valeurs étaient disponibles depuis des ''inputs'' cachées dans le code HTML des pages de forums/topics et situées dans la ''div'' nommée ''js-form-session-data''. | |||
Si l'on veut envoyer un message sur un topic (ou un forum), il faudra d'abord envoyer une requête ''GET'' à l'URL associée et récupérer ces valeurs chiffrées avant d'envoyer une requête ''POST'' à l'URL avec le contenu du message en plus de ces dernières. | |||
'''Pour poster un message''', la requête POST devra être faite à <code>https://www.jeuxvideo.com/forums/message/add</code> avec le ''header'' <code>Content-Type</code> valant <code>multipart/form-data</code> et les données suivantes en ''body'' : | |||
<pre> | |||
text : le contenu du message | |||
topicId : ID du topic cible | |||
topicTitle : titre du topic (si c'est une création du topic) | |||
forumId : ID du forum cible | |||
group : mettre à 1 | |||
messageId : undefined | |||
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash | |||
</pre> | |||
'''Pour poster un topic''', la requête POST devra être faite à <code>https://www.jeuxvideo.com/forums/topic/add</code> avec le ''header'' <code>Content-Type</code> valant <code>multipart/form-data</code> et les données suivantes en ''body'' : | |||
<pre> | |||
text : le contenu du message | |||
topicId : mettre à 0 | |||
topicTitle : titre du topic (si c'est une création du topic) | |||
forumId : ID du forum cible | |||
group : mettre à 1 | |||
messageId : undefined | |||
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash | |||
submitSurvey : true pour ajouter un sondage, false sinon | |||
answerSurvey : titre du sondage s'il y en a un | |||
responsesSurvey[] : une réponse au sondage | |||
</pre> | |||
'''Note''' : À date, ces informations sont uniquement offusquées dans la partie forum. Les messages privés conservent les informations en clair dans le HTML comme mentionné plus haut. | |||
== Limitations == | == Limitations == | ||
| Ligne 942 : | Ligne 906 : | ||
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l'API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps). | *[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l'API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps). | ||
= API jvc.gg = | = API jvc.gg (dépréciée) = | ||
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l'ancienne API qui n'existe plus.}} | |||
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]] | [[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]] | ||
Cette API | Cette API était une API distincte de la ''v4'' et utilisée par la partie Phoenix du site, c'est-à-dire les pages listant les jeux, ''reviews'', vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle était hébergée sur le domaine [https://api.jvc.gg api.jvc.gg]. | ||
L'API est fermée début février 2025 à la suite de la refonte des pages Phoenix de JVC qui adoptent désormais le même fonctionnement que les autres pages du site. | |||
{{clear}} | {{clear}} | ||
| Ligne 1 006 : | Ligne 974 : | ||
=== Queries des tests === | === Queries des tests === | ||
Les ''queries'' renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l'encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des ''queries'' possibles pour ces attributs est disponible au format JSON [https://pastebin.com/ | Les ''queries'' renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l'encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des ''queries'' possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici]. | ||
Par exemple, si vous souhaitez obtenir la liste des tests de jeux PC de genre aventure, de mode solo ayant eu au moins 14 et datant d'il y a au plus 6 mois, votre chaîne de ''queries'' devra être | Par exemple, si vous souhaitez obtenir la liste des tests de jeux PC de genre aventure, de mode solo ayant eu au moins 14 et datant d'il y a au plus 6 mois, votre chaîne de ''queries'' devra être | ||