Kheys
423
modifications
(Bannière info (lien vers fonctionnement du site)) |
(correction d'informations devenues erronées) |
||
| (4 versions intermédiaires par 2 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]].}} | {{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]]''', | 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. | |||
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= | =JVClient= | ||
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]] | [[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]] | ||
| Ligne 852 : | 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 == | ||