<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://jvflux.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=HelloWorld5000</id>
	<title>JVFlux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://jvflux.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=HelloWorld5000"/>
	<link rel="alternate" type="text/html" href="https://jvflux.fr/Sp%C3%A9cial:Contributions/HelloWorld5000"/>
	<updated>2026-04-07T18:09:42Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=165112</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=165112"/>
		<updated>2025-06-29T10:20:58Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : correction d&amp;#039;informations devenues erronées&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Cette page documente l&#039;API v4 de jeuxvideo.com. Le fonctionnement du site est quant à lui détaillé sur [[Fonctionnement technique de Jeuxvideo.com]].}}&lt;br /&gt;
&lt;br /&gt;
L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, conçue par les développeurs du site pour l&#039;application mobile, permet de programmatiser l&#039;envoi de requêtes à JVC.&lt;br /&gt;
Étant à l&#039;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.&lt;br /&gt;
&lt;br /&gt;
En juin 2025, l&#039;API est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est à sa quatrième version (&#039;&#039;v4&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
L&#039;ancienne API &#039;&#039;jvc.gg&#039;&#039; était hébergée à &#039;&#039;api.jvc.gg&#039;&#039; jusqu&#039;à 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.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=très probablement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvclient&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponible sur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Depuis mai 2025&#039;&#039;&#039;, suite à une mise à jour de JVC, les informations &#039;&#039;&amp;quot;fs_&amp;quot; &#039;&#039;, sont offusqués dans une chaîne en base 64.&lt;br /&gt;
&lt;br /&gt;
Les fs_ sont récupérables via la balise script : &#039;&#039;window.jvc.forumsAppPayload&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script&amp;gt;window.jvc=window.jvc||{};window.jvc.forumsAppPayload=[CHAINE_A_RECUPERER]&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les valeurs dans la chaîne :&lt;br /&gt;
 const forumsAppPayload = [...document.scripts].map(s =&amp;gt; s.textContent.match(/forumsAppPayload\s*=\s*[&amp;quot;&#039;]([^&amp;quot;&#039;]+)[&amp;quot;&#039;]/)).filter(Boolean)[0][1];&lt;br /&gt;
 &lt;br /&gt;
 const decoded = JSON.parse(atob(forumsAppPayload));&lt;br /&gt;
&lt;br /&gt;
Auparavant, ces valeurs étaient disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; à l&#039;URL avec le contenu du message en plus de ces dernières. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour poster un message&#039;&#039;&#039;, la requête POST devra être faite à &amp;lt;code&amp;gt;https://www.jeuxvideo.com/forums/message/add&amp;lt;/code&amp;gt; avec le &#039;&#039;header&#039;&#039; &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt; valant &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; et les données suivantes en &#039;&#039;body&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text : le contenu du message&lt;br /&gt;
topicId : ID du topic cible&lt;br /&gt;
topicTitle : titre du topic (si c&#039;est une création du topic)&lt;br /&gt;
forumId : ID du forum cible&lt;br /&gt;
group : mettre à 1&lt;br /&gt;
messageId : undefined&lt;br /&gt;
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour poster un topic&#039;&#039;&#039;,  la requête POST devra être faite à &amp;lt;code&amp;gt;https://www.jeuxvideo.com/forums/topic/add&amp;lt;/code&amp;gt; avec le &#039;&#039;header&#039;&#039; &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt; valant &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; et les données suivantes en &#039;&#039;body&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text : le contenu du message&lt;br /&gt;
topicId : mettre à 0&lt;br /&gt;
topicTitle : titre du topic (si c&#039;est une création du topic)&lt;br /&gt;
forumId : ID du forum cible&lt;br /&gt;
group : mettre à 1&lt;br /&gt;
messageId : undefined&lt;br /&gt;
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash&lt;br /&gt;
submitSurvey : true pour ajouter un sondage, false sinon&lt;br /&gt;
answerSurvey : titre du sondage s&#039;il y en a un&lt;br /&gt;
responsesSurvey[] : une réponse au sondage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : À 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.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=164586</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=164586"/>
		<updated>2025-06-11T20:11:48Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Retrait du script Python rendu obsolète par la mise à jour Cloudflare, pas d&amp;#039;alternative envisagée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Cette page documente l&#039;API v4 de jeuxvideo.com. Le fonctionnement du site est quant à lui détaillé sur [[Fonctionnement technique de Jeuxvideo.com]].}}&lt;br /&gt;
&lt;br /&gt;
L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvclient&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponible sur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Depuis mai 2025&#039;&#039;&#039;, suite à une mise à jour de JVC, les informations &#039;&#039;&amp;quot;fs_&amp;quot; &#039;&#039;, sont offusqués dans une chaîne en base 64.&lt;br /&gt;
&lt;br /&gt;
Les fs_ sont récupérables via la balise script : &#039;&#039;window.jvc.forumsAppPayload&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script&amp;gt;window.jvc=window.jvc||{};window.jvc.forumsAppPayload=[CHAINE_A_RECUPERER]&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les valeurs dans la chaîne :&lt;br /&gt;
 const forumsAppPayload = [...document.scripts].map(s =&amp;gt; s.textContent.match(/forumsAppPayload\s*=\s*[&amp;quot;&#039;]([^&amp;quot;&#039;]+)[&amp;quot;&#039;]/)).filter(Boolean)[0][1];&lt;br /&gt;
 &lt;br /&gt;
 const decoded = JSON.parse(atob(forumsAppPayload));&lt;br /&gt;
&lt;br /&gt;
Auparavant, ces valeurs étaient disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; à l&#039;URL avec le contenu du message en plus de ces dernières. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour poster un message&#039;&#039;&#039;, la requête POST devra être faite à &amp;lt;code&amp;gt;https://www.jeuxvideo.com/forums/message/add&amp;lt;/code&amp;gt; avec le &#039;&#039;header&#039;&#039; &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt; valant &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; et les données suivantes en &#039;&#039;body&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text : le contenu du message&lt;br /&gt;
topicId : ID du topic cible&lt;br /&gt;
topicTitle : titre du topic (si c&#039;est une création du topic)&lt;br /&gt;
forumId : ID du forum cible&lt;br /&gt;
group : mettre à 1&lt;br /&gt;
messageId : undefined&lt;br /&gt;
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour poster un topic&#039;&#039;&#039;,  la requête POST devra être faite à &amp;lt;code&amp;gt;https://www.jeuxvideo.com/forums/topic/add&amp;lt;/code&amp;gt; avec le &#039;&#039;header&#039;&#039; &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt; valant &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; et les données suivantes en &#039;&#039;body&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text : le contenu du message&lt;br /&gt;
topicId : mettre à 0&lt;br /&gt;
topicTitle : titre du topic (si c&#039;est une création du topic)&lt;br /&gt;
forumId : ID du forum cible&lt;br /&gt;
group : mettre à 1&lt;br /&gt;
messageId : undefined&lt;br /&gt;
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash&lt;br /&gt;
submitSurvey : true pour ajouter un sondage, false sinon&lt;br /&gt;
answerSurvey : titre du sondage s&#039;il y en a un&lt;br /&gt;
responsesSurvey[] : une réponse au sondage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : À 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.&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=164477</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=164477"/>
		<updated>2025-06-10T19:23:00Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Accès aux forums */ Mise à jour de mai 2025&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Cette page documente l&#039;API v4 de jeuxvideo.com. Le fonctionnement du site est quant à lui détaillé sur [[Fonctionnement technique de Jeuxvideo.com]].}}&lt;br /&gt;
&lt;br /&gt;
L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvclient&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponible sur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Depuis mai 2025&#039;&#039;&#039;, suite à une mise à jour de JVC, les informations &#039;&#039;&amp;quot;fs_&amp;quot; &#039;&#039;, sont offusqués dans une chaîne en base 64.&lt;br /&gt;
&lt;br /&gt;
Les fs_ sont récupérables via la balise script : &#039;&#039;window.jvc.forumsAppPayload&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;script&amp;gt;window.jvc=window.jvc||{};window.jvc.forumsAppPayload=[CHAINE_A_RECUPERER]&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour récupérer les valeurs dans la chaîne :&lt;br /&gt;
 const forumsAppPayload = [...document.scripts].map(s =&amp;gt; s.textContent.match(/forumsAppPayload\s*=\s*[&amp;quot;&#039;]([^&amp;quot;&#039;]+)[&amp;quot;&#039;]/)).filter(Boolean)[0][1];&lt;br /&gt;
 &lt;br /&gt;
 const decoded = JSON.parse(atob(forumsAppPayload));&lt;br /&gt;
&lt;br /&gt;
Auparavant, ces valeurs étaient disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; à l&#039;URL avec le contenu du message en plus de ces dernières. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour poster un message&#039;&#039;&#039;, la requête POST devra être faite à &amp;lt;code&amp;gt;https://www.jeuxvideo.com/forums/message/add&amp;lt;/code&amp;gt; avec le &#039;&#039;header&#039;&#039; &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt; valant &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; et les données suivantes en &#039;&#039;body&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text : le contenu du message&lt;br /&gt;
topicId : ID du topic cible&lt;br /&gt;
topicTitle : titre du topic (si c&#039;est une création du topic)&lt;br /&gt;
forumId : ID du forum cible&lt;br /&gt;
group : mettre à 1&lt;br /&gt;
messageId : undefined&lt;br /&gt;
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour poster un topic&#039;&#039;&#039;,  la requête POST devra être faite à &amp;lt;code&amp;gt;https://www.jeuxvideo.com/forums/topic/add&amp;lt;/code&amp;gt; avec le &#039;&#039;header&#039;&#039; &amp;lt;code&amp;gt;Content-Type&amp;lt;/code&amp;gt; valant &amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; et les données suivantes en &#039;&#039;body&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
text : le contenu du message&lt;br /&gt;
topicId : mettre à 0&lt;br /&gt;
topicTitle : titre du topic (si c&#039;est une création du topic)&lt;br /&gt;
forumId : ID du forum cible&lt;br /&gt;
group : mettre à 1&lt;br /&gt;
messageId : undefined&lt;br /&gt;
toutes les clé/valeurs qui commencent par fs_ (à trouver selon la méthode donnée précédemment) + ajax_hash&lt;br /&gt;
submitSurvey : true pour ajouter un sondage, false sinon&lt;br /&gt;
answerSurvey : titre du sondage s&#039;il y en a un&lt;br /&gt;
responsesSurvey[] : une réponse au sondage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : À 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.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Sites_et_outils_li%C3%A9s_%C3%A0_jeuxvideo.com&amp;diff=160379</id>
		<title>Sites et outils liés à jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Sites_et_outils_li%C3%A9s_%C3%A0_jeuxvideo.com&amp;diff=160379"/>
		<updated>2025-03-01T11:19:22Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Ajout JVClient&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page liste tous les sites, outils et applications qui sont liés à jeuxvideo.com. &#039;&#039;&#039;Ils permettent d&#039;enrichir votre expérience de navigation sur le site.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Si vous souhaitez ajouter un projet vous êtes libre de le faire sans nous demander la permission&lt;br /&gt;
* Assurez vous seulement de bien respecter l&#039;ordre alphabétique de chaque tableau, de remplir chaque colonne en vous inspirant des entrées actuelles et enfin veillez à ne pas casser la mise en forme des tableaux&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lien court vers cette page :&#039;&#039;&#039; &amp;lt;pre&amp;gt;https://jvflux.fr/Outils&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Projets ouverts ==&lt;br /&gt;
&lt;br /&gt;
=== Sites ===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Description&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Boucled&#039;&#039;&#039;&lt;br /&gt;
|Des topics faits pour créer une boucle sur le 18-25&lt;br /&gt;
|[https://boucled.com/ boucled.com]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Clodo News]]&#039;&#039;&#039;&lt;br /&gt;
|L&#039;info à travers des articles rédigés par des clodos pour des clodos&lt;br /&gt;
|[https://clodonews.com/ clodonews.com]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Combien.online]]&#039;&#039;&#039;&lt;br /&gt;
|Comparateur entre le cours du bitcoin et le nombre de connecté sur le [[Finance (forum)|forum Finance]]&lt;br /&gt;
|[https://combien.online/ combien.online]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Encyclopedia Noelica]]&#039;&#039;&#039;&lt;br /&gt;
|Le nouveau wiki des Noelistes&lt;br /&gt;
|[https://www.encyclopedianoelica.com/ encyclopedianoelica.com]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Flood Community&#039;&#039;&#039;&lt;br /&gt;
|Musée du flood sur les forums de jeuxvideo.com&lt;br /&gt;
|[http://floodcommunity.free.fr/home/ floodcommunity.free.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[gpa.lu]]&#039;&#039;&#039;&lt;br /&gt;
|Service d&#039;adresses e-mail jetables pour les kheys&lt;br /&gt;
|[https://gpa.lu/ gpa.lu]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JvArchive]]&#039;&#039;&#039;&lt;br /&gt;
|Projet d&#039;archivage du forum 18-25 de jeuxvideo.com&lt;br /&gt;
|[https://jvarchive.st/ jvarchive.st]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVFlux]]&#039;&#039;&#039;&lt;br /&gt;
|Wiki qui centralise toutes les informations liées à JVC&lt;br /&gt;
|[https://jvflux.fr/ jvflux.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Mosaïque NoelShack&#039;&#039;&#039;&lt;br /&gt;
|Créer une [[mosaïque]] NoelShack&lt;br /&gt;
|[http://nocturnex.alwaysdata.net/mosajax/ nocturnex.alwaysdata.net]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Noelfic]]&#039;&#039;&#039;&lt;br /&gt;
|Regroupement des fics et histoires publiées par les forumeurs&lt;br /&gt;
|[https://noelfic.jvflux.fr/ noelfic.jvflux.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[NoelSWF]]&#039;&#039;&#039;&lt;br /&gt;
|Animations flash de la communauté&lt;br /&gt;
|[https://noelswf.jvflux.fr/ noelswf.jvflux.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Pandome]]&#039;&#039;&#039;&lt;br /&gt;
|Site crée par &#039;&#039;GeneralCoin&#039;&#039; pour y publier ses fics&lt;br /&gt;
|[https://www.pandome.fr/ pandome.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Prolix TV]]&#039;&#039;&#039;&lt;br /&gt;
|Tutos pour économiser de l&#039;argent&lt;br /&gt;
|[https://prolixtv.wordpress.com/ prolixtv.wordpress.com]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Risibank|RisiBank]]&#039;&#039;&#039;&lt;br /&gt;
|Banque de stickers humoristiques de k-litaient &lt;br /&gt;
|[https://risibank.fr/ risibank.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Risific]]&#039;&#039;&#039;&lt;br /&gt;
|Les fics les plus légendaires du 18-25 en direct de ton canapé&lt;br /&gt;
|[https://risific.jvflux.fr/ risific.jvflux.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Risishack&#039;&#039;&#039;&lt;br /&gt;
|Partagez des images et vidéos gratuitement &lt;br /&gt;
|[https://www.risishack.com/ risishack.com]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Risitest]]&#039;&#039;&#039;&lt;br /&gt;
|Test de personnalité destiné à la communauté du 18-25 &lt;br /&gt;
|[https://risitest.fr/ risitest.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Risitrade]]&#039;&#039;&#039;&lt;br /&gt;
|Visualiseur du cours du bitcoin en fonction des cris de Risitas.&lt;br /&gt;
|[https://risitrade.surge.sh/ risitrade.surge.sh]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Wiki [[Guerre des Consoles (forum)|Guerre des Consoles]]&#039;&#039;&#039;&lt;br /&gt;
|Wiki du forum Guerre des consoles&lt;br /&gt;
|[http://wikigdc.ovh/wiki/Accueil wikigdc.ovh]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Wiki [[Koh-Lanta du 18-25]]&#039;&#039;&#039; &lt;br /&gt;
|Wiki du jeu RP éponyme.&lt;br /&gt;
|[https://kl1825.fandom.com/fr/wiki/Wiki_Koh-Lanta_du_18-25 kl1825.fandom.com]&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== Scripts/Logiciels ===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Description&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Décensured]]&#039;&#039;&#039;&lt;br /&gt;
|Chiffre et masque vos messages afin d&#039;éviter la censure abusive sur les forums JVC&lt;br /&gt;
|[https://github.com/Rand0max/decensured GitHub]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Déboucled]]&#039;&#039;&#039;&lt;br /&gt;
|Censure les topics et les auteurs de la boucle et plus encore&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/42-51-68410257-1-0-1-0-officiel-deboucled-v2-est-arrive-fini-la-boucle-et-le-spam.htm Topic officiel]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;JvArchive compagnon&#039;&#039;&#039;&lt;br /&gt;
|En installant l&#039;userscript JvArchive compagnon, retrouvez la vie d&#039;avant le 410 sur le 18-25&lt;br /&gt;
|https://jvarchive.com/userscript&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVFlux Compagnon]]&#039;&#039;&#039;&lt;br /&gt;
|Intégration des articles de JVFlux dans les messages&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/42-51-68982055-1-0-1-0-officiel-jv-flux-compagnon-le-plugin-indispensable-du-forum.htm Topic officiel]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVscript|JVScript]]&#039;&#039;&#039;&lt;br /&gt;
|Banque de scripts pour jeuxvideo.com&lt;br /&gt;
|[https://jvscript.fr/ jvscript.fr]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[RespawnIRC]] (Android)&#039;&#039;&#039;&lt;br /&gt;
|Appli Android donnant une interface de client IRC aux topics de jeuxvideo.com&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/42-1000005-49633519-1-0-1-0-app-respawnirc.htm Forum Communauté] / [https://github.com/FranckRJ/RespawnIRC-Android Sources sur GitHub]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[RespawnIRC]] (PC)&#039;&#039;&#039;&lt;br /&gt;
|Logiciel donnant une interface de client IRC aux topics de jeuxvideo.com&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/42-1000021-40573812-1-0-1-0-pc-android-respawnirc.htm Forum Communauté]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[RisiBank|Risibank]]&#039;&#039;&#039;&lt;br /&gt;
|Intégration des stickers de Risibank sur l&#039;interface de jeuxvideo.com&lt;br /&gt;
|https://risibank.fr/installer&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;TopicLive&#039;&#039;&#039;&lt;br /&gt;
|Charger automatiquement les nouveaux messages postés sur un topic&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/42-1000021-37766371-1-0-1-0-script-topiclive-compatible-respawn.htm Forum Communauté]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[API#jvclient|JVClient]]&#039;&#039;&#039;&lt;br /&gt;
|Librairie Node.js qui permet d&#039;interagir avec jeuxvideo.com et son API v4.&lt;br /&gt;
|[https://github.com/Contrapunctus-XIV/jv-client Dépôt GitHub]&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== Chaines YouTube ===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Description&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Consul Pazen]]&#039;&#039;&#039;&lt;br /&gt;
|Chaine journalistique sur les dernières news zinzins&lt;br /&gt;
|[https://youtube.com/c/ConsulPazenLesNewsZinzins YouTube]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[cutface]]&#039;&#039;&#039;&lt;br /&gt;
|cutface réalise avec amour des vidéos certifiées Éco+&lt;br /&gt;
|[https://www.youtube.com/channel/UCq9ppoOS3oiwJ8NUPudrb1g YouTube]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[El Kekos]]&#039;&#039;&#039;&lt;br /&gt;
|Malaisologue certifié élevé en plein air&lt;br /&gt;
|[https://www.youtube.com/channel/UC4Dh79Ay7UrwucrUdFZpHWw YouTube]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Les Boxeurs de l&#039;Elite]]&#039;&#039;&#039;&lt;br /&gt;
|Pratique de la boxe anglaise entre kheys&lt;br /&gt;
|[https://www.youtube.com/channel/UCQbB94fbone7qIkCIYwD51Q YouTube]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[L&#039;Œil de l&#039;Elite]]&#039;&#039;&#039;&lt;br /&gt;
|L&#039;Œil de l&#039;Elite scrute le forum et ses perles&lt;br /&gt;
|[https://www.youtube.com/channel/UCWnoIqU2pQfbQ5TaHZallcA YouTube]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Loop Golem Killer]]&#039;&#039;&#039;&lt;br /&gt;
|Viens prendre ta dose de Live Looping Music&lt;br /&gt;
|[https://www.youtube.com/channel/UCbSJq5g9slW2W-drxZ_tEpw YouTube]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[The French Dream]]&#039;&#039;&#039;&lt;br /&gt;
|Chaîne d&#039;étude du French Dream et des Magalie&lt;br /&gt;
|[https://www.youtube.com/channel/UCy7M87IccrVnkASV0aNmDHw YouTube]&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=== Comptes Twitter ===&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Description&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Escadron Noeliste]]&#039;&#039;&#039;&lt;br /&gt;
|Pour la liberté d&#039;expression et la préservation de la culture internet Française&lt;br /&gt;
|[https://twitter.com/EscadronNoelis1 @EscadronNoelis1]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[jeuxvideo.com]]&#039;&#039;&#039;&lt;br /&gt;
|Compte officiel de jeuxvideo.com&lt;br /&gt;
|[https://twitter.com/JVCom @JVCom]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVFlux]]&#039;&#039;&#039;&lt;br /&gt;
|JVFlux, Wiki de jeuxvideo.com &amp;amp; Noel SWF&lt;br /&gt;
|[https://twitter.com/JVFlux @JVFlux]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Le Meilleur Du 18-25&#039;&#039;&#039;&lt;br /&gt;
|Compte Twitter sur les meilleurs moments du 18-25&lt;br /&gt;
|[https://twitter.com/bestof_1825 @bestof_1825]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Noelradio]]&#039;&#039;&#039;&lt;br /&gt;
|NoelRadio est la webradio du forum Avenoel&lt;br /&gt;
|[https://twitter.com/radio_noel @radio_noel]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[RisiCards|RisiCards Officiel]]&#039;&#039;&#039;&lt;br /&gt;
|RisiCards, le jeu de cartes officiel de l&#039;Élite de la nation&lt;br /&gt;
|[https://twitter.com/risicards @risicards]&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
== JVC-Like ==&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Création&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[2Sucres]]&#039;&#039;&#039;&lt;br /&gt;
|[https://2sucres.org/ 2sucres.org]&lt;br /&gt;
|2017&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Avenoel]]&#039;&#039;&#039;&lt;br /&gt;
|[https://avenoel.org/ avenoel.org]&lt;br /&gt;
|2014&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Onche.org]]&#039;&#039;&#039;&lt;br /&gt;
|[https://onche.org/ onche.org]&lt;br /&gt;
|2018&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[NoelTopia]]&#039;&#039;&#039;&lt;br /&gt;
|[https://www.noeltopia.com/ noeltopia.com]&lt;br /&gt;
|2019&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
==Sites issus de la communauté==&lt;br /&gt;
Les sites suivants n&#039;ont rien à voir avec jeuxvideo.com mais ont été ouverts et sont tenus par des forumeurs issus de la communauté.&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Description&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[StopFap]]&#039;&#039;&#039;&lt;br /&gt;
|StopFap est un réseau social anonyme d&#039;entraide pour combattre l&#039;addiction au porno et la masturbation compulsive&lt;br /&gt;
|[https://www.stopfap.org/ stopfap.org]&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Orbitum]]&#039;&#039;&#039;&lt;br /&gt;
|Plateforme de discussion orientée vers les cryptomonnaies et la finance décentralisée&lt;br /&gt;
|[https://orbitum.space/ orbitum.space]&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
== Projets fermés ==&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;left&amp;quot; style=&amp;quot;width:100%;&amp;quot; class=&amp;quot;wikitable centre sortable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Nom&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Description&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Lien&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Type&lt;br /&gt;
! style=&amp;quot;text-align:center&amp;quot;|Dates&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;@1825_JVCom&#039;&#039;&#039;&lt;br /&gt;
|Compte Twitter officiel du Blabla 18-25 ans de JVC&lt;br /&gt;
|[https://twitter.com/1825_JVCom twitter.com/1825_JVCom]&lt;br /&gt;
|Compte Twitter&lt;br /&gt;
|2015 &amp;amp;ndash; 2016&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Bruiter]]&#039;&#039;&#039;&lt;br /&gt;
|Clonage des topics du 18-25&lt;br /&gt;
|[https://bruiter.com/ bruiter.com] (lien mort)&lt;br /&gt;
|Site&lt;br /&gt;
|2018 &amp;amp;ndash; 2020&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Gazette de JVC]]&#039;&#039;&#039;&lt;br /&gt;
|Journal sur l&#039;actualité des forums&lt;br /&gt;
|[https://www.jeuxvideo.com/recherche/forums/0-1000021-0-1-0-1-0-communaute.htm?search_in_forum=gazette&amp;amp;type_search_in_forum=titre_topic Forum Communauté]&lt;br /&gt;
[http://www.gazettejv.com/ gazettejv.com] (lien mort)&lt;br /&gt;
|Site&lt;br /&gt;
|2008 &amp;amp;ndash; 2015&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVFlux]]&#039;&#039;&#039;&lt;br /&gt;
|Journal sur l&#039;actualité des forums&lt;br /&gt;
|[https://archives.jvflux.fr archives.jvflux.fr]&lt;br /&gt;
|Site&lt;br /&gt;
|2009 &amp;amp;ndash; 2015&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVCMaster]]&#039;&#039;&#039;&lt;br /&gt;
|Amélioration de la navigation sur les forums&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/1-1000021-1273221-1-0-1-0-extension-jvcmaster.htm Forum Communauté]&lt;br /&gt;
|Extension&lt;br /&gt;
|2012 &amp;amp;ndash; 2015&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JV.Nyu]]&#039;&#039;&#039;&lt;br /&gt;
|Amélioration de la navigation sur les forums&lt;br /&gt;
|[https://www.jeuxvideo.com/forums/1-1000021-394126-1-0-1-0-outil-jvn-jeuxvideo-nyu-v1-1.htm Forum Communauté]&lt;br /&gt;
|Extension&lt;br /&gt;
|2009 &amp;amp;ndash; 2011&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[JVStats|JV Stats]]&#039;&#039;&#039;&lt;br /&gt;
|Statistiques des forums de jeuxvideo.com&lt;br /&gt;
|[http://jvstats.forum-stats.org/stats/1/ jvstats.forum-stats.org] (lien mort)&lt;br /&gt;
|Site&lt;br /&gt;
|2001 &amp;amp;ndash; 2019&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Noelpedia|NoelPedia]]&#039;&#039;&#039;&lt;br /&gt;
|Ancienne encyclopédie Noeliste&lt;br /&gt;
|[http://floodcommunity.free.fr/home/wikiaFlood/www.noelpedia.com/index481b.html?title=Accueil floodcommunity.free.fr] (archive incomplète)&lt;br /&gt;
[https://web.archive.org/web/20110129041433/http://www.noelpedia.com/index.php?title=Accueil archive.org] (archive incomplète)&lt;br /&gt;
|Site&lt;br /&gt;
|2008 &amp;amp;ndash; 2011&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;[[Risific]]&#039;&#039;&#039;&lt;br /&gt;
|Consultation des fics créées par les membres de la communauté&lt;br /&gt;
|[https://risific.fr/ risific.fr] (lien mort)&lt;br /&gt;
[https://web.archive.org/web/20210420082447/https://risific.fr/ archive.org] (archives)&lt;br /&gt;
|Site&lt;br /&gt;
|2017 &amp;amp;ndash; 2021&lt;br /&gt;
|}&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Site de la kheyosphère]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
{{TableauCatégorieSitesCommu}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160378</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160378"/>
		<updated>2025-03-01T11:18:36Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Div anchor sur JVClient&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Cette page documente l&#039;API v4 de jeuxvideo.com. Le fonctionnement du site est quant à lui détaillé sur [[Fonctionnement technique de Jeuxvideo.com]].}}&lt;br /&gt;
&lt;br /&gt;
L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvclient&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponible sur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=160377</id>
		<title>Fonctionnement technique de Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=160377"/>
		<updated>2025-03-01T11:16:19Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Bannière info (lien vers API)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Cette page détaille le fonctionnement technique de jeuxvideo.com. L&#039;API v4 du site est quant à elle documentée sur [[Documentation de l&#039;API Jeuxvideo.com]].}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[Jeuxvideo.com]] utilise 2 serveurs frontaux qui sont depuis le 7 mai 2022 protégés par le service [https://cloudflare.com Cloudflare]. Chaque serveur frontal utilise un serveur HTTP Apache, tout ce qu&#039;il y a de plus classique. En revanche, avant d&#039;arriver sur le serveur Apache, on a plusieurs mailles dans la chaîne. En effet, lorsque vous faites une requête auprès de JVC, la chaîne suivante est effectuée avant d&#039;arriver jusqu&#039;au back-end :&lt;br /&gt;
 Cloudflare → Round-robin entre les 2 serveurs frontaux → HAProxy → Varnish → Apache → PHP / Express (Node.js)&lt;br /&gt;
&lt;br /&gt;
== Processus d&#039;une requête HTTP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cloudflare&#039;&#039;&#039; est le premier point d&#039;entrée pour accéder à JVC. Il gère les enregistrements DNS du site et ses IPs sont majoritairement aléatoires et anycastées/géocastées. Ce service touche la couche réseau/transport tout comme la couche applicative du modèle OSI : il fait office d&#039;anti-DDoS à forte valeur (bien que JVC utilise le service &amp;quot;Volterra&amp;quot; en tant qu&#039;anti-DDoS sur couches basses du côté des IPs de son AS 35717). Une partie de la couche applicative est protégée par Cloudflare, via des règles éditées manuellement par [[Webedia]] (entre autre, blocages de pools IPv4 de VPN connus, et de certains pays d&#039;après certains retours d&#039;utilisateurs).&lt;br /&gt;
&lt;br /&gt;
Un round-robin est effectué via Cloudflare auprès des serveurs DNS de Webedia. Le but est de déterminer de façon algorithmique quel serveur frontal va être utilisé pour la requête HTTP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HAProxy&#039;&#039;&#039; est un proxy et load-balancer TCP d&#039;une efficacité remarquable, il est utilisé sur la totalité des environnements de production gérés par Webedia. C&#039;est entre autre ce service à l&#039;origine de l&#039;erreur 403 Forbidden. En effet, HAProxy fait aussi office de protection applicative (on peut donc en déduire que JVC utilise plusieurs services sur couche haute pour protéger l&#039;applicatif). On peut notamment remarquer le blacklistage des IPs du réseau &amp;quot;Tor&amp;quot;, mais également le blacklistage des pools de l&#039;AS 16276 (appartenant à la société OVH et n&#039;étant utilisé que dans des contextes d&#039;hébergement) - blocage mené suite à l&#039;utilisation massive des services de la société OVH dans le but de scrapper/attaquer JVC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039; est un serveur HTTP. Il a été optimisé par l&#039;équipe technique actuelle de Webedia, mais également par l&#039;ancienne équipe du site (on peut notamment citer [[Dargor]] et [[Haazel]] en tant que personnes ayant participées à l&#039;élaboration de tunning du serveur HTTP).&lt;br /&gt;
&lt;br /&gt;
Le dernier point est selon la page qui est demandée. Des parties du site sont développées en PHP, et d&#039;autres en Node.js. Pour l&#039;anecdote, le site est hébergé côté serveur dans le dossier /opt/datas/sites/JEUXVIDEO.COM/&amp;lt;ref&amp;gt;La norme [https://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Filesystem Hierarchy Standard] n’incluait pas &amp;lt;code&amp;gt;/srv&amp;lt;/code&amp;gt;, qui est plus approprié, avant 2004.&amp;lt;/ref&amp;gt;. Il n&#039;y a quasiment aucune protection de ce côté (si ce n&#039;est une protection contre les IPs Tor).&lt;br /&gt;
&lt;br /&gt;
=== Protection applicative Cloudflare ===&lt;br /&gt;
&lt;br /&gt;
L&#039;applicatif est donc, comme on a pu le voir, protégé par Cloudflare en premier point d&#039;entrée. Cloudflare est binaire : si l&#039;IP source est blacklistée, une HTTP 403 est retournée et l&#039;accès à l&#039;URI est refusé.&amp;lt;br&amp;gt;Le blocage est en outre simple à bypasser, pour le moment, on peut constater que l&#039;usage d&#039;IPs géolocalisées en France est un bon bypass.&lt;br /&gt;
&lt;br /&gt;
=== Domaine de fichiers statiques ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;static.jvc.gg&#039;&#039;&#039; est notamment utilisé pour servir les feuilles de styles et scripts et utilise comme serveur &#039;&#039;&#039;nginx&#039;&#039;&#039; au lieu d&#039;Apache. N’étant pas protégé par Cloudflare en janvier 2023 il permet d’avoir un aperçu technique de comment était servi l’ensemble du site avant la mise en place de Cloudflare.&lt;br /&gt;
&lt;br /&gt;
Côté DNS, cinq serveurs de noms sont utilisés : ns1.webedia-group.org, ns2.webedia-group.net, ns3.webedia-group.com, ns4.webedia-group.biz, ns5.webedia-group.app. Les deux premiers sont sur leur AS 35717 ; les trois derniers sont respectivement hébergés chez Scaleway, OVH, Gandi.&lt;br /&gt;
&lt;br /&gt;
== Avant Respawn ==&lt;br /&gt;
&lt;br /&gt;
Avant [[Projet Respawn|Respawn]], JVC était développé sur plusieurs langages différents côté back-end : on peut citer le C et le PHP. La base de données finale utilisait le moteur de base de données PostgreSQL. L&#039;anarchie technique du back-end a menée au développement de [[Respawn]] (qui est également anarchique).&lt;br /&gt;
&lt;br /&gt;
=== Les Cartes de visite ===&lt;br /&gt;
&lt;br /&gt;
Les [[Carte de Visite|Cartes de visite]] étaient développés en PHP et avaient la particularité notable de stocker les données publiques de chaque utilisateur (par exemple, sa description personnelle) dans de simples fichiers HTML stockés sur disque : il n&#039;y avait pas de requête SQL d&#039;invoquée pour obtenir certaines données liées aux CDV. Lors de certains floods d&#039;avis utilisateurs (notamment menés par &#039;&#039;UnifiedLinux&#039;&#039;), les CDV retournaient aléatoirement des pages blanches. La cause est toujours inconnue.&lt;br /&gt;
&lt;br /&gt;
=== Les forums ===&lt;br /&gt;
&lt;br /&gt;
Les forums étaient en C, et [[Dargor]] les nommaient &amp;quot;modulaires&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Les articles ===&lt;br /&gt;
&lt;br /&gt;
Les articles n&#039;étaient pas mis en ligne immédiatement après leur rédaction. Un système de &amp;quot;compilation&amp;quot; était nécessaire et à effectuer manuellement afin que le site &amp;quot;compile&amp;quot; les articles pour qu&#039;ils deviennent accessibles au public. On peut imaginer que ce système de compilation a été développé dans un but de gestion de charge applicative.&lt;br /&gt;
&lt;br /&gt;
=== Modération ===&lt;br /&gt;
&lt;br /&gt;
La modération des forums était liée à une authentification à 2 étapes, menant à l&#039;attribution du cookie [[mocoedivxuejdom]] permettant la modération de certains forums selon les permissions attribuées à chaque modérateur. Cette deuxième étape était une page spéciale réclamant 5 mots de passe, qui avaient la particularité d&#039;être remplis de caractères aléatoires et spéciaux.&lt;br /&gt;
&lt;br /&gt;
=== Authentification ===&lt;br /&gt;
&lt;br /&gt;
Le cookie [[wenvjgol]] était utilisé pour l&#039;authentification.&lt;br /&gt;
&lt;br /&gt;
=== La recherche des forums ===&lt;br /&gt;
&lt;br /&gt;
La recherche des forums était connue pour être atrocement lente et affichant incorrectement la liste des résultats, des topics étaient manquants et s&#039;affichaient une fois sur deux.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité informatique ===&lt;br /&gt;
&lt;br /&gt;
Lorsqu&#039;une IP tentait d&#039;envoyer trop de requêtes HTTP (HTTPS n&#039;était pas déployé à ce moment-là), le site redirigeait chaque requête HTTP vers une erreur 404. La page d&#039;erreur 404 étant très peu consommatrice techniquement, cela permettait de désaturer la charge serveur en cas de DoS/DDoS.&lt;br /&gt;
&lt;br /&gt;
Sur les CDV et les forums, il y a eu un grand nombre de failles XSS, notamment exploitées en masse par [[PyjamaSam]].&lt;br /&gt;
&lt;br /&gt;
Le [[Captcha]] était également tout le temps cassé, permettant des floods de topics/messages/contributions. Cela a permis par exemple de créer un pseudo rang rubis en moins d&#039;un jour, dont le pseudo était &#039;&#039;RubyOne&#039;&#039; (par &#039;&#039;UnifiedLinux&#039;&#039;, qui a également créé un pseudo rang diamant en moins d&#039;un jour via un flood de contributions).&lt;br /&gt;
&lt;br /&gt;
== Respawn ==&lt;br /&gt;
&lt;br /&gt;
[[Respawn]] a été développé entièrement en PHP côté back-end. Il utilise notamment des frameworks tels que Symfony côté forums, et des moteurs de templates tel que Twig. Respawn semble être divisé techniquement en plusieurs parties : en effet, on peut constater que certaines parties du site respectent le modèle vue-contrôleur (on peut citer les forums), bien que d&#039;autres parties du site n&#039;utilisent pas ce modèle et utilisent de l&#039;url rewriting hardcodé dans des fichiers .htaccess. Respawn semble posséder une base de code identique entre JVC et [[ForumJV]] (désormais fermé), on pouvait constater de nettes interactions entre les 2 sites lorsque ForumJV était ouvert, interactions ayant menées à certains abus (ForumJV accordait des droits de modération sur son forum personnel, des failles de sécurité était donc existantes derrière ce privilège).&lt;br /&gt;
&lt;br /&gt;
=== Schéma de base de données ===&lt;br /&gt;
&lt;br /&gt;
Le schéma de base de données de Respawn semble anarchique et composé de mélange entre le Français et l&#039;Anglais. Exemples de tables appartenant à Respawn : &amp;quot;get_compte_infos&amp;quot;, &amp;quot;session_renew_v2&amp;quot;, &amp;quot;jeu_get_v7&amp;quot;. Notez le &amp;quot;v&amp;quot; à la fin de chaque table, laissant penser qu&#039;il existe plusieurs versions de celles-ci.&lt;br /&gt;
&lt;br /&gt;
==== Exemple d&#039;appel en base de données ====&lt;br /&gt;
 &#039;&#039;SELECT out_id_type, out_nom_type, out_dirname_type, out_affichage, out_date_publication, out_date_modification, out_id_alias_auteur, out_id_groupe_auteur, out_ip, out_titre, out_texte, out_commentaire, out_visibilite, out_liaisons, out_tags, out_medias, out_version, out_fiche, out_jeu, out_data, out_url, out_id_jeux FROM jeu_get_v7 WHERE id_contenu = xxx&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Organisation technique ===&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, Respawn semble être un mélange de MVC et de code classique sans modèle particulier de respecté. Les fichiers du back-end sont également mitigés du côté de leur appellation, laissant encore droit au mélange entre Français et Anglais. Exemples de fichiers côté back-end :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/htdocs/forums/liste_topic.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/core/OiPDOStatement.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Transaction.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/GoogleTagManager.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Compte.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/controllers/forum/liste_topic.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Session.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/vendor/...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Nommage des fonctions ===&lt;br /&gt;
&lt;br /&gt;
Respawn possède aussi des fonctions dont le nommage est entre le Français et l&#039;Anglais. Exemples de fonctions côté back-end :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;getInfoFromIdForum&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;loadMenu&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;checkMenuItem&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;getSingleton&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;getHtmlJeuForum&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;blocHtmlBoutiqueRandom&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optimisations ===&lt;br /&gt;
&lt;br /&gt;
Le back-end PHP utilise Memcache (https://www.php.net/manual/fr/book.memcache.php) afin de faire baisser la charge technique de l&#039;applicatif.&lt;br /&gt;
&lt;br /&gt;
=== Stockage des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Depuis Respawn, les utilisateurs de JVC sont référencés sous un identifiant numérique côté base de données, contrairement au fonctionnement de l&#039;ancien JVC où les utilisateurs étaient référencés par leur pseudo (pouvant mener à des posts sur les forums avec des pseudos identiques organisés différemment côté minuscules/majuscules).&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;obtenir son ID via la page permettant d&#039;éditer votre profil, l&#039;ID est à la fin de l&#039;URL.&lt;br /&gt;
&lt;br /&gt;
=== Les forums ===&lt;br /&gt;
&lt;br /&gt;
Les posts des forums sont déclarés sur plusieurs serveurs différents. Les IDs de ceux-ci semblent aléatoires (bien qu&#039;un offset était attribué pour les posts présents sur ForumJV). Les IDs sont choisis selon l&#039;emplacement dans lequel la ressource sera stockée lors de la création du topic. Le choix de l&#039;emplacement se fait à la création du topic, les messages dans le topic sont alors stockés dans le même emplacement. Il semblerait qu&#039;il y ait 8 emplacements. ID + 8 pour accéder à la ressource suivante, et ID - 8 pour accéder à la ressource précédente.&lt;br /&gt;
&lt;br /&gt;
Exemple de messages séquentiels:&lt;br /&gt;
&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193382&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193390&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193398&lt;br /&gt;
&lt;br /&gt;
L&#039;ID est incrémenté de 8 à chaque fois. Tous ces messages sont répertoriés dans le 7ème serveur (&amp;lt;code&amp;gt;ID % 8&amp;lt;/code&amp;gt;, donc &amp;lt;code&amp;gt;905193382 % 8 = 6&amp;lt;/code&amp;gt;, 7ème).&lt;br /&gt;
&lt;br /&gt;
À noter toutefois que les messages datant d&#039;avant respawn sont complètement désordonnés, certainement dû à la migration durant respawn où la migration de ces messages a été effectué en parallèle.&lt;br /&gt;
&lt;br /&gt;
=== Modération ===&lt;br /&gt;
&lt;br /&gt;
La modération sur Respawn se nomme &amp;quot;Accès étendu&amp;quot;. L&#039;accès étendu peut être appelé via la page qui lui est dédiée : https://www.jeuxvideo.com/sso/auth.php ; il nécessite en revanche également un mot de passe, qui est envoyé via un lien sécurisé utilisable une seule fois par MP à chaque modérateur. A noter que le [[103]] est accessible à n&#039;importe quel modérateur même sans authentification à l&#039;accès étendu.&lt;br /&gt;
&lt;br /&gt;
=== Authentification ===&lt;br /&gt;
&lt;br /&gt;
Le cookie [[coniunctio]] est utilisé pour l&#039;authentification.&lt;br /&gt;
&lt;br /&gt;
=== Recherche des forums ===&lt;br /&gt;
&lt;br /&gt;
La recherche des forums utilise le moteur de recherche Sphinx qui est intégré au site. La recherche des forums est limitée à 1 mois sur les blablas, elle peut être contournée via https://jvarchive.com/.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité informatique ===&lt;br /&gt;
&lt;br /&gt;
Dans les débuts de Respawn, le site était rempli de failles permettant de faire exploser la charge du site. Il existait également de nombreuses failles sur [[ForumJV]] qui permettaient de modérer sans être modérateur, sur n&#039;importe quel forum. Les failles ici citées ont en majorité été exploitées par [[edwado]].&lt;br /&gt;
&lt;br /&gt;
Il a également existé une faille RCE (Remote Code Execution) exploitée par [[Tsain]], qui permettait d&#039;injecter du CSS sur n&#039;importe quelle partie du site (la faille fut très mal exploitée étant-donné que celle-ci n&#039;était pas qu&#039;une simple injection CSS mais bien une RCE où il était possible d&#039;injecter un shell PHP).&lt;br /&gt;
&lt;br /&gt;
=== JvCare ===&lt;br /&gt;
&lt;br /&gt;
JvCare est un algorithme d&#039;obfuscation des liens externes postés sur le site. Il a été développé depuis Respawn. Il permet d&#039;éviter la création de backlinks qui pourraient optimiser indirectement le SEO de sites externes à Jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Les codes ci-après permettent de décoder une chaîne obfusquée.&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
&lt;br /&gt;
 function jvCare(string $classe) : string {&lt;br /&gt;
   static $base16 = &amp;quot;0A12B34C56D78E9F&amp;quot;;&lt;br /&gt;
   $lien = &amp;quot;&amp;quot;;&lt;br /&gt;
   $s = explode(&amp;quot; &amp;quot;, $classe)[1];&lt;br /&gt;
   for ($i = 0; $i &amp;lt; strlen($s); $i += 2) {&lt;br /&gt;
     $lien .= chr(strrpos($base16, $s[$i]) * 16 + strrpos($base16, $s[$i + 1]));&lt;br /&gt;
   }&lt;br /&gt;
   return $lien;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== JavaScript ====&lt;br /&gt;
&lt;br /&gt;
 function jvCake(classe) {&lt;br /&gt;
   const base16 = &#039;0A12B34C56D78E9F&#039;;&lt;br /&gt;
   let lien = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
   const s = classe.split(&#039; &#039;)[1];&lt;br /&gt;
   for (let i = 0; i &amp;lt; s.length; i += 2) {&lt;br /&gt;
     lien += String.fromCharCode(base16.indexOf(s.at(i)) * 16 + base16.indexOf(s.at(i + 1)));&lt;br /&gt;
   }&lt;br /&gt;
   return lien;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===== Fonctionnel =====&lt;br /&gt;
&lt;br /&gt;
 function jvCake(classe) {&lt;br /&gt;
   const base16 = &#039;0A12B34C56D78E9F&#039;;&lt;br /&gt;
   const s = classe.split(&#039; &#039;)[1];&lt;br /&gt;
   const codeUnits = s&lt;br /&gt;
     .match(/../g)&lt;br /&gt;
     .map((i) =&amp;gt; base16.indexOf(i[0]) * 16 + base16.indexOf(i[1]));&lt;br /&gt;
   return String.fromCharCode(...codeUnits);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Python ====&lt;br /&gt;
&lt;br /&gt;
 def jvcare(classe: str) -&amp;gt; str:&lt;br /&gt;
     base16 = &#039;0A12B34C56D78E9F&#039;&lt;br /&gt;
     s = classe.split()[1]&lt;br /&gt;
     url = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     for i, j in zip(s[0::2], s[1::2]):&lt;br /&gt;
         url += chr(base16.index(i) * 16 + base16.index(j))&lt;br /&gt;
     return url&lt;br /&gt;
&lt;br /&gt;
===== Liste en compréhension =====&lt;br /&gt;
&lt;br /&gt;
 def jvcare(classe: str) -&amp;gt; str:&lt;br /&gt;
     base16 = &#039;0A12B34C56D78E9F&#039;&lt;br /&gt;
     s = classe.split()[1]&lt;br /&gt;
     return &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;.join([chr(base16.index(i) * 16 + base16.index(j)) for i, j in zip(s[0::2], s[1::2])])&lt;br /&gt;
&lt;br /&gt;
==== C ====&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 const char *__jvcarebase16 = &amp;quot;0A12B34C56D78E9F&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 char *jvcare(const char *class) {&lt;br /&gt;
     char *s = strchr(class, &#039; &#039;) + 1;&lt;br /&gt;
 &lt;br /&gt;
     int urllen = strlen(s) / 2;&lt;br /&gt;
     char *url = malloc(urllen + 1);&lt;br /&gt;
     for (int i = 0; i &amp;lt; urllen; i++) {&lt;br /&gt;
         char pos1 = strchr(__jvcarebase16, s[i * 2]) - __jvcarebase16;&lt;br /&gt;
         char pos2 = strchr(__jvcarebase16, s[i * 2 + 1]) - __jvcarebase16;&lt;br /&gt;
         url[i] = pos1 * 16 + pos2;&lt;br /&gt;
     }&lt;br /&gt;
     url[urllen] = &#039;\0&#039;;&lt;br /&gt;
     return url;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Awk ====&lt;br /&gt;
&lt;br /&gt;
 BEGIN {&lt;br /&gt;
     base16 = &amp;quot;0A12B34C56D78E9F&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 {&lt;br /&gt;
     s = $2&lt;br /&gt;
     for (i = 1; i &amp;lt; length(s); i += 2) {&lt;br /&gt;
         pos1 = index(base16, substr(s, i, 1))&lt;br /&gt;
         pos2 = index(base16, substr(s, i + 1, 1))&lt;br /&gt;
         url = url sprintf(&amp;quot;%c&amp;quot;, (pos1 - 1) * 16 + (pos2 - 1))&lt;br /&gt;
     }&lt;br /&gt;
     print url&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Phoenix ==&lt;br /&gt;
&lt;br /&gt;
Phoenix était une partie de JVC développée en Node.js et utilisant React. De plus en plus abandonnée au fil du temps, elle était utilisée pour afficher la liste des jeux et des contenus de la rédaction. Phoenix utilisait une API spéciale hébergée au sous-domaine [[Documentation_de_l%27API_Jeuxvideo.com#API_jvc.gg|&#039;&#039;api.jvc.gg&#039;&#039;]]. Phoenix ainsi que l&#039;API GG disparaissent en février 2025 et les pages qu&#039;elles servaient sont basculées vers la partie principale du site.&lt;br /&gt;
&lt;br /&gt;
== Liens externes ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml Interview sur l’architecture de jeuxvideo.com de 1997 à 2005] ([http://web.archive.org/web/20070629165914/http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml archive.org])&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation de l&#039;API Jeuxvideo.com]]&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160376</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160376"/>
		<updated>2025-03-01T11:14:40Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Bannière info (lien vers fonctionnement du site)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Cette page documente l&#039;API v4 de jeuxvideo.com. Le fonctionnement du site est quant à lui détaillé sur [[Fonctionnement technique de Jeuxvideo.com]].}}&lt;br /&gt;
&lt;br /&gt;
L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponible sur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=160375</id>
		<title>Fonctionnement technique de Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=160375"/>
		<updated>2025-03-01T11:10:32Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Retrait bannière, disparition de Phoenix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cette page détaille le &#039;&#039;&#039;fonctionnement technique&#039;&#039;&#039; du site jeuxvideo.com. La documentation de l&#039;API v4 du site est quant à elle disponible [[API|ici]].&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[Jeuxvideo.com]] utilise 2 serveurs frontaux qui sont depuis le 7 mai 2022 protégés par le service [https://cloudflare.com Cloudflare]. Chaque serveur frontal utilise un serveur HTTP Apache, tout ce qu&#039;il y a de plus classique. En revanche, avant d&#039;arriver sur le serveur Apache, on a plusieurs mailles dans la chaîne. En effet, lorsque vous faites une requête auprès de JVC, la chaîne suivante est effectuée avant d&#039;arriver jusqu&#039;au back-end :&lt;br /&gt;
 Cloudflare → Round-robin entre les 2 serveurs frontaux → HAProxy → Varnish → Apache → PHP / Express (Node.js)&lt;br /&gt;
&lt;br /&gt;
== Processus d&#039;une requête HTTP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cloudflare&#039;&#039;&#039; est le premier point d&#039;entrée pour accéder à JVC. Il gère les enregistrements DNS du site et ses IPs sont majoritairement aléatoires et anycastées/géocastées. Ce service touche la couche réseau/transport tout comme la couche applicative du modèle OSI : il fait office d&#039;anti-DDoS à forte valeur (bien que JVC utilise le service &amp;quot;Volterra&amp;quot; en tant qu&#039;anti-DDoS sur couches basses du côté des IPs de son AS 35717). Une partie de la couche applicative est protégée par Cloudflare, via des règles éditées manuellement par [[Webedia]] (entre autre, blocages de pools IPv4 de VPN connus, et de certains pays d&#039;après certains retours d&#039;utilisateurs).&lt;br /&gt;
&lt;br /&gt;
Un round-robin est effectué via Cloudflare auprès des serveurs DNS de Webedia. Le but est de déterminer de façon algorithmique quel serveur frontal va être utilisé pour la requête HTTP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HAProxy&#039;&#039;&#039; est un proxy et load-balancer TCP d&#039;une efficacité remarquable, il est utilisé sur la totalité des environnements de production gérés par Webedia. C&#039;est entre autre ce service à l&#039;origine de l&#039;erreur 403 Forbidden. En effet, HAProxy fait aussi office de protection applicative (on peut donc en déduire que JVC utilise plusieurs services sur couche haute pour protéger l&#039;applicatif). On peut notamment remarquer le blacklistage des IPs du réseau &amp;quot;Tor&amp;quot;, mais également le blacklistage des pools de l&#039;AS 16276 (appartenant à la société OVH et n&#039;étant utilisé que dans des contextes d&#039;hébergement) - blocage mené suite à l&#039;utilisation massive des services de la société OVH dans le but de scrapper/attaquer JVC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039; est un serveur HTTP. Il a été optimisé par l&#039;équipe technique actuelle de Webedia, mais également par l&#039;ancienne équipe du site (on peut notamment citer [[Dargor]] et [[Haazel]] en tant que personnes ayant participées à l&#039;élaboration de tunning du serveur HTTP).&lt;br /&gt;
&lt;br /&gt;
Le dernier point est selon la page qui est demandée. Des parties du site sont développées en PHP, et d&#039;autres en Node.js. Pour l&#039;anecdote, le site est hébergé côté serveur dans le dossier /opt/datas/sites/JEUXVIDEO.COM/&amp;lt;ref&amp;gt;La norme [https://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Filesystem Hierarchy Standard] n’incluait pas &amp;lt;code&amp;gt;/srv&amp;lt;/code&amp;gt;, qui est plus approprié, avant 2004.&amp;lt;/ref&amp;gt;. Il n&#039;y a quasiment aucune protection de ce côté (si ce n&#039;est une protection contre les IPs Tor).&lt;br /&gt;
&lt;br /&gt;
=== Protection applicative Cloudflare ===&lt;br /&gt;
&lt;br /&gt;
L&#039;applicatif est donc, comme on a pu le voir, protégé par Cloudflare en premier point d&#039;entrée. Cloudflare est binaire : si l&#039;IP source est blacklistée, une HTTP 403 est retournée et l&#039;accès à l&#039;URI est refusé.&amp;lt;br&amp;gt;Le blocage est en outre simple à bypasser, pour le moment, on peut constater que l&#039;usage d&#039;IPs géolocalisées en France est un bon bypass.&lt;br /&gt;
&lt;br /&gt;
=== Domaine de fichiers statiques ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;static.jvc.gg&#039;&#039;&#039; est notamment utilisé pour servir les feuilles de styles et scripts et utilise comme serveur &#039;&#039;&#039;nginx&#039;&#039;&#039; au lieu d&#039;Apache. N’étant pas protégé par Cloudflare en janvier 2023 il permet d’avoir un aperçu technique de comment était servi l’ensemble du site avant la mise en place de Cloudflare.&lt;br /&gt;
&lt;br /&gt;
Côté DNS, cinq serveurs de noms sont utilisés : ns1.webedia-group.org, ns2.webedia-group.net, ns3.webedia-group.com, ns4.webedia-group.biz, ns5.webedia-group.app. Les deux premiers sont sur leur AS 35717 ; les trois derniers sont respectivement hébergés chez Scaleway, OVH, Gandi.&lt;br /&gt;
&lt;br /&gt;
== Avant Respawn ==&lt;br /&gt;
&lt;br /&gt;
Avant [[Projet Respawn|Respawn]], JVC était développé sur plusieurs langages différents côté back-end : on peut citer le C et le PHP. La base de données finale utilisait le moteur de base de données PostgreSQL. L&#039;anarchie technique du back-end a menée au développement de [[Respawn]] (qui est également anarchique).&lt;br /&gt;
&lt;br /&gt;
=== Les Cartes de visite ===&lt;br /&gt;
&lt;br /&gt;
Les [[Carte de Visite|Cartes de visite]] étaient développés en PHP et avaient la particularité notable de stocker les données publiques de chaque utilisateur (par exemple, sa description personnelle) dans de simples fichiers HTML stockés sur disque : il n&#039;y avait pas de requête SQL d&#039;invoquée pour obtenir certaines données liées aux CDV. Lors de certains floods d&#039;avis utilisateurs (notamment menés par &#039;&#039;UnifiedLinux&#039;&#039;), les CDV retournaient aléatoirement des pages blanches. La cause est toujours inconnue.&lt;br /&gt;
&lt;br /&gt;
=== Les forums ===&lt;br /&gt;
&lt;br /&gt;
Les forums étaient en C, et [[Dargor]] les nommaient &amp;quot;modulaires&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Les articles ===&lt;br /&gt;
&lt;br /&gt;
Les articles n&#039;étaient pas mis en ligne immédiatement après leur rédaction. Un système de &amp;quot;compilation&amp;quot; était nécessaire et à effectuer manuellement afin que le site &amp;quot;compile&amp;quot; les articles pour qu&#039;ils deviennent accessibles au public. On peut imaginer que ce système de compilation a été développé dans un but de gestion de charge applicative.&lt;br /&gt;
&lt;br /&gt;
=== Modération ===&lt;br /&gt;
&lt;br /&gt;
La modération des forums était liée à une authentification à 2 étapes, menant à l&#039;attribution du cookie [[mocoedivxuejdom]] permettant la modération de certains forums selon les permissions attribuées à chaque modérateur. Cette deuxième étape était une page spéciale réclamant 5 mots de passe, qui avaient la particularité d&#039;être remplis de caractères aléatoires et spéciaux.&lt;br /&gt;
&lt;br /&gt;
=== Authentification ===&lt;br /&gt;
&lt;br /&gt;
Le cookie [[wenvjgol]] était utilisé pour l&#039;authentification.&lt;br /&gt;
&lt;br /&gt;
=== La recherche des forums ===&lt;br /&gt;
&lt;br /&gt;
La recherche des forums était connue pour être atrocement lente et affichant incorrectement la liste des résultats, des topics étaient manquants et s&#039;affichaient une fois sur deux.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité informatique ===&lt;br /&gt;
&lt;br /&gt;
Lorsqu&#039;une IP tentait d&#039;envoyer trop de requêtes HTTP (HTTPS n&#039;était pas déployé à ce moment-là), le site redirigeait chaque requête HTTP vers une erreur 404. La page d&#039;erreur 404 étant très peu consommatrice techniquement, cela permettait de désaturer la charge serveur en cas de DoS/DDoS.&lt;br /&gt;
&lt;br /&gt;
Sur les CDV et les forums, il y a eu un grand nombre de failles XSS, notamment exploitées en masse par [[PyjamaSam]].&lt;br /&gt;
&lt;br /&gt;
Le [[Captcha]] était également tout le temps cassé, permettant des floods de topics/messages/contributions. Cela a permis par exemple de créer un pseudo rang rubis en moins d&#039;un jour, dont le pseudo était &#039;&#039;RubyOne&#039;&#039; (par &#039;&#039;UnifiedLinux&#039;&#039;, qui a également créé un pseudo rang diamant en moins d&#039;un jour via un flood de contributions).&lt;br /&gt;
&lt;br /&gt;
== Respawn ==&lt;br /&gt;
&lt;br /&gt;
[[Respawn]] a été développé entièrement en PHP côté back-end. Il utilise notamment des frameworks tels que Symfony côté forums, et des moteurs de templates tel que Twig. Respawn semble être divisé techniquement en plusieurs parties : en effet, on peut constater que certaines parties du site respectent le modèle vue-contrôleur (on peut citer les forums), bien que d&#039;autres parties du site n&#039;utilisent pas ce modèle et utilisent de l&#039;url rewriting hardcodé dans des fichiers .htaccess. Respawn semble posséder une base de code identique entre JVC et [[ForumJV]] (désormais fermé), on pouvait constater de nettes interactions entre les 2 sites lorsque ForumJV était ouvert, interactions ayant menées à certains abus (ForumJV accordait des droits de modération sur son forum personnel, des failles de sécurité était donc existantes derrière ce privilège).&lt;br /&gt;
&lt;br /&gt;
=== Schéma de base de données ===&lt;br /&gt;
&lt;br /&gt;
Le schéma de base de données de Respawn semble anarchique et composé de mélange entre le Français et l&#039;Anglais. Exemples de tables appartenant à Respawn : &amp;quot;get_compte_infos&amp;quot;, &amp;quot;session_renew_v2&amp;quot;, &amp;quot;jeu_get_v7&amp;quot;. Notez le &amp;quot;v&amp;quot; à la fin de chaque table, laissant penser qu&#039;il existe plusieurs versions de celles-ci.&lt;br /&gt;
&lt;br /&gt;
==== Exemple d&#039;appel en base de données ====&lt;br /&gt;
 &#039;&#039;SELECT out_id_type, out_nom_type, out_dirname_type, out_affichage, out_date_publication, out_date_modification, out_id_alias_auteur, out_id_groupe_auteur, out_ip, out_titre, out_texte, out_commentaire, out_visibilite, out_liaisons, out_tags, out_medias, out_version, out_fiche, out_jeu, out_data, out_url, out_id_jeux FROM jeu_get_v7 WHERE id_contenu = xxx&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Organisation technique ===&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, Respawn semble être un mélange de MVC et de code classique sans modèle particulier de respecté. Les fichiers du back-end sont également mitigés du côté de leur appellation, laissant encore droit au mélange entre Français et Anglais. Exemples de fichiers côté back-end :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/htdocs/forums/liste_topic.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/core/OiPDOStatement.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Transaction.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/GoogleTagManager.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Compte.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/controllers/forum/liste_topic.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Session.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/vendor/...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Nommage des fonctions ===&lt;br /&gt;
&lt;br /&gt;
Respawn possède aussi des fonctions dont le nommage est entre le Français et l&#039;Anglais. Exemples de fonctions côté back-end :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;getInfoFromIdForum&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;loadMenu&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;checkMenuItem&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;getSingleton&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;getHtmlJeuForum&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;blocHtmlBoutiqueRandom&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optimisations ===&lt;br /&gt;
&lt;br /&gt;
Le back-end PHP utilise Memcache (https://www.php.net/manual/fr/book.memcache.php) afin de faire baisser la charge technique de l&#039;applicatif.&lt;br /&gt;
&lt;br /&gt;
=== Stockage des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Depuis Respawn, les utilisateurs de JVC sont référencés sous un identifiant numérique côté base de données, contrairement au fonctionnement de l&#039;ancien JVC où les utilisateurs étaient référencés par leur pseudo (pouvant mener à des posts sur les forums avec des pseudos identiques organisés différemment côté minuscules/majuscules).&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;obtenir son ID via la page permettant d&#039;éditer votre profil, l&#039;ID est à la fin de l&#039;URL.&lt;br /&gt;
&lt;br /&gt;
=== Les forums ===&lt;br /&gt;
&lt;br /&gt;
Les posts des forums sont déclarés sur plusieurs serveurs différents. Les IDs de ceux-ci semblent aléatoires (bien qu&#039;un offset était attribué pour les posts présents sur ForumJV). Les IDs sont choisis selon l&#039;emplacement dans lequel la ressource sera stockée lors de la création du topic. Le choix de l&#039;emplacement se fait à la création du topic, les messages dans le topic sont alors stockés dans le même emplacement. Il semblerait qu&#039;il y ait 8 emplacements. ID + 8 pour accéder à la ressource suivante, et ID - 8 pour accéder à la ressource précédente.&lt;br /&gt;
&lt;br /&gt;
Exemple de messages séquentiels:&lt;br /&gt;
&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193382&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193390&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193398&lt;br /&gt;
&lt;br /&gt;
L&#039;ID est incrémenté de 8 à chaque fois. Tous ces messages sont répertoriés dans le 7ème serveur (&amp;lt;code&amp;gt;ID % 8&amp;lt;/code&amp;gt;, donc &amp;lt;code&amp;gt;905193382 % 8 = 6&amp;lt;/code&amp;gt;, 7ème).&lt;br /&gt;
&lt;br /&gt;
À noter toutefois que les messages datant d&#039;avant respawn sont complètement désordonnés, certainement dû à la migration durant respawn où la migration de ces messages a été effectué en parallèle.&lt;br /&gt;
&lt;br /&gt;
=== Modération ===&lt;br /&gt;
&lt;br /&gt;
La modération sur Respawn se nomme &amp;quot;Accès étendu&amp;quot;. L&#039;accès étendu peut être appelé via la page qui lui est dédiée : https://www.jeuxvideo.com/sso/auth.php ; il nécessite en revanche également un mot de passe, qui est envoyé via un lien sécurisé utilisable une seule fois par MP à chaque modérateur. A noter que le [[103]] est accessible à n&#039;importe quel modérateur même sans authentification à l&#039;accès étendu.&lt;br /&gt;
&lt;br /&gt;
=== Authentification ===&lt;br /&gt;
&lt;br /&gt;
Le cookie [[coniunctio]] est utilisé pour l&#039;authentification.&lt;br /&gt;
&lt;br /&gt;
=== Recherche des forums ===&lt;br /&gt;
&lt;br /&gt;
La recherche des forums utilise le moteur de recherche Sphinx qui est intégré au site. La recherche des forums est limitée à 1 mois sur les blablas, elle peut être contournée via https://jvarchive.com/.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité informatique ===&lt;br /&gt;
&lt;br /&gt;
Dans les débuts de Respawn, le site était rempli de failles permettant de faire exploser la charge du site. Il existait également de nombreuses failles sur [[ForumJV]] qui permettaient de modérer sans être modérateur, sur n&#039;importe quel forum. Les failles ici citées ont en majorité été exploitées par [[edwado]].&lt;br /&gt;
&lt;br /&gt;
Il a également existé une faille RCE (Remote Code Execution) exploitée par [[Tsain]], qui permettait d&#039;injecter du CSS sur n&#039;importe quelle partie du site (la faille fut très mal exploitée étant-donné que celle-ci n&#039;était pas qu&#039;une simple injection CSS mais bien une RCE où il était possible d&#039;injecter un shell PHP).&lt;br /&gt;
&lt;br /&gt;
=== JvCare ===&lt;br /&gt;
&lt;br /&gt;
JvCare est un algorithme d&#039;obfuscation des liens externes postés sur le site. Il a été développé depuis Respawn. Il permet d&#039;éviter la création de backlinks qui pourraient optimiser indirectement le SEO de sites externes à Jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Les codes ci-après permettent de décoder une chaîne obfusquée.&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
&lt;br /&gt;
 function jvCare(string $classe) : string {&lt;br /&gt;
   static $base16 = &amp;quot;0A12B34C56D78E9F&amp;quot;;&lt;br /&gt;
   $lien = &amp;quot;&amp;quot;;&lt;br /&gt;
   $s = explode(&amp;quot; &amp;quot;, $classe)[1];&lt;br /&gt;
   for ($i = 0; $i &amp;lt; strlen($s); $i += 2) {&lt;br /&gt;
     $lien .= chr(strrpos($base16, $s[$i]) * 16 + strrpos($base16, $s[$i + 1]));&lt;br /&gt;
   }&lt;br /&gt;
   return $lien;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== JavaScript ====&lt;br /&gt;
&lt;br /&gt;
 function jvCake(classe) {&lt;br /&gt;
   const base16 = &#039;0A12B34C56D78E9F&#039;;&lt;br /&gt;
   let lien = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
   const s = classe.split(&#039; &#039;)[1];&lt;br /&gt;
   for (let i = 0; i &amp;lt; s.length; i += 2) {&lt;br /&gt;
     lien += String.fromCharCode(base16.indexOf(s.at(i)) * 16 + base16.indexOf(s.at(i + 1)));&lt;br /&gt;
   }&lt;br /&gt;
   return lien;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===== Fonctionnel =====&lt;br /&gt;
&lt;br /&gt;
 function jvCake(classe) {&lt;br /&gt;
   const base16 = &#039;0A12B34C56D78E9F&#039;;&lt;br /&gt;
   const s = classe.split(&#039; &#039;)[1];&lt;br /&gt;
   const codeUnits = s&lt;br /&gt;
     .match(/../g)&lt;br /&gt;
     .map((i) =&amp;gt; base16.indexOf(i[0]) * 16 + base16.indexOf(i[1]));&lt;br /&gt;
   return String.fromCharCode(...codeUnits);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Python ====&lt;br /&gt;
&lt;br /&gt;
 def jvcare(classe: str) -&amp;gt; str:&lt;br /&gt;
     base16 = &#039;0A12B34C56D78E9F&#039;&lt;br /&gt;
     s = classe.split()[1]&lt;br /&gt;
     url = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     for i, j in zip(s[0::2], s[1::2]):&lt;br /&gt;
         url += chr(base16.index(i) * 16 + base16.index(j))&lt;br /&gt;
     return url&lt;br /&gt;
&lt;br /&gt;
===== Liste en compréhension =====&lt;br /&gt;
&lt;br /&gt;
 def jvcare(classe: str) -&amp;gt; str:&lt;br /&gt;
     base16 = &#039;0A12B34C56D78E9F&#039;&lt;br /&gt;
     s = classe.split()[1]&lt;br /&gt;
     return &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;.join([chr(base16.index(i) * 16 + base16.index(j)) for i, j in zip(s[0::2], s[1::2])])&lt;br /&gt;
&lt;br /&gt;
==== C ====&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 const char *__jvcarebase16 = &amp;quot;0A12B34C56D78E9F&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 char *jvcare(const char *class) {&lt;br /&gt;
     char *s = strchr(class, &#039; &#039;) + 1;&lt;br /&gt;
 &lt;br /&gt;
     int urllen = strlen(s) / 2;&lt;br /&gt;
     char *url = malloc(urllen + 1);&lt;br /&gt;
     for (int i = 0; i &amp;lt; urllen; i++) {&lt;br /&gt;
         char pos1 = strchr(__jvcarebase16, s[i * 2]) - __jvcarebase16;&lt;br /&gt;
         char pos2 = strchr(__jvcarebase16, s[i * 2 + 1]) - __jvcarebase16;&lt;br /&gt;
         url[i] = pos1 * 16 + pos2;&lt;br /&gt;
     }&lt;br /&gt;
     url[urllen] = &#039;\0&#039;;&lt;br /&gt;
     return url;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Awk ====&lt;br /&gt;
&lt;br /&gt;
 BEGIN {&lt;br /&gt;
     base16 = &amp;quot;0A12B34C56D78E9F&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 {&lt;br /&gt;
     s = $2&lt;br /&gt;
     for (i = 1; i &amp;lt; length(s); i += 2) {&lt;br /&gt;
         pos1 = index(base16, substr(s, i, 1))&lt;br /&gt;
         pos2 = index(base16, substr(s, i + 1, 1))&lt;br /&gt;
         url = url sprintf(&amp;quot;%c&amp;quot;, (pos1 - 1) * 16 + (pos2 - 1))&lt;br /&gt;
     }&lt;br /&gt;
     print url&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Phoenix ==&lt;br /&gt;
&lt;br /&gt;
Phoenix était une partie de JVC développée en Node.js et utilisant React. De plus en plus abandonnée au fil du temps, elle était utilisée pour afficher la liste des jeux et des contenus de la rédaction. Phoenix utilisait une API spéciale hébergée au sous-domaine [[Documentation_de_l%27API_Jeuxvideo.com#API_jvc.gg|&#039;&#039;api.jvc.gg&#039;&#039;]]. Phoenix ainsi que l&#039;API GG disparaissent en février 2025 et les pages qu&#039;elles servaient sont basculées vers la partie principale du site.&lt;br /&gt;
&lt;br /&gt;
== Liens externes ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml Interview sur l’architecture de jeuxvideo.com de 1997 à 2005] ([http://web.archive.org/web/20070629165914/http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml archive.org])&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation de l&#039;API Jeuxvideo.com]]&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160373</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160373"/>
		<updated>2025-03-01T11:04:19Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* JVClient */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponible sur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160371</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=160371"/>
		<updated>2025-03-01T11:03:48Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : JVClient, dépréciation de l&amp;#039;api GG, corrections sur v4, retrait bannière&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=JVClient=&lt;br /&gt;
[[File:icon-512x512.png|vignette|256px|Le logo de JVClient : « Le pouvoir par les données ».]]&lt;br /&gt;
&lt;br /&gt;
[https://www.npmjs.com/package/jv-client &#039;&#039;&#039;JVClient&#039;&#039;&#039;] est une &#039;&#039;&#039;librairie Node.js&#039;&#039;&#039; écrite en TypeScript qui fournit des classes et des fonctions permettant d&#039;interagir avec l&#039;API v4 de jeuxvideo.com ainsi que le site JVC lui-même.&lt;br /&gt;
Publiée en février 2025, son objectif est de servir de base aux programmeurs pour le &#039;&#039;scraping&#039;&#039; de données sur des jeux, articles, forums, topics, etc. et pour l&#039;exécution d&#039;opérations nécessitant un compte connecté (comme poster des topics). Le code est &#039;&#039;open source&#039;&#039; et disponiblesur Github&amp;lt;ref&amp;gt;https://github.com/Contrapunctus-XIV/jv-client&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Elle dispose également d&#039;une documentation complète&amp;lt;ref&amp;gt;https://contrapunctus-xiv.github.io/jv-client/&amp;lt;/ref&amp;gt; qui explique en détail l&#039;organisation des données de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine pour les forums ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;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&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;. Il manque cependant de nombreuses fonctionnalités comme les pages de profils sur le sous-domaine API.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints de service==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
On rappelle que l&#039;accès à ces &#039;&#039;endpoints&#039;&#039; nécessite un token d&#039;authentification à fournir dans le header &#039;&#039;Jvc-Authorization&#039;&#039;. Voir l&#039;[[#annexe|annexe]] pour le générer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API était une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, 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].&lt;br /&gt;
&lt;br /&gt;
L&#039;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.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fichier:icon-512x512.png&amp;diff=160370</id>
		<title>Fichier:icon-512x512.png</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fichier:icon-512x512.png&amp;diff=160370"/>
		<updated>2025-03-01T10:51:01Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Fichier téléversé avec MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fichier téléversé avec MsUpload&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=159707</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=159707"/>
		<updated>2025-02-08T10:57:45Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Queries des tests */ Correction lien pastebin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Info|Contenu=Co-rédacteur de cet article, j&#039;aurais besoin de l&#039;aide d&#039;un khey calé sur l&#039;API de JVC et/ou le fonctionnement technique de jeuxvideo.com. J&#039;ai plusieurs questions à poser en vue de la réalisation d&#039;un projet informatique. (Edwado si tu passes par là…)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Merci de me contacter sur JVC (pseudo ContrapunctusI{{CDV|Pseudo=ContrapunctusI}}). Toute aide sera appréciée.}}&lt;br /&gt;
&lt;br /&gt;
L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/YxKif1DJ ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Histoire_du_Blabla_18-25_ans_en_2024&amp;diff=157788</id>
		<title>Histoire du Blabla 18-25 ans en 2024</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Histoire_du_Blabla_18-25_ans_en_2024&amp;diff=157788"/>
		<updated>2024-10-27T11:50:11Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Faits Marquants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Note|Contenu=L&#039;enrichissement de cette page dépend entièrement du bon vouloir des forumeurs. Si vous êtes témoin d&#039;un évènement notable, n&#039;hésitez pas à l&#039;inclure ici car il est probable que personne d&#039;autre ne le fera, le faisant ainsi sombrer dans l&#039;oubli {{triste}}}}Cet article présente &#039;&#039;&#039;l&#039;histoire détaillée&#039;&#039;&#039; du &#039;&#039;&#039;forum [[Blabla 18-25 ans]]&#039;&#039;&#039; durant l&#039;année &#039;&#039;&#039;2024&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Pour consulter les articles des autres années voir la section [[Blabla 18-25 ans#Histoire%20du%20forum|Histoire du forum]] de la page principale.&lt;br /&gt;
&lt;br /&gt;
== Histoire du forum en 2024 ==&lt;br /&gt;
L&#039;année est inaugurée par le traditionnel [[PEMT du Nouvel An 2024|PEMT du nouvel an]] qui enregistre 85 réussites pour environ 330 posts entre 23:57 et 00:03 ; ces chiffres sont en baisse par rapport à ceux de l&#039;[[PEMT du Nouvel An 2023|édition précédente]].&lt;br /&gt;
&lt;br /&gt;
Toujours aucun délire notable en vue. La [[Modération du 18-25|modération dictatoriale]] et la boucle ayant à tout jamais anéanti le forum, qui ne voit que 800 connectés les samedis soir, contre 5000 au plus haut du forum en 2016.&lt;br /&gt;
&lt;br /&gt;
== Faits Marquants ==&lt;br /&gt;
{{Bannière Note|Contenu=Avant de rajouter une entrée veillez bien à lire et comprendre la bannière bleue ci-après. &#039;&#039;&#039;Un topic anodin de 10 pages n&#039;a rien à faire ici.&#039;&#039;&#039; &amp;lt;br&amp;gt; Le principe de cet article est de documenter les faits marquants et méritant de figurer dans l&#039;histoire éternelle du forum. Il n&#039;a pas vocation à archiver le moindre topic rouge comme si il était décisif dans l&#039;histoire de la communauté.}}{{Bannière Info|Contenu=&#039;&#039;&#039;Évènements notables&#039;&#039;&#039; : Nouveau délire, un topic légendaire, un raid important, un phénomène relatif au forum, un nouveau sujet de discussion relatif au forum très populaire et faisant couler de nombreux topics sur plusieurs jours. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Évènements non-notables&#039;&#039;&#039; : Un topic qui ne sort pas du lot, un phénomène passé inaperçu (quelques topics), une actualité qui ne concerne pas le forum même si très discutée sur celui-ci.&lt;br /&gt;
[[Special:Diff/153117/prev|Exemple d&#039;évènements non-notables qui ont été retirés de la page.]]}}&lt;br /&gt;
* &#039;&#039;&#039;Le 1 janvier :&#039;&#039;&#039; Après son défi de se prendre en photo pendant toute l&#039;année 2022, &#039;&#039;Shakclash27&#039;&#039; {{CDV|Shakclash27}} a décidé de remettre le couvert en se prenant en photo pendant toute l&#039;année 2024 dans son [[topic]] [https://www.jeuxvideo.com/forums/42-51-73577798-1-0-1-0-je-me-prends-en-photo-pendant-toute-l-annee.htm &amp;quot;je me prends en photo pendant toute l&#039;année&amp;quot;].&lt;br /&gt;
* &#039;&#039;&#039;Le 19 février :&#039;&#039;&#039; Le topic sur le jeu en ligne [[Clan 1825 de Territorial.io|Territorial.io]]&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-73828201-1-0-1-0-raid-sur-territorial-io-la-saison-2-commence.htm&amp;lt;/ref&amp;gt; reprend en activité, arrivant même a faire passer le clan 1825 4éme, et 1 an après la création du 1er topic, une [[Clan 1825 de Territorial.io|&amp;quot;Saison 2&amp;quot; est lancée]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fin février&#039;&#039;&#039; &#039;&#039;&#039;:&#039;&#039;&#039; Le forumeur &#039;&#039;LeBossLelite&#039;&#039; et d&#039;autres forumeurs [[Spam|spammen]][[Spam|t]] tous les jours le délire [[Mets ma viande dans ta bouche]]&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73863346-1-0-1-0-ce-gros-texan-deter-a-bench-met-la-dans-ta-bouche-met-toute-ma-viande-dans-ta-bouche&amp;lt;/ref&amp;gt;.[[Fichier:doumbépied.png|vignette|201x201px|Sticker ironisant sur le combat et le discours de Cédric Doumbé]]&lt;br /&gt;
* &#039;&#039;&#039;Le 7 mars :&#039;&#039;&#039; Lors du combat de MMA entre Baysangur Chamsoudinov et Cédric Doumbé&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73910111-1-0-1-0-officiel-pfl-paris-doumbe-vs-baki&amp;lt;/ref&amp;gt; , le forum connaît un regain d&#039;activité exceptionnel durant la soirée , atteignant même +2900 connectées&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73883036-1-0-1-0-attendez-y-a-vraiment-2845-connectes&amp;lt;/ref&amp;gt;. De nombreux topics&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73913801-1-0-1-0-serieux-pourquoi-doumbe-se-plaignait-de-cette-putain-d-echarde&amp;lt;/ref&amp;gt; et stickers seront fait à propos de l&#039;abandon du combattant Cédric Doumbé suite à une écharde qui se trouvera dans son doigt de pied, ce dernier ayant eu une campagne de promotion médiatique du combat très agressive et beaucoup ironisant sur le fait que c&#039;est donc lui qui a abandonné le combat.&lt;br /&gt;
* &#039;&#039;&#039;Mars :&#039;&#039;&#039; La boucle sur le délire des &amp;quot;[[Burgers a 50 centimes|&#039;&#039;&#039;Burgers a 50 centimes&#039;&#039;&#039;]]&amp;quot; est très active.&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=burger&amp;amp;page=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Le 20 mars :&#039;&#039;&#039; Le forum célèbre la naissance de [[Bébé Prout|&#039;&#039;&#039;Baby Prout&#039;&#039;&#039;]]. Véritable prophète pour certains.&lt;br /&gt;
* &#039;&#039;&#039;Le 25 mars :&#039;&#039;&#039; Le foromeur &#039;&#039;McRacheley&#039;&#039; {{CDV|Pseudo=mcracheley}} crée un topic intitulé « [https://www.jeuxvideo.com/forums/42-51-74041719-1-0-1-0-j-ai-demande-a-l-ia-de-me-faire-une-bd-asterix.htm J&#039;ai demandé à l&#039;IA de me faire une BD ASTERIX] », le résultat provoquant un vague de fou rire chez les [[Khey|kheys]] présents ce soir là, en effet, les personnages d’Astérix dessinés par l’IA le sont de manière particulièrement maladroite. L’expression « SAALIAX » utilisé par l’un des personnages deviendra le leitmotiv de ce nouveau délire, ainsi que la boisson aux effets hallucinogènes consommée par nos deux gaulois, la « spiphue ». Au fur et à mesure des jours suivants de nombreux forumeurs créeront à leur tour des variantes de ces BD, parfois en faisant référence à d’autres délires.&lt;br /&gt;
* &#039;&#039;&#039;Le 28 mars&#039;&#039;&#039; : Un article du Monde indique qu&#039;un certain &amp;quot;Carl C.&amp;quot; était à l&#039;origine de fausses alertes à la bombe dans des établissements scolaires la semaine précédente&amp;lt;ref&amp;gt;https://www.lemonde.fr/societe/article/2024/03/28/derriere-les-menaces-d-attentats-a-l-encontre-des-ecoles-des-piratages-et-de-mauvais-canulars_6224714_3224.html#&amp;lt;/ref&amp;gt;. Un tweet indique que cet individu, à défaut d&#039;être un islamiste, serait un khey &amp;quot;plutôt islamophobe&amp;quot;&amp;lt;ref&amp;gt;https://twitter.com/Tajmaat_Service/status/1773462628582518860?t=7SqCIaUShjWYM4oVAchkDw&amp;lt;/ref&amp;gt;. La nouvelle fait l&#039;objet d&#039;un topic sur le forum&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74012694-1-0-1-0-alerte-un-khey-est-derriere-les-fausses-alertes-a-la-bombe&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 8 avril&#039;&#039;&#039; : Le forum est en effervescence face à de nombreux éléments, ressemblant notamment au délire [[Pour rappel en 2022]]. En effet, ce 8 avril a lieu une éclipse solaire, la comète du diable est visible et le CERN doit activer un accélérateur de particules, qui selon le forum détruira l&#039;univers ou nous projetteras dans une nouvelle dimension&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74078349-1-0-1-0-le-cern-debute-son-experience-dans-27-minutes.htm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 20 avril :&#039;&#039;&#039; Une vague de DDoS répétés visant les sites complémentaires à jeuxvideo.com débute. Risibank est attaqué en premier&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74125630-1-0-1-0-ff892t.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74152467-1-0-1-0-m5qggk.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74125630-1-0-1-0-b646ia.htm&amp;lt;/ref&amp;gt;. L&#039;attaque serait consécutive à la publication d&#039;une photo gore sur ce dernier&amp;lt;ref&amp;gt;[https://jvarchive.com/forums/42-51-74128369-1-0-1-0-ayaaa-le-sticker-tendance-sur-risibank https://jeuxvideo.com/forums/42-51-74128369-1-0-1-0-ayaaa-le-sticker-tendance-sur-risibank]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 21 avril :&#039;&#039;&#039; [[JVFlux]] est également affecté par le DDoS&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74135865-1-0-1-0-04w8yu.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74155259-1-0-1-0-ya0lx6.htm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 24 avril :&#039;&#039;&#039; Le 24 avril, un jeu vidéo FPS sort avec de nombreux délires relatifs au forum, il s&#039;appelle [https://www.risifield.fr/ RISIFIELD.]&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74163816-1-0-1-0-risifield-le-premier-fps-multijoueur-dedie-au-forom.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Le 29 avril :&#039;&#039;&#039; Un bug du site laisse tous les topics [[Erreur 410|410]] en première page, rendant les forums de jeuxvideo.com inutilisables. Certains forumeurs se réfugient sur un topic bunker&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74187928-1-0-1-0-bunker-anti-bug-jvc.htm&amp;lt;/ref&amp;gt; tandis qu&#039;une cinquantaine se dirigent vers [[Onche.org]]&amp;lt;ref&amp;gt;https://onche.org/topic/515547/si-le-forom-etait-un-c-c-de-jvc-tout-le-monde-serait-ici/1&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/515464/les-kheys-de-jvc-n-oubliez-pas-que-vous-serez-toujours/1&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;Le 6 mai :&#039;&#039;&#039; Un [[Topic]] sur lequel l&#039;auteur poste une photo d&#039;[[Asterion]] adossé à un mur et entouré de déchets est créé. S&#039;en suivra alors une réaction de grands nombre de défenseurs de Kirby s&#039;opposant à ses &#039;&#039;haters&#039;&#039;. À l&#039;heure actuelle, le topic atteint 14 pages&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74230435-1-0-1-0-photo-kirby-est-complement-brisax-il-est-finito&amp;lt;/ref&amp;gt;. Le topic est supprimé le jour suivant&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74230435-1-0-1-0-photo-kirby-est-complement-brisax-il-est-finito.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[[Fichier:Admins Webedia Streamable.png|vignette|Mail de Webedia expliquant la raison de l&#039;interdiction des sites d&#039;hébergement vidéo |259x259px]]&#039;&#039;&#039;Le 28 mai :&#039;&#039;&#039; [[Webedia]] prend la décision d&#039;interdire tous les liens menant vers des sites d&#039;hébergement vidéo comme Streamable ou Webmshare. Selon eux, cette décision a été prise car beaucoup de ces liens menaient vers des vidéos allaient contre la charte des forums et que ça saturait la bande passante du site&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74327261-12-0-1-0-censure-les-videos-streamable-desormais-auto-supprimee-sur-le-forom.htm&amp;lt;/ref&amp;gt;. Pourtant, plusieurs heures plus tard, Webedia revient sur cette décision, ne filtrant que les liens de vidéos spécifiques.&lt;br /&gt;
*&#039;&#039;&#039;Le 2 juin :&#039;&#039;&#039;  Le journal &amp;quot;Le Monde&amp;quot; révèle que le candidat du Rassemblement National, [[Jordan Bardella]] avait eu sur jeuxvideo.com plusieurs pseudos dont &amp;quot;Mrjordan9320&amp;quot; et &amp;quot;el_italiano93&amp;quot; suscitant de nombreux topics et réaction. A l&#039;heure actuelle, le topic a dépassé 180 pages&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74340201-1-0-1-0-le-monde-bardella-trainait-sur-les-forums-jvc-au-college.htm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;Le 8 juin :&#039;&#039;&#039; Après plusieurs topics de boucle sur une youtubeuse de niche, le forum finit par attirer son attention lors d&#039;un topic&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74340156-9-0-1-0-alerte-2-kheys-ont-succombe-a-ses-charmes&amp;lt;/ref&amp;gt;, pour l&#039;occasion le khey &#039;&#039;Kheyoken&#039;&#039; {{CDV|Pseudo=kheyoken}} s&#039;illustrera en simperie en lui faisant don de 30 euros&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/23/6/1717874825-image.png&amp;lt;/ref&amp;gt;. &#039;&#039;Annieyonki04&#039;&#039; {{CDV|Pseudo=annieyonki04}} arrivera par la même occasion a séduire la belle teen&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/23/6/1717879551-image.png&amp;lt;/ref&amp;gt; grâce a un poème&amp;lt;ref&amp;gt;[[:Fichier:chanson-cylene.mp4]]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
*&#039;&#039;&#039;Le 10 juin :&#039;&#039;&#039;  L&#039;enseigne Lidl lance un jeu concours avec une IA nommée &amp;quot;[https://lidlize.com/ Lidlize]&amp;quot; où les 3 gagnants qui auront proposé des concepts générés par IA gagneront 1 an de courses. Très rapidement, de nombreux forumeurs s&#039;amusent avec des concepts faisant référence aux délires du forum&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74370210-1-0-1-0-alerte-via-un-concours-lidl-offre-la-possibilite-de-creer-notre-propre-produit&amp;lt;/ref&amp;gt;. Cependant la censure s&#039;abat contre leur création et se faisant retirer très rapidement, soupçonnant même des infiltrés de Lidl sur le topic.[[Ahi|ahi sauvage]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 17 août :&#039;&#039;&#039; De nombreux forumeurs reprennent la délire [[Tête de ouf|fatigué (tête de ouf)]], originaire d&#039;Onche. Tout part d&#039;un live TikTok entre AD Laurent et un utilisateur utilisant le pseudo Pablo27200. La réaction décontenancée d&#039;AD Laurent face à une cinquantenaire à l&#039;apparence très affaissée et la réponse nonchalante de ce dernier (&#039;&#039;&amp;quot;j&#039;suis fatigué, frère&amp;quot;&#039;&#039;) amuseront grandement certains forumeurs. Plus tard, un autre échange sur le même mode, repris par le khey &#039;&#039;Chocoyaa&#039;&#039; {{CDV|Pseudo=chocoyaa}} dans lequel une [[French Dream|dreameuse]] essayera de séduire AD Laurent&amp;lt;ref&amp;gt;https://streamable.com/u4ruh4&amp;lt;/ref&amp;gt; tout en se montrant difficile et coquette rencontrera un succès moindre.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 10 octobre :&#039;&#039;&#039;  Des liens d&#039;une conférence de presse confidentielle du ministère de l&#039;Agriculture, dévoilant son projet de finances, ont fuité sur le forum&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74969526-1-0-1-0-ayaaaaaaa-reunion-zoom-avec-la-ministre-de-l-agriculture-no-fake&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74945460-1-0-1-0-ayaaaaaaa-reunion-zoom-avec-la-ministre-de-l-agriculture-no-fake&amp;lt;/ref&amp;gt;. Le [[raid]] a rapidement pris fin grâce à un dénonciateur qui a signalé la fuite dans le chat de la conférence. Malgré cela, des questions sur la conservation de l[[Ahi|&#039;ahi sauvage]] et le &amp;quot;Plan Chancla 2025&amp;quot; ont été posées aux membres du gouvernement. Un &amp;quot;Ta gueule&amp;quot; très audible a également retenti dans la salle de conférence Webex. Le Parisien a publié un article le soir même relatant les faits&amp;lt;ref&amp;gt;https://www.leparisien.fr/politique/ca-ressemblait-a-des-interventions-dadolescents-une-audioconference-du-ministere-de-lagriculture-perturbee-11-10-2024-NO2IRIMF3RDPRBBJLBBWQRE22Q.php | [https://archive.is/js8BJ &amp;lt;nowiki&amp;gt;[archive.is]&amp;lt;/nowiki&amp;gt;]&amp;lt;/ref&amp;gt;. Le ministère de l&#039;Agriculture commentera le raid en observant que &#039;&#039;« Ça ressemblait à des interventions d’adolescents ».&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 27 octobre :&#039;&#039;&#039; De nombreux forumeurs se plaignent de rencontrer des lags à cause des serveurs de JVC. Aux alentours de 12 h 45, le site est quasiment inaccessible, renvoyant des erreurs 503 à chaque requte.&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Blabla 18-25 ans]]&lt;br /&gt;
[[Catégorie:Histoire du forum Blabla 18-25 ans]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Histoire_du_Blabla_18-25_ans_en_2024&amp;diff=157787</id>
		<title>Histoire du Blabla 18-25 ans en 2024</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Histoire_du_Blabla_18-25_ans_en_2024&amp;diff=157787"/>
		<updated>2024-10-27T11:48:56Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Note|Contenu=L&#039;enrichissement de cette page dépend entièrement du bon vouloir des forumeurs. Si vous êtes témoin d&#039;un évènement notable, n&#039;hésitez pas à l&#039;inclure ici car il est probable que personne d&#039;autre ne le fera, le faisant ainsi sombrer dans l&#039;oubli {{triste}}}}Cet article présente &#039;&#039;&#039;l&#039;histoire détaillée&#039;&#039;&#039; du &#039;&#039;&#039;forum [[Blabla 18-25 ans]]&#039;&#039;&#039; durant l&#039;année &#039;&#039;&#039;2024&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Pour consulter les articles des autres années voir la section [[Blabla 18-25 ans#Histoire%20du%20forum|Histoire du forum]] de la page principale.&lt;br /&gt;
&lt;br /&gt;
== Histoire du forum en 2024 ==&lt;br /&gt;
L&#039;année est inaugurée par le traditionnel [[PEMT du Nouvel An 2024|PEMT du nouvel an]] qui enregistre 85 réussites pour environ 330 posts entre 23:57 et 00:03 ; ces chiffres sont en baisse par rapport à ceux de l&#039;[[PEMT du Nouvel An 2023|édition précédente]].&lt;br /&gt;
&lt;br /&gt;
Toujours aucun délire notable en vue. La [[Modération du 18-25|modération dictatoriale]] et la boucle ayant à tout jamais anéanti le forum, qui ne voit que 800 connectés les samedis soir, contre 5000 au plus haut du forum en 2016.&lt;br /&gt;
&lt;br /&gt;
== Faits Marquants ==&lt;br /&gt;
{{Bannière Note|Contenu=Avant de rajouter une entrée veillez bien à lire et comprendre la bannière bleue ci-après. &#039;&#039;&#039;Un topic anodin de 10 pages n&#039;a rien à faire ici.&#039;&#039;&#039; &amp;lt;br&amp;gt; Le principe de cet article est de documenter les faits marquants et méritant de figurer dans l&#039;histoire éternelle du forum. Il n&#039;a pas vocation à archiver le moindre topic rouge comme si il était décisif dans l&#039;histoire de la communauté.}}{{Bannière Info|Contenu=&#039;&#039;&#039;Évènements notables&#039;&#039;&#039; : Nouveau délire, un topic légendaire, un raid important, un phénomène relatif au forum, un nouveau sujet de discussion relatif au forum très populaire et faisant couler de nombreux topics sur plusieurs jours. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Évènements non-notables&#039;&#039;&#039; : Un topic qui ne sort pas du lot, un phénomène passé inaperçu (quelques topics), une actualité qui ne concerne pas le forum même si très discutée sur celui-ci.&lt;br /&gt;
[[Special:Diff/153117/prev|Exemple d&#039;évènements non-notables qui ont été retirés de la page.]]}}&lt;br /&gt;
* &#039;&#039;&#039;Le 1 janvier :&#039;&#039;&#039; Après son défi de se prendre en photo pendant toute l&#039;année 2022, &#039;&#039;Shakclash27&#039;&#039; {{CDV|Shakclash27}} a décidé de remettre le couvert en se prenant en photo pendant toute l&#039;année 2024 dans son [[topic]] [https://www.jeuxvideo.com/forums/42-51-73577798-1-0-1-0-je-me-prends-en-photo-pendant-toute-l-annee.htm &amp;quot;je me prends en photo pendant toute l&#039;année&amp;quot;].&lt;br /&gt;
* &#039;&#039;&#039;Le 19 février :&#039;&#039;&#039; Le topic sur le jeu en ligne [[Clan 1825 de Territorial.io|Territorial.io]]&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-73828201-1-0-1-0-raid-sur-territorial-io-la-saison-2-commence.htm&amp;lt;/ref&amp;gt; reprend en activité, arrivant même a faire passer le clan 1825 4éme, et 1 an après la création du 1er topic, une [[Clan 1825 de Territorial.io|&amp;quot;Saison 2&amp;quot; est lancée]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Fin février&#039;&#039;&#039; &#039;&#039;&#039;:&#039;&#039;&#039; Le forumeur &#039;&#039;LeBossLelite&#039;&#039; et d&#039;autres forumeurs [[Spam|spammen]][[Spam|t]] tous les jours le délire [[Mets ma viande dans ta bouche]]&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73863346-1-0-1-0-ce-gros-texan-deter-a-bench-met-la-dans-ta-bouche-met-toute-ma-viande-dans-ta-bouche&amp;lt;/ref&amp;gt;.[[Fichier:doumbépied.png|vignette|201x201px|Sticker ironisant sur le combat et le discours de Cédric Doumbé]]&lt;br /&gt;
* &#039;&#039;&#039;Le 7 mars :&#039;&#039;&#039; Lors du combat de MMA entre Baysangur Chamsoudinov et Cédric Doumbé&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73910111-1-0-1-0-officiel-pfl-paris-doumbe-vs-baki&amp;lt;/ref&amp;gt; , le forum connaît un regain d&#039;activité exceptionnel durant la soirée , atteignant même +2900 connectées&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73883036-1-0-1-0-attendez-y-a-vraiment-2845-connectes&amp;lt;/ref&amp;gt;. De nombreux topics&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-73913801-1-0-1-0-serieux-pourquoi-doumbe-se-plaignait-de-cette-putain-d-echarde&amp;lt;/ref&amp;gt; et stickers seront fait à propos de l&#039;abandon du combattant Cédric Doumbé suite à une écharde qui se trouvera dans son doigt de pied, ce dernier ayant eu une campagne de promotion médiatique du combat très agressive et beaucoup ironisant sur le fait que c&#039;est donc lui qui a abandonné le combat.&lt;br /&gt;
* &#039;&#039;&#039;Mars :&#039;&#039;&#039; La boucle sur le délire des &amp;quot;[[Burgers a 50 centimes|&#039;&#039;&#039;Burgers a 50 centimes&#039;&#039;&#039;]]&amp;quot; est très active.&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=burger&amp;amp;page=2&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Le 20 mars :&#039;&#039;&#039; Le forum célèbre la naissance de [[Bébé Prout|&#039;&#039;&#039;Baby Prout&#039;&#039;&#039;]]. Véritable prophète pour certains.&lt;br /&gt;
* &#039;&#039;&#039;Le 25 mars :&#039;&#039;&#039; Le foromeur &#039;&#039;McRacheley&#039;&#039; {{CDV|Pseudo=mcracheley}} crée un topic intitulé « [https://www.jeuxvideo.com/forums/42-51-74041719-1-0-1-0-j-ai-demande-a-l-ia-de-me-faire-une-bd-asterix.htm J&#039;ai demandé à l&#039;IA de me faire une BD ASTERIX] », le résultat provoquant un vague de fou rire chez les [[Khey|kheys]] présents ce soir là, en effet, les personnages d’Astérix dessinés par l’IA le sont de manière particulièrement maladroite. L’expression « SAALIAX » utilisé par l’un des personnages deviendra le leitmotiv de ce nouveau délire, ainsi que la boisson aux effets hallucinogènes consommée par nos deux gaulois, la « spiphue ». Au fur et à mesure des jours suivants de nombreux forumeurs créeront à leur tour des variantes de ces BD, parfois en faisant référence à d’autres délires.&lt;br /&gt;
* &#039;&#039;&#039;Le 28 mars&#039;&#039;&#039; : Un article du Monde indique qu&#039;un certain &amp;quot;Carl C.&amp;quot; était à l&#039;origine de fausses alertes à la bombe dans des établissements scolaires la semaine précédente&amp;lt;ref&amp;gt;https://www.lemonde.fr/societe/article/2024/03/28/derriere-les-menaces-d-attentats-a-l-encontre-des-ecoles-des-piratages-et-de-mauvais-canulars_6224714_3224.html#&amp;lt;/ref&amp;gt;. Un tweet indique que cet individu, à défaut d&#039;être un islamiste, serait un khey &amp;quot;plutôt islamophobe&amp;quot;&amp;lt;ref&amp;gt;https://twitter.com/Tajmaat_Service/status/1773462628582518860?t=7SqCIaUShjWYM4oVAchkDw&amp;lt;/ref&amp;gt;. La nouvelle fait l&#039;objet d&#039;un topic sur le forum&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74012694-1-0-1-0-alerte-un-khey-est-derriere-les-fausses-alertes-a-la-bombe&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 8 avril&#039;&#039;&#039; : Le forum est en effervescence face à de nombreux éléments, ressemblant notamment au délire [[Pour rappel en 2022]]. En effet, ce 8 avril a lieu une éclipse solaire, la comète du diable est visible et le CERN doit activer un accélérateur de particules, qui selon le forum détruira l&#039;univers ou nous projetteras dans une nouvelle dimension&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74078349-1-0-1-0-le-cern-debute-son-experience-dans-27-minutes.htm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 20 avril :&#039;&#039;&#039; Une vague de DDoS répétés visant les sites complémentaires à jeuxvideo.com débute. Risibank est attaqué en premier&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74125630-1-0-1-0-ff892t.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74152467-1-0-1-0-m5qggk.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74125630-1-0-1-0-b646ia.htm&amp;lt;/ref&amp;gt;. L&#039;attaque serait consécutive à la publication d&#039;une photo gore sur ce dernier&amp;lt;ref&amp;gt;[https://jvarchive.com/forums/42-51-74128369-1-0-1-0-ayaaa-le-sticker-tendance-sur-risibank https://jeuxvideo.com/forums/42-51-74128369-1-0-1-0-ayaaa-le-sticker-tendance-sur-risibank]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 21 avril :&#039;&#039;&#039; [[JVFlux]] est également affecté par le DDoS&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74135865-1-0-1-0-04w8yu.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74155259-1-0-1-0-ya0lx6.htm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Le 24 avril :&#039;&#039;&#039; Le 24 avril, un jeu vidéo FPS sort avec de nombreux délires relatifs au forum, il s&#039;appelle [https://www.risifield.fr/ RISIFIELD.]&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74163816-1-0-1-0-risifield-le-premier-fps-multijoueur-dedie-au-forom.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Le 29 avril :&#039;&#039;&#039; Un bug du site laisse tous les topics [[Erreur 410|410]] en première page, rendant les forums de jeuxvideo.com inutilisables. Certains forumeurs se réfugient sur un topic bunker&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74187928-1-0-1-0-bunker-anti-bug-jvc.htm&amp;lt;/ref&amp;gt; tandis qu&#039;une cinquantaine se dirigent vers [[Onche.org]]&amp;lt;ref&amp;gt;https://onche.org/topic/515547/si-le-forom-etait-un-c-c-de-jvc-tout-le-monde-serait-ici/1&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/515464/les-kheys-de-jvc-n-oubliez-pas-que-vous-serez-toujours/1&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;Le 6 mai :&#039;&#039;&#039; Un [[Topic]] sur lequel l&#039;auteur poste une photo d&#039;[[Asterion]] adossé à un mur et entouré de déchets est créé. S&#039;en suivra alors une réaction de grands nombre de défenseurs de Kirby s&#039;opposant à ses &#039;&#039;haters&#039;&#039;. À l&#039;heure actuelle, le topic atteint 14 pages&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74230435-1-0-1-0-photo-kirby-est-complement-brisax-il-est-finito&amp;lt;/ref&amp;gt;. Le topic est supprimé le jour suivant&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74230435-1-0-1-0-photo-kirby-est-complement-brisax-il-est-finito.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
*[[Fichier:Admins Webedia Streamable.png|vignette|Mail de Webedia expliquant la raison de l&#039;interdiction des sites d&#039;hébergement vidéo |259x259px]]&#039;&#039;&#039;Le 28 mai :&#039;&#039;&#039; [[Webedia]] prend la décision d&#039;interdire tous les liens menant vers des sites d&#039;hébergement vidéo comme Streamable ou Webmshare. Selon eux, cette décision a été prise car beaucoup de ces liens menaient vers des vidéos allaient contre la charte des forums et que ça saturait la bande passante du site&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74327261-12-0-1-0-censure-les-videos-streamable-desormais-auto-supprimee-sur-le-forom.htm&amp;lt;/ref&amp;gt;. Pourtant, plusieurs heures plus tard, Webedia revient sur cette décision, ne filtrant que les liens de vidéos spécifiques.&lt;br /&gt;
*&#039;&#039;&#039;Le 2 juin :&#039;&#039;&#039;  Le journal &amp;quot;Le Monde&amp;quot; révèle que le candidat du Rassemblement National, [[Jordan Bardella]] avait eu sur jeuxvideo.com plusieurs pseudos dont &amp;quot;Mrjordan9320&amp;quot; et &amp;quot;el_italiano93&amp;quot; suscitant de nombreux topics et réaction. A l&#039;heure actuelle, le topic a dépassé 180 pages&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74340201-1-0-1-0-le-monde-bardella-trainait-sur-les-forums-jvc-au-college.htm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*&#039;&#039;&#039;Le 8 juin :&#039;&#039;&#039; Après plusieurs topics de boucle sur une youtubeuse de niche, le forum finit par attirer son attention lors d&#039;un topic&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74340156-9-0-1-0-alerte-2-kheys-ont-succombe-a-ses-charmes&amp;lt;/ref&amp;gt;, pour l&#039;occasion le khey &#039;&#039;Kheyoken&#039;&#039; {{CDV|Pseudo=kheyoken}} s&#039;illustrera en simperie en lui faisant don de 30 euros&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/23/6/1717874825-image.png&amp;lt;/ref&amp;gt;. &#039;&#039;Annieyonki04&#039;&#039; {{CDV|Pseudo=annieyonki04}} arrivera par la même occasion a séduire la belle teen&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/23/6/1717879551-image.png&amp;lt;/ref&amp;gt; grâce a un poème&amp;lt;ref&amp;gt;[[:Fichier:chanson-cylene.mp4]]&amp;lt;/ref&amp;gt;. &lt;br /&gt;
*&#039;&#039;&#039;Le 10 juin :&#039;&#039;&#039;  L&#039;enseigne Lidl lance un jeu concours avec une IA nommée &amp;quot;[https://lidlize.com/ Lidlize]&amp;quot; où les 3 gagnants qui auront proposé des concepts générés par IA gagneront 1 an de courses. Très rapidement, de nombreux forumeurs s&#039;amusent avec des concepts faisant référence aux délires du forum&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74370210-1-0-1-0-alerte-via-un-concours-lidl-offre-la-possibilite-de-creer-notre-propre-produit&amp;lt;/ref&amp;gt;. Cependant la censure s&#039;abat contre leur création et se faisant retirer très rapidement, soupçonnant même des infiltrés de Lidl sur le topic.[[Ahi|ahi sauvage]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 17 août :&#039;&#039;&#039; De nombreux forumeurs reprennent la délire [[Tête de ouf|fatigué (tête de ouf)]], originaire d&#039;Onche. Tout part d&#039;un live TikTok entre AD Laurent et un utilisateur utilisant le pseudo Pablo27200. La réaction décontenancée d&#039;AD Laurent face à une cinquantenaire à l&#039;apparence très affaissée et la réponse nonchalante de ce dernier (&#039;&#039;&amp;quot;j&#039;suis fatigué, frère&amp;quot;&#039;&#039;) amuseront grandement certains forumeurs. Plus tard, un autre échange sur le même mode, repris par le khey &#039;&#039;Chocoyaa&#039;&#039; {{CDV|Pseudo=chocoyaa}} dans lequel une [[French Dream|dreameuse]] essayera de séduire AD Laurent&amp;lt;ref&amp;gt;https://streamable.com/u4ruh4&amp;lt;/ref&amp;gt; tout en se montrant difficile et coquette rencontrera un succès moindre.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 10 octobre :&#039;&#039;&#039;  Des liens d&#039;une conférence de presse confidentielle du ministère de l&#039;Agriculture, dévoilant son projet de finances, ont fuité sur le forum&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74969526-1-0-1-0-ayaaaaaaa-reunion-zoom-avec-la-ministre-de-l-agriculture-no-fake&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74945460-1-0-1-0-ayaaaaaaa-reunion-zoom-avec-la-ministre-de-l-agriculture-no-fake&amp;lt;/ref&amp;gt;. Le [[raid]] a rapidement pris fin grâce à un dénonciateur qui a signalé la fuite dans le chat de la conférence. Malgré cela, des questions sur la conservation de l[[Ahi|&#039;ahi sauvage]] et le &amp;quot;Plan Chancla 2025&amp;quot; ont été posées aux membres du gouvernement. Un &amp;quot;Ta gueule&amp;quot; très audible a également retenti dans la salle de conférence Webex. Le Parisien a publié un article le soir même relatant les faits&amp;lt;ref&amp;gt;https://www.leparisien.fr/politique/ca-ressemblait-a-des-interventions-dadolescents-une-audioconference-du-ministere-de-lagriculture-perturbee-11-10-2024-NO2IRIMF3RDPRBBJLBBWQRE22Q.php | [https://archive.is/js8BJ &amp;lt;nowiki&amp;gt;[archive.is]&amp;lt;/nowiki&amp;gt;]&amp;lt;/ref&amp;gt;. Le ministère de l&#039;Agriculture commentera le raid en observant que &#039;&#039;« Ça ressemblait à des interventions d’adolescents ».&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 27 octobre :&#039;&#039;&#039; De nombreux forumeurs se plaignent de rencontrer des lags à cause des serveurs de JVC. Aux alentours de 12 h 45, le site est quasiment inaccessible, renvoyant des erreurs 503 à chaque requ.&lt;br /&gt;
&lt;br /&gt;
==Références==&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Blabla 18-25 ans]]&lt;br /&gt;
[[Catégorie:Histoire du forum Blabla 18-25 ans]]&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Pav%C3%A9_Ma_copine_est_morte_en_2006&amp;diff=157672</id>
		<title>Pavé Ma copine est morte en 2006</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Pav%C3%A9_Ma_copine_est_morte_en_2006&amp;diff=157672"/>
		<updated>2024-10-18T16:12:57Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Musical */ Ajout d&amp;#039;un vocaroo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Ma copine est morte en 2006&#039;&#039;&#039;&#039;&#039; est un [[pavé]] du [[forum]] [[Blabla 18-25 ans|18-25]] ans de [[jeuxvideo.com]]. Son utilisation répétée en fait une [[boucle]]. Il s&#039;agit d&#039;un pavé systématiquement supprimé par la modération depuis 2023&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?search=ma%20copine%20est%20morte%20en%202006&amp;amp;searchType=titre_topic&amp;lt;/ref&amp;gt;. Le forumeur bouclant avec ce pavé a également utilisé les MP pour le diffuser&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-74567411-1-0-1-0-bordel-le-tare-qui-spamme-en-mp-sur-sa-copine-morte-en-2006&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Le pavé ==&lt;br /&gt;
&lt;br /&gt;
{{BoxPavé|Pavé=C&#039;était ma première copine, celle qui m&#039;a fait découvrir c&#039;était quoi d&#039;être aimé par un être vivant.&lt;br /&gt;
J&#039;avais 13 ans a l&#039;époque, j&#039;étais au collège, elle était dans ma classe. J&#039;étais heureux avec elle, on passait notre temps ensemble.&lt;br /&gt;
&lt;br /&gt;
Un terrible jour de 2006, elle a eu un accident de voiture, fauchée par un chauffard de la pire espèce.&lt;br /&gt;
Depuis ce jour, je ne m&#039;en suis jamais remis, ça m&#039;a traumatisé, j&#039;ai du voir un psy pendant des mois entiers.&lt;br /&gt;
J&#039;ai sombré dans une terrible dépression, décrochage scolaire, puis déscolarisation.&lt;br /&gt;
&lt;br /&gt;
Maintenant je touche l&#039;AAH et je n&#039;ai aucun avenir. Elle était tout pour moi, j&#039;ai tout perdu, j&#039;ai été incapable d&#039;avoir de nouvelles copines par la suite. Encore aujourd&#039;hui, je pleure en y pensant. J&#039;ai gardé tout ce qu&#039;on avait fait en commun dans une boite a trésor.}}&lt;br /&gt;
&lt;br /&gt;
== Détournements Vocaroo ==&lt;br /&gt;
&lt;br /&gt;
=== Musical ===&lt;br /&gt;
&lt;br /&gt;
* https://vocaroo.com/13NUqStUswzf&lt;br /&gt;
* https://vocaroo.com/1oBGC6IDbw4Q&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Modèle:TableauCatégorieBoucle}}&lt;br /&gt;
[[Catégorie:Boucle du 18-25]]&lt;br /&gt;
[[Catégorie:Pavé]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Discussion:Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=157037</id>
		<title>Discussion:Fonctionnement technique de Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Discussion:Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=157037"/>
		<updated>2024-09-24T21:04:14Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Aide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bordel l&#039;auteur comment a tu eu accès a autant d&#039;info sur jvc . Tu travaille chez webedia ???????&lt;br /&gt;
&lt;br /&gt;
== Aide ==&lt;br /&gt;
&lt;br /&gt;
Co-rédacteur de l&#039;[[API|article sur l&#039;API de JVC]], j&#039;aurais besoin de l&#039;aide d&#039;un khey calé sur l&#039;API de JVC et/ou le fonctionnement technique de jeuxvideo.com. J&#039;ai plusieurs questions à poser en vue de la réalisation d&#039;un projet informatique. (Edwado si tu passes par là…)&lt;br /&gt;
&lt;br /&gt;
Merci de me contacter sur JVC (pseudo &#039;&#039;&#039;ContrapunctusI&#039;&#039;&#039;). Toute aide sera appréciée.&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Discussion:Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=157036</id>
		<title>Discussion:Fonctionnement technique de Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Discussion:Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=157036"/>
		<updated>2024-09-24T21:03:29Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Aide */ nouvelle section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bordel l&#039;auteur comment a tu eu accès a autant d&#039;info sur jvc . Tu travaille chez webedia ???????&lt;br /&gt;
&lt;br /&gt;
== Aide ==&lt;br /&gt;
&lt;br /&gt;
Co-rédacteur de cet article, j&#039;aurais besoin de l&#039;aide d&#039;un khey calé sur l&#039;API de JVC et/ou le fonctionnement technique de jeuxvideo.com. J&#039;ai plusieurs questions à poser en vue de la réalisation d&#039;un projet informatique. (Edwado si tu passes par là…)&lt;br /&gt;
&lt;br /&gt;
Merci de me contacter sur JVC (pseudo &#039;&#039;&#039;ContrapunctusI&#039;&#039;&#039;). Toute aide sera appréciée.&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Discussion:Documentation_de_l%27API_Jeuxvideo.com&amp;diff=157035</id>
		<title>Discussion:Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Discussion:Documentation_de_l%27API_Jeuxvideo.com&amp;diff=157035"/>
		<updated>2024-09-24T21:02:01Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Aide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour, déjà je tiens à remercier l&#039;auteur de cet article pour la documentation très avancée à propos de l&#039;API derrière l&#039;application mobile.&lt;br /&gt;
Je voulais faire noter qu&#039;il existe une autre API, en l&#039;occurrence hébergée sur https://api.jvc.gg/ ; elle est utilisée par l&#039;application web JV sur les pages Phoenix (exemple : https://www.jeuxvideo.com/tous-les-jeux/ ). Si des fois ça peut vous intéresser de la décortiquer, je pose ça là.&lt;br /&gt;
&lt;br /&gt;
--[[Spécial:Contributions/2A02:842B:821A:1801:35A3:91A3:C52F:D0FC|2A02:842B:821A:1801:35A3:91A3:C52F:D0FC]] 17 mai 2024 à 14:05 (CEST)&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
Merci beaucoup pour cette information. Je vais voir ce que je peux faire niveau rétro-ingénierie.&lt;br /&gt;
&lt;br /&gt;
--[[Spécial:Contributions/HelloWorld5000|HelloWorld5000]] 17 mai 2024 à 20:14 (CEST)&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
J&#039;ai globalement compris comment fonctionnait cette API. Je documenterai la page JVFlux dans l&#039;après-midi.&lt;br /&gt;
Connaîtrais-tu d&#039;autres pages de JVC qui l&#039;utilisent ? J&#039;ai cru comprendre que la partie Phoenix du site se limitait aux jeux.&lt;br /&gt;
&lt;br /&gt;
--[[Spécial:Contributions/HelloWorld5000|HelloWorld5000]] 18 mai 2024 à 09:33 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Aide ==&lt;br /&gt;
&lt;br /&gt;
Co-rédacteur de cet article, j&#039;aurais besoin de l&#039;aide d&#039;un khey calé sur l&#039;API de JVC et/ou le fonctionnement technique de jeuxvideo.com. J&#039;ai plusieurs questions à poser en vue de la réalisation d&#039;un projet informatique. (Edwado si tu passes par là…)&lt;br /&gt;
&lt;br /&gt;
Merci de me contacter sur JVC (pseudo &#039;&#039;&#039;ContrapunctusI&#039;&#039;&#039;). Toute aide sera appréciée.&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Discussion:Documentation_de_l%27API_Jeuxvideo.com&amp;diff=157034</id>
		<title>Discussion:Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Discussion:Documentation_de_l%27API_Jeuxvideo.com&amp;diff=157034"/>
		<updated>2024-09-24T21:00:32Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Aide */ nouvelle section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour, déjà je tiens à remercier l&#039;auteur de cet article pour la documentation très avancée à propos de l&#039;API derrière l&#039;application mobile.&lt;br /&gt;
Je voulais faire noter qu&#039;il existe une autre API, en l&#039;occurrence hébergée sur https://api.jvc.gg/ ; elle est utilisée par l&#039;application web JV sur les pages Phoenix (exemple : https://www.jeuxvideo.com/tous-les-jeux/ ). Si des fois ça peut vous intéresser de la décortiquer, je pose ça là.&lt;br /&gt;
&lt;br /&gt;
--[[Spécial:Contributions/2A02:842B:821A:1801:35A3:91A3:C52F:D0FC|2A02:842B:821A:1801:35A3:91A3:C52F:D0FC]] 17 mai 2024 à 14:05 (CEST)&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
Merci beaucoup pour cette information. Je vais voir ce que je peux faire niveau rétro-ingénierie.&lt;br /&gt;
&lt;br /&gt;
--[[Spécial:Contributions/HelloWorld5000|HelloWorld5000]] 17 mai 2024 à 20:14 (CEST)&lt;br /&gt;
&lt;br /&gt;
Bonjour,&lt;br /&gt;
&lt;br /&gt;
J&#039;ai globalement compris comment fonctionnait cette API. Je documenterai la page JVFlux dans l&#039;après-midi.&lt;br /&gt;
Connaîtrais-tu d&#039;autres pages de JVC qui l&#039;utilisent ? J&#039;ai cru comprendre que la partie Phoenix du site se limitait aux jeux.&lt;br /&gt;
&lt;br /&gt;
--[[Spécial:Contributions/HelloWorld5000|HelloWorld5000]] 18 mai 2024 à 09:33 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Aide ==&lt;br /&gt;
&lt;br /&gt;
Bonsoir,&lt;br /&gt;
&lt;br /&gt;
J&#039;aurais besoin de l&#039;aide d&#039;un khey calé sur l&#039;API de JVC et/ou le fonctionnement technique de jeuxvideo.com. J&#039;ai plusieurs questions à poser en vue de la réalisation d&#039;un projet informatique.&lt;br /&gt;
&lt;br /&gt;
Merci de me contacter sur JVC (pseudo &#039;&#039;&#039;ContrapunctusI&#039;&#039;&#039;). Toute aide sera appréciée.&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Utilisateur:HelloWorld5000&amp;diff=157030</id>
		<title>Utilisateur:HelloWorld5000</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Utilisateur:HelloWorld5000&amp;diff=157030"/>
		<updated>2024-09-24T20:56:22Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Forumeur &#039;&#039;&#039;ContrapunctusI&#039;&#039;&#039;, arrivé en septembre 2022 sur les forums.&lt;br /&gt;
&lt;br /&gt;
{{ContactUtilisateur&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Remplace les infos après les signes égal. Si tu n&#039;as pas de compte discord ou jvc-like il te suffit de ne rien mettre. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|PseudoJVC= ContrapunctusI&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=156685</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=156685"/>
		<updated>2024-09-14T11:15:00Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : correction script auth_header + 3 nouveaux endpoints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application. Une alternative &amp;quot;temporaire&amp;quot; consisterait à spawner des Android virtualisés, d&#039;y installer de façon automatisée l&#039;APK de JVC, puis de créer des comptes. Mais dans ce type de contexte, ce n&#039;est plus vraiment de la rétro-ingiénierie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|setFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        sorted_query = dict(sorted(query.items()))&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(sorted_query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=156600</id>
		<title>Fonctionnement technique de Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fonctionnement_technique_de_Jeuxvideo.com&amp;diff=156600"/>
		<updated>2024-09-12T07:13:07Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : API Phoenix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
[[Jeuxvideo.com]] utilise 2 serveurs frontaux qui sont depuis le 7 mai 2022 protégés par le service [https://cloudflare.com Cloudflare]. Chaque serveur frontal utilise un serveur HTTP Apache, tout ce qu&#039;il y a de plus classique. En revanche, avant d&#039;arriver sur le serveur Apache, on a plusieurs mailles dans la chaîne. En effet, lorsque vous faites une requête auprès de JVC, la chaîne suivante est effectuée avant d&#039;arriver jusqu&#039;au back-end :&lt;br /&gt;
 Cloudflare → Round-robin entre les 2 serveurs frontaux → HAProxy → Varnish → Apache → PHP / Express (Node.js)&lt;br /&gt;
&lt;br /&gt;
== Processus d&#039;une requête HTTP ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cloudflare&#039;&#039;&#039; est le premier point d&#039;entrée pour accéder à JVC. Il gère les enregistrements DNS du site et ses IPs sont majoritairement aléatoires et anycastées/géocastées. Ce service touche la couche réseau/transport tout comme la couche applicative du modèle OSI : il fait office d&#039;anti-DDoS à forte valeur (bien que JVC utilise le service &amp;quot;Volterra&amp;quot; en tant qu&#039;anti-DDoS sur couches basses du côté des IPs de son AS 35717). Une partie de la couche applicative est protégée par Cloudflare, via des règles éditées manuellement par [[Webedia]] (entre autre, blocages de pools IPv4 de VPN connus, et de certains pays d&#039;après certains retours d&#039;utilisateurs).&lt;br /&gt;
&lt;br /&gt;
Un round-robin est effectué via Cloudflare auprès des serveurs DNS de Webedia. Le but est de déterminer de façon algorithmique quel serveur frontal va être utilisé pour la requête HTTP.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HAProxy&#039;&#039;&#039; est un proxy et load-balancer TCP d&#039;une efficacité remarquable, il est utilisé sur la totalité des environnements de production gérés par Webedia. C&#039;est entre autre ce service à l&#039;origine de l&#039;erreur 403 Forbidden. En effet, HAProxy fait aussi office de protection applicative (on peut donc en déduire que JVC utilise plusieurs services sur couche haute pour protéger l&#039;applicatif). On peut notamment remarquer le blacklistage des IPs du réseau &amp;quot;Tor&amp;quot;, mais également le blacklistage des pools de l&#039;AS 16276 (appartenant à la société OVH et n&#039;étant utilisé que dans des contextes d&#039;hébergement) - blocage mené suite à l&#039;utilisation massive des services de la société OVH dans le but de scrapper/attaquer JVC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039; est un serveur HTTP. Il a été optimisé par l&#039;équipe technique actuelle de Webedia, mais également par l&#039;ancienne équipe du site (on peut notamment citer [[Dargor]] et [[Haazel]] en tant que personnes ayant participées à l&#039;élaboration de tunning du serveur HTTP).&lt;br /&gt;
&lt;br /&gt;
Le dernier point est selon la page qui est demandée. Des parties du site sont développées en PHP, et d&#039;autres en Node.js. Pour l&#039;anecdote, le site est hébergé côté serveur dans le dossier /opt/datas/sites/JEUXVIDEO.COM/&amp;lt;ref&amp;gt;La norme [https://fr.wikipedia.org/wiki/Filesystem_Hierarchy_Standard Filesystem Hierarchy Standard] n’incluait pas &amp;lt;code&amp;gt;/srv&amp;lt;/code&amp;gt;, qui est plus approprié, avant 2004.&amp;lt;/ref&amp;gt;. Il n&#039;y a quasiment aucune protection de ce côté (si ce n&#039;est une protection contre les IPs Tor).&lt;br /&gt;
&lt;br /&gt;
=== Protection applicative Cloudflare ===&lt;br /&gt;
&lt;br /&gt;
L&#039;applicatif est donc, comme on a pu le voir, protégé par Cloudflare en premier point d&#039;entrée. Cloudflare est binaire : si l&#039;IP source est blacklistée, une HTTP 403 est retournée et l&#039;accès à l&#039;URI est refusé.&amp;lt;br&amp;gt;Le blocage est en outre simple à bypasser, pour le moment, on peut constater que l&#039;usage d&#039;IPs géolocalisées en France est un bon bypass.&lt;br /&gt;
&lt;br /&gt;
=== Domaine de fichiers statiques ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;static.jvc.gg&#039;&#039;&#039; est notamment utilisé pour servir les feuilles de styles et scripts et utilise comme serveur &#039;&#039;&#039;nginx&#039;&#039;&#039; au lieu d&#039;Apache. N’étant pas protégé par Cloudflare en janvier 2023 il permet d’avoir un aperçu technique de comment était servi l’ensemble du site avant la mise en place de Cloudflare.&lt;br /&gt;
&lt;br /&gt;
Côté DNS, cinq serveurs de noms sont utilisés : ns1.webedia-group.org, ns2.webedia-group.net, ns3.webedia-group.com, ns4.webedia-group.biz, ns5.webedia-group.app. Les deux premiers sont sur leur AS 35717 ; les trois derniers sont respectivement hébergés chez Scaleway, OVH, Gandi.&lt;br /&gt;
&lt;br /&gt;
== Avant Respawn ==&lt;br /&gt;
&lt;br /&gt;
Avant [[Projet Respawn|Respawn]], JVC était développé sur plusieurs langages différents côté back-end : on peut citer le C et le PHP. La base de données finale utilisait le moteur de base de données PostgreSQL. L&#039;anarchie technique du back-end a menée au développement de [[Respawn]] (qui est également anarchique).&lt;br /&gt;
&lt;br /&gt;
=== Les Cartes de visite ===&lt;br /&gt;
&lt;br /&gt;
Les [[Carte de Visite|Cartes de visite]] étaient développés en PHP et avaient la particularité notable de stocker les données publiques de chaque utilisateur (par exemple, sa description personnelle) dans de simples fichiers HTML stockés sur disque : il n&#039;y avait pas de requête SQL d&#039;invoquée pour obtenir certaines données liées aux CDV. Lors de certains floods d&#039;avis utilisateurs (notamment menés par &#039;&#039;UnifiedLinux&#039;&#039;), les CDV retournaient aléatoirement des pages blanches. La cause est toujours inconnue.&lt;br /&gt;
&lt;br /&gt;
=== Les forums ===&lt;br /&gt;
&lt;br /&gt;
Les forums étaient en C, et [[Dargor]] les nommaient &amp;quot;modulaires&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Les articles ===&lt;br /&gt;
&lt;br /&gt;
Les articles n&#039;étaient pas mis en ligne immédiatement après leur rédaction. Un système de &amp;quot;compilation&amp;quot; était nécessaire et à effectuer manuellement afin que le site &amp;quot;compile&amp;quot; les articles pour qu&#039;ils deviennent accessibles au public. On peut imaginer que ce système de compilation a été développé dans un but de gestion de charge applicative.&lt;br /&gt;
&lt;br /&gt;
=== Modération ===&lt;br /&gt;
&lt;br /&gt;
La modération des forums était liée à une authentification à 2 étapes, menant à l&#039;attribution du cookie [[mocoedivxuejdom]] permettant la modération de certains forums selon les permissions attribuées à chaque modérateur. Cette deuxième étape était une page spéciale réclamant 5 mots de passe, qui avaient la particularité d&#039;être remplis de caractères aléatoires et spéciaux.&lt;br /&gt;
&lt;br /&gt;
=== Authentification ===&lt;br /&gt;
&lt;br /&gt;
Le cookie [[wenvjgol]] était utilisé pour l&#039;authentification.&lt;br /&gt;
&lt;br /&gt;
=== La recherche des forums ===&lt;br /&gt;
&lt;br /&gt;
La recherche des forums était connue pour être atrocement lente et affichant incorrectement la liste des résultats, des topics étaient manquants et s&#039;affichaient une fois sur deux.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité informatique ===&lt;br /&gt;
&lt;br /&gt;
Lorsqu&#039;une IP tentait d&#039;envoyer trop de requêtes HTTP (HTTPS n&#039;était pas déployé à ce moment-là), le site redirigeait chaque requête HTTP vers une erreur 404. La page d&#039;erreur 404 étant très peu consommatrice techniquement, cela permettait de désaturer la charge serveur en cas de DoS/DDoS.&lt;br /&gt;
&lt;br /&gt;
Sur les CDV et les forums, il y a eu un grand nombre de failles XSS, notamment exploitées en masse par [[PyjamaSam]].&lt;br /&gt;
&lt;br /&gt;
Le [[Captcha]] était également tout le temps cassé, permettant des floods de topics/messages/contributions. Cela a permis par exemple de créer un pseudo rang rubis en moins d&#039;un jour, dont le pseudo était &#039;&#039;RubyOne&#039;&#039; (par &#039;&#039;UnifiedLinux&#039;&#039;, qui a également créé un pseudo rang diamant en moins d&#039;un jour via un flood de contributions).&lt;br /&gt;
&lt;br /&gt;
== Respawn ==&lt;br /&gt;
&lt;br /&gt;
[[Respawn]] a été développé entièrement en PHP côté back-end. Il utilise notamment des frameworks tels que Symfony côté forums, et des moteurs de templates tel que Twig. Respawn semble être divisé techniquement en plusieurs parties : en effet, on peut constater que certaines parties du site respectent le modèle vue-contrôleur (on peut citer les forums), bien que d&#039;autres parties du site n&#039;utilisent pas ce modèle et utilisent de l&#039;url rewriting hardcodé dans des fichiers .htaccess. Respawn semble posséder une base de code identique entre JVC et [[ForumJV]] (désormais fermé), on pouvait constater de nettes interactions entre les 2 sites lorsque ForumJV était ouvert, interactions ayant menées à certains abus (ForumJV accordait des droits de modération sur son forum personnel, des failles de sécurité était donc existantes derrière ce privilège).&lt;br /&gt;
&lt;br /&gt;
=== Schéma de base de données ===&lt;br /&gt;
&lt;br /&gt;
Le schéma de base de données de Respawn semble anarchique et composé de mélange entre le Français et l&#039;Anglais. Exemples de tables appartenant à Respawn : &amp;quot;get_compte_infos&amp;quot;, &amp;quot;session_renew_v2&amp;quot;, &amp;quot;jeu_get_v7&amp;quot;. Notez le &amp;quot;v&amp;quot; à la fin de chaque table, laissant penser qu&#039;il existe plusieurs versions de celles-ci.&lt;br /&gt;
&lt;br /&gt;
==== Exemple d&#039;appel en base de données ====&lt;br /&gt;
 &#039;&#039;SELECT out_id_type, out_nom_type, out_dirname_type, out_affichage, out_date_publication, out_date_modification, out_id_alias_auteur, out_id_groupe_auteur, out_ip, out_titre, out_texte, out_commentaire, out_visibilite, out_liaisons, out_tags, out_medias, out_version, out_fiche, out_jeu, out_data, out_url, out_id_jeux FROM jeu_get_v7 WHERE id_contenu = xxx&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Organisation technique ===&lt;br /&gt;
&lt;br /&gt;
Comme dit précédemment, Respawn semble être un mélange de MVC et de code classique sans modèle particulier de respecté. Les fichiers du back-end sont également mitigés du côté de leur appellation, laissant encore droit au mélange entre Français et Anglais. Exemples de fichiers côté back-end :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/htdocs/forums/liste_topic.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/core/OiPDOStatement.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Transaction.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/GoogleTagManager.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Compte.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/controllers/forum/liste_topic.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/modeles/sso/Session.php&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;/opt/datas/JEUXVIDEO.COM/app/vendor/...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Nommage des fonctions ===&lt;br /&gt;
&lt;br /&gt;
Respawn possède aussi des fonctions dont le nommage est entre le Français et l&#039;Anglais. Exemples de fonctions côté back-end :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;getInfoFromIdForum&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;loadMenu&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;checkMenuItem&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;getSingleton&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;getHtmlJeuForum&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;blocHtmlBoutiqueRandom&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optimisations ===&lt;br /&gt;
&lt;br /&gt;
Le back-end PHP utilise Memcache (https://www.php.net/manual/fr/book.memcache.php) afin de faire baisser la charge technique de l&#039;applicatif.&lt;br /&gt;
&lt;br /&gt;
=== Stockage des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
Depuis Respawn, les utilisateurs de JVC sont référencés sous un identifiant numérique côté base de données, contrairement au fonctionnement de l&#039;ancien JVC où les utilisateurs étaient référencés par leur pseudo (pouvant mener à des posts sur les forums avec des pseudos identiques organisés différemment côté minuscules/majuscules).&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;obtenir son ID via la page permettant d&#039;éditer votre profil, l&#039;ID est à la fin de l&#039;URL.&lt;br /&gt;
&lt;br /&gt;
=== Les forums ===&lt;br /&gt;
&lt;br /&gt;
Les posts des forums sont déclarés sur plusieurs serveurs différents. Les IDs de ceux-ci semblent aléatoires (bien qu&#039;un offset était attribué pour les posts présents sur ForumJV). Les IDs sont choisis selon l&#039;emplacement dans lequel la ressource sera stockée lors de la création du topic. Le choix de l&#039;emplacement se fait à la création du topic, les messages dans le topic sont alors stockés dans le même emplacement. Il semblerait qu&#039;il y ait 8 emplacements. ID + 8 pour accéder à la ressource suivante, et ID - 8 pour accéder à la ressource précédente.&lt;br /&gt;
&lt;br /&gt;
Exemple de messages séquentiels:&lt;br /&gt;
&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193382&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193390&lt;br /&gt;
* https://www.jeuxvideo.com/forums/message/905193398&lt;br /&gt;
&lt;br /&gt;
L&#039;ID est incrémenté de 8 à chaque fois. Tous ces messages sont répertoriés dans le 7ème serveur (&amp;lt;code&amp;gt;ID % 8&amp;lt;/code&amp;gt;, donc &amp;lt;code&amp;gt;905193382 % 8 = 6&amp;lt;/code&amp;gt;, 7ème).&lt;br /&gt;
&lt;br /&gt;
À noter toutefois que les messages datant d&#039;avant respawn sont complètement désordonnés, certainement dû à la migration durant respawn où la migration de ces messages a été effectué en parallèle.&lt;br /&gt;
&lt;br /&gt;
=== Modération ===&lt;br /&gt;
&lt;br /&gt;
La modération sur Respawn se nomme &amp;quot;Accès étendu&amp;quot;. L&#039;accès étendu peut être appelé via la page qui lui est dédiée : https://www.jeuxvideo.com/sso/auth.php ; il nécessite en revanche également un mot de passe, qui est envoyé via un lien sécurisé utilisable une seule fois par MP à chaque modérateur. A noter que le [[103]] est accessible à n&#039;importe quel modérateur même sans authentification à l&#039;accès étendu.&lt;br /&gt;
&lt;br /&gt;
=== Authentification ===&lt;br /&gt;
&lt;br /&gt;
Le cookie [[coniunctio]] est utilisé pour l&#039;authentification.&lt;br /&gt;
&lt;br /&gt;
=== Recherche des forums ===&lt;br /&gt;
&lt;br /&gt;
La recherche des forums utilise le moteur de recherche Sphinx qui est intégré au site. La recherche des forums est limitée à 1 mois sur les blablas, elle peut être contournée via https://jvarchive.com/.&lt;br /&gt;
&lt;br /&gt;
=== Sécurité informatique ===&lt;br /&gt;
&lt;br /&gt;
Dans les débuts de Respawn, le site était rempli de failles permettant de faire exploser la charge du site. Il existait également de nombreuses failles sur [[ForumJV]] qui permettaient de modérer sans être modérateur, sur n&#039;importe quel forum. Les failles ici citées ont en majorité été exploitées par [[edwado]].&lt;br /&gt;
&lt;br /&gt;
Il a également existé une faille RCE (Remote Code Execution) exploitée par [[Tsain]], qui permettait d&#039;injecter du CSS sur n&#039;importe quelle partie du site (la faille fut très mal exploitée étant-donné que celle-ci n&#039;était pas qu&#039;une simple injection CSS mais bien une RCE où il était possible d&#039;injecter un shell PHP).&lt;br /&gt;
&lt;br /&gt;
=== JvCare ===&lt;br /&gt;
&lt;br /&gt;
JvCare est un algorithme d&#039;obfuscation des liens externes postés sur le site. Il a été développé depuis Respawn. Il permet d&#039;éviter la création de backlinks qui pourraient optimiser indirectement le SEO de sites externes à Jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Les codes ci-après permettent de décoder une chaîne obfusquée.&lt;br /&gt;
&lt;br /&gt;
==== PHP ====&lt;br /&gt;
&lt;br /&gt;
 function jvCare(string $classe) : string {&lt;br /&gt;
   $base16 = &amp;quot;0A12B34C56D78E9F&amp;quot;;&#039;&#039;&lt;br /&gt;
   $lien = &amp;quot;&amp;quot;;&lt;br /&gt;
   $s = explode(&amp;quot; &amp;quot;, $classe)[1];&lt;br /&gt;
   for ($i = 0; $i &amp;lt;= strlen($s)-1; $i += 2) {&lt;br /&gt;
     $lien .= chr(strrpos($base16, $s[$i]) * 16 + strrpos($base16, $s[$i+1]));&lt;br /&gt;
   }&lt;br /&gt;
   return $lien;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== JavaScript ====&lt;br /&gt;
&lt;br /&gt;
 function jvCake(classe) {&lt;br /&gt;
   const base16 = &#039;0A12B34C56D78E9F&#039;;&lt;br /&gt;
   let lien = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
   const s = classe.split(&#039; &#039;)[1];&lt;br /&gt;
   for (let i = 0; i &amp;lt; s.length; i += 2) {&lt;br /&gt;
     lien += String.fromCharCode(base16.indexOf(s.charAt(i)) * 16 + base16.indexOf(s.charAt(i + 1)));&lt;br /&gt;
   }&lt;br /&gt;
   return lien;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Python ====&lt;br /&gt;
&lt;br /&gt;
 def jvcare(classe: str) -&amp;gt; str:&lt;br /&gt;
   base16 = &#039;0A12B34C56D78E9F&#039;&lt;br /&gt;
   url = &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   s = classe.split()[1]&lt;br /&gt;
   for i, j in zip(s[0::2], s[1::2]):&lt;br /&gt;
     url += chr(base16.index(i) * 16 + base16.index(j))&lt;br /&gt;
   return url&lt;br /&gt;
&lt;br /&gt;
==== C ====&lt;br /&gt;
&lt;br /&gt;
 const char *__jvcarebase16 = &amp;quot;0A12B34C56D78E9F&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 char *jvcare(const char *class) {&lt;br /&gt;
   char *s = strchr(class, &#039; &#039;) + 1;&lt;br /&gt;
 &lt;br /&gt;
   int urllen = strlen(s) / 2;&lt;br /&gt;
   char *url = malloc(urllen + 1);&lt;br /&gt;
   for (int i = 0; i &amp;lt; urllen; i++) {&lt;br /&gt;
     char pos1 = strchr(__jvcarebase16, s[i * 2]) - __jvcarebase16;&lt;br /&gt;
     char pos2 = strchr(__jvcarebase16, s[i * 2 + 1]) - __jvcarebase16;&lt;br /&gt;
     url[i] = pos1 * 16 + pos2;&lt;br /&gt;
   }&lt;br /&gt;
   url[urllen] = &#039;\0&#039;;&lt;br /&gt;
   return url;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Phoenix ==&lt;br /&gt;
&lt;br /&gt;
Phoenix est une partie de JVC développée en Node.js et utilisant React. Elle semble de plus en plus abandonnée, et nous n&#039;avons pas beaucoup d&#039;informations à son sujet. Phoenix utilise une API spéciale hébergée au sous-domaine [[Documentation_de_l%27API_Jeuxvideo.com#API_jvc.gg|&#039;&#039;api.jvc.gg&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
== Liens externes ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml Interview sur l’architecture de jeuxvideo.com de 1997 à 2005] ([http://web.archive.org/web/20070629165914/http://www.journaldunet.com/solutions/itws/050426_it_jeuxvideo.shtml archive.org])&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Voir aussi ==&lt;br /&gt;
&lt;br /&gt;
* [[Documentation de l&#039;API Jeuxvideo.com]]&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=155915</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=155915"/>
		<updated>2024-07-26T14:47:05Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Ajout du modèle &amp;#039;&amp;#039;Article de la qualité&amp;#039;&amp;#039; suite à la promotion de l&amp;#039;article dans la catégorie citée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155914</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155914"/>
		<updated>2024-07-26T14:40:38Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Ce malaise, t&amp;#039;as 13 ans ou quoi ?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &#039;&#039;&#039;akaelsa&#039;&#039;&#039;, de son vrai nom Elsa Pereira de Lima, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; {{CDV2S|Pseudo=S2ada}} poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
*[[Fichier:elsaplainte.png|gauche|vignette|259x259px|Image ironisant sur elsa portant plainte ]]&#039;&#039;&#039;Le 24 juillet 2024&#039;&#039;&#039;, alors que certains pensaient l&#039;affaire [[Tassé|tassée]], Elsa poste une vidéo&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt; où elle explique qu&#039;elle a essayé de porter plainte mais que celle-ci n&#039;a même pas été reçue par la police, faute de preuves caractérisant des menaces de mort, mais seulement pour de la diffamation&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt;. Elle essaye alors de porter plainte dans plusieurs commissariats comme elle annonce en story insta&amp;lt;ref&amp;gt;https://cloud.onche.org/37289873-5235-4322-bd5d-b79768fd1b1f!fR5NgWVviC&amp;lt;/ref&amp;gt;, ayant constitué un dossier de &amp;quot;49 pages &amp;quot; selon elle, même si on ne sait pas à ce jour si un plainte a réussi a être réellement déposée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|398x398px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, fait repris dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques qu&#039;ils jugent médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
Fichier:6f2265fb-7dc6-45e1-9833-9e3b118ee7df!JG2Z3DRAmu.png&lt;br /&gt;
Fichier:elsakheyED.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155890</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155890"/>
		<updated>2024-07-26T00:38:32Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Va te faire foutre avec tes trolls fdp, la page finira par être lock donc tu te fatigues pour rien&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &#039;&#039;&#039;akaelsa&#039;&#039;&#039;, de son vrai nom Elsa Pereira de Lima, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; {{CDV2S|Pseudo=S2ada}} poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
*[[Fichier:elsaplainte.png|gauche|vignette|259x259px|Image ironisant sur elsa portant plainte ]]&#039;&#039;&#039;Le 24 juillet 2024&#039;&#039;&#039;, alors que certains pensaient l&#039;affaire [[Tassé|tassée]], Elsa poste une vidéo&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt; où elle explique qu&#039;elle a essayé de porter plainte mais que celle-ci n&#039;a même pas été reçue par la police, faute de preuves caractérisant des menaces de mort, mais seulement pour de la diffamation&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt;. Elle essaye alors de porter plainte dans plusieurs commissariats comme elle annonce en story insta&amp;lt;ref&amp;gt;https://cloud.onche.org/37289873-5235-4322-bd5d-b79768fd1b1f!fR5NgWVviC&amp;lt;/ref&amp;gt;, ayant constitué un dossier de &amp;quot;49 pages &amp;quot; selon elle, même si on ne sait pas à ce jour si un plainte a réussi a être réellement déposée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|398x398px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, fait repris dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques qu&#039;ils jugent médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
Fichier:6f2265fb-7dc6-45e1-9833-9e3b118ee7df!JG2Z3DRAmu.png&lt;br /&gt;
Fichier:elsakheyED.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155888</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155888"/>
		<updated>2024-07-25T23:54:04Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &#039;&#039;&#039;akaelsa&#039;&#039;&#039;, de son vrai nom Elsa Pereira de Lima, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; {{CDV2S|Pseudo=S2ada}} poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
*[[Fichier:elsaplainte.png|gauche|vignette|259x259px|Image ironisant sur elsa portant plainte ]]&#039;&#039;&#039;Le 24 juillet 2024&#039;&#039;&#039;, alors que certains pensaient l&#039;affaire [[Tassé|tassée]], Elsa poste une vidéo&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt; où elle explique qu&#039;elle a essayé de porter plainte mais que celle-ci n&#039;a même pas été reçue par la police, faute de preuves caractérisant des menaces de mort, mais seulement pour de la diffamation&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt;. Elle essaye alors de porter plainte dans plusieurs commissariats comme elle annonce en story insta&amp;lt;ref&amp;gt;https://cloud.onche.org/37289873-5235-4322-bd5d-b79768fd1b1f!fR5NgWVviC&amp;lt;/ref&amp;gt;, ayant constitué un dossier de &amp;quot;49 pages &amp;quot; selon elle, même si on ne sait pas à ce jour si un plainte a réussi a être réellement déposée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|398x398px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, fait repris dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques qu&#039;ils jugent médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
Fichier:6f2265fb-7dc6-45e1-9833-9e3b118ee7df!JG2Z3DRAmu.png&lt;br /&gt;
Fichier:elsakheyED.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155887</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155887"/>
		<updated>2024-07-25T23:53:32Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Retrait de l&amp;#039;en-tête sabotée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira de Lima, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; {{CDV2S|Pseudo=S2ada}} poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
*[[Fichier:elsaplainte.png|gauche|vignette|259x259px|Image ironisant sur elsa portant plainte ]]&#039;&#039;&#039;Le 24 juillet 2024&#039;&#039;&#039;, alors que certains pensaient l&#039;affaire [[Tassé|tassée]], Elsa poste une vidéo&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt; où elle explique qu&#039;elle a essayé de porter plainte mais que celle-ci n&#039;a même pas été reçue par la police, faute de preuves caractérisant des menaces de mort, mais seulement pour de la diffamation&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt;. Elle essaye alors de porter plainte dans plusieurs commissariats comme elle annonce en story insta&amp;lt;ref&amp;gt;https://cloud.onche.org/37289873-5235-4322-bd5d-b79768fd1b1f!fR5NgWVviC&amp;lt;/ref&amp;gt;, ayant constitué un dossier de &amp;quot;49 pages &amp;quot; selon elle, même si on ne sait pas à ce jour si un plainte a réussi a être réellement déposée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|398x398px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, fait repris dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques qu&#039;ils jugent médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
Fichier:6f2265fb-7dc6-45e1-9833-9e3b118ee7df!JG2Z3DRAmu.png&lt;br /&gt;
Fichier:elsakheyED.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155886</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155886"/>
		<updated>2024-07-25T23:52:22Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Suppression du gras superflu + tournures légèrement plus objectives&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Juste pour vous dire que je suis retourné à la police ce matin et cette dernière à validé ma plainte envers onche.org pour harcèlement, menace et incitation à la haine. &lt;br /&gt;
 &lt;br /&gt;
Tous les topics, les vidéos et les montages ainsi que c&#039;est immonde article ont été sauvegardés par la police.  &lt;br /&gt;
 &lt;br /&gt;
Je vous conseille de vous calmer très vite car ça va aggraver votre cas. &lt;br /&gt;
 &lt;br /&gt;
Bonne continuation. Elsa&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; {{CDV2S|Pseudo=S2ada}} poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
*[[Fichier:elsaplainte.png|gauche|vignette|259x259px|Image ironisant sur elsa portant plainte ]]&#039;&#039;&#039;Le 24 juillet 2024&#039;&#039;&#039;, alors que certains pensaient l&#039;affaire [[Tassé|tassée]], Elsa poste une vidéo&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt; où elle explique qu&#039;elle a essayé de porter plainte mais que celle-ci n&#039;a même pas été reçue par la police, faute de preuves caractérisant des menaces de mort, mais seulement pour de la diffamation&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7395253617738976544?_r=1&amp;amp;_t=8oIQqJj0CdF&amp;lt;/ref&amp;gt;. Elle essaye alors de porter plainte dans plusieurs commissariats comme elle annonce en story insta&amp;lt;ref&amp;gt;https://cloud.onche.org/37289873-5235-4322-bd5d-b79768fd1b1f!fR5NgWVviC&amp;lt;/ref&amp;gt;, ayant constitué un dossier de &amp;quot;49 pages &amp;quot; selon elle, même si on ne sait pas à ce jour si un plainte a réussi a être réellement déposée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|398x398px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, fait repris dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques qu&#039;ils jugent médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
Fichier:6f2265fb-7dc6-45e1-9833-9e3b118ee7df!JG2Z3DRAmu.png&lt;br /&gt;
Fichier:elsakheyED.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155800</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155800"/>
		<updated>2024-07-22T07:56:11Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira de Lima, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple &#039;&#039;&#039;« à les brûler vif ».&#039;&#039;&#039;[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui avaient oser la critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155799</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155799"/>
		<updated>2024-07-22T07:55:21Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Ça sabote fort ici&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira Dupont de Ligonnès, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle est présidente d&#039;une association de lutte contre le harcèlement sexuel et contre les pygargues a queues blanches Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple &#039;&#039;&#039;« à les brûler vif ».&#039;&#039;&#039;[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui avaient oser la critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155793</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155793"/>
		<updated>2024-07-21T20:26:54Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Annulation des modifications 155792 de [IP masquée] : Stop avec les pygargues&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira Dupont de Ligonnès, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle est présidente d&#039;une association de lutte contre le harcèlement sexuel et contre les pygargues a queues blanches Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple &#039;&#039;&#039;« à les brûler vif ».&#039;&#039;&#039;[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui avaient oser la critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155791</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155791"/>
		<updated>2024-07-21T15:18:59Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : C&amp;#039;est quoi ce délire de pygargue wtf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira Dupont de Ligonnès, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle est présidente d&#039;une association de lutte contre le harcèlement sexuel et contre les pygargues a queues blanches Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple &#039;&#039;&#039;« à les brûler vif ».&#039;&#039;&#039;[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressé et pour faire l&#039;angoissée.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (authentique (leak de onlyfans) ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui avaient oser la critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;205px&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155782</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155782"/>
		<updated>2024-07-20T19:09:59Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Mise en page des dernières vidéos et retrait du gras superflu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira de Lima, est une tiktokeuse militante féministe, souvent qualifiée d&#039;[[AW]] et d&#039;[[e-pop]]. Elle est présidente d&#039;une association de lutte contre le harcèlement sexuel. Elle s&#039;est en 2024 attirée les foudres des forums [[Onche.org]] et [[2Sucres]] après avoir créé une vidéo de réponse à un topic la concernant.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple &#039;&#039;&#039;« à les brûler vif ».&#039;&#039;&#039;[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressée pour faire l&#039;angoisser.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « j&#039;&#039;uste jalouse pendant que ton ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (faux ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui avaient oser la critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
{{clear}}&lt;br /&gt;
&amp;lt;div style=&amp;quot;display:flex;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-top:4.2px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;30%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-top:0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery mode=nolines widths=205px&amp;gt;&lt;br /&gt;
Fichier:videoelsaferrari.mp4|Le TikTok d&#039;Elsa en réaction aux commentaires sur le forum.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Discussion:Onlymaat_(aka_elsa)&amp;diff=155759</id>
		<title>Discussion:Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Discussion:Onlymaat_(aka_elsa)&amp;diff=155759"/>
		<updated>2024-07-19T20:40:24Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sur l&#039;utilisation du gras ==&lt;br /&gt;
Salut, j&#039;ai enlevé les usages de la police en gras hors du chapeau et des dates pour garder un style cohérent avec le reste du wiki et éviter d&#039;alourdir inutilement la lecture.&lt;br /&gt;
&lt;br /&gt;
Je propose l&#039;utilisation d&#039;italiques à la place pour indiquer des passages ou des termes sur lesquels le rédacteur veut attirer l&#039;attention du lecteur.&lt;br /&gt;
&lt;br /&gt;
C&#039;est pas pour faire chier mais vraiment dans une optique de confort de lecture :noel:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Chanclarchiviste|Chanclarchiviste]] ([[Discussion utilisateur:Chanclarchiviste|discussion]]) 19 juillet 2024 à 21:13 (CEST)&lt;br /&gt;
-------------------------&lt;br /&gt;
Nan justement j&#039;aime bien la faire  avec des mots en gras de ce qu&#039;on lui reproche, car beaucoup de khey vont lire l&#039;article en travers et se demande pk on &amp;quot;s&#039;attaque &amp;quot; a cette meuf  :hap:&lt;br /&gt;
&lt;br /&gt;
-------------------------&lt;br /&gt;
Je rejoins Chanclarchiviste à propos de la typographie de l&#039;article. Les articles de JVFlux ne devraient pas être utilisés à des fins tendancieuses et ne devraient donc pas être tournés de telle manière qu&#039;ils incitent à prendre parti pour ou contre qui que ce soit. Ce n&#039;est pas le rôle du wiki et c&#039;est pour cela que j&#039;avais déjà enlevé le gras superflu.&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:HelloWorld5000|HelloWorld5000]] 19 juillet 2024 à 22:40 (CEST)&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155750</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155750"/>
		<updated>2024-07-19T18:37:21Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Délires et parodies */  Mise en page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;onlymaat&#039;&#039;&#039;, ou encore &amp;quot;akaelsa&amp;quot; de son vrai nom Elsa Pereira de Lima, est une tiktokeuse féministe [[AW]] et [[e-pop]] et la présidente d&#039;une association, s&#039;étant attirée les foudres des forums [[onche.org]] et [[2Sucres]] après le partage d&#039;une de ses vidéos.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039;&amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient les commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple &#039;&#039;&#039;« à les brûler vif ».&#039;&#039;&#039;[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour &amp;quot;exposés&amp;quot; par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressée pour faire l&#039;angoisser.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « j&#039;&#039;uste jalouse pendant que [s]on ex vit sa meilleure vie &#039;&#039;»&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; allait se faire arrêter par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés, cette dernière les publiant publiquement sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;{{CDVonche|Pseudo=PUITsansFOND}} , qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrets.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de 7 heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (faux ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de son harcèlement commis envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des incohérences troublantes dans sa narration des faits,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des confusion concernant les lieu et moment exact de la supposée agression.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, dont elle ne souhaite jamais rendre publiques pour des « raisons personnelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause de harcèlement moral et répété de sa part contre certains utilisateurs qui avaient oser la critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de camoufler ses performances académiques médiocres par des accusations proférées contre ses ex comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
== Délires et parodies ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png&lt;br /&gt;
Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png&lt;br /&gt;
Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de Madzona, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;50%&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
[[Fichier:videoelsaferrari.mp4|200px|Choco jsp comment on resize une vidéo bordel ]]&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155738</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155738"/>
		<updated>2024-07-19T15:45:05Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;itsonlymaat&#039;&#039;&#039;, de son vrai nom Elsa Pereira de Ligonnès, est une tiktokeuse féministe et la présidente d&#039;une association « contre les violences sexistes et sexuelles », s&#039;étant attirée les foudres des forums [[onche.org]] et [[2Sucres]] où est elle considérée comme une [[AW]] après le partage d&#039;une de ses vidéos.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039; &amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient certains commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour exposés par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressée pour faire l&#039;angoisser.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que [s]on ex vit sa meilleur vie »&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; s&#039;était fait arrêté par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés. Elsa publie les réactions des forumeurs sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;, qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrêts.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de sept heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (faux ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de harcèlement envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des « incohérences troublantes » dans sa narration,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des négligences concernant les lieu et moment exact des faits.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, bien qu&#039;elle ne souhaite jamais les rendre publiques pour des « raisons personelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause « de harcèlement moral et répété » de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, attitude considérée comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de justifier ses performances académiques médiocres par des accusations proférées contre ses exs comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
== Galerie médiatique ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png|vignette]]&lt;br /&gt;
[[Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png|vignette]]&lt;br /&gt;
[[Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png|vignette|128px]]&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de  &#039;&#039;PuitSansFond&#039;&#039;{{CDVonche|Pseudo=PuitSansFond}}, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png|vignette|127px]]&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;100%&amp;quot; height=&amp;quot;300px&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
[[Fichier:videoelsaferrari.mp4|200px|Choco jsp comment on resize une vidéo bordel ]]&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155737</id>
		<title>Onlymaat (aka elsa)</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Onlymaat_(aka_elsa)&amp;diff=155737"/>
		<updated>2024-07-19T15:44:46Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Correction de fautes d&amp;#039;orthographe et de syntaxe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:2914e12f-1969-499a-a8b4-ab181360ed5f!2ekeffbkzi.png|vignette|352x352px|Image représentant la tiktokeuse Elsa et un sticker de onche]]&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;itsonlymaat&#039;&#039;&#039;, de son vrai nom Elsa Pereira de Ligonnès, est une tiktokeuse féministe et la présidente d&#039;une association « contre les violences sexistes et sexuelles », s&#039;étant attirée les foudres des forums [[onche.org]] et [[2Sucres]] où est elle considérée comme une [[AW]] après le partage d&#039;une de ses vidéos.&lt;br /&gt;
&lt;br /&gt;
==Déroulé sur le forum ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Le 13 juillet 2024&#039;&#039;&#039;, le forumeur &#039;&#039;choah&#039;&#039;{{CDVonche|Pseudo=choah}} crée un [[topic]] où il partage une vidéo de la tiktokeuse &#039;&#039;itsonlymaat2&#039;&#039; &amp;lt;ref&amp;gt;https://onche.org/topic/590746/ayaaa-cette-teen-sans-etudes-c-est-la-faute-de-son-violeur&amp;lt;/ref&amp;gt; qui accuse son ex-petit ami, Maxime, d&#039;agression sexuelle après une relation sexuelle consentie sous alcool. Ce dernier « vivrait sa meilleur vie à la fac » et « roulerait en Ferrari » selon les mots d&#039;Elsa.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Le 17 juillet 2024&#039;&#039;&#039;, ce topic anodin devient rapidement un [[délire]] lorsque l&#039;intéressée est mise au courant du topic la concernant par un &#039;&#039;délateur&#039;&#039;. Elle réagira aux commentaires du forum la concernant dans un TikTok&amp;lt;ref&amp;gt;https://vm.tiktok.com/ZGetTQX2V/&amp;lt;/ref&amp;gt; reposté par un [[khey]] dans un topic qui atteindra 28 pages&amp;lt;ref&amp;gt;https://onche.org/topic/594634/avis-sur-cette-tiktokeuse-qui-rage-sur-le-fofo&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup de kheys furent alors agacés par les propos que comportaient certains commentaires sous la vidéo, commentaires qu&#039;Elsa avait parfois liké en guise d&#039;approbation, alors qu&#039;ils appelaient clairement à la violence contre les membres du forum, par exemple « à les brûler vif ».[[Fichier:messageinsulteelsa.png|vignette|250px|Messages de menaces et d&#039;insultes envers le forum suite au 1er Tiktok.]]&lt;br /&gt;
*Cette exposition médiatique du forum crée un engouement qui motivera certains forumeurs à se faire remarquer pour être à leur tour exposés par la tiktokeuse.  Plusieurs topics sont alors créés dans la foulée et les premiers stickers commencent à paraître&amp;lt;ref&amp;gt;https://onche.org/topic/595862/j-ai-depose-plainte-contre-la-tik-tokeuse&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594898/tiktok-message-de-soutien-a-la-victime-de-viol&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/594654/bon-bah-onche-va-fermer-c-etait-un-plaisir-les-kheys&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://onche.org/topic/595745/akaelsa-message-aux-followeuses-de-akaelsa&amp;lt;/ref&amp;gt;. Un khey trollera les autres en prétendant avoir trouvé des nudes de l&#039;intéressée pour faire l&#039;angoisser.&lt;br /&gt;
*En réponse, Elsa publiera deux nouvelles vidéos TikTok, ultérieurement supprimées. La [https://streamable.com/oh2w6w première vidéo] ciblaient des messages de divers forumeurs&amp;lt;ref&amp;gt;https://streamable.com/oh2w6w&amp;lt;/ref&amp;gt;. La [https://streamable.com/rc4xxy seconde vidéo] reprend un montage moqueur d&#039;un utilisateur fait à son encontre, indiquant qu&#039;elle est « juste jalouse pendant que [s]on ex vit sa meilleur vie »&amp;lt;ref&amp;gt;https://streamable.com/rc4xxy&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*D&#039;autres kheys trouvant que l&#039;affaire va trop loin et craignant la visite de [[Gilbert]] ou la fermeture du forum se sont mis à la défendre. À la suite de diverses rumeurs selon lesquelles &#039;&#039;choah&#039;&#039; s&#039;était fait arrêté par la police, le forumeur &#039;&#039;Motorazr&#039;&#039;{{CDVonche|Pseudo=Motorazr}} crée un avatar « Je suis choah » par solidarité.&lt;br /&gt;
*Son LinkedIn ainsi qu&#039;un reportage dans lequel elle apparaît pour son association sont rapidement trouvés. Elsa publie les réactions des forumeurs sur son compte Instagram, fait qui sera à l&#039;origine d&#039;autres moqueries.[[Fichier:Avatar Je suis choah.jpg|vignette|211px|Avatar « Je suis choah », en soutien à l&#039;utilisateur épony..]]&lt;br /&gt;
*Le lendemain, Elsa publie une nouvelle vidéo en réponse au forum ainsi qu&#039;une story Instagram. Une parodie musicale a également été créée&amp;lt;ref&amp;gt;https://streamable.com/vf7v6e&amp;lt;/ref&amp;gt; en son honneur, suivie d&#039;une autre par &#039;&#039;MadZona&#039;&#039;, qui sera rapidement épinglée&amp;lt;ref&amp;gt;https://onche.org/topic/596170/meuf-tiktok-brisee-elle-chante-sa-douleur-en-vocaroo&amp;lt;/ref&amp;gt; tandis que le modérateur &#039;&#039;Blondin&#039;&#039; crée un topic pour se moquer d&#039;Elsa&amp;lt;ref&amp;gt;https://onche.org/topic/595818/ici-on-parle-de-la-tiktokeuse-folle&amp;lt;/ref&amp;gt;. Face à cette exposition, Elsa continue de publier des vidéos sur TikTok, résumant la situation de son point de vue&amp;lt;ref&amp;gt;https://streamable.com/fbpsw5&amp;lt;/ref&amp;gt;. Ces vidéos ont été perçues par beaucoup comme des tentatives de victimisation sans apport d&#039;arguments concrêts.&lt;br /&gt;
*Elle vérifiera de nombreux topics sous le pseudonyme &#039;&#039;onlymaat&#039;&#039;{{CDVonche|Pseudo=onlymaat}}, passant plus de sept heures d&#039;affilée sur le forum, ce qui a conduit quelques forumeurs à la considérer comme une [[Kheyette|kheyettes]] ou une [[AW]], appréciant secrètement l&#039;attention donnée par le forum envers sa personne.&lt;br /&gt;
*Pendant ce temps-là sur le forum [[2Sucres]], l&#039;utilisateur &#039;&#039;S2ada&#039;&#039; poste également plusieurs topics comportant des nudes (faux ?). Jugées hors-charte et donc supprimées par la modération, les photos sont néanmoins disponibles sur demande MP à &#039;&#039;S2ada&#039;&#039; sur 2Sucres&amp;lt;ref&amp;gt;https://2sucres.org/p/Q9OKa&amp;lt;/ref&amp;gt;, ce qui étend le drama au-delà d&#039;Onche.&lt;br /&gt;
&lt;br /&gt;
==Controverses des accusations ==&lt;br /&gt;
[[Fichier:Messagelsa.png|vignette|250px|Message d&#039;Elsa où elle se plaint de s&#039;être fait supprimer son compte TikTok à cause de harcèlement envers d&#039;autres utilisateurs.]]&lt;br /&gt;
*Elsa, qui se définit elle-même comme « misandre&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/video/7391910279430409505&amp;lt;/ref&amp;gt; » et avoue avoir une profonde aversion envers les hommes, a suscité des questionnements concernant les allégations adressées contre Maxime. Beaucoup de forumeurs ont en effet émis de grands doutes quant à sa version des faits, et cela en sachant que plusieurs utilisateurs ont trouvé des « incohérences troublantes » dans sa narration,&amp;lt;ref&amp;gt;https://onche.org/topic/596374/preuve-que-la-teen-ment&amp;lt;/ref&amp;gt;tel que des négligences concernant les lieu et moment exact des faits.&lt;br /&gt;
*La justice avait aussi classé toutes ses plaintes sans suite, ce qui interroge sur la véracité des preuves qu&#039;elle prétend détenir, bien qu&#039;elle ne souhaite jamais les rendre publiques pour des « raisons personelles ».[[Fichier:81bd9689-3dc0-407f-be34-7ee26a12d1ec!dWSwEtbUTz.png|vignette|199px|Sticker représentant la Ferrari de Maxime.|gauche]]&lt;br /&gt;
* Elsa s&#039;était aussi fait supprimer son ancien compte TikTok plusieurs semaines avant la genèse du délire créé autour d&#039;elle, pour cause « de harcèlement moral et répété » de sa part contre certains utilisateurs qui l&#039;avaient critiquée, et ce malgré une réclamation infructueuse qu&#039;elle adressa au service de modération&amp;lt;ref&amp;gt;https://www.tiktok.com/@itsonlymaat2/photo/7391954003845713184&amp;lt;/ref&amp;gt;.&lt;br /&gt;
*Beaucoup ont alors accusé Elsa de proférer de fausses accusations contre Maxime, tantôt par rancœur suivant une rupture amoureuse, tantôt par appât du gain. L&#039;intéressée a notamment insisté sur le fort capital que posséderait Maxime ainsi que sur sa Ferrari, attitude considérée comme une preuve de sa jalousie, reprise dans de nombreux délires et topics.&lt;br /&gt;
* D&#039;autres lui reprochent enfin de justifier ses performances académiques médiocres par des accusations proférées contre ses exs comme le topic initial le laisse suggérer : elle a en effet accusé un de ses cinq agresseurs de s&#039;être « servi d&#039;elle&amp;lt;ref&amp;gt;https://www.instagram.com/p/C4YfYOaiMM6/?img_index=3&amp;lt;/ref&amp;gt; » durant toute leur relation, fait qui d&#039;après elle l&#039;a menée à ne plus pouvoir étudier la même faculté que la sienne.&lt;br /&gt;
&lt;br /&gt;
== Galerie médiatique ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png|vignette]]&lt;br /&gt;
[[Fichier:f1486a79-b90e-4438-900c-5f8dc86fad0b!yjEICcKnQq.png|vignette]]&lt;br /&gt;
[[Fichier:956fe870-b615-4cc7-a788-7ee6b732df60!HumuAVwrJi.png|vignette|128px]]&lt;br /&gt;
&lt;br /&gt;
De nombreux sons et stickers ont été produits autour du délire, mentionnant Elsa ou la Ferrari, comme le son de  &#039;&#039;PuitSansFond&#039;&#039;{{CDVonche|Pseudo=PuitSansFond}}, réalisé avec l&#039;aide de &#039;&#039;Trapvador&#039;&#039;{{CDVonche|Pseudo=Trapvador}} pour la miniature.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:9efc5882-eb8f-4ff4-ae69-545e13b929cf!78jWYTW7S8.png|vignette|127px]]&lt;br /&gt;
&amp;lt;youtube width=&amp;quot;100%&amp;quot; height=&amp;quot;300px&amp;quot;&amp;gt;loYqhf_ejho&amp;lt;/youtube&amp;gt;&lt;br /&gt;
[[Fichier:videoelsaferrari.ogv|200px|Choco jsp comment on resize une vidéo bordel ]]&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
[[Catégorie:Personnalité externe]]&lt;br /&gt;
[[Catégorie:Affaire]]&lt;br /&gt;
{{TableauCatégoriePersonnalité}}&lt;br /&gt;
[[Catégorie:Délire]]&lt;br /&gt;
[[Catégorie:Onche.org]]&lt;br /&gt;
[[Catégorie:Topic]]&lt;br /&gt;
[[Catégorie:Malveillance]]&lt;br /&gt;
[[Catégorie:Raids et Agissements]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fichier:videoelsaferrari.ogv&amp;diff=155736</id>
		<title>Fichier:videoelsaferrari.ogv</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fichier:videoelsaferrari.ogv&amp;diff=155736"/>
		<updated>2024-07-19T15:36:26Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Fichier téléversé avec MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fichier téléversé avec MsUpload&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fichier:videoelsaferrari.ogg&amp;diff=155734</id>
		<title>Fichier:videoelsaferrari.ogg</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fichier:videoelsaferrari.ogg&amp;diff=155734"/>
		<updated>2024-07-19T15:32:55Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Fichier téléversé avec MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fichier téléversé avec MsUpload&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=FrenchMVP&amp;diff=155733</id>
		<title>FrenchMVP</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=FrenchMVP&amp;diff=155733"/>
		<updated>2024-07-19T14:56:58Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Bannière Source}}&lt;br /&gt;
{{Bannière Info|Contenu=Une réécriture de l&#039;article dans un style davantage objectif et moins péremptoire (rappelons que l&#039;affaire n&#039;est pas encore terminée) doit être envisagée.}}&lt;br /&gt;
&lt;br /&gt;
[[Fichier:avatarfrenchmvp.png|vignette|Avatar utilisé par FrenchMVP.]]&lt;br /&gt;
[[Fichier:passeportfrenchmvp.png|vignette|Passeport supposé du forumeur FrenchMVP.]]&lt;br /&gt;
&#039;&#039;FrenchMVP&#039;&#039; {{CDV|Pseudo=frenchmvp}} est un forumeur du [[Blabla 18-25 ans|18-25]] aux origines douteuses connu pour ses nombreux topics haineux et pédant, dans lesquels il se vante d&#039;être expatrié en Chine et de mener une vie de rêve. Il qualifie ses détracteurs de &amp;quot;[[Facho|chof]]&amp;quot; et n&#039;hésite pas à les menacer de mort, revenant sous des centaines de comptes différents.&lt;br /&gt;
&lt;br /&gt;
== L&#039;affaire du faux expatrié ==&lt;br /&gt;
Dans la nuit du 17 au 18 juillet 2024, un [[topic]] nommé &amp;quot;[https://jvarchive.com/forums/42-51-74589329-1-0-1-0-le-forumeur-french-mvp-a-disparu Le forumeur &#039;FrenchMVP&#039; a disparu]&amp;quot; fait son apparition. Le topic parle d&#039;une [[Fake|escroquerie]] que &#039;&#039;FrenchMVP&#039;&#039; aurait fait subir à plusieurs [[Khey|kheys]] en Chine. Le topic qui fait d&#039;abord un [[bide]] commence à prendre de l&#039;ampleur à partir de 4 heures du matin, où plusieurs forumeurs se sont donné rendez-vous pour dénoncer l&#039;attitude arrogante de &#039;&#039;FrenchMVP&#039;&#039;. Les messages de plus en plus insultants envers &#039;&#039;FrenchMVP&#039;&#039; s&#039;enchaînent quand le principal intéressé fait son apparition, visiblement fou de rage&amp;lt;ref&amp;gt;https://jvarchive.com/forums/message/1262184785&amp;lt;/ref&amp;gt;. Comme à son habitude, &#039;&#039;FrenchMVP&#039;&#039; commence à enchaîner des insultes et menace les personnes présentes sur le topic. Il persiste sur son expatriation en Chine et envoie même une photo de son passeport français accompagné d&#039;un passeport chinois avec une feuille mentionnant son pseudo&amp;lt;ref&amp;gt;https://jvarchive.com/forums/message/1262186017&amp;lt;/ref&amp;gt;. Sauf que malheureusement pour lui, un forumeur lui mentionne que la double nationalité est interdite en Chine&amp;lt;ref&amp;gt;https://jvarchive.com/forums/message/1262186105&amp;lt;/ref&amp;gt;, à quoi &#039;&#039;FrenchMVP&#039;&#039; lui répond : &amp;quot;C&#039;est le passeport de ma meuf&amp;lt;ref&amp;gt;https://jvarchive.com/forums/message/1262186185&amp;lt;/ref&amp;gt;&amp;quot; il a ensuite disparu du topic.&lt;br /&gt;
&lt;br /&gt;
=== Le retour et la fin d&#039;un homme brisé ===&lt;br /&gt;
[[Fichier:frenchmvpbrise.png|vignette|FrenchMVP suppliant de DDB un topic en échange d&#039;une clé steam.]]&lt;br /&gt;
&#039;&#039;FrenchMVP&#039;&#039; fait son retour sur un nouveau topic &amp;quot;&amp;quot;[https://jvarchive.com/forums/42-51-74603504-1-0-1-0-dedi-chine-pour-ceux-qui-aiment-la-pls Dédi Chine pour ceux qui aiment la PLS]&amp;quot; plusieurs heures après son humiliation, il apporte avec lui plusieurs photos censées démontrer sa présence physique en Chine. Sauf que les photos prises sont floues et de basse qualité, le forumeur en question se contente de tenir un bout de papier tordu dans la main avec son pseudo inscrit dessus. C&#039;était sans compter sur la ténacité des forumeurs du 18-25, qui ont vu la supercherie de &#039;&#039;FrenchMVP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Deux heures plus tard, un topic démontrant la fraude de &#039;&#039;FrenchMVP&#039;&#039; est créé &amp;quot;[https://jvarchive.com/forums/42-51-74586478-1-0-1-0-ayyyyyaa-la-chute-de-frenchmvp AYYYYYAA, la CHUTE de FRENCHMVP]&amp;quot;. Le topic mentionne les incohérences, notamment une photo avec le logo d&#039;une enseigne chinoise partiellement flouté&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/29/4/1721297668-873edfda13f3063a9dd2a25c9996e96.jpg&amp;lt;/ref&amp;gt;, le soi-disant expatrié en Chine aurait en fait pris une photo d&#039;une enseigne depuis Google Maps avec son pseudo écrit devant, s&#039;ensuivront des dizaines de pages où le principal intéressé reviendra avec plusieurs comptes secondaires pour tenter de se défendre avant de disparaître complètement du forum.&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Catégorie:Forumeur du 15-18]]&lt;br /&gt;
[[Catégorie:Brisé]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=WEBM&amp;diff=155535</id>
		<title>WEBM</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=WEBM&amp;diff=155535"/>
		<updated>2024-07-09T16:29:09Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Plateformes d&amp;#039;hébergement et de relais */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:WebM_logo.png|vignette|250px|Le logotype officiel du format WebM.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WEBM&#039;&#039;&#039; (stylisé &#039;&#039;WebM&#039;&#039;) est un format de fichier vidéo principalement destiné à être utilisé sur le Web. Ce terme est par extension utilisé par le [[Blabla 18-25 ans|18-25]] pour qualifier les vidéos que se partagent les [[forumeur|forumeurs]] entre eux. Les WEBM sont généralement appréciés, si bien que certains forumeurs se sont spécialisés dans ce domaine. Les topics comportant en titre une balise &#039;&#039;[WEBM]&#039;&#039; indiquent qu&#039;ils contiennent une telle vidéo.&lt;br /&gt;
&lt;br /&gt;
= Contenu =&lt;br /&gt;
== Dénomination ==&lt;br /&gt;
Bien que WEBM désigne à l&#039;origine un format de fichier vidéo spécifique, on nomme habituellement &#039;&#039;WEBM&#039;&#039; toute vidéo partagée entre [[forumeurs]], hébergée et relayée sur un service Web prévu à cet effet (voir [[WEBM#Plateformes d&#039;hébergement et de relais|la section attitrée de cet article]]), avec comme seul intérêt la vidéo en elle-même. Une faible minorité de forumeurs puristes prône l&#039;utilisation de ce terme exclusivement concernant les fichiers portant cette extension&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1214151400&amp;lt;/ref&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Les vidéos présentes sur les réseaux sociaux, YouTube ou toute autre plateforme très modérée ne sont quant à eux habituellement pas vus comme des WEBM car ce style de contenu est souvent éloigné de ce qu&#039;aiment se partager les forumeurs (voir [[WEBM#Nature des WEBM|la section suivante]] pour plus de détails).&lt;br /&gt;
== Nature des WEBM ==&lt;br /&gt;
Les WEBM partagés par les forumeurs ont principalement pour but de faire rire ou de surprendre. La plupart du temps, les WEBM mettent en scène des vidéos insolites ou à caractère humoristique. Loin d&#039;êtres niais et gentillets, les WEBM partagés par les forumeurs se révèlent souvent trash voire très explicites.&lt;br /&gt;
&lt;br /&gt;
Plus précisément, il peut s&#039;agir d&#039;accidents routiers, de chutes, d&#039;incidents matériels ou industriels impliquant directement des humains ou non, de scènes de violence relativement légères et rarement gores, ou de nudité, mais également de redpills sur les relations sociales, de contenus glissants etc.&lt;br /&gt;
&lt;br /&gt;
Ceci dit, une partie non-négligeable des WEBM partagés ont un objectif purement humoristique, souvent par leur attrait, contenu ou intitulé absurde. &lt;br /&gt;
&lt;br /&gt;
=== Chine ===&lt;br /&gt;
Certains types spéciaux de WEBM ont émergé, par exemple sur la Chine où le but principal des WEBM partagés (réservés à un public averti) est de montrer des accidents du travail ou accidents industriels récurrents en Chine, ainsi que le manque apparent d&#039;empathie qu&#039;éprouvent les Chinois envers leurs compatriotes lorsqu&#039;ils sont victimes d&#039;accidents routiers, en les laissant pour morts, ou encore le décalage qu&#039;il peut y avoir entre les sociétés européennes et asiatiques.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-60397834-1-0-1-0-putain-les-webm-du-pave-chine.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
On retrouve la plupart de ces WEBM dans le [[Pavé Chine|pavé Chine]].&lt;br /&gt;
&lt;br /&gt;
=== Pneus tueurs ===&lt;br /&gt;
Cette appellation est réservée aux WEBM filmant des scènes de pneus qui lorsqu&#039;ils se décrochent de leur châssis peuvent causer de gros dégâts humains ou matériels. Une [[boucle]] est alimentée par le forumeur &#039;&#039;PneuTueur&#039;&#039; à ce sujet &amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=pneus%20tueurs&amp;lt;/ref&amp;gt;. Il semble que l&#039;expression ait été pour la première fois utilisée sur [https://www.jeuxvideo.com/forums/42-51-70854977-1-0-1-0-webm-les-pneus-tueurs-uniquement-en-chine-etonnant.htm ce topic], et a été largement popularisée depuis lors.&lt;br /&gt;
&lt;br /&gt;
=== WEBM du malaise ===&lt;br /&gt;
{{Article connexe|Malaisologie}}&lt;br /&gt;
[[File:webm-malaise.png|vignette|200px|Le topic &#039;&#039;WEBM du malaise&#039;&#039; du nouvel an 2023.]]&lt;br /&gt;
Certains WEBM se distinguent des autres par leur capacité à provoquer un malaise considérable chez les forumeurs : il s&#039;agit des WEBM dits « du malaise », mettant souvent en scène des personnages archétypaux du [[french dream]] (comme des [[Magalie]]) ou des &#039;&#039;cas sociaux&#039;&#039; de TikTok.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71308627-1-0-1-0-boucle-cest-lheure-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71498712-1-0-1-0-soiree-nouvel-an-webm-la-compilation-ultime-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt; C&#039;est par exemple le cas de la vidéo [[Et Tic et Tac hein hein|&#039;&#039;et tic et tac hein hein&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
== Plateformes d&#039;hébergement et de relais ==&lt;br /&gt;
Les plateformes d&#039;hébergement sont les services Web qui hébergent les WEBM dont les forumeurs se partagent les liens. Souvent, ce sont ces derniers qui ajoutent eux-mêmes la vidéo sur une plateforme telle que Streamable ou webmshare, mais il se peut également qu&#039;ils partagent le lien &amp;quot;brut&amp;quot; amenant à la vidéo originelle (liens [[4chan]], Reddit, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
Les plateformes d&#039;hébergement/relais de WEBM les plus utilisées par les forumeurs sont (par ordre approximatif de popularité) :&lt;br /&gt;
* [https://streamable.com Streamable]&lt;br /&gt;
* [https://webmshare.com webmshare]&lt;br /&gt;
* [https://4chan.org 4chan] (notamment le board &#039;&#039;/gif/&#039;&#039;)&lt;br /&gt;
* [https://issoutv.com/ IssouTV]&lt;br /&gt;
* [https://webm.red/ webm.red]&lt;br /&gt;
* [https://catbox.moe/ catbox.moe]&lt;br /&gt;
* [https://orbitum.space/ orbitum.space]&lt;br /&gt;
* [https://www.risishack.com/ RisiShack]&lt;br /&gt;
* [https://www.reddit.com Reddit] (notamment les subreddits &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Stremable et webmshare sont les plateformes les plus populaires sur le forum. Streamable a l&#039;avantage de prendre en charge la majorité des formats vidéo (dont WEBM et MP4) mais ne permet pas de télécharger nativement du contenu, contrairement à webmshare qui n&#039;héberge que les fichiers WEBM et autorise le téléchargement de vidéos. Les contenus choquants ou illégaux sont occasionnellement supprimés sur Streamable, et leur auteur banni,  ce qui n&#039;arrive visiblement jamais sur webmshare : il semble que ce soit la plateforme la plus stable. De plus, il est nécessaire de créer un compte sur Streamable afin que les vidéos uploadées y soit conservées plus d&#039;un jour, tandis que webmshare peut être utilisée en tant qu&#039;invité. Le contenu hébergé sur webmshare ne peut être lu sur iPhone&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-70753532-1-0-1-0-tu-as-l-iphone-14-oui-je-ne-peux-pas-lire-les-webm.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71211520-1-0-1-0-j-arrive-pas-a-lire-les-webm-sur-mon-iphone-13.htm&amp;lt;/ref&amp;gt;. Les deux demeurent (septembre 2023) largement en tête quant au nombre de vidéos partagées sur le forum. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IssouTV a été comme son nom l&#039;indique spécialement créé pour les utilisateurs de [[jeuxvideo.com|JVC]] et demeure assez utilisé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le board &#039;&#039;/gif/&#039;&#039; de [[4chan]] contient un grand nombre de vidéos pornographiques mais également du contenu trash et gore. Très souvent, les contenus hébergés sur le &#039;&#039;/gif/&#039;&#039; de 4chan sont supprimés quelques semaines voire mois après ; on ignore s&#039;il s&#039;agit de l&#039;action d&#039;administrateurs ou d&#039;un système automatique. Ainsi, les liens 4chan des anciens topics ne redirigent souvent que vers une erreur 404. Il est donc plutôt recommandé de télécharger le contenu hébergé sur 4chan et de le déposer sur une plateforme plus fiable.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
webm.red est une alternative à webmshare peu utilisée mais qui présente à peu près les mêmes fonctionnalités (prise en charge du format WEBM seulement, possibilité de télécharger les vidéos, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
catbox.moe est une plateforme acceptant toutes les extensions jusqu&#039;à 200 Mo, ce qui fait qu&#039;il n&#039;est pas rare de voir des liens dirigeant vers celle-ci sur le forum. Elle semble également peu modérée. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les threads Reddit &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039; contiennent quant à eux du contenu relativement trash. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La plateforme décentralisée &#039;&#039;orbitum.space&#039;&#039;, gérée par des [[forumeurs]], accueille parfois des vidéos censurées sur &#039;&#039;jeuxvideo.com&#039;&#039; ; RisiShack, très peu utilisé, héberge des fichiers MP4.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que les topics comportant un lien YouTube, Twitter ou TikTok portent généralement une balise &#039;&#039;[WEBM]&#039;&#039; bien qu&#039;ils ne puissent être considérés comme tel au sens strict. Certains forumeurs puristes ne manquent pas de le faire remarquer.&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-71462933-1-0-1-0-webm-ce-boule-va-vous-rendre-maboule&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anciennes plateformes d&#039;hébergement ===&lt;br /&gt;
Il semble que d&#039;autres plateformes aient été relativement populaires dans le passé ; c&#039;est notamment le cas de &#039;&#039;webm.land&#039;&#039; et de &#039;&#039;yuki.la&#039;&#039;.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-55865982-1-0-1-0-webm-no-trash-hun-j-veux-pas-de-410-moi-svp.htm&amp;lt;/ref&amp;gt; Ces services Web sont aujourd&#039;hui fermés et inaccessibles. Il en est de même pour le contenu qui avait été hébergé dessus.&lt;br /&gt;
&lt;br /&gt;
=== Script ===&lt;br /&gt;
Un [[script|userscript]] &#039;&#039;StreamableDownloader&#039;&#039; a été développé par un membre du forum pour permettre aux utilisateurs de télécharger les vidéos hébergées sur [https://streamable.com Streamable], voir [https://greasyfork.org/fr/scripts/453105-streamabledownloader la page d&#039;accueil du script].&lt;br /&gt;
&lt;br /&gt;
=== WEBM originaux ===&lt;br /&gt;
La plupart du temps les WEBM sont relayés sur les plateformes précédemment citées, mais les originaux sont souvent trouvés sur des sites trashs/gores tels que WebChoc, Bestgore, Kaotic, et auparavant LeakReality avant qu&#039;il ne soit supprimé. Les liens vers ces plateformes sont cependant très rares afin de minimiser le risque de censure, et les forumeurs préfèrent uploader le contenu en question sur une des plateformes précédemment citées.&lt;br /&gt;
Certains WEBM proviennent directement de TikTok mais semblent être beaucoup moins appréciés par la communauté du fait de leur contenu jugé souvent peu intéressant et de la désapprobation générale de ce réseau social par le forum. On peut également retrouver des WEBM hébergés à l&#039;origine sur YouTube ou Twitter. Ces trois derniers étant plus strictement modérés, ce sont souvent des WEBM softs qui découlent de là-bas. De ce fait, on leur préfère la balise &#039;&#039;[VIDÉO]&#039;&#039; (voir [[#Balise_VIDÉO|la sous-partie éponyme de cet article]]).&lt;br /&gt;
&lt;br /&gt;
= Topics WEBM =&lt;br /&gt;
Les [[topic|topics]] WEBM sont très courants et très populaires sur le [[Blabla 18-25 ans|18-25]], mais demeurent trouvables presque exclusivement sur ce forum. On y compte environ une vingtaine de nouveaux topics WEBM par jour&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=webm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Types de topics WEBM ==&lt;br /&gt;
On distingue deux types de topics WEBM :&lt;br /&gt;
* Des topics à &amp;quot;WEBM unique&amp;quot; ayant pour but de présenter un seul WEBM, dont le lien est présent dans le premier message de l&#039;[[OP]]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71425835-1-0-1-0-webm-il-crie-woop-woop-puis-fait-une-prise-de-catch-a-son-micro-ondes-et-devient-tetraplegique.htm  &amp;lt;nowiki&amp;gt;[WEBM] Il crie « WOOP WOOP » puis FAIT une PRISE de CATCH à son MICRO-ONDES et devient TÉTRAPLÉGIQUE&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70627502-1-0-1-0-webm-il-colle-une-voiture-sur-l-autoroute-la-selection-fut-naturelle.htm &amp;lt;nowiki&amp;gt;[WEBM] Il colle une VOITURE sur l&#039;AUTOROUTE, la sélection fut NATURELLE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* Ainsi que des topics &amp;quot;compilation&amp;quot; où l&#039;auteur poste en continue des WEBM pendant plusieurs minutes ou dizaines de minutes (dépendant de la quantité de WEBM dont l&#039;[[OP]] est en possession, de la réception du topic par les autres forumeurs, et surtout de la réaction de la [[modération]]). &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421226-1-0-1-0-webm-ils-jouent-a-biere-pong-un-pere-noel-apparait-et-se-casse-le-coccyx.htm &amp;lt;nowiki&amp;gt;[WEBM] Ils jouent à BIÈRE-PONG, un PÈRE NOËL APPARAÎT et se CASSE le COCCYX&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450605-1-0-1-0-webm-il-evite-de-justesse-sa-tronconneuse-se-remet-en-question.htm &amp;lt;nowiki&amp;gt;[WEBM] Il évite de justesse sa TRONÇONNEUSE, se REMET en QUESTION&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien que les topics à WEBM unique soient les plus courants sur le forum, les topics de compilation sont généralement très appréciés par la planète forum : ils montent facilement à plusieurs centaines de connectés et à une dizaine de pages. Il arrive souvent que d&#039;autres amateurs de WEBM y rejoignent l&#039;auteur pour poster leurs vidéos.&lt;br /&gt;
&lt;br /&gt;
=== Topics [[fake|fakes]] ===&lt;br /&gt;
Certains topics [[troll|trolls]] annoncent dans leur titre une vidéo imaginaire à l&#039;intitulé très aguicheur et insolite, où le premier message est parfois accompagnés de la mention [[post ou cancer]] ou ses dérivés, &#039;&#039;pourquoi as-tu cliqué ?&#039;&#039;, &#039;&#039;&amp;quot;cette vidéo n&#039;existe pas&#039;&#039;, &#039;&#039;j&#039;aimerais bien voir ça&#039;&#039;, simplement dans le but d&#039;attirer des connectés sur le topic. S&#039;ensuit alors des réponses ironiques de type &#039;&#039;pour voir la vidéo&#039;&#039; ou encore &#039;&#039;t&#039;as oublié le lien&#039;&#039;. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421330-1-0-1-0-webm-il-plante-une-hache-sur-un-cheval-qui-le-catapulte-dans-le-composte.htm &amp;lt;nowiki&amp;gt;[Webm] Il plante une hache sur un cheval qui le catapulte dans le composte&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450141-1-0-1-0-webm-cette-japonaise-chie-une-buche-de-noel-dans-l-assiette-de-son-copain.htm &amp;lt;nowiki&amp;gt;[WEBM] Cette JAPONAISE CHIE une bûche de noël dans l&#039;assiette de son COPAIN&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est évident que ces topics sont très peu appréciés et souvent [[DDB]] en masse, puisqu&#039;ils occasionnent une déception chez les forumeurs ayant cliqué.&lt;br /&gt;
&lt;br /&gt;
=== Certification de [[nofake]] et [[éclaireur]] ===&lt;br /&gt;
[[Fichier:nofake sticker.png|vignette|200px|Le fameux sticker nofake étant généralement admis comme preuve incontestable d&#039;un nofake.]]&lt;br /&gt;
&lt;br /&gt;
Parallèlement aux topics fake, la certification de [[nofake]], réalisée par un forumeur autre que l&#039;auteur, est un moyen pour ceux qui ont cliqué sur le topic de savoir si le titre est en bonne adéquation avec le contenu de la vidéo présentée. Ces certifications, qui permettent à la fois de faire gage de qualité et d&#039;[[up]] le topic concerné, sont parfois demandées par l&#039;[[OP]] dans son post pour démontrer la véracité du titre aussi invraisemblable soit-il. &amp;lt;br&amp;gt;&lt;br /&gt;
On note diverses déclinaisons de cette certification, telles que : [[le titre est malheureusement nofake|&#039;&#039;Le titre est malheureusement nofake&#039;&#039;]], &#039;&#039;Je certifie que le titre de l&#039;annotateur principal de ce fil de discussion est en total adéquation avec le contenu du présent court-métrage présenté sur cette page HTML sur laquelle vous naviguez actuellement.&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
L&#039;[[éclaireur]], quant à lui, est parfois demandé sur les topics WEBM par un forumeur réticent à l&#039;idée de cliquer sur le lien partagé par l&#039;auteur à cause d&#039;un titre de topic douteux, de peur de tomber sur un screamer ou du contenu gore, choquant. Les éclaireurs ont ainsi pour mission de vérifier la vidéo et de signaler si cette dernière est &#039;&#039;safe&#039;&#039; ou non. L&#039;éclaireur peut dans la foulée réaliser la certification de nofake.&lt;br /&gt;
&lt;br /&gt;
== Titres ==&lt;br /&gt;
Les titres de topics WEBM sont souvent aguicheurs et insolites ; ils caricaturent les contenus &#039;&#039;putaclicks&#039;&#039; d&#039;Internet en reprenant leurs éléments de langage. Parmi ces derniers, nous pouvons citer entre autres : &#039;&#039;la suite risque de vous surprendre&#039;&#039;, &#039;&#039;ça tourne mal&#039;&#039;, &#039;&#039;sa réaction est étonnante&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71483319-1-0-1-0-webm-il-dort-dans-son-lit-se-mange-une-branche-sa-pasteque-tombe-dans-l-eau.htm &amp;lt;nowiki&amp;gt; [WEBM] Il dort dans son lit, se mange une branche, sa pastèque tombe dans l&#039;eau &amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70167283-1-0-1-0-webm-il-tente-le-bah-sort-la-suite-risque-de-vous-surprendre.htm &amp;lt;nowiki&amp;gt;[WEBM] il tente le BAH SORS, la suite risque de vous surprendre&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Balise_VIDÉO&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Balise [VIDÉO] === &lt;br /&gt;
À défaut de comporter la balise WEBM (cependant largement majoritaire pour les topics de ce genre), certains intitulés comportent la mention &amp;quot;vidéo&amp;quot;, ce qui arrive généralement lorsque l&#039;OP est un [[newfag]] ne connaissant pas encore bien les codes du forum ou lorsque la vidéo partagée n&#039;est pas un WEBM à proprement parler.&lt;br /&gt;
&lt;br /&gt;
=== Sélection naturelle ===&lt;br /&gt;
Le terme de [[sélection naturelle]] est très apprécié lorsqu&#039;il s&#039;agit d&#039;intituler des WEBM filmant des accidents ou témoignant de l&#039;incompétence de certains individus qui entraînera de graves conséquences. On retrouve des variantes toujours plus nombreuses de l&#039;expression, telles que : &#039;&#039;la sélection fut 100% naturelle&#039;&#039;, &#039;&#039;la nature prend le dossier en charge&#039;&#039;, &#039;&#039;la nature n&#039;est pas de cet avis&#039;&#039;, etc. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://jvarchive.com/forums/42-51-71409556-1-0-1-0-webm-un-malien-tente-un-plongeon-a-st-barth-la-nature-soccupe-du-dossier &amp;lt;nowiki&amp;gt; [WEBM] Un MALIEN tente un PLONGEON à ST-BARTH, la NATURE s&#039;occupe du DOSSIER&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71435766-1-0-1-0-webm-un-petit-moment-d-inattention-sur-la-route-la-selection-ne-se-fait-pas-attendre.htm &amp;lt;nowiki&amp;gt;[WEBM] Un petit MOMENT d&#039;INATTENTION sur la ROUTE, la SÉLECTION ne se fait PAS ATTENDRE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Réaction de la [[modération]] ==&lt;br /&gt;
=== Avant mai 2024 ===&lt;br /&gt;
Il n&#039;y a officiellement pas de réglementation à propos des WEBM sur les forums.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1180766811&amp;lt;/ref&amp;gt; Cependant, leur partage n&#039;est généralement pas très apprécié par la modération du fait qu&#039;ils peuvent rapidement conduire à la diffusion de vidéos hors-charte.&lt;br /&gt;
Ainsi, les topics WEBM sont la plupart du temps supprimés après une durée relativement courte surtout lorsque les vidéos qu&#039;ils incluent ne respectent par la [[charte]] et remplissent le motif &#039;&#039;Image ou vidéo choquante, gore&#039;&#039;, malgré le grand nombre de forumeurs qui apprécient ces topics.&lt;br /&gt;
&lt;br /&gt;
=== Mai 2024 ===&lt;br /&gt;
Le 28 mai 2024, les forumeurs remarquent que les posts contenant des liens redirigeant vers du contenu hébergé sur [https://streamable.com Streamable], [https://webmshare.com webmshare] et [https://issoutv.com IssouTV] sont automatiquement supprimés&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74327261-1-0-1-0-censure-les-videos-streamable-desormais-auto-supprimee-sur-le-forom.htm&amp;lt;/ref&amp;gt;, ce qui provoque colère et dépit. [https://webm.red webm.red] et [https://www.risishack.com/ RisiShack] sont cependant épargnés. Les [[administrateur|administrateurs]] de jeuxvideo.com se justifient de la manière suivante :&lt;br /&gt;
{{BoxCitation|Citation=Les vidéos hébergées sur ces plateformes diffusent du contenu qui ne respecte pas la charte du forum et demandent une bande passante conséquente de modération. &amp;lt;br&amp;gt; Par conséquent ces dernières sont interdites.&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/22/2/1716915626-screnn5874456.png&amp;lt;/ref&amp;gt;|Auteur=Service réclamations de jeuxvideo.com}}&lt;br /&gt;
&lt;br /&gt;
Finalement, une journée après, les liens redirigeant vers les deux plateformes semblent de ne plus être censurés après un assouplissement de la restriction.&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{Article de qualité}}&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
[[Catégorie:Vocabulaire externe]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=WEBM&amp;diff=155534</id>
		<title>WEBM</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=WEBM&amp;diff=155534"/>
		<updated>2024-07-09T16:28:17Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Ajout de catbox.moe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:WebM_logo.png|vignette|250px|Le logotype officiel du format WebM.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WEBM&#039;&#039;&#039; (stylisé &#039;&#039;WebM&#039;&#039;) est un format de fichier vidéo principalement destiné à être utilisé sur le Web. Ce terme est par extension utilisé par le [[Blabla 18-25 ans|18-25]] pour qualifier les vidéos que se partagent les [[forumeur|forumeurs]] entre eux. Les WEBM sont généralement appréciés, si bien que certains forumeurs se sont spécialisés dans ce domaine. Les topics comportant en titre une balise &#039;&#039;[WEBM]&#039;&#039; indiquent qu&#039;ils contiennent une telle vidéo.&lt;br /&gt;
&lt;br /&gt;
= Contenu =&lt;br /&gt;
== Dénomination ==&lt;br /&gt;
Bien que WEBM désigne à l&#039;origine un format de fichier vidéo spécifique, on nomme habituellement &#039;&#039;WEBM&#039;&#039; toute vidéo partagée entre [[forumeurs]], hébergée et relayée sur un service Web prévu à cet effet (voir [[WEBM#Plateformes d&#039;hébergement et de relais|la section attitrée de cet article]]), avec comme seul intérêt la vidéo en elle-même. Une faible minorité de forumeurs puristes prône l&#039;utilisation de ce terme exclusivement concernant les fichiers portant cette extension&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1214151400&amp;lt;/ref&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Les vidéos présentes sur les réseaux sociaux, YouTube ou toute autre plateforme très modérée ne sont quant à eux habituellement pas vus comme des WEBM car ce style de contenu est souvent éloigné de ce qu&#039;aiment se partager les forumeurs (voir [[WEBM#Nature des WEBM|la section suivante]] pour plus de détails).&lt;br /&gt;
== Nature des WEBM ==&lt;br /&gt;
Les WEBM partagés par les forumeurs ont principalement pour but de faire rire ou de surprendre. La plupart du temps, les WEBM mettent en scène des vidéos insolites ou à caractère humoristique. Loin d&#039;êtres niais et gentillets, les WEBM partagés par les forumeurs se révèlent souvent trash voire très explicites.&lt;br /&gt;
&lt;br /&gt;
Plus précisément, il peut s&#039;agir d&#039;accidents routiers, de chutes, d&#039;incidents matériels ou industriels impliquant directement des humains ou non, de scènes de violence relativement légères et rarement gores, ou de nudité, mais également de redpills sur les relations sociales, de contenus glissants etc.&lt;br /&gt;
&lt;br /&gt;
Ceci dit, une partie non-négligeable des WEBM partagés ont un objectif purement humoristique, souvent par leur attrait, contenu ou intitulé absurde. &lt;br /&gt;
&lt;br /&gt;
=== Chine ===&lt;br /&gt;
Certains types spéciaux de WEBM ont émergé, par exemple sur la Chine où le but principal des WEBM partagés (réservés à un public averti) est de montrer des accidents du travail ou accidents industriels récurrents en Chine, ainsi que le manque apparent d&#039;empathie qu&#039;éprouvent les Chinois envers leurs compatriotes lorsqu&#039;ils sont victimes d&#039;accidents routiers, en les laissant pour morts, ou encore le décalage qu&#039;il peut y avoir entre les sociétés européennes et asiatiques.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-60397834-1-0-1-0-putain-les-webm-du-pave-chine.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
On retrouve la plupart de ces WEBM dans le [[Pavé Chine|pavé Chine]].&lt;br /&gt;
&lt;br /&gt;
=== Pneus tueurs ===&lt;br /&gt;
Cette appellation est réservée aux WEBM filmant des scènes de pneus qui lorsqu&#039;ils se décrochent de leur châssis peuvent causer de gros dégâts humains ou matériels. Une [[boucle]] est alimentée par le forumeur &#039;&#039;PneuTueur&#039;&#039; à ce sujet &amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=pneus%20tueurs&amp;lt;/ref&amp;gt;. Il semble que l&#039;expression ait été pour la première fois utilisée sur [https://www.jeuxvideo.com/forums/42-51-70854977-1-0-1-0-webm-les-pneus-tueurs-uniquement-en-chine-etonnant.htm ce topic], et a été largement popularisée depuis lors.&lt;br /&gt;
&lt;br /&gt;
=== WEBM du malaise ===&lt;br /&gt;
{{Article connexe|Malaisologie}}&lt;br /&gt;
[[File:webm-malaise.png|vignette|200px|Le topic &#039;&#039;WEBM du malaise&#039;&#039; du nouvel an 2023.]]&lt;br /&gt;
Certains WEBM se distinguent des autres par leur capacité à provoquer un malaise considérable chez les forumeurs : il s&#039;agit des WEBM dits « du malaise », mettant souvent en scène des personnages archétypaux du [[french dream]] (comme des [[Magalie]]) ou des &#039;&#039;cas sociaux&#039;&#039; de TikTok.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71308627-1-0-1-0-boucle-cest-lheure-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71498712-1-0-1-0-soiree-nouvel-an-webm-la-compilation-ultime-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt; C&#039;est par exemple le cas de la vidéo [[Et Tic et Tac hein hein|&#039;&#039;et tic et tac hein hein&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
== Plateformes d&#039;hébergement et de relais ==&lt;br /&gt;
Les plateformes d&#039;hébergement sont les services Web qui hébergent les WEBM dont les forumeurs se partagent les liens. Souvent, ce sont ces derniers qui ajoutent eux-mêmes la vidéo sur une plateforme telle que Streamable ou webmshare, mais il se peut également qu&#039;ils partagent le lien &amp;quot;brut&amp;quot; amenant à la vidéo originelle (liens [[4chan]], Reddit, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
Les plateformes d&#039;hébergement/relais de WEBM les plus utilisées par les forumeurs sont (par ordre approximatif de popularité) :&lt;br /&gt;
* [https://streamable.com Streamable]&lt;br /&gt;
* [https://webmshare.com webmshare]&lt;br /&gt;
* [https://4chan.org 4chan] (notamment le board &#039;&#039;/gif/&#039;&#039;)&lt;br /&gt;
* [https://issoutv.com/ IssouTV]&lt;br /&gt;
* [https://webm.red/ webm.red]&lt;br /&gt;
* [https://catbox.moe/ catbox.moe]&lt;br /&gt;
* [https://orbitum.space/ orbitum.space]&lt;br /&gt;
* [https://www.risishack.com/ RisiShack]&lt;br /&gt;
* [https://www.reddit.com Reddit] (notamment les subreddits &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Stremable et webmshare sont les plateformes les plus populaires sur le forum. Streamable a l&#039;avantage de prendre en charge la majorité des formats vidéo (dont WEBM et MP4) mais ne permet pas de télécharger nativement du contenu, contrairement à webmshare qui n&#039;héberge que les fichiers WEBM et autorise le téléchargement de vidéos. Les contenus choquants ou illégaux sont occasionnellement supprimés sur Streamable, et leur auteur banni,  ce qui n&#039;arrive visiblement jamais sur webmshare : il semble que ce soit la plateforme la plus stable. De plus, il est nécessaire de créer un compte sur Streamable afin que les vidéos uploadées y soit conservées plus d&#039;un jour, tandis que webmshare peut être utilisée en tant qu&#039;invité. Le contenu hébergé sur webmshare ne peut être lu sur iPhone&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-70753532-1-0-1-0-tu-as-l-iphone-14-oui-je-ne-peux-pas-lire-les-webm.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71211520-1-0-1-0-j-arrive-pas-a-lire-les-webm-sur-mon-iphone-13.htm&amp;lt;/ref&amp;gt;. Les deux demeurent (septembre 2023) largement en tête quant au nombre de vidéos partagées sur le forum. &amp;lt;br&amp;gt;&lt;br /&gt;
IssouTV a été comme son nom l&#039;indique spécialement créé pour les utilisateurs de [[jeuxvideo.com|JVC]] et demeure assez utilisé. &amp;lt;br&amp;gt;&lt;br /&gt;
Le board &#039;&#039;/gif/&#039;&#039; de [[4chan]] contient un grand nombre de vidéos pornographiques mais également du contenu trash et gore. Très souvent, les contenus hébergés sur le &#039;&#039;/gif/&#039;&#039; de 4chan sont supprimés quelques semaines voire mois après ; on ignore s&#039;il s&#039;agit de l&#039;action d&#039;administrateurs ou d&#039;un système automatique. Ainsi, les liens 4chan des anciens topics ne redirigent souvent que vers une erreur 404. Il est donc plutôt recommandé de télécharger le contenu hébergé sur 4chan et de le déposer sur une plateforme plus fiable.&amp;lt;br&amp;gt;&lt;br /&gt;
webm.red est une alternative à webmshare peu utilisée mais qui présente à peu près les mêmes fonctionnalités (prise en charge du format WEBM seulement, possibilité de télécharger les vidéos, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
catbox.moe est une plateforme acceptant toutes les extensions jusqu&#039;à 200 Mo, ce qui fait qu&#039;il n&#039;est pas rare de voir des liens dirigeant vers celle-ci sur le forum. Elle semble également peu modérée.&lt;br /&gt;
Les threads Reddit &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039; contiennent quant à eux du contenu relativement trash.&lt;br /&gt;
La plateforme décentralisée &#039;&#039;orbitum.space&#039;&#039;, gérée par des [[forumeurs]], accueille parfois des vidéos censurées sur &#039;&#039;jeuxvideo.com&#039;&#039; ; RisiShack, très peu utilisé, héberge des fichiers MP4.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que les topics comportant un lien YouTube, Twitter ou TikTok portent généralement une balise &#039;&#039;[WEBM]&#039;&#039; bien qu&#039;ils ne puissent être considérés comme tel au sens strict. Certains forumeurs puristes ne manquent pas de le faire remarquer.&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-71462933-1-0-1-0-webm-ce-boule-va-vous-rendre-maboule&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anciennes plateformes d&#039;hébergement ===&lt;br /&gt;
Il semble que d&#039;autres plateformes aient été relativement populaires dans le passé ; c&#039;est notamment le cas de &#039;&#039;webm.land&#039;&#039; et de &#039;&#039;yuki.la&#039;&#039;.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-55865982-1-0-1-0-webm-no-trash-hun-j-veux-pas-de-410-moi-svp.htm&amp;lt;/ref&amp;gt; Ces services Web sont aujourd&#039;hui fermés et inaccessibles. Il en est de même pour le contenu qui avait été hébergé dessus.&lt;br /&gt;
&lt;br /&gt;
=== Script ===&lt;br /&gt;
Un [[script|userscript]] &#039;&#039;StreamableDownloader&#039;&#039; a été développé par un membre du forum pour permettre aux utilisateurs de télécharger les vidéos hébergées sur [https://streamable.com Streamable], voir [https://greasyfork.org/fr/scripts/453105-streamabledownloader la page d&#039;accueil du script].&lt;br /&gt;
&lt;br /&gt;
=== WEBM originaux ===&lt;br /&gt;
La plupart du temps les WEBM sont relayés sur les plateformes précédemment citées, mais les originaux sont souvent trouvés sur des sites trashs/gores tels que WebChoc, Bestgore, Kaotic, et auparavant LeakReality avant qu&#039;il ne soit supprimé. Les liens vers ces plateformes sont cependant très rares afin de minimiser le risque de censure, et les forumeurs préfèrent uploader le contenu en question sur une des plateformes précédemment citées.&lt;br /&gt;
Certains WEBM proviennent directement de TikTok mais semblent être beaucoup moins appréciés par la communauté du fait de leur contenu jugé souvent peu intéressant et de la désapprobation générale de ce réseau social par le forum. On peut également retrouver des WEBM hébergés à l&#039;origine sur YouTube ou Twitter. Ces trois derniers étant plus strictement modérés, ce sont souvent des WEBM softs qui découlent de là-bas. De ce fait, on leur préfère la balise &#039;&#039;[VIDÉO]&#039;&#039; (voir [[#Balise_VIDÉO|la sous-partie éponyme de cet article]]).&lt;br /&gt;
&lt;br /&gt;
= Topics WEBM =&lt;br /&gt;
Les [[topic|topics]] WEBM sont très courants et très populaires sur le [[Blabla 18-25 ans|18-25]], mais demeurent trouvables presque exclusivement sur ce forum. On y compte environ une vingtaine de nouveaux topics WEBM par jour&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=webm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Types de topics WEBM ==&lt;br /&gt;
On distingue deux types de topics WEBM :&lt;br /&gt;
* Des topics à &amp;quot;WEBM unique&amp;quot; ayant pour but de présenter un seul WEBM, dont le lien est présent dans le premier message de l&#039;[[OP]]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71425835-1-0-1-0-webm-il-crie-woop-woop-puis-fait-une-prise-de-catch-a-son-micro-ondes-et-devient-tetraplegique.htm  &amp;lt;nowiki&amp;gt;[WEBM] Il crie « WOOP WOOP » puis FAIT une PRISE de CATCH à son MICRO-ONDES et devient TÉTRAPLÉGIQUE&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70627502-1-0-1-0-webm-il-colle-une-voiture-sur-l-autoroute-la-selection-fut-naturelle.htm &amp;lt;nowiki&amp;gt;[WEBM] Il colle une VOITURE sur l&#039;AUTOROUTE, la sélection fut NATURELLE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* Ainsi que des topics &amp;quot;compilation&amp;quot; où l&#039;auteur poste en continue des WEBM pendant plusieurs minutes ou dizaines de minutes (dépendant de la quantité de WEBM dont l&#039;[[OP]] est en possession, de la réception du topic par les autres forumeurs, et surtout de la réaction de la [[modération]]). &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421226-1-0-1-0-webm-ils-jouent-a-biere-pong-un-pere-noel-apparait-et-se-casse-le-coccyx.htm &amp;lt;nowiki&amp;gt;[WEBM] Ils jouent à BIÈRE-PONG, un PÈRE NOËL APPARAÎT et se CASSE le COCCYX&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450605-1-0-1-0-webm-il-evite-de-justesse-sa-tronconneuse-se-remet-en-question.htm &amp;lt;nowiki&amp;gt;[WEBM] Il évite de justesse sa TRONÇONNEUSE, se REMET en QUESTION&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien que les topics à WEBM unique soient les plus courants sur le forum, les topics de compilation sont généralement très appréciés par la planète forum : ils montent facilement à plusieurs centaines de connectés et à une dizaine de pages. Il arrive souvent que d&#039;autres amateurs de WEBM y rejoignent l&#039;auteur pour poster leurs vidéos.&lt;br /&gt;
&lt;br /&gt;
=== Topics [[fake|fakes]] ===&lt;br /&gt;
Certains topics [[troll|trolls]] annoncent dans leur titre une vidéo imaginaire à l&#039;intitulé très aguicheur et insolite, où le premier message est parfois accompagnés de la mention [[post ou cancer]] ou ses dérivés, &#039;&#039;pourquoi as-tu cliqué ?&#039;&#039;, &#039;&#039;&amp;quot;cette vidéo n&#039;existe pas&#039;&#039;, &#039;&#039;j&#039;aimerais bien voir ça&#039;&#039;, simplement dans le but d&#039;attirer des connectés sur le topic. S&#039;ensuit alors des réponses ironiques de type &#039;&#039;pour voir la vidéo&#039;&#039; ou encore &#039;&#039;t&#039;as oublié le lien&#039;&#039;. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421330-1-0-1-0-webm-il-plante-une-hache-sur-un-cheval-qui-le-catapulte-dans-le-composte.htm &amp;lt;nowiki&amp;gt;[Webm] Il plante une hache sur un cheval qui le catapulte dans le composte&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450141-1-0-1-0-webm-cette-japonaise-chie-une-buche-de-noel-dans-l-assiette-de-son-copain.htm &amp;lt;nowiki&amp;gt;[WEBM] Cette JAPONAISE CHIE une bûche de noël dans l&#039;assiette de son COPAIN&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est évident que ces topics sont très peu appréciés et souvent [[DDB]] en masse, puisqu&#039;ils occasionnent une déception chez les forumeurs ayant cliqué.&lt;br /&gt;
&lt;br /&gt;
=== Certification de [[nofake]] et [[éclaireur]] ===&lt;br /&gt;
[[Fichier:nofake sticker.png|vignette|200px|Le fameux sticker nofake étant généralement admis comme preuve incontestable d&#039;un nofake.]]&lt;br /&gt;
&lt;br /&gt;
Parallèlement aux topics fake, la certification de [[nofake]], réalisée par un forumeur autre que l&#039;auteur, est un moyen pour ceux qui ont cliqué sur le topic de savoir si le titre est en bonne adéquation avec le contenu de la vidéo présentée. Ces certifications, qui permettent à la fois de faire gage de qualité et d&#039;[[up]] le topic concerné, sont parfois demandées par l&#039;[[OP]] dans son post pour démontrer la véracité du titre aussi invraisemblable soit-il. &amp;lt;br&amp;gt;&lt;br /&gt;
On note diverses déclinaisons de cette certification, telles que : [[le titre est malheureusement nofake|&#039;&#039;Le titre est malheureusement nofake&#039;&#039;]], &#039;&#039;Je certifie que le titre de l&#039;annotateur principal de ce fil de discussion est en total adéquation avec le contenu du présent court-métrage présenté sur cette page HTML sur laquelle vous naviguez actuellement.&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
L&#039;[[éclaireur]], quant à lui, est parfois demandé sur les topics WEBM par un forumeur réticent à l&#039;idée de cliquer sur le lien partagé par l&#039;auteur à cause d&#039;un titre de topic douteux, de peur de tomber sur un screamer ou du contenu gore, choquant. Les éclaireurs ont ainsi pour mission de vérifier la vidéo et de signaler si cette dernière est &#039;&#039;safe&#039;&#039; ou non. L&#039;éclaireur peut dans la foulée réaliser la certification de nofake.&lt;br /&gt;
&lt;br /&gt;
== Titres ==&lt;br /&gt;
Les titres de topics WEBM sont souvent aguicheurs et insolites ; ils caricaturent les contenus &#039;&#039;putaclicks&#039;&#039; d&#039;Internet en reprenant leurs éléments de langage. Parmi ces derniers, nous pouvons citer entre autres : &#039;&#039;la suite risque de vous surprendre&#039;&#039;, &#039;&#039;ça tourne mal&#039;&#039;, &#039;&#039;sa réaction est étonnante&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71483319-1-0-1-0-webm-il-dort-dans-son-lit-se-mange-une-branche-sa-pasteque-tombe-dans-l-eau.htm &amp;lt;nowiki&amp;gt; [WEBM] Il dort dans son lit, se mange une branche, sa pastèque tombe dans l&#039;eau &amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70167283-1-0-1-0-webm-il-tente-le-bah-sort-la-suite-risque-de-vous-surprendre.htm &amp;lt;nowiki&amp;gt;[WEBM] il tente le BAH SORS, la suite risque de vous surprendre&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Balise_VIDÉO&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Balise [VIDÉO] === &lt;br /&gt;
À défaut de comporter la balise WEBM (cependant largement majoritaire pour les topics de ce genre), certains intitulés comportent la mention &amp;quot;vidéo&amp;quot;, ce qui arrive généralement lorsque l&#039;OP est un [[newfag]] ne connaissant pas encore bien les codes du forum ou lorsque la vidéo partagée n&#039;est pas un WEBM à proprement parler.&lt;br /&gt;
&lt;br /&gt;
=== Sélection naturelle ===&lt;br /&gt;
Le terme de [[sélection naturelle]] est très apprécié lorsqu&#039;il s&#039;agit d&#039;intituler des WEBM filmant des accidents ou témoignant de l&#039;incompétence de certains individus qui entraînera de graves conséquences. On retrouve des variantes toujours plus nombreuses de l&#039;expression, telles que : &#039;&#039;la sélection fut 100% naturelle&#039;&#039;, &#039;&#039;la nature prend le dossier en charge&#039;&#039;, &#039;&#039;la nature n&#039;est pas de cet avis&#039;&#039;, etc. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://jvarchive.com/forums/42-51-71409556-1-0-1-0-webm-un-malien-tente-un-plongeon-a-st-barth-la-nature-soccupe-du-dossier &amp;lt;nowiki&amp;gt; [WEBM] Un MALIEN tente un PLONGEON à ST-BARTH, la NATURE s&#039;occupe du DOSSIER&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71435766-1-0-1-0-webm-un-petit-moment-d-inattention-sur-la-route-la-selection-ne-se-fait-pas-attendre.htm &amp;lt;nowiki&amp;gt;[WEBM] Un petit MOMENT d&#039;INATTENTION sur la ROUTE, la SÉLECTION ne se fait PAS ATTENDRE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Réaction de la [[modération]] ==&lt;br /&gt;
=== Avant mai 2024 ===&lt;br /&gt;
Il n&#039;y a officiellement pas de réglementation à propos des WEBM sur les forums.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1180766811&amp;lt;/ref&amp;gt; Cependant, leur partage n&#039;est généralement pas très apprécié par la modération du fait qu&#039;ils peuvent rapidement conduire à la diffusion de vidéos hors-charte.&lt;br /&gt;
Ainsi, les topics WEBM sont la plupart du temps supprimés après une durée relativement courte surtout lorsque les vidéos qu&#039;ils incluent ne respectent par la [[charte]] et remplissent le motif &#039;&#039;Image ou vidéo choquante, gore&#039;&#039;, malgré le grand nombre de forumeurs qui apprécient ces topics.&lt;br /&gt;
&lt;br /&gt;
=== Mai 2024 ===&lt;br /&gt;
Le 28 mai 2024, les forumeurs remarquent que les posts contenant des liens redirigeant vers du contenu hébergé sur [https://streamable.com Streamable], [https://webmshare.com webmshare] et [https://issoutv.com IssouTV] sont automatiquement supprimés&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74327261-1-0-1-0-censure-les-videos-streamable-desormais-auto-supprimee-sur-le-forom.htm&amp;lt;/ref&amp;gt;, ce qui provoque colère et dépit. [https://webm.red webm.red] et [https://www.risishack.com/ RisiShack] sont cependant épargnés. Les [[administrateur|administrateurs]] de jeuxvideo.com se justifient de la manière suivante :&lt;br /&gt;
{{BoxCitation|Citation=Les vidéos hébergées sur ces plateformes diffusent du contenu qui ne respecte pas la charte du forum et demandent une bande passante conséquente de modération. &amp;lt;br&amp;gt; Par conséquent ces dernières sont interdites.&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/22/2/1716915626-screnn5874456.png&amp;lt;/ref&amp;gt;|Auteur=Service réclamations de jeuxvideo.com}}&lt;br /&gt;
&lt;br /&gt;
Finalement, une journée après, les liens redirigeant vers les deux plateformes semblent de ne plus être censurés après un assouplissement de la restriction.&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{Article de qualité}}&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
[[Catégorie:Vocabulaire externe]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=WEBM&amp;diff=154817</id>
		<title>WEBM</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=WEBM&amp;diff=154817"/>
		<updated>2024-05-28T18:15:33Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* À partir de mai 2024 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:WebM_logo.png|vignette|250px|Le logotype officiel du format WebM.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WEBM&#039;&#039;&#039; (stylisé &#039;&#039;WebM&#039;&#039;) est un format de fichier vidéo principalement destiné à être utilisé sur le Web. Ce terme est par extension utilisé par le [[Blabla 18-25 ans|18-25]] pour qualifier les vidéos que se partagent les [[forumeur|forumeurs]] entre eux. Les WEBM sont généralement appréciés, si bien que certains forumeurs se sont spécialisés dans ce domaine. Les topics comportant en titre une balise &#039;&#039;[WEBM]&#039;&#039; indiquent qu&#039;ils contiennent une telle vidéo.&lt;br /&gt;
&lt;br /&gt;
= Contenu =&lt;br /&gt;
== Dénomination ==&lt;br /&gt;
Bien que WEBM désigne à l&#039;origine un format de fichier vidéo spécifique, on nomme habituellement &#039;&#039;WEBM&#039;&#039; toute vidéo partagée entre [[forumeurs]], hébergée et relayée sur un service Web prévu à cet effet (voir [[WEBM#Plateformes d&#039;hébergement et de relais|la section attitrée de cet article]]), avec comme seul intérêt la vidéo en elle-même. Une faible minorité de forumeurs puristes prône l&#039;utilisation de ce terme exclusivement concernant les fichiers portant cette extension&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1214151400&amp;lt;/ref&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Les vidéos présentes sur les réseaux sociaux, YouTube ou toute autre plateforme très modérée ne sont quant à eux habituellement pas vus comme des WEBM car ce style de contenu est souvent éloigné de ce qu&#039;aiment se partager les forumeurs (voir [[WEBM#Nature des WEBM|la section suivante]] pour plus de détails).&lt;br /&gt;
== Nature des WEBM ==&lt;br /&gt;
Les WEBM partagés par les forumeurs ont principalement pour but de faire rire ou de surprendre. La plupart du temps, les WEBM mettent en scène des vidéos insolites ou à caractère humoristique. Loin d&#039;êtres niais et gentillets, les WEBM partagés par les forumeurs se révèlent souvent trash voire très explicites.&lt;br /&gt;
&lt;br /&gt;
Plus précisément, il peut s&#039;agir d&#039;accidents routiers, de chutes, d&#039;incidents matériels ou industriels impliquant directement des humains ou non, de scènes de violence relativement légères et rarement gores, ou de nudité, mais également de redpills sur les relations sociales, de contenus glissants etc.&lt;br /&gt;
&lt;br /&gt;
Ceci dit, une partie non-négligeable des WEBM partagés ont un objectif purement humoristique, souvent par leur attrait, contenu ou intitulé absurde. &lt;br /&gt;
&lt;br /&gt;
=== Chine ===&lt;br /&gt;
Certains types spéciaux de WEBM ont émergé, par exemple sur la Chine où le but principal des WEBM partagés (réservés à un public averti) est de montrer des accidents du travail ou accidents industriels récurrents en Chine, ainsi que le manque apparent d&#039;empathie qu&#039;éprouvent les Chinois envers leurs compatriotes lorsqu&#039;ils sont victimes d&#039;accidents routiers, en les laissant pour morts, ou encore le décalage qu&#039;il peut y avoir entre les sociétés européennes et asiatiques.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-60397834-1-0-1-0-putain-les-webm-du-pave-chine.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
On retrouve la plupart de ces WEBM dans le [[Pavé Chine|pavé Chine]].&lt;br /&gt;
&lt;br /&gt;
=== Pneus tueurs ===&lt;br /&gt;
Cette appellation est réservée aux WEBM filmant des scènes de pneus qui lorsqu&#039;ils se décrochent de leur châssis peuvent causer de gros dégâts humains ou matériels. Une [[boucle]] est alimentée par le forumeur &#039;&#039;PneuTueur&#039;&#039; à ce sujet &amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=pneus%20tueurs&amp;lt;/ref&amp;gt;. Il semble que l&#039;expression ait été pour la première fois utilisée sur [https://www.jeuxvideo.com/forums/42-51-70854977-1-0-1-0-webm-les-pneus-tueurs-uniquement-en-chine-etonnant.htm ce topic], et a été largement popularisée depuis lors.&lt;br /&gt;
&lt;br /&gt;
=== WEBM du malaise ===&lt;br /&gt;
{{Article connexe|Malaisologie}}&lt;br /&gt;
[[File:webm-malaise.png|vignette|200px|Le topic &#039;&#039;WEBM du malaise&#039;&#039; du nouvel an 2023.]]&lt;br /&gt;
Certains WEBM se distinguent des autres par leur capacité à provoquer un malaise considérable chez les forumeurs : il s&#039;agit des WEBM dits « du malaise », mettant souvent en scène des personnages archétypaux du [[french dream]] (comme des [[Magalie]]) ou des &#039;&#039;cas sociaux&#039;&#039; de TikTok.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71308627-1-0-1-0-boucle-cest-lheure-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71498712-1-0-1-0-soiree-nouvel-an-webm-la-compilation-ultime-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt; C&#039;est par exemple le cas de la vidéo [[Et Tic et Tac hein hein|&#039;&#039;et tic et tac hein hein&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
== Plateformes d&#039;hébergement et de relais ==&lt;br /&gt;
Les plateformes d&#039;hébergement sont les services Web qui hébergent les WEBM dont les forumeurs se partagent les liens. Souvent, ce sont ces derniers qui ajoutent eux-mêmes la vidéo sur une plateforme telle que Streamable ou webmshare, mais il se peut également qu&#039;ils partagent le lien &amp;quot;brut&amp;quot; amenant à la vidéo originelle (liens [[4chan]], Reddit, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
Les plateformes d&#039;hébergement/relais de WEBM les plus utilisées par les forumeurs sont (par ordre approximatif de popularité) :&lt;br /&gt;
* [https://streamable.com Streamable]&lt;br /&gt;
* [https://webmshare.com webmshare]&lt;br /&gt;
* [https://4chan.org 4chan] (notamment le board &#039;&#039;/gif/&#039;&#039;)&lt;br /&gt;
* [https://issoutv.com/ IssouTV]&lt;br /&gt;
* [https://webm.red/ webm.red]&lt;br /&gt;
* [https://www.reddit.com Reddit] (notamment les subreddits &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039;)&lt;br /&gt;
* [https://orbitum.space/ orbitum.space]&lt;br /&gt;
* [https://www.risishack.com/ RisiShack].&lt;br /&gt;
&lt;br /&gt;
Stremable et webmshare sont les plateformes les plus populaires sur le forum. Streamable a l&#039;avantage de prendre en charge la majorité des formats vidéo (dont WEBM et MP4) mais ne permet pas de télécharger nativement du contenu, contrairement à webmshare qui n&#039;héberge que les fichiers WEBM et autorise le téléchargement de vidéos. Les contenus choquants ou illégaux sont occasionnellement supprimés sur Streamable, et leur auteur banni,  ce qui n&#039;arrive visiblement jamais sur webmshare : il semble que ce soit la plateforme la plus stable. De plus, il est nécessaire de créer un compte sur Streamable afin que les vidéos uploadées y soit conservées plus d&#039;un jour, tandis que webmshare peut être utilisée en tant qu&#039;invité. Le contenu hébergé sur webmshare ne peut être lu sur iPhone&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-70753532-1-0-1-0-tu-as-l-iphone-14-oui-je-ne-peux-pas-lire-les-webm.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71211520-1-0-1-0-j-arrive-pas-a-lire-les-webm-sur-mon-iphone-13.htm&amp;lt;/ref&amp;gt;. Les deux demeurent (septembre 2023) largement en tête quant au nombre de vidéos partagées sur le forum. &amp;lt;br&amp;gt;&lt;br /&gt;
IssouTV a été comme son nom l&#039;indique spécialement créé pour les utilisateurs de [[jeuxvideo.com|JVC]] et demeure assez utilisé. &amp;lt;br&amp;gt;&lt;br /&gt;
Le board &#039;&#039;/gif/&#039;&#039; de [[4chan]] contient un grand nombre de vidéos pornographiques mais également du contenu trash et gore. Très souvent, les contenus hébergés sur le &#039;&#039;/gif/&#039;&#039; de 4chan sont supprimés quelques semaines voire mois après ; on ignore s&#039;il s&#039;agit de l&#039;action d&#039;administrateurs ou d&#039;un système automatique. Ainsi, les liens 4chan des anciens topics ne redirigent souvent que vers une erreur 404. Il est donc plutôt recommandé de télécharger le contenu hébergé sur 4chan et de le déposer sur une plateforme plus fiable.&amp;lt;br&amp;gt;&lt;br /&gt;
webm.red est une alternative à webmshare peu utilisée mais qui présente à peu près les mêmes fonctionnalités (prise en charge du format WEBM seulement, possibilité de télécharger les vidéos, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
Les threads Reddit &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039; contiennent quant à eux du contenu relativement trash.&lt;br /&gt;
La plateforme décentralisée &#039;&#039;orbitum.space&#039;&#039;, gérée par des [[forumeurs]], accueille parfois des vidéos censurées sur &#039;&#039;jeuxvideo.com&#039;&#039; ; RisiShack, très peu utilisé, héberge des fichiers MP4.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que les topics comportant un lien YouTube, Twitter ou TikTok portent généralement une balise &#039;&#039;[WEBM]&#039;&#039; bien qu&#039;ils ne puissent être considérés comme tel au sens strict. Certains forumeurs puristes ne manquent pas de le faire remarquer.&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-71462933-1-0-1-0-webm-ce-boule-va-vous-rendre-maboule&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anciennes plateformes d&#039;hébergement ===&lt;br /&gt;
Il semble que d&#039;autres plateformes aient été relativement populaires dans le passé ; c&#039;est notamment le cas de &#039;&#039;webm.land&#039;&#039; et de &#039;&#039;yuki.la&#039;&#039;.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-55865982-1-0-1-0-webm-no-trash-hun-j-veux-pas-de-410-moi-svp.htm&amp;lt;/ref&amp;gt; Ces services Web sont aujourd&#039;hui fermés et inaccessibles. Il en est de même pour le contenu qui avait été hébergé dessus.&lt;br /&gt;
&lt;br /&gt;
=== Script ===&lt;br /&gt;
Un [[script|userscript]] &#039;&#039;StreamableDownloader&#039;&#039; a été développé par un membre du forum pour permettre aux utilisateurs de télécharger les vidéos hébergées sur [https://streamable.com Streamable], voir [https://greasyfork.org/fr/scripts/453105-streamabledownloader la page d&#039;accueil du script].&lt;br /&gt;
&lt;br /&gt;
=== WEBM originaux ===&lt;br /&gt;
La plupart du temps les WEBM sont relayés sur les plateformes précédemment citées, mais les originaux sont souvent trouvés sur des sites trashs/gores tels que WebChoc, Bestgore, Kaotic, et auparavant LeakReality avant qu&#039;il ne soit supprimé. Les liens vers ces plateformes sont cependant très rares afin de minimiser le risque de censure, et les forumeurs préfèrent uploader le contenu en question sur une des plateformes précédemment citées.&lt;br /&gt;
Certains WEBM proviennent directement de TikTok mais semblent être beaucoup moins appréciés par la communauté du fait de leur contenu jugé souvent peu intéressant et de la désapprobation générale de ce réseau social par le forum. On peut également retrouver des WEBM hébergés à l&#039;origine sur YouTube ou Twitter. Ces trois derniers étant plus strictement modérés, ce sont souvent des WEBM softs qui découlent de là-bas. De ce fait, on leur préfère la balise &#039;&#039;[VIDÉO]&#039;&#039; (voir [[#Balise_VIDÉO|la sous-partie éponyme de cet article]]).&lt;br /&gt;
&lt;br /&gt;
= Topics WEBM =&lt;br /&gt;
Les [[topic|topics]] WEBM sont très courants et très populaires sur le [[Blabla 18-25 ans|18-25]], mais demeurent trouvables presque exclusivement sur ce forum. On y compte environ une vingtaine de nouveaux topics WEBM par jour&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=webm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Types de topics WEBM ==&lt;br /&gt;
On distingue deux types de topics WEBM :&lt;br /&gt;
* Des topics à &amp;quot;WEBM unique&amp;quot; ayant pour but de présenter un seul WEBM, dont le lien est présent dans le premier message de l&#039;[[OP]]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71425835-1-0-1-0-webm-il-crie-woop-woop-puis-fait-une-prise-de-catch-a-son-micro-ondes-et-devient-tetraplegique.htm  &amp;lt;nowiki&amp;gt;[WEBM] Il crie « WOOP WOOP » puis FAIT une PRISE de CATCH à son MICRO-ONDES et devient TÉTRAPLÉGIQUE&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70627502-1-0-1-0-webm-il-colle-une-voiture-sur-l-autoroute-la-selection-fut-naturelle.htm &amp;lt;nowiki&amp;gt;[WEBM] Il colle une VOITURE sur l&#039;AUTOROUTE, la sélection fut NATURELLE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* Ainsi que des topics &amp;quot;compilation&amp;quot; où l&#039;auteur poste en continue des WEBM pendant plusieurs minutes ou dizaines de minutes (dépendant de la quantité de WEBM dont l&#039;[[OP]] est en possession, de la réception du topic par les autres forumeurs, et surtout de la réaction de la [[modération]]). &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421226-1-0-1-0-webm-ils-jouent-a-biere-pong-un-pere-noel-apparait-et-se-casse-le-coccyx.htm &amp;lt;nowiki&amp;gt;[WEBM] Ils jouent à BIÈRE-PONG, un PÈRE NOËL APPARAÎT et se CASSE le COCCYX&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450605-1-0-1-0-webm-il-evite-de-justesse-sa-tronconneuse-se-remet-en-question.htm &amp;lt;nowiki&amp;gt;[WEBM] Il évite de justesse sa TRONÇONNEUSE, se REMET en QUESTION&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien que les topics à WEBM unique soient les plus courants sur le forum, les topics de compilation sont généralement très appréciés par la planète forum : ils montent facilement à plusieurs centaines de connectés et à une dizaine de pages. Il arrive souvent que d&#039;autres amateurs de WEBM y rejoignent l&#039;auteur pour poster leurs vidéos.&lt;br /&gt;
&lt;br /&gt;
=== Topics [[fake|fakes]] ===&lt;br /&gt;
Certains topics [[troll|trolls]] annoncent dans leur titre une vidéo imaginaire à l&#039;intitulé très aguicheur et insolite, où le premier message est parfois accompagnés de la mention [[post ou cancer]] ou ses dérivés, &#039;&#039;pourquoi as-tu cliqué ?&#039;&#039;, &#039;&#039;&amp;quot;cette vidéo n&#039;existe pas&#039;&#039;, &#039;&#039;j&#039;aimerais bien voir ça&#039;&#039;, simplement dans le but d&#039;attirer des connectés sur le topic. S&#039;ensuit alors des réponses ironiques de type &#039;&#039;pour voir la vidéo&#039;&#039; ou encore &#039;&#039;t&#039;as oublié le lien&#039;&#039;. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421330-1-0-1-0-webm-il-plante-une-hache-sur-un-cheval-qui-le-catapulte-dans-le-composte.htm &amp;lt;nowiki&amp;gt;[Webm] Il plante une hache sur un cheval qui le catapulte dans le composte&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450141-1-0-1-0-webm-cette-japonaise-chie-une-buche-de-noel-dans-l-assiette-de-son-copain.htm &amp;lt;nowiki&amp;gt;[WEBM] Cette JAPONAISE CHIE une bûche de noël dans l&#039;assiette de son COPAIN&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est évident que ces topics sont très peu appréciés et souvent [[DDB]] en masse, puisqu&#039;ils occasionnent une déception chez les forumeurs ayant cliqué.&lt;br /&gt;
&lt;br /&gt;
=== Certification de [[nofake]] et [[éclaireur]] ===&lt;br /&gt;
[[Fichier:nofake sticker.png|vignette|200px|Le fameux sticker nofake étant généralement admis comme preuve incontestable d&#039;un nofake.]]&lt;br /&gt;
&lt;br /&gt;
Parallèlement aux topics fake, la certification de [[nofake]], réalisée par un forumeur autre que l&#039;auteur, est un moyen pour ceux qui ont cliqué sur le topic de savoir si le titre est en bonne adéquation avec le contenu de la vidéo présentée. Ces certifications, qui permettent à la fois de faire gage de qualité et d&#039;[[up]] le topic concerné, sont parfois demandées par l&#039;[[OP]] dans son post pour démontrer la véracité du titre aussi invraisemblable soit-il. &amp;lt;br&amp;gt;&lt;br /&gt;
On note diverses déclinaisons de cette certification, telles que : [[le titre est malheureusement nofake|&#039;&#039;Le titre est malheureusement nofake&#039;&#039;]], &#039;&#039;Je certifie que le titre de l&#039;annotateur principal de ce fil de discussion est en total adéquation avec le contenu du présent court-métrage présenté sur cette page HTML sur laquelle vous naviguez actuellement.&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
L&#039;[[éclaireur]], quant à lui, est parfois demandé sur les topics WEBM par un forumeur réticent à l&#039;idée de cliquer sur le lien partagé par l&#039;auteur à cause d&#039;un titre de topic douteux, de peur de tomber sur un screamer ou du contenu gore, choquant. Les éclaireurs ont ainsi pour mission de vérifier la vidéo et de signaler si cette dernière est &#039;&#039;safe&#039;&#039; ou non. L&#039;éclaireur peut dans la foulée réaliser la certification de nofake.&lt;br /&gt;
&lt;br /&gt;
== Titres ==&lt;br /&gt;
Les titres de topics WEBM sont souvent aguicheurs et insolites ; ils caricaturent les contenus &#039;&#039;putaclicks&#039;&#039; d&#039;Internet en reprenant leurs éléments de langage. Parmi ces derniers, nous pouvons citer entre autres : &#039;&#039;la suite risque de vous surprendre&#039;&#039;, &#039;&#039;ça tourne mal&#039;&#039;, &#039;&#039;sa réaction est étonnante&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71483319-1-0-1-0-webm-il-dort-dans-son-lit-se-mange-une-branche-sa-pasteque-tombe-dans-l-eau.htm &amp;lt;nowiki&amp;gt; [WEBM] Il dort dans son lit, se mange une branche, sa pastèque tombe dans l&#039;eau &amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70167283-1-0-1-0-webm-il-tente-le-bah-sort-la-suite-risque-de-vous-surprendre.htm &amp;lt;nowiki&amp;gt;[WEBM] il tente le BAH SORS, la suite risque de vous surprendre&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Balise_VIDÉO&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Balise [VIDÉO] === &lt;br /&gt;
À défaut de comporter la balise WEBM (cependant largement majoritaire pour les topics de ce genre), certains intitulés comportent la mention &amp;quot;vidéo&amp;quot;, ce qui arrive généralement lorsque l&#039;OP est un [[newfag]] ne connaissant pas encore bien les codes du forum ou lorsque la vidéo partagée n&#039;est pas un WEBM à proprement parler.&lt;br /&gt;
&lt;br /&gt;
=== Sélection naturelle ===&lt;br /&gt;
Le terme de [[sélection naturelle]] est très apprécié lorsqu&#039;il s&#039;agit d&#039;intituler des WEBM filmant des accidents ou témoignant de l&#039;incompétence de certains individus qui entraînera de graves conséquences. On retrouve des variantes toujours plus nombreuses de l&#039;expression, telles que : &#039;&#039;la sélection fut 100% naturelle&#039;&#039;, &#039;&#039;la nature prend le dossier en charge&#039;&#039;, &#039;&#039;la nature n&#039;est pas de cet avis&#039;&#039;, etc. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://jvarchive.com/forums/42-51-71409556-1-0-1-0-webm-un-malien-tente-un-plongeon-a-st-barth-la-nature-soccupe-du-dossier &amp;lt;nowiki&amp;gt; [WEBM] Un MALIEN tente un PLONGEON à ST-BARTH, la NATURE s&#039;occupe du DOSSIER&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71435766-1-0-1-0-webm-un-petit-moment-d-inattention-sur-la-route-la-selection-ne-se-fait-pas-attendre.htm &amp;lt;nowiki&amp;gt;[WEBM] Un petit MOMENT d&#039;INATTENTION sur la ROUTE, la SÉLECTION ne se fait PAS ATTENDRE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Réaction de la [[modération]] ==&lt;br /&gt;
=== Avant mai 2024 ===&lt;br /&gt;
Il n&#039;y a officiellement pas de réglementation à propos des WEBM sur les forums.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1180766811&amp;lt;/ref&amp;gt; Cependant, leur partage n&#039;est généralement pas très apprécié par la modération du fait qu&#039;ils peuvent rapidement conduire à la diffusion de vidéos hors-charte.&lt;br /&gt;
Ainsi, les topics WEBM sont la plupart du temps supprimés après une durée relativement courte surtout lorsque les vidéos qu&#039;ils incluent ne respectent par la [[charte]] et remplissent le motif &#039;&#039;Image ou vidéo choquante, gore&#039;&#039;, malgré le grand nombre de forumeurs qui apprécient ces topics.&lt;br /&gt;
&lt;br /&gt;
=== À partir de mai 2024 ===&lt;br /&gt;
Le 28 mai 2024, les forumeurs remarquent que les posts contenant des liens redirigeant vers du contenu hébergé sur [https://streamable.com Streamable], [https://webmshare.com webmshare] et [https://issoutv.com IssouTV] sont automatiquement supprimés&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74327261-1-0-1-0-censure-les-videos-streamable-desormais-auto-supprimee-sur-le-forom.htm&amp;lt;/ref&amp;gt;, ce qui provoque colère et dépit. [https://webm.red webm.red] et [https://www.risishack.com/ RisiShack] sont cependant épargnés. Les [[administrateur|administrateurs]] de jeuxvideo.com se justifient de la manière suivante :&lt;br /&gt;
{{BoxCitation|Citation=Les vidéos hébergées sur ces plateformes diffusent du contenu qui ne respecte pas la charte du forum et demandent une bande passante conséquente de modération. &amp;lt;br&amp;gt; Par conséquent ces dernières sont interdites.&amp;lt;ref&amp;gt;https://image.noelshack.com/fichiers/2024/22/2/1716915626-screnn5874456.png&amp;lt;/ref&amp;gt;|Auteur=Service réclamations de jeuxvideo.com}}&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
[[Catégorie:Vocabulaire externe]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=WEBM&amp;diff=154816</id>
		<title>WEBM</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=WEBM&amp;diff=154816"/>
		<updated>2024-05-28T18:14:46Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Réaction de la modération */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:WebM_logo.png|vignette|250px|Le logotype officiel du format WebM.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WEBM&#039;&#039;&#039; (stylisé &#039;&#039;WebM&#039;&#039;) est un format de fichier vidéo principalement destiné à être utilisé sur le Web. Ce terme est par extension utilisé par le [[Blabla 18-25 ans|18-25]] pour qualifier les vidéos que se partagent les [[forumeur|forumeurs]] entre eux. Les WEBM sont généralement appréciés, si bien que certains forumeurs se sont spécialisés dans ce domaine. Les topics comportant en titre une balise &#039;&#039;[WEBM]&#039;&#039; indiquent qu&#039;ils contiennent une telle vidéo.&lt;br /&gt;
&lt;br /&gt;
= Contenu =&lt;br /&gt;
== Dénomination ==&lt;br /&gt;
Bien que WEBM désigne à l&#039;origine un format de fichier vidéo spécifique, on nomme habituellement &#039;&#039;WEBM&#039;&#039; toute vidéo partagée entre [[forumeurs]], hébergée et relayée sur un service Web prévu à cet effet (voir [[WEBM#Plateformes d&#039;hébergement et de relais|la section attitrée de cet article]]), avec comme seul intérêt la vidéo en elle-même. Une faible minorité de forumeurs puristes prône l&#039;utilisation de ce terme exclusivement concernant les fichiers portant cette extension&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1214151400&amp;lt;/ref&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Les vidéos présentes sur les réseaux sociaux, YouTube ou toute autre plateforme très modérée ne sont quant à eux habituellement pas vus comme des WEBM car ce style de contenu est souvent éloigné de ce qu&#039;aiment se partager les forumeurs (voir [[WEBM#Nature des WEBM|la section suivante]] pour plus de détails).&lt;br /&gt;
== Nature des WEBM ==&lt;br /&gt;
Les WEBM partagés par les forumeurs ont principalement pour but de faire rire ou de surprendre. La plupart du temps, les WEBM mettent en scène des vidéos insolites ou à caractère humoristique. Loin d&#039;êtres niais et gentillets, les WEBM partagés par les forumeurs se révèlent souvent trash voire très explicites.&lt;br /&gt;
&lt;br /&gt;
Plus précisément, il peut s&#039;agir d&#039;accidents routiers, de chutes, d&#039;incidents matériels ou industriels impliquant directement des humains ou non, de scènes de violence relativement légères et rarement gores, ou de nudité, mais également de redpills sur les relations sociales, de contenus glissants etc.&lt;br /&gt;
&lt;br /&gt;
Ceci dit, une partie non-négligeable des WEBM partagés ont un objectif purement humoristique, souvent par leur attrait, contenu ou intitulé absurde. &lt;br /&gt;
&lt;br /&gt;
=== Chine ===&lt;br /&gt;
Certains types spéciaux de WEBM ont émergé, par exemple sur la Chine où le but principal des WEBM partagés (réservés à un public averti) est de montrer des accidents du travail ou accidents industriels récurrents en Chine, ainsi que le manque apparent d&#039;empathie qu&#039;éprouvent les Chinois envers leurs compatriotes lorsqu&#039;ils sont victimes d&#039;accidents routiers, en les laissant pour morts, ou encore le décalage qu&#039;il peut y avoir entre les sociétés européennes et asiatiques.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-60397834-1-0-1-0-putain-les-webm-du-pave-chine.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
On retrouve la plupart de ces WEBM dans le [[Pavé Chine|pavé Chine]].&lt;br /&gt;
&lt;br /&gt;
=== Pneus tueurs ===&lt;br /&gt;
Cette appellation est réservée aux WEBM filmant des scènes de pneus qui lorsqu&#039;ils se décrochent de leur châssis peuvent causer de gros dégâts humains ou matériels. Une [[boucle]] est alimentée par le forumeur &#039;&#039;PneuTueur&#039;&#039; à ce sujet &amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=pneus%20tueurs&amp;lt;/ref&amp;gt;. Il semble que l&#039;expression ait été pour la première fois utilisée sur [https://www.jeuxvideo.com/forums/42-51-70854977-1-0-1-0-webm-les-pneus-tueurs-uniquement-en-chine-etonnant.htm ce topic], et a été largement popularisée depuis lors.&lt;br /&gt;
&lt;br /&gt;
=== WEBM du malaise ===&lt;br /&gt;
{{Article connexe|Malaisologie}}&lt;br /&gt;
[[File:webm-malaise.png|vignette|200px|Le topic &#039;&#039;WEBM du malaise&#039;&#039; du nouvel an 2023.]]&lt;br /&gt;
Certains WEBM se distinguent des autres par leur capacité à provoquer un malaise considérable chez les forumeurs : il s&#039;agit des WEBM dits « du malaise », mettant souvent en scène des personnages archétypaux du [[french dream]] (comme des [[Magalie]]) ou des &#039;&#039;cas sociaux&#039;&#039; de TikTok.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71308627-1-0-1-0-boucle-cest-lheure-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71498712-1-0-1-0-soiree-nouvel-an-webm-la-compilation-ultime-des-webm-du-malaise.htm&amp;lt;/ref&amp;gt; C&#039;est par exemple le cas de la vidéo [[Et Tic et Tac hein hein|&#039;&#039;et tic et tac hein hein&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
== Plateformes d&#039;hébergement et de relais ==&lt;br /&gt;
Les plateformes d&#039;hébergement sont les services Web qui hébergent les WEBM dont les forumeurs se partagent les liens. Souvent, ce sont ces derniers qui ajoutent eux-mêmes la vidéo sur une plateforme telle que Streamable ou webmshare, mais il se peut également qu&#039;ils partagent le lien &amp;quot;brut&amp;quot; amenant à la vidéo originelle (liens [[4chan]], Reddit, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
Les plateformes d&#039;hébergement/relais de WEBM les plus utilisées par les forumeurs sont (par ordre approximatif de popularité) :&lt;br /&gt;
* [https://streamable.com Streamable]&lt;br /&gt;
* [https://webmshare.com webmshare]&lt;br /&gt;
* [https://4chan.org 4chan] (notamment le board &#039;&#039;/gif/&#039;&#039;)&lt;br /&gt;
* [https://issoutv.com/ IssouTV]&lt;br /&gt;
* [https://webm.red/ webm.red]&lt;br /&gt;
* [https://www.reddit.com Reddit] (notamment les subreddits &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039;)&lt;br /&gt;
* [https://orbitum.space/ orbitum.space]&lt;br /&gt;
* [https://www.risishack.com/ RisiShack].&lt;br /&gt;
&lt;br /&gt;
Stremable et webmshare sont les plateformes les plus populaires sur le forum. Streamable a l&#039;avantage de prendre en charge la majorité des formats vidéo (dont WEBM et MP4) mais ne permet pas de télécharger nativement du contenu, contrairement à webmshare qui n&#039;héberge que les fichiers WEBM et autorise le téléchargement de vidéos. Les contenus choquants ou illégaux sont occasionnellement supprimés sur Streamable, et leur auteur banni,  ce qui n&#039;arrive visiblement jamais sur webmshare : il semble que ce soit la plateforme la plus stable. De plus, il est nécessaire de créer un compte sur Streamable afin que les vidéos uploadées y soit conservées plus d&#039;un jour, tandis que webmshare peut être utilisée en tant qu&#039;invité. Le contenu hébergé sur webmshare ne peut être lu sur iPhone&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-70753532-1-0-1-0-tu-as-l-iphone-14-oui-je-ne-peux-pas-lire-les-webm.htm&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-71211520-1-0-1-0-j-arrive-pas-a-lire-les-webm-sur-mon-iphone-13.htm&amp;lt;/ref&amp;gt;. Les deux demeurent (septembre 2023) largement en tête quant au nombre de vidéos partagées sur le forum. &amp;lt;br&amp;gt;&lt;br /&gt;
IssouTV a été comme son nom l&#039;indique spécialement créé pour les utilisateurs de [[jeuxvideo.com|JVC]] et demeure assez utilisé. &amp;lt;br&amp;gt;&lt;br /&gt;
Le board &#039;&#039;/gif/&#039;&#039; de [[4chan]] contient un grand nombre de vidéos pornographiques mais également du contenu trash et gore. Très souvent, les contenus hébergés sur le &#039;&#039;/gif/&#039;&#039; de 4chan sont supprimés quelques semaines voire mois après ; on ignore s&#039;il s&#039;agit de l&#039;action d&#039;administrateurs ou d&#039;un système automatique. Ainsi, les liens 4chan des anciens topics ne redirigent souvent que vers une erreur 404. Il est donc plutôt recommandé de télécharger le contenu hébergé sur 4chan et de le déposer sur une plateforme plus fiable.&amp;lt;br&amp;gt;&lt;br /&gt;
webm.red est une alternative à webmshare peu utilisée mais qui présente à peu près les mêmes fonctionnalités (prise en charge du format WEBM seulement, possibilité de télécharger les vidéos, etc.). &amp;lt;br&amp;gt;&lt;br /&gt;
Les threads Reddit &#039;&#039;WinStupidPrizes&#039;&#039;, &#039;&#039;CrazyFuckingVideos&#039;&#039; et &#039;&#039;DarwinAwards&#039;&#039; contiennent quant à eux du contenu relativement trash.&lt;br /&gt;
La plateforme décentralisée &#039;&#039;orbitum.space&#039;&#039;, gérée par des [[forumeurs]], accueille parfois des vidéos censurées sur &#039;&#039;jeuxvideo.com&#039;&#039; ; RisiShack, très peu utilisé, héberge des fichiers MP4.&lt;br /&gt;
&lt;br /&gt;
Il est à noter que les topics comportant un lien YouTube, Twitter ou TikTok portent généralement une balise &#039;&#039;[WEBM]&#039;&#039; bien qu&#039;ils ne puissent être considérés comme tel au sens strict. Certains forumeurs puristes ne manquent pas de le faire remarquer.&amp;lt;ref&amp;gt;https://jvarchive.com/forums/42-51-71462933-1-0-1-0-webm-ce-boule-va-vous-rendre-maboule&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Anciennes plateformes d&#039;hébergement ===&lt;br /&gt;
Il semble que d&#039;autres plateformes aient été relativement populaires dans le passé ; c&#039;est notamment le cas de &#039;&#039;webm.land&#039;&#039; et de &#039;&#039;yuki.la&#039;&#039;.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-55865982-1-0-1-0-webm-no-trash-hun-j-veux-pas-de-410-moi-svp.htm&amp;lt;/ref&amp;gt; Ces services Web sont aujourd&#039;hui fermés et inaccessibles. Il en est de même pour le contenu qui avait été hébergé dessus.&lt;br /&gt;
&lt;br /&gt;
=== Script ===&lt;br /&gt;
Un [[script|userscript]] &#039;&#039;StreamableDownloader&#039;&#039; a été développé par un membre du forum pour permettre aux utilisateurs de télécharger les vidéos hébergées sur [https://streamable.com Streamable], voir [https://greasyfork.org/fr/scripts/453105-streamabledownloader la page d&#039;accueil du script].&lt;br /&gt;
&lt;br /&gt;
=== WEBM originaux ===&lt;br /&gt;
La plupart du temps les WEBM sont relayés sur les plateformes précédemment citées, mais les originaux sont souvent trouvés sur des sites trashs/gores tels que WebChoc, Bestgore, Kaotic, et auparavant LeakReality avant qu&#039;il ne soit supprimé. Les liens vers ces plateformes sont cependant très rares afin de minimiser le risque de censure, et les forumeurs préfèrent uploader le contenu en question sur une des plateformes précédemment citées.&lt;br /&gt;
Certains WEBM proviennent directement de TikTok mais semblent être beaucoup moins appréciés par la communauté du fait de leur contenu jugé souvent peu intéressant et de la désapprobation générale de ce réseau social par le forum. On peut également retrouver des WEBM hébergés à l&#039;origine sur YouTube ou Twitter. Ces trois derniers étant plus strictement modérés, ce sont souvent des WEBM softs qui découlent de là-bas. De ce fait, on leur préfère la balise &#039;&#039;[VIDÉO]&#039;&#039; (voir [[#Balise_VIDÉO|la sous-partie éponyme de cet article]]).&lt;br /&gt;
&lt;br /&gt;
= Topics WEBM =&lt;br /&gt;
Les [[topic|topics]] WEBM sont très courants et très populaires sur le [[Blabla 18-25 ans|18-25]], mais demeurent trouvables presque exclusivement sur ce forum. On y compte environ une vingtaine de nouveaux topics WEBM par jour&amp;lt;ref&amp;gt;https://jvarchive.com/topic/recherche?searchType=titre_topic&amp;amp;search=webm&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Types de topics WEBM ==&lt;br /&gt;
On distingue deux types de topics WEBM :&lt;br /&gt;
* Des topics à &amp;quot;WEBM unique&amp;quot; ayant pour but de présenter un seul WEBM, dont le lien est présent dans le premier message de l&#039;[[OP]]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71425835-1-0-1-0-webm-il-crie-woop-woop-puis-fait-une-prise-de-catch-a-son-micro-ondes-et-devient-tetraplegique.htm  &amp;lt;nowiki&amp;gt;[WEBM] Il crie « WOOP WOOP » puis FAIT une PRISE de CATCH à son MICRO-ONDES et devient TÉTRAPLÉGIQUE&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70627502-1-0-1-0-webm-il-colle-une-voiture-sur-l-autoroute-la-selection-fut-naturelle.htm &amp;lt;nowiki&amp;gt;[WEBM] Il colle une VOITURE sur l&#039;AUTOROUTE, la sélection fut NATURELLE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* Ainsi que des topics &amp;quot;compilation&amp;quot; où l&#039;auteur poste en continue des WEBM pendant plusieurs minutes ou dizaines de minutes (dépendant de la quantité de WEBM dont l&#039;[[OP]] est en possession, de la réception du topic par les autres forumeurs, et surtout de la réaction de la [[modération]]). &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421226-1-0-1-0-webm-ils-jouent-a-biere-pong-un-pere-noel-apparait-et-se-casse-le-coccyx.htm &amp;lt;nowiki&amp;gt;[WEBM] Ils jouent à BIÈRE-PONG, un PÈRE NOËL APPARAÎT et se CASSE le COCCYX&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450605-1-0-1-0-webm-il-evite-de-justesse-sa-tronconneuse-se-remet-en-question.htm &amp;lt;nowiki&amp;gt;[WEBM] Il évite de justesse sa TRONÇONNEUSE, se REMET en QUESTION&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bien que les topics à WEBM unique soient les plus courants sur le forum, les topics de compilation sont généralement très appréciés par la planète forum : ils montent facilement à plusieurs centaines de connectés et à une dizaine de pages. Il arrive souvent que d&#039;autres amateurs de WEBM y rejoignent l&#039;auteur pour poster leurs vidéos.&lt;br /&gt;
&lt;br /&gt;
=== Topics [[fake|fakes]] ===&lt;br /&gt;
Certains topics [[troll|trolls]] annoncent dans leur titre une vidéo imaginaire à l&#039;intitulé très aguicheur et insolite, où le premier message est parfois accompagnés de la mention [[post ou cancer]] ou ses dérivés, &#039;&#039;pourquoi as-tu cliqué ?&#039;&#039;, &#039;&#039;&amp;quot;cette vidéo n&#039;existe pas&#039;&#039;, &#039;&#039;j&#039;aimerais bien voir ça&#039;&#039;, simplement dans le but d&#039;attirer des connectés sur le topic. S&#039;ensuit alors des réponses ironiques de type &#039;&#039;pour voir la vidéo&#039;&#039; ou encore &#039;&#039;t&#039;as oublié le lien&#039;&#039;. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71421330-1-0-1-0-webm-il-plante-une-hache-sur-un-cheval-qui-le-catapulte-dans-le-composte.htm &amp;lt;nowiki&amp;gt;[Webm] Il plante une hache sur un cheval qui le catapulte dans le composte&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71450141-1-0-1-0-webm-cette-japonaise-chie-une-buche-de-noel-dans-l-assiette-de-son-copain.htm &amp;lt;nowiki&amp;gt;[WEBM] Cette JAPONAISE CHIE une bûche de noël dans l&#039;assiette de son COPAIN&amp;lt;/nowiki&amp;gt;]. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est évident que ces topics sont très peu appréciés et souvent [[DDB]] en masse, puisqu&#039;ils occasionnent une déception chez les forumeurs ayant cliqué.&lt;br /&gt;
&lt;br /&gt;
=== Certification de [[nofake]] et [[éclaireur]] ===&lt;br /&gt;
[[Fichier:nofake sticker.png|vignette|200px|Le fameux sticker nofake étant généralement admis comme preuve incontestable d&#039;un nofake.]]&lt;br /&gt;
&lt;br /&gt;
Parallèlement aux topics fake, la certification de [[nofake]], réalisée par un forumeur autre que l&#039;auteur, est un moyen pour ceux qui ont cliqué sur le topic de savoir si le titre est en bonne adéquation avec le contenu de la vidéo présentée. Ces certifications, qui permettent à la fois de faire gage de qualité et d&#039;[[up]] le topic concerné, sont parfois demandées par l&#039;[[OP]] dans son post pour démontrer la véracité du titre aussi invraisemblable soit-il. &amp;lt;br&amp;gt;&lt;br /&gt;
On note diverses déclinaisons de cette certification, telles que : [[le titre est malheureusement nofake|&#039;&#039;Le titre est malheureusement nofake&#039;&#039;]], &#039;&#039;Je certifie que le titre de l&#039;annotateur principal de ce fil de discussion est en total adéquation avec le contenu du présent court-métrage présenté sur cette page HTML sur laquelle vous naviguez actuellement.&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
L&#039;[[éclaireur]], quant à lui, est parfois demandé sur les topics WEBM par un forumeur réticent à l&#039;idée de cliquer sur le lien partagé par l&#039;auteur à cause d&#039;un titre de topic douteux, de peur de tomber sur un screamer ou du contenu gore, choquant. Les éclaireurs ont ainsi pour mission de vérifier la vidéo et de signaler si cette dernière est &#039;&#039;safe&#039;&#039; ou non. L&#039;éclaireur peut dans la foulée réaliser la certification de nofake.&lt;br /&gt;
&lt;br /&gt;
== Titres ==&lt;br /&gt;
Les titres de topics WEBM sont souvent aguicheurs et insolites ; ils caricaturent les contenus &#039;&#039;putaclicks&#039;&#039; d&#039;Internet en reprenant leurs éléments de langage. Parmi ces derniers, nous pouvons citer entre autres : &#039;&#039;la suite risque de vous surprendre&#039;&#039;, &#039;&#039;ça tourne mal&#039;&#039;, &#039;&#039;sa réaction est étonnante&#039;&#039;, etc. &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71483319-1-0-1-0-webm-il-dort-dans-son-lit-se-mange-une-branche-sa-pasteque-tombe-dans-l-eau.htm &amp;lt;nowiki&amp;gt; [WEBM] Il dort dans son lit, se mange une branche, sa pastèque tombe dans l&#039;eau &amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-70167283-1-0-1-0-webm-il-tente-le-bah-sort-la-suite-risque-de-vous-surprendre.htm &amp;lt;nowiki&amp;gt;[WEBM] il tente le BAH SORS, la suite risque de vous surprendre&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Balise_VIDÉO&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Balise [VIDÉO] === &lt;br /&gt;
À défaut de comporter la balise WEBM (cependant largement majoritaire pour les topics de ce genre), certains intitulés comportent la mention &amp;quot;vidéo&amp;quot;, ce qui arrive généralement lorsque l&#039;OP est un [[newfag]] ne connaissant pas encore bien les codes du forum ou lorsque la vidéo partagée n&#039;est pas un WEBM à proprement parler.&lt;br /&gt;
&lt;br /&gt;
=== Sélection naturelle ===&lt;br /&gt;
Le terme de [[sélection naturelle]] est très apprécié lorsqu&#039;il s&#039;agit d&#039;intituler des WEBM filmant des accidents ou témoignant de l&#039;incompétence de certains individus qui entraînera de graves conséquences. On retrouve des variantes toujours plus nombreuses de l&#039;expression, telles que : &#039;&#039;la sélection fut 100% naturelle&#039;&#039;, &#039;&#039;la nature prend le dossier en charge&#039;&#039;, &#039;&#039;la nature n&#039;est pas de cet avis&#039;&#039;, etc. En voici deux exemples : &amp;lt;br&amp;gt;&lt;br /&gt;
[https://jvarchive.com/forums/42-51-71409556-1-0-1-0-webm-un-malien-tente-un-plongeon-a-st-barth-la-nature-soccupe-du-dossier &amp;lt;nowiki&amp;gt; [WEBM] Un MALIEN tente un PLONGEON à ST-BARTH, la NATURE s&#039;occupe du DOSSIER&amp;lt;/nowiki&amp;gt;] &amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.jeuxvideo.com/forums/42-51-71435766-1-0-1-0-webm-un-petit-moment-d-inattention-sur-la-route-la-selection-ne-se-fait-pas-attendre.htm &amp;lt;nowiki&amp;gt;[WEBM] Un petit MOMENT d&#039;INATTENTION sur la ROUTE, la SÉLECTION ne se fait PAS ATTENDRE&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Réaction de la [[modération]] ==&lt;br /&gt;
=== Avant mai 2024 ===&lt;br /&gt;
Il n&#039;y a officiellement pas de réglementation à propos des WEBM sur les forums.&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/message/1180766811&amp;lt;/ref&amp;gt; Cependant, leur partage n&#039;est généralement pas très apprécié par la modération du fait qu&#039;ils peuvent rapidement conduire à la diffusion de vidéos hors-charte.&lt;br /&gt;
Ainsi, les topics WEBM sont la plupart du temps supprimés après une durée relativement courte surtout lorsque les vidéos qu&#039;ils incluent ne respectent par la [[charte]] et remplissent le motif &#039;&#039;Image ou vidéo choquante, gore&#039;&#039;, malgré le grand nombre de forumeurs qui apprécient ces topics.&lt;br /&gt;
&lt;br /&gt;
=== À partir de mai 2024 ===&lt;br /&gt;
Le 28 mai 2024, les forumeurs remarquent que les posts contenant des liens redirigeant vers du contenu hébergé sur [https://streamable.com Streamable], [https://webmshare.com webmshare] et [https://issoutv.com IssouTV] sont automatiquement supprimés&amp;lt;ref&amp;gt;https://www.jeuxvideo.com/forums/42-51-74327261-1-0-1-0-censure-les-videos-streamable-desormais-auto-supprimee-sur-le-forom.htm&amp;lt;/ref&amp;gt;, ce qui provoque colère et dépit. [https://webm.red webm.red] et [https://www.risishack.com/ RisiShack] sont cependant épargnés. Les [[administrateur|administrateurs]] de jeuxvideo.com se justifient de la manière suivante :&lt;br /&gt;
{{BoxCitation|Citation=Les vidéos hébergées sur ces plateformes diffusent du contenu qui ne respecte pas la charte du forum et demandent une bande passante conséquente de modération. &amp;lt;br&amp;gt; Par conséquent ces dernières sont interdites.|Auteur=Service réclamations de jeuxvideo.com}}&lt;br /&gt;
&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
&lt;br /&gt;
{{Article de qualité}}&lt;br /&gt;
[[Catégorie:Article de qualité]]&lt;br /&gt;
[[Catégorie:Vocabulaire externe]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154671</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154671"/>
		<updated>2024-05-19T19:23:30Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Requêtes auxiliaires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyées par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont adressées aux serveurs. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) restantes selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154670</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154670"/>
		<updated>2024-05-19T19:22:27Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Requêtes auxiliaires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyés par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont envoyées par celui-ci. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, de connaître les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) possibles selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
Ces requêtes utilisent un &#039;&#039;endpoint&#039;&#039; contenant un token JWT dans lequel sont stockées des informations générales sur la requête (&#039;&#039;queries&#039;&#039; notamment). Comme cette clé secrète n&#039;est pas connue, il nous est malheureusement impossible de générer de tels tokens à la demande.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154669</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154669"/>
		<updated>2024-05-19T18:39:25Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Queries des dossiers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyés par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont envoyées par celui-ci. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, de connaître les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) possibles selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154668</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154668"/>
		<updated>2024-05-19T18:38:58Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des dossiers ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/UGd3b2qJ ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Requêtes auxiliaires ===&lt;br /&gt;
En parallèle des requêtes envoyés par le site pour rechercher des jeux, news, previews, vidéos ou tests, des requêtes auxiliaires sont envoyées par celui-ci. Elles permettent en particulier de connaître ce qu&#039;il faut afficher sur la page, de connaître les URL des pages ainsi que les options (&#039;&#039;queries&#039;&#039;) possibles selon ce qui a déjà été entré dans le panel de recherche.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des dossiers triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154666</id>
		<title>Documentation de l&#039;API Jeuxvideo.com</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Documentation_de_l%27API_Jeuxvideo.com&amp;diff=154666"/>
		<updated>2024-05-19T14:16:06Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : /* Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;&#039;&#039;&#039;API de [[jeuxvideo.com]]&#039;&#039;&#039;, utilisée à l&#039;origine par les applications mobiles de jeuxvideo.com, permet de développer plus facilement des applications, sites Web, et autres scripts en rapport avec jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Actuellement, deux API sont utilisées : l&#039;api &#039;&#039;v4&#039;&#039; et l&#039;api &#039;&#039;jvc.gg&#039;&#039; :&lt;br /&gt;
* L&#039;API &#039;&#039;v4&#039;&#039; est hébergée sur le sous-domaine &#039;&#039;api&#039;&#039;, et est actuellement à sa quatrième version (&#039;&#039;v4&#039;&#039;). Elle est utilisée par l&#039;application mobile JVC. Cette API est privée et ne peut être documentée que par rétro-ingénierie de l&#039;application mobile.&lt;br /&gt;
* L&#039;API &#039;&#039;jvc.gg&#039;&#039;, d&#039;importance moindre, est hébergée à &#039;&#039;api.jvc.gg&#039;&#039;. C&#039;est une API utilisée par les pages Phoenix du site qui sert notamment à la recherche des jeux.&lt;br /&gt;
&lt;br /&gt;
Les anciennes versions sont toujours exploitables avec les &#039;&#039;tokens&#039;&#039; qui leur sont propres{{Commentaire|Autre=potentiellement obsolète}}, mais certains &#039;&#039;endpoints&#039;&#039; renvoient des erreurs HTTP 403.&lt;br /&gt;
&lt;br /&gt;
=Rétro-ingénierie de l&#039;application mobile JVC=&lt;br /&gt;
Pour connaître les endpoints de l&#039;API, il faut décompiler l&#039;[https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo application mobile JVC] ou intercepter les requêtes qu&#039;elle envoie.&lt;br /&gt;
&lt;br /&gt;
== Décompilation ==&lt;br /&gt;
=== Mise en place du processus de décompilation ===&lt;br /&gt;
Pour pouvoir décompiler l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
* [https://www.java.com/en/download/ Java 8 ou plus]&lt;br /&gt;
* [https://apktool.org/ apktool]&lt;br /&gt;
* [https://github.com/skylot/jadx JADX]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier &#039;&#039;.xapk&#039;&#039; et appliquer le processus de décompilation sur le fichier &#039;&#039;.apk&#039;&#039; principal).&lt;br /&gt;
&lt;br /&gt;
Il vaut mieux renommer le fichier &#039;&#039;.apk&#039;&#039; obtenu pour éviter d&#039;avoir à être embarrassé par de trops longs noms de fichiers. Ici, nous l&#039;avons enregistré sous &#039;&#039;jeuxvideo.apk&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Suivez les étapes ci-dessous (en remplaçant &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier &#039;&#039;.apk&#039;&#039; à votre disposition) :&lt;br /&gt;
# Dans un terminal ouvert au dossier de l&#039;APK, exécutez la commande suivante :&lt;br /&gt;
 $ apktool d jeuxvideo.apk jeuxvideo-decompiled&lt;br /&gt;
# Ouvrez JADX, activez l&#039;option &#039;&#039;Show flatten packages&#039;&#039; (dans la barre d&#039;outils), dans les préférences du logiciel veillez à avoir changé l&#039;option &#039;&#039;Code comments level&#039;&#039; sur &#039;&#039;DEBUG&#039;&#039;.&lt;br /&gt;
# Importez les fichiers &#039;&#039;.dex&#039;&#039; de &#039;&#039;jeuxvideo-decompiled&#039;&#039; dans JADX.&lt;br /&gt;
&lt;br /&gt;
=== JvApiService ===&lt;br /&gt;
Une fois le code Java disponible, on peut ouvrir l&#039;interface &#039;&#039;&#039;JvApiService&#039;&#039;&#039; (située dans &#039;&#039;com.jeuxvideo.api.web&#039;&#039;), qui contient tous les &#039;&#039;endpoints&#039;&#039;. L&#039;application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l&#039;API, et la classe contient tous les &#039;&#039;endpoints&#039;&#039; formels de l&#039;API.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Extrait de l&#039;interface JvApiService&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addComment(@Path(&amp;quot;contentID&amp;quot;) String str, @Body UserComment.Body body);&lt;br /&gt;
&lt;br /&gt;
    @POST(&amp;quot;contents/{contentID}/comments/{commentID}/vote&amp;quot;)&lt;br /&gt;
    Call&amp;lt;UserComment&amp;gt; addCommentVote(@Path(&amp;quot;contentID&amp;quot;) String str, @Path(&amp;quot;commentID&amp;quot;) String str2, @Body UserComment.Vote vote);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interface complète disponible [https://pastebin.com/WiQiutAf ici].&lt;br /&gt;
&lt;br /&gt;
=== SigningInterceptor ===&lt;br /&gt;
La classe &#039;&#039;&#039;SigningInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;), permet de déduire la valeur du &#039;&#039;header Jvc-Authorization&#039;&#039; à envoyer dans les requêtes à l&#039;API.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    public static String m27149f(String str, String str2, String str3, String str4, String str5) {&lt;br /&gt;
        StringBuilder sb2 = new StringBuilder();&lt;br /&gt;
        sb2.append(&amp;quot;550c04bf5cb2b\n&amp;quot;);&lt;br /&gt;
        sb2.append(str);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str2);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str3);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        sb2.append(str4);&lt;br /&gt;
        sb2.append(&amp;quot;\n&amp;quot;);&lt;br /&gt;
        if (str5 == null) {&lt;br /&gt;
            str5 = &amp;quot;&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        sb2.append(str5);&lt;br /&gt;
        String m14428b = CryptoUtils.m14428b(&amp;quot;d84e9e5f191ea4ffc39c22d11c77dd6c&amp;quot;, sb2.toString());&lt;br /&gt;
        return &amp;quot;PartnerKey=550c04bf5cb2b, Signature=&amp;quot; + m14428b + &amp;quot;, Timestamp=&amp;quot; + str;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].&lt;br /&gt;
&lt;br /&gt;
=== JVApi et UserAgentInterceptor ===&lt;br /&gt;
&#039;&#039;&#039;JVApi&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) et &#039;&#039;&#039;UserAgentInterceptor&#039;&#039;&#039; (du package &#039;&#039;com.jeuxvideo.api.utils&#039;&#039;) permettent de déduire le &#039;&#039;user-agent&#039;&#039; et la valeur des &#039;&#039;headers&#039;&#039; contenant des informations sur la version et la plateforme.&lt;br /&gt;
&lt;br /&gt;
=== JVApiManager ===&lt;br /&gt;
La classe &#039;&#039;&#039;JVApiManager&#039;&#039;&#039; (du package arbitrairement nommé &#039;&#039;p379s3&#039;&#039; car nom perdu lors de la compilation) est celle qui envoie les requêtes à l&#039;API. Elle permet de savoir quelles variables sont passées à la requête vers tel &#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;jvc-auth-header&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Le cas Jvc-Auth-Header ===&lt;br /&gt;
&#039;&#039;&#039;Jvc-Auth-Header&#039;&#039;&#039; est le &#039;&#039;header&#039;&#039; envoyé à l&#039;&#039;&#039;endpoint&#039;&#039; nommé &#039;&#039;accounts/register&#039;&#039;. Cet &#039;&#039;endpoint&#039;&#039; est crucial en ce qu&#039;il représente l&#039;&#039;&#039;&#039;unique manière de créer un compte JVC sans le système reCaptcha&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est actuellement impossible que la requête soit validée par l&#039;API sans ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il s&#039;avère que &#039;&#039;Jvc-Auth-Header&#039;&#039; contient le [https://stackoverflow.com/questions/37671380/what-is-fcm-token-in-firebase token FCM], un token créé par la plateforme &#039;&#039;FireBase&#039;&#039; de Google et utilisé par l&#039;application mobile pour accéder aux bases de données. Ce token est unique à chaque appareil et est créé à chaque installation de l&#039;application mobile. En outre, il permet à l&#039;API de savoir si l&#039;application a déjà effectué une requête d&#039;inscription dans les dernières 24 heures et, le cas échéant, de bloquer les requêtes d&#039;inscription.&lt;br /&gt;
&lt;br /&gt;
Il semble malheureusement impossible de générer de tels tokens « à la demande », en tout cas sans connaître les noms et clés des services FireBase dédiés à l&#039;application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;interception&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interception du trafic ==&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;intercepter le trafic émis par l&#039;application mobile lorsqu&#039;elle est exécutée sur un appareil afin de connaître en détail les requêtes envoyées à l&#039;API.&lt;br /&gt;
&lt;br /&gt;
Cette méthode est indépendante de la précédente qui nécessitait de décompiler l&#039;APK. Ici, vous aurez besoin du fichier APK original.&lt;br /&gt;
&lt;br /&gt;
=== Mise en place du processus d&#039;interception ===&lt;br /&gt;
Pour pouvoir intercepter le trafic de l&#039;application mobile, vous aurez besoin des outils suivants :&lt;br /&gt;
# [https://developer.android.com/studio?hl=fr Android Studio]&lt;br /&gt;
# [https://httptoolkit.com/ HTTP Toolkit]&lt;br /&gt;
&lt;br /&gt;
Il faut également le fichier &#039;&#039;.apk&#039;&#039; de l&#039;application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici].&lt;br /&gt;
&lt;br /&gt;
Pour commencer, il vous faut créer un appareil virtuel avec Android Studio : suivez pour cela le tutoriel disponible à [https://developer.android.com/studio/run/managing-avds?hl=fr cette adresse]. Pour que HTTP Toolkit puisse intercepter le trafic de l&#039;application, il faut choisir un appareil ne disposant pas de &#039;&#039;Google Play&#039;&#039;. Nous vous conseillons de choisir le téléphone Pixel 6 Pro et l&#039;image système Tiramisu (niveau d&#039;API 33, Android 13.0). Une fois l&#039;appareil virtuel créé, lancez-le.&lt;br /&gt;
&lt;br /&gt;
Une fois ceci fait, ouvrez le logiciel HTTP Toolkit puis dans le menu principal choisissez l&#039;option &#039;&#039;Android Device via ADB&#039;&#039; qui devrait désormais être accessible. HTTP Toolkit va automatiquement installer tous les logiciels nécessaires sur l&#039;appareil ; vous serez invités, sur l&#039;appareil, à autoriser une connextion VPN à HTTP Toolkit : appuyez sur « OK ».&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous devrez utiliser ADB pour installer l&#039;APK sur l&#039;appareil virtuel. Premièrement, il vous faut ajouter ADB à la variable PATH de votre ordinateur ; consultez la section « How to use ADB from any directory on your PC or Mac » de [https://www.xda-developers.com/install-adb-windows-macos-linux/ cet article], qui contient les étapes à suivre sur Windows, MacOS et Linux.&lt;br /&gt;
&lt;br /&gt;
Ouvrez un terminal de commande dans le dossier où se trouve l&#039;APK et exécutez &amp;lt;code&amp;gt;adb install jeuxvideo.apk&amp;lt;/code&amp;gt; (remplacez &#039;&#039;jeuxvideo.apk&#039;&#039; par le nom du fichier APK téléchargé). Une fois la commande exécutée, vous n&#039;avez plus qu&#039;à lancer l&#039;application mobile et observer quelles requêtes sont envoyées dans le panel &#039;&#039;View&#039;&#039; de HTTP Toolkit.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais voir quelles requêtes sont passées à l&#039;API, ainsi que les &#039;&#039;headers&#039;&#039; et &#039;&#039;body&#039;&#039; associés. Par exemple lorsque l&#039;on se connecte :&lt;br /&gt;
[[File:http_toolkit.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
=API v4=&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API v4 utilise une sécurité, l&#039;en-tête HTTP &amp;lt;code&amp;gt;Jvc-Authorization&amp;lt;/code&amp;gt; , sa valeur dépend d&#039;une clé fixe &amp;lt;code&amp;gt;partner_key&amp;lt;/code&amp;gt;, d&#039;une &amp;lt;code&amp;gt;signature&amp;lt;/code&amp;gt;  et de la &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;header&#039;&#039; de vos requêtes devra toujours être de la forme :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;Jvc-Authorization&amp;quot; : header,&lt;br /&gt;
&amp;quot;User-Agent&amp;quot; : &amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Platform&amp;quot; : &amp;quot;Android&amp;quot;,&lt;br /&gt;
&amp;quot;Jvc-App-Version&amp;quot; : 338,&lt;br /&gt;
&amp;quot;Content-Type&amp;quot; : &amp;quot;application/json&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Où &#039;&#039;header&#039;&#039; est égal à une chaîne de caractères de la forme &#039;&#039;&amp;quot;PartnerKey=partner_key, Signature=signature, Timestamp=timestamp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Veuillez consulter l&#039;[[#annexe|annexe]] pour trouver un script Python permettant de créer ce &#039;&#039;header&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Authentification===&lt;br /&gt;
Comme pour l&#039;ancienne API, le cookie &#039;&#039;coniunctio&#039;&#039; est toujours le cookie de session utilisateur. Il doit être récupéré avec l&#039;appel au point d&#039;entrée &#039;&#039;accounts/login&#039;&#039; (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP &amp;lt;code&amp;gt;&amp;quot;Cookie&amp;quot; : &amp;quot;coniunctio={coniunctio}&amp;quot;&amp;lt;/code&amp;gt; pour chaque appel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;sous-domaine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Comportement du sous-domaine ==&lt;br /&gt;
Il est intéressant de remarquer que l&#039;API se comporte souvent en véritable sous-domaine, de manière similaire au site www.jeuxvideo.com de base : par exemple, si vous êtes sur un [[topic]] ou un [[forum]], il vous suffit de remplacer dans l&#039;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 &amp;lt;code&amp;gt;https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l&#039;API.]]&lt;br /&gt;
&lt;br /&gt;
L&#039;API ne fonctionne donc pas que par &#039;&#039;endpoints&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
==Endpoints « formels » ==&lt;br /&gt;
Il s&#039;agit des &#039;&#039;endpoints&#039;&#039; « documentés » dans le code de l&#039;application mobile et qui se comportent différemment des services de l&#039;API qui ne se contentent que de « copier » le contenu JVC (voir sous-section précédente).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;URL de base&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;https://api.jeuxvideo.com/v4/&amp;lt;/nowiki&amp;gt;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039;: chemin d&#039;accès de l&#039;&#039;&#039;endpoint&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039;: &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt; Note : dans la plupart des cas, le paramètre &amp;lt;code&amp;gt;accountId&amp;lt;/code&amp;gt; peut être remplacé par la valeur &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; lorsque la requête doit pointer sur le compte connecté.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039;: par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039;: Corps de la requête au format JSON&lt;br /&gt;
Le fichier JSON contenant les &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; des &#039;&#039;params&#039;&#039; et des &#039;&#039;query strings&#039;&#039; &amp;lt;code&amp;gt;chronicles&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;modes&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;genres&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;events&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;machine&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt; (obtenu via la requête &#039;&#039;GET config&#039;&#039;) est disponible [https://pastebin.com/bnAu6tFL ici].&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|addComment&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;commentaire&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;type&amp;quot;: 1 ou -1&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReply&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;,&lt;br /&gt;
&amp;quot;mark&amp;quot;: 4,&lt;br /&gt;
&amp;quot;onProfile&amp;quot;: true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|login&lt;br /&gt;
|accounts/login&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mot_de_passe&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|logout&lt;br /&gt;
|accounts/logout&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|register&lt;br /&gt;
|accounts/register &lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Jvc-Auth-Token&amp;quot; : str&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;email&amp;quot;: &amp;quot;email&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;motdepasse&amp;quot;,&lt;br /&gt;
&amp;quot;optin&amp;quot;: false&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reinitPassword&lt;br /&gt;
|accounts/reset&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;nouveau&amp;quot;,&lt;br /&gt;
&amp;quot;session&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;imageKey&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageName&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;imageValues&amp;quot;: [&lt;br /&gt;
        &amp;quot;val1&amp;quot;,&lt;br /&gt;
        &amp;quot;val2&amp;quot;&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportAccount&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| reportComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int &lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1,&lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;Valeur&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|reportReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;reason&amp;quot;: 1, &lt;br /&gt;
&amp;quot;message&amp;quot;: &amp;quot;Raison&amp;quot;,&lt;br /&gt;
&amp;quot;captcha&amp;quot;: {&lt;br /&gt;
    &amp;quot;session&amp;quot;: &amp;quot;clé&amp;quot;&lt;br /&gt;
    &amp;quot;clé_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    &amp;quot;valeur_captcha&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|restoreComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot; : &amp;quot;comment&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateAccount&lt;br /&gt;
|accounts/confirm&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;id&amp;quot;: 123,&lt;br /&gt;
&amp;quot;hash&amp;quot;: &amp;quot;hash&amp;quot;,&lt;br /&gt;
&amp;quot;alias&amp;quot;: &amp;quot;pseudo&amp;quot;,&lt;br /&gt;
&amp;quot;password&amp;quot;: &amp;quot;mdp&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|validateSignature&lt;br /&gt;
|general/stores/android/validation&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;signature&amp;quot;: &amp;quot;signature&amp;quot;,&lt;br /&gt;
&amp;quot;signed_data&amp;quot;: &amp;quot;signed_data&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesForums&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;games&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|addFavoritesTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Ci-dessous figurent les requêtes &#039;&#039;GET&#039;&#039;, qui se comportent comme des recherches selon les filtres passés en &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; de type &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; (chaînes de caractère) représentent des ID répertoriées dans la réponse à la requête &amp;lt;code&amp;gt;general/config&amp;lt;/code&amp;gt; (sous forme de fichier JSON, disponible [https://pastebin.com/bnAu6tFL ici]).&lt;br /&gt;
Si l&#039;on souhaite filtrer les résultats selon leur nature (&#039;&#039;news&#039;&#039;, vidéos, &#039;&#039;previews&#039;&#039;, etc.), on dispose du dictionnaire suivant (provenant de l&#039;application mobile) qui à chaque nature de document associe l&#039;ID des catégories associées :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&#039;videos&#039;: &#039;6,13,14,15,16,17,145,19,20&#039;,&lt;br /&gt;
&#039;news&#039;: &#039;50&#039;,&lt;br /&gt;
&#039;previews&#039;: &#039;55&#039;,&lt;br /&gt;
&#039;tests&#039;: &#039;56,57&#039;,&lt;br /&gt;
&#039;all&#039;: &#039;6,13,14,15,16,17,145,50,19,20,53,55,56,57&#039;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pour plus de détails, veuillez consulter le fichier JSON de configuration.&lt;br /&gt;
&lt;br /&gt;
Comment vous pouvez le constater, contrairement aux variables de type &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, les &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; peuvent contenir plusieurs valeurs, séparées par des virgules : dans ce cas, elles devront être &#039;&#039;parsées&#039;&#039; selon l&#039;encodage URL (voir l&#039;[[#Annexe|annexe]] où un script Python réalisant cette tâche est mis à disposition).&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;queries page&#039;&#039; et &#039;&#039;perPage&#039;&#039;, toujours des entiers, représentent respectivement : le numéro de la page de recherche et le nombre d&#039;objets à afficher par page.&lt;br /&gt;
Les ID comme &#039;&#039;accountID&#039;&#039; et &#039;&#039;commentID&#039;&#039; sont des entiers. Il est à noter que dans la plupart des cas, &#039;&#039;accountID&#039;&#039; peut être remplacé par la chaîne de caractères &#039;&#039;me&#039;&#039; qui représente l&#039;utilisateur connecté (connu grâce au cookie &#039;&#039;coniunctio&#039;&#039; passé en en-tête de la requête).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!QUERY &lt;br /&gt;
|-&lt;br /&gt;
|config&lt;br /&gt;
|general/config&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAccount&lt;br /&gt;
|accounts/{accountId}&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getAllFavorisGames&lt;br /&gt;
|accounts/{accountId}/favorites/games/all&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getArticle&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCaptcha&lt;br /&gt;
|captcha/start&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;nb&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getChroniclesSummary&lt;br /&gt;
|contents/chronicles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCommentAnswers&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/answers&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getComments&lt;br /&gt;
|contents/{contentID}/comments&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getContentBean&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getContentList&lt;br /&gt;
|contents&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;categories&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;types&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;events&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentAccountReport&lt;br /&gt;
|accounts/{accountId}/report&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentCommentReport&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/report&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getCurrentReviewReport&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{reviewId}/report&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;reviewId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavorites&lt;br /&gt;
|accounts/{accountId}/favorites&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesForum&lt;br /&gt;
|accounts/{accountId}/favorites/forums&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesGames&lt;br /&gt;
|accounts/{accountId}/favorites/games &lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getFavoritesTopics&lt;br /&gt;
|accounts/{accountId}/favorites/topics&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getFolder&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGame&lt;br /&gt;
|games/{id}/{machine}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| getGameDetails&lt;br /&gt;
|games/{id}/{machine}/details&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameImages&lt;br /&gt;
|games/{id}/{machine}/images&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameList&lt;br /&gt;
|games/{type}&lt;br /&gt;
|&#039;&#039;&#039;type&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;genre&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;mode&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameNews&lt;br /&gt;
|games/{id}/{machine}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReleaseList&lt;br /&gt;
| games/releases&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;month&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;year&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameReview&lt;br /&gt;
|games/{id}/{machine}/reviews/users/{review}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;review&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/any/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameReviews&lt;br /&gt;
|games/{id}/{machine}/reviews&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getGameSummary &lt;br /&gt;
|contents/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getGameUserReviews&lt;br /&gt;
|games/{id}/{machine}/reviews/users&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameVideos&lt;br /&gt;
|games/{id}/{machine}/videos &lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getGameWikis&lt;br /&gt;
|games/{id}/{machine}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getHeadlineList&lt;br /&gt;
| contents/trending&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
| getHighTechSummary&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|getLightGame&lt;br /&gt;
|games/{id}/{machine}/light&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNews&lt;br /&gt;
|contents/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getNewsHighTech&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageContents &lt;br /&gt;
|accounts/{accountId}/page/contents&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getPageReviews&lt;br /&gt;
|accounts/{accountId}/page/reviews&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getProfile&lt;br /&gt;
|accounts/{accountId}/profile&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getProfilePage&lt;br /&gt;
|accounts/{accountId}/page&lt;br /&gt;
|&#039;&#039;&#039;accountId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedNews&lt;br /&gt;
|contents/{id}/news&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedVideos&lt;br /&gt;
|contents/{id}/videos&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getRelatedWikis&lt;br /&gt;
|contents/{id}/wikis&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getStores&lt;br /&gt;
|games/{id}/{machine}/stores&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;machine&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTechList&lt;br /&gt;
|contents/hightech&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|getTopWikis&lt;br /&gt;
|contents/wikis&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getTopsComments&lt;br /&gt;
|contents/{contentID}/comments/tops&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideo&lt;br /&gt;
|videos/{id}&lt;br /&gt;
|&#039;&#039;&#039;id&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|getVideosSummary&lt;br /&gt;
|contents/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;machines&#039;&#039;&#039; str &lt;br /&gt;
|-&lt;br /&gt;
|search&lt;br /&gt;
|search&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchArticles&lt;br /&gt;
|search/articles&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchAutocomplete&lt;br /&gt;
|search/games/autocomplete&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
|-&lt;br /&gt;
|searchGames&lt;br /&gt;
|search/games&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchNews&lt;br /&gt;
|search/news&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchVideos&lt;br /&gt;
|search/videos&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|searchWikis&lt;br /&gt;
| search/wikis&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;q&#039;&#039;&#039; str&lt;br /&gt;
&#039;&#039;&#039;page&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;perPage&#039;&#039;&#039; int&lt;br /&gt;
|-&lt;br /&gt;
|sponso&lt;br /&gt;
|general/nativeads&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+PUT&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|saveDescription&lt;br /&gt;
|accounts/me/profile/description &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;description&amp;quot;: &amp;quot;Ma description&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveExcludedMachines&lt;br /&gt;
|accounts/me/profile/excluded-machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|saveMachines&lt;br /&gt;
|accounts/me/profile/machines&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;machines&amp;quot; : [1, 2, 3, 4]  // id des machines&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|updateComment&lt;br /&gt;
&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&amp;lt;pre&amp;gt;&amp;quot;content&amp;quot;: &amp;quot;Super jeu !&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|uploadAvatar&lt;br /&gt;
|accounts/me/avatar&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|-&lt;br /&gt;
|uploadCover&lt;br /&gt;
|accounts/me/cover&lt;br /&gt;
| &#039;&#039;&#039;header&#039;&#039;&#039; : &amp;lt;code&amp;gt;&amp;quot;Content-Type&amp;quot;: &amp;quot;application/octet-stream&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;body&#039;&#039;&#039; : objet &amp;lt;code&amp;gt;bytes&amp;lt;/code&amp;gt; (conversion du fichier image en octets, pas de clé associée) &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+DELETE&lt;br /&gt;
!NOM&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS, HEADERS&lt;br /&gt;
!BODY&lt;br /&gt;
|-&lt;br /&gt;
|deleteComment&lt;br /&gt;
|contents/{contentID}/comments/{commentID}&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteCommentVote&lt;br /&gt;
|contents/{contentID}/comments/{commentID}/vote&lt;br /&gt;
|&#039;&#039;&#039;contentID&#039;&#039;&#039; int&lt;br /&gt;
&#039;&#039;&#039;commentID&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisForum&lt;br /&gt;
|accounts/me/favorites/forums &lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [50,51,52] # ID des forums&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| deleteFavorisGames&lt;br /&gt;
|accounts/me/favorites/games&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;forums&amp;quot; : [{&amp;quot;id&amp;quot;:&amp;quot;ID du jeu&amp;quot;, &amp;quot;machine&amp;quot;:&amp;quot;ID de la machine&amp;quot;}]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|deleteFavorisTopics&lt;br /&gt;
|accounts/me/favorites/topics&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;topics&amp;quot; : [74229153, 74229154] # ID des topics&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;annexe&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Annexe ==&lt;br /&gt;
=== Jvc-Authorization ===&lt;br /&gt;
Voici un script Python qui permet de construire le &#039;&#039;header&#039;&#039; &#039;&#039;Jvc-Authorization&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import hashlib, hmac, datetime, urllib.parse&lt;br /&gt;
&lt;br /&gt;
PARTNER_KEY = &#039;550c04bf5cb2b&#039;&lt;br /&gt;
HMAC_SECRET = b&#039;d84e9e5f191ea4ffc39c22d11c77dd6c&#039;&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def auth_header(path: str, method: str = &#039;GET&#039;, query: dict = None) -&amp;gt; str:&lt;br /&gt;
    # Conversion de path en URL avec urllib.parse.urlparse&lt;br /&gt;
    date = datetime.datetime.now().isoformat()&lt;br /&gt;
    parsed_url = urllib.parse.urlparse(f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;)&lt;br /&gt;
    if query:&lt;br /&gt;
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))&lt;br /&gt;
        &lt;br /&gt;
    # Création de la chaîne à hash&lt;br /&gt;
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]&lt;br /&gt;
    if parsed_url.query:&lt;br /&gt;
        string_to_hash.append(parsed_url.query)&lt;br /&gt;
    else:&lt;br /&gt;
        string_to_hash[-1] += &#039;\n&#039;&lt;br /&gt;
    string_to_hash = &#039;\n&#039;.join(string_to_hash)&lt;br /&gt;
    &lt;br /&gt;
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization&lt;br /&gt;
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode(&#039;utf-8&#039;), digestmod=hashlib.sha256).hexdigest()&lt;br /&gt;
    return f&amp;quot;PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Requêtes à l&#039;API ===&lt;br /&gt;
Voici un script Python permettant d&#039;envoyer des requêtes à l&#039;API et qui utilise la fonction précédente :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
&lt;br /&gt;
DOMAIN = &#039;api.jeuxvideo.com&#039;&lt;br /&gt;
API_VERSION = 4&lt;br /&gt;
&lt;br /&gt;
def call(path: str, method: str = &#039;GET&#039;, query: dict = None, data: dict = None, cookies: dict = None) -&amp;gt; Response:&lt;br /&gt;
    url = f&amp;quot;https://{DOMAIN}/v{API_VERSION}/{path}&amp;quot;&lt;br /&gt;
    jv_auth = auth_header(path, method=method, query=query)&lt;br /&gt;
    headers = {&lt;br /&gt;
        &amp;quot;Jvc-Authorization&amp;quot;:jv_auth,&lt;br /&gt;
        &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-platform&amp;quot;:&amp;quot;Android&amp;quot;,&lt;br /&gt;
        &amp;quot;jvc-app-version&amp;quot;:&amp;quot;338&amp;quot;,&lt;br /&gt;
        &amp;quot;user-agent&amp;quot;:&amp;quot;JeuxVideo-Android/338&amp;quot;,&lt;br /&gt;
        &amp;quot;host&amp;quot;:&amp;quot;api.jeuxvideo.com&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if data:&lt;br /&gt;
        data = json.dumps(data)&lt;br /&gt;
&lt;br /&gt;
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;Parsing&#039;&#039; des &#039;&#039;queries&#039;&#039; ===&lt;br /&gt;
Lors de l&#039;appel à &#039;&#039;contents&#039;&#039; par exemple, vous pouvez passer en &#039;&#039;query&#039;&#039; des chaînes de caractère comme &#039;&#039;categories&#039;&#039; ou &#039;&#039;types&#039;&#039;. Ces &#039;&#039;queries&#039;&#039;, s&#039;il contiennent plusieurs valeurs, doivent être encodés au format d&#039;encodage URL, ce qui peut être fait en Python :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
categories = &amp;quot;50,53,56&amp;quot; # la recherche récupérera les articles de catégories 50, 53 et 56.&lt;br /&gt;
categories_parsed = quote(categories)&lt;br /&gt;
&lt;br /&gt;
query = {&amp;quot;categories&amp;quot;: categories_parsed}&lt;br /&gt;
&lt;br /&gt;
# vous pouvez désormais passer ce dictionnaire en query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accès aux forums ==&lt;br /&gt;
Étrangement, il n&#039;existe pas d&#039;&#039;&#039;endpoint&#039;&#039; particulier pour envoyer un message ou un topic sur les [[forum|forums]] de jeuxvideo.com.&lt;br /&gt;
&lt;br /&gt;
Lorsque l&#039;application mobile souhaite récupérer les pages des forums, elle envoie une requête au lien usuel de la ressource à ceci près que &#039;&#039;www&#039;&#039; est remplacé par &#039;&#039;api&#039;&#039;. La requête renvoie alors une page HTML en guise de réponse, voir la [[#sous-domaine|rubrique en question]].&lt;br /&gt;
&lt;br /&gt;
Ainsi, lorsque l&#039;on cherche à interagir avec les forums, il n&#039;y a pas d&#039;avantage à envoyer des requêtes à l&#039;API plutôt qu&#039;au site de base en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
=== Principe général ===&lt;br /&gt;
En premier lieu, afin d&#039;envoyer un message ou un topic sur un forum, il faut bien évidemment que vous soyez connecté et vus devrez donc passer en en-tête de la requête votre cookie &#039;&#039;coniunctio&#039;&#039;, récupérable à partir d&#039;une requête à l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/login&amp;lt;/code&amp;gt; envoyant vos identifiants.&lt;br /&gt;
&lt;br /&gt;
[[File:js_form.png|vignette|400px|Les &#039;&#039;inputs&#039;&#039; cachés contenant les valeurs à envoyer dans les requêtes visibles depuis les outils de développeur.]]&lt;br /&gt;
&lt;br /&gt;
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 &#039;&#039;POST&#039;&#039; 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 : &#039;&#039;fs_session&#039;&#039;, &#039;&#039;fs_timestamp&#039;&#039;, &#039;&#039;fs_version&#039;&#039;, &#039;&#039;form_alias_rang&#039;&#039; ainsi qu&#039;un &#039;&#039;hash&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Heureusement, ces valeurs sont directement disponibles depuis des &#039;&#039;inputs&#039;&#039; cachées dans le code HTML des pages de forums/topics et situées dans la &#039;&#039;div&#039;&#039; nommée &#039;&#039;js-form-session-data&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Si l&#039;on veut envoyer un message sur un topic (ou un forum), il faudra d&#039;abord envoyer une requête &#039;&#039;GET&#039;&#039; à l&#039;URL associée et récupérer ces valeurs chiffrées avant d&#039;envoyer une requête &#039;&#039;POST&#039;&#039; avec le contenu du message en plus de ces dernières.&lt;br /&gt;
&lt;br /&gt;
=== Script Python ===&lt;br /&gt;
La classe Python suivante permet d&#039;interagir avec les forums de cette manière. Il vous suffit d&#039;entrer la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039; et d&#039;appeler les fonctions souhaitées avec le contenu des messages ou topics.&lt;br /&gt;
&lt;br /&gt;
Bien que cette méthode permette d&#039;outrepasser les captchas, il se peut que vous soyez bloqué par le site en envoyant un trop grand nombre de requêtes dans un trop court laps de temps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import requests, json&lt;br /&gt;
from requests import Response&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
DIV_CLASS = &#039;js-form-session-data&#039;&lt;br /&gt;
&lt;br /&gt;
class ForumClient:&lt;br /&gt;
    def __init__(self, coniuntio: str):&lt;br /&gt;
        self._cookies = {&#039;coniunctio&#039;:coniuntio}&lt;br /&gt;
&lt;br /&gt;
    def _scrape_input_tokens(self, res: Response) -&amp;gt; dict:&lt;br /&gt;
        soup = BeautifulSoup(res.text, &#039;html.parser&#039;)&lt;br /&gt;
        form = soup.find(&#039;div&#039;, {&#039;class&#039;:DIV_CLASS})&lt;br /&gt;
        jsi = form.findChildren(&amp;quot;input&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        tokens = {&lt;br /&gt;
            &amp;quot;fs_session&amp;quot;:jsi[0].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_timestamp&amp;quot;:jsi[1].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;fs_version&amp;quot;:jsi[2].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            jsi[3].attrs[&amp;quot;name&amp;quot;]:jsi[3].attrs[&amp;quot;value&amp;quot;],&lt;br /&gt;
            &amp;quot;form_alias_rang&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;g-recaptcha-response&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return tokens&lt;br /&gt;
&lt;br /&gt;
    def _get_forum_URL(self, forum_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/0-{forum_id}-0-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def _get_topic_URL(self, topic_id) -&amp;gt; str:&lt;br /&gt;
        return requests.get(f&#039;https://www.jeuxvideo.com/forums/42-1-{topic_id}-1-0-1-0-a.htm&#039;).url&lt;br /&gt;
&lt;br /&gt;
    def post_message(self, topic_id: int, message: str) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_id, int : ID du topic&lt;br /&gt;
        message, str : votre message&lt;br /&gt;
&lt;br /&gt;
        renvoie un objet Response&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        topic_URL = self._get_topic_URL(topic_id)&lt;br /&gt;
        res = requests.get(topic_URL, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(topic_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
    def post_topic(self, forum_id: int, titre: str, message: str, sondage: dict = None) -&amp;gt; Response:&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_id, int : ID du forum&lt;br /&gt;
        titre, str : titre du topic&lt;br /&gt;
        message, str : corps du topic&lt;br /&gt;
&lt;br /&gt;
        [sondage], dict : dictionnaire de la forme {&lt;br /&gt;
            &amp;quot;question_sondage&amp;quot; : &amp;quot;Question ?&amp;quot;,&lt;br /&gt;
            &amp;quot;reponse_sondage[]&amp;quot; : [&amp;quot;reponse 1&amp;quot;, &amp;quot;reponse 2&amp;quot;]&lt;br /&gt;
        }&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        forum_URL = self._get_forum_URL(forum_id)&lt;br /&gt;
        res = requests.get(forum_URL, cookies=self._cookies)&lt;br /&gt;
        data = self._scrape_input_tokens(res)&lt;br /&gt;
&lt;br /&gt;
        data[&#039;titre_topic&#039;] = titre&lt;br /&gt;
        data[&#039;message_topic&#039;] = message&lt;br /&gt;
        if sondage:&lt;br /&gt;
            data |= sondage&lt;br /&gt;
            data[&#039;submit_sondage&#039;] = &#039;1&#039;&lt;br /&gt;
&lt;br /&gt;
        res = requests.post(forum_URL, data=data, cookies=self._cookies)&lt;br /&gt;
&lt;br /&gt;
        return res&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    client = ForumClient(&amp;quot;votre coniunctio ici&amp;quot;)&lt;br /&gt;
    # Exemples d&#039;utilisation&lt;br /&gt;
    # Pour poster un message&lt;br /&gt;
    client.post_message(74204156, &amp;quot;Je poste depuis Python :)&amp;quot;)&lt;br /&gt;
    # Pour poster un topic&lt;br /&gt;
    client.post_topic(51, &#039;Je poste depuis Python&#039;, &#039;Et toi ? :)&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
L&#039;API v4 comporte plusieurs limitations :&lt;br /&gt;
* Il est impossible d&#039;outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message.&lt;br /&gt;
* Il est impossible de s&#039;inscrire en utilisation l&#039;&#039;&#039;endpoint&#039;&#039; &amp;lt;code&amp;gt;accounts/register&amp;lt;/code&amp;gt; car celui-ci nécessite un &#039;&#039;header&#039;&#039; contenant le &#039;&#039;token&#039;&#039; FireBase généré lors de l&#039;installation de l&#039;application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d&#039;en automatiser la création), et pour chacune d&#039;entre elles d&#039;intercepter le trafic de l&#039;application (voir [[#interception|section associée]]) pour récupérer et conserver les &#039;&#039;tokens&#039;&#039; dans un fichier. Cette méthode, longue et fastidieuse, ne permettrait donc pas de générer un nombre infini de comptes. Une autre méthode possible, bien qu&#039;elle n&#039;utilise pas l&#039;API, serait de créer un compte sur le site à l&#039;aide d&#039;un &#039;&#039;webdriver&#039;&#039;. Celle-ci fonctionne (l&#039;auteur de ce paragraphe l&#039;a déjà implémentée) mais il serait difficile de la rendre compatible pour toutes les plateformes (du fait de la nécessité d&#039;avoir un VPN gérable depuis un script).&lt;br /&gt;
* Il est particulièrement hardu de faire du &#039;&#039;web scraping&#039;&#039; sur les pages de forum puisque l&#039;API renvoie une page HTML et non un fichier JSON dans ce cas.&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
*[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX.&lt;br /&gt;
*[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l&#039;API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps).&lt;br /&gt;
&lt;br /&gt;
= API jvc.gg =&lt;br /&gt;
[[File:phoenix.png|300px|vignette|La page Phoenix des jeux.]]&lt;br /&gt;
&lt;br /&gt;
Cette API est une API distincte de la &#039;&#039;v4&#039;&#039; et utilisée par la partie Phoenix du site, c&#039;est-à-dire les pages listant les jeux, &#039;&#039;reviews&#039;&#039;, vidéos, etc., comme [https://www.jeuxvideo.com/tous-les-jeux/ celle-ci]. Elle est hébergée sur le domaine [https://api.jvc.gg api.jvc.gg].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== Rétro-ingénierie ==&lt;br /&gt;
L&#039;API étant privée, il a fallu procéder par rétro-ingénierie pour la documenter.&lt;br /&gt;
&lt;br /&gt;
Les appels à l&#039;API sont effectués depuis un script chargé par les pages Phoenix. Les noms de variable sont obfusqués mais pas les chaînes de caractère : ainsi une partie des &#039;&#039;endpoints&#039;&#039; y sont lisibles. Ce script est téléchargeable [https://archive.org/details/phoenix_script ici].&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;observer les URL et les contenus des requêtes depuis le panneau &#039;&#039;Network&#039;&#039; (ou &#039;&#039;Réseau&#039;&#039;) des [https://developer.mozilla.org/fr/docs/Learn/Common_questions/Tools_and_setup/What_are_browser_developer_tools outils de développement Web].&lt;br /&gt;
&lt;br /&gt;
== Préambule ==&lt;br /&gt;
L&#039;API jvc.gg est basée sur l&#039;utilisation de &#039;&#039;JSON Web Token&#039;&#039; (JWT), un standard utilisé pour créer des jetons de sécurité qui permettent de transférer de l&#039;information de manière sécurisée entre deux parties au format JSON.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous visitez pour la première fois une page Phoenix, le serveur de JVC renvoie une requête comportant un cookie &#039;&#039;accessToken&#039;&#039;. La valeur de ce cookie est une chaîne de caractères encodée au format JWT qui contient notamment votre ID de compte et la valeur de votre cookie &#039;&#039;coniunctio&#039;&#039;. La fonction Python suivante permet de récupérer le cookie &#039;&#039;accessToken&#039;&#039; en fonction de votre cookie &#039;&#039;coniunctio&#039;&#039; :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_access_cookie(coniunctio: str) -&amp;gt; str:&lt;br /&gt;
  cookies = {&#039;coniunctio&#039;:coniunctio}&lt;br /&gt;
  res = requests.get(&#039;https://www.jeuxvideo.com/tous-les-jeux/&#039;, cookies=cookies)&lt;br /&gt;
  access_cookie = res.headers[&#039;set-cookie&#039;].split(&#039;;&#039;)[0].replace(&#039;accessToken=&#039;, &#039;&#039;)&lt;br /&gt;
  return access_cookie&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce cookie vous sera utile lorsque les requêtes envoyées sont destinées à opérer sur votre compte.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
Le tableau suivant répertorie les &#039;&#039;endpoints&#039;&#039; connus de cette API. Voici la signification de ses colonnes :&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;PATH&#039;&#039;&#039; : chemin de l&#039;&#039;&#039;endpoint&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;PARAMS, HEADERS&#039;&#039;&#039; : &lt;br /&gt;
** &#039;&#039;&#039;param&#039;&#039;&#039; : variable entre accolades à remplacer dans l&#039;URL, suivie dans la documentation de son type (&#039;&#039;str&#039;&#039; ou &#039;&#039;int&#039;&#039;). Par exemple, &amp;lt;code&amp;gt;contents/{contentID}/comments&amp;lt;/code&amp;gt; doit être appelé comme suit : &amp;lt;code&amp;gt;contents/123456/comments&amp;lt;/code&amp;gt;.&lt;br /&gt;
** &#039;&#039;&#039;header&#039;&#039;&#039; : &#039;&#039;header&#039;&#039; particulier à inclure dans l&#039;en-tête de la requête. Si pas de spécification, l&#039;en-tête ne contient que les &#039;&#039;headers&#039;&#039; de base spécifiés plus haut (&#039;&#039;User-Agent&#039;&#039;, &#039;&#039;Jvc-Authorization&#039;&#039;, etc.).&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;QUERY&#039;&#039;&#039; : valeur à ajouter à l&#039;URL permettant si précisée de filtrer les résultats. Par exemple pour les deux query &#039;&#039;page&#039;&#039;, &#039;&#039;perPage&#039;&#039; int, l&#039;URL devra être: &amp;lt;code&amp;gt;api.jeuxvideo.com/v4/contents/1234ID/comments?page=1&amp;amp;perPage=30&amp;lt;/code&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;BODY&#039;&#039;&#039; : Corps de la requête au format JSON&lt;br /&gt;
&lt;br /&gt;
=== Les paramètres spéciaux ===&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{accessToken}&amp;lt;/code&amp;gt; devra toujours être remplacé par la valeur du cookie éponyme.&lt;br /&gt;
* Le paramètre &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; peut être remplacée par les valeurs suivantes, qui proviennent évidemment du système de classification de JVC :&lt;br /&gt;
** &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; pour avoir la liste de tous les jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;awaited&amp;lt;/code&amp;gt; pour avoir la liste des jeux attendus ;&lt;br /&gt;
** &amp;lt;code&amp;gt;popular&amp;lt;/code&amp;gt; pour avoir la liste des jeux populaires ;&lt;br /&gt;
** &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux ;&lt;br /&gt;
** &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt; pour avoir la liste des meilleurs jeux du moment ;&lt;br /&gt;
** &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt; pour avoir la liste des jeux pas encore sortis.&lt;br /&gt;
&lt;br /&gt;
=== Queries des jeux ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et le mode du jeu. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/1LGEibT8 ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des jeux PS4 de genre action RPG et de forme multi en ligne, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps4&amp;amp;gameGenre=action_rpg&amp;amp;gameMode=multiplayer_online&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De plus, le &#039;&#039;query&#039;&#039; &#039;&#039;release&#039;&#039; désigne la date de sortie du jeu, &#039;&#039;&#039;compatible seulement avec les catégories &amp;lt;code&amp;gt;best&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;releases&amp;lt;/code&amp;gt;&#039;&#039;&#039;. Il peut s&#039;agir d&#039;une année ou d&#039;une décennie (dans ce cas, la valeur du &#039;&#039;query&#039;&#039; représentera la première année de la décennie suivie du caractère &#039;d&#039; ; par exemple, &amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010). Pour les jeux pas encore sortis, ce &#039;&#039;query&#039;&#039; peut également contenir le mois (par exemple : &amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024). Incompatible avec la catégorie &amp;lt;code&amp;gt;currentBest&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des news ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le type, le genre et l&#039;événement des news. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des news de jeux PS5 de genre aventure en rapport avec l&#039;événement &#039;&#039;Game Awards&#039;&#039; publiés en 2022, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=game_news&amp;amp;platform=ps5&amp;amp;gameGenre=adventure&amp;amp;event=id201395&amp;amp;publicationPeriod=2022&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Le &#039;&#039;query publicationPeriod&#039;&#039; peut être : une année, une année suivie du numéro du mois (&amp;lt;code&amp;gt;2024-07&amp;lt;/code&amp;gt; pour juillet 2024) ou une décennie (&amp;lt;code&amp;gt;2010d&amp;lt;/code&amp;gt; pour les années 2010).&lt;br /&gt;
&lt;br /&gt;
=== Queries des tests ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le mode et le genre des jeux testés, ainsi que l&#039;encadrement de la note des rédacteurs et la date de publication. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/Dk4SkDkA ici].&lt;br /&gt;
&lt;br /&gt;
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&#039;il y a au plus 6 mois, votre chaîne de &#039;&#039;queries&#039;&#039; devra être&lt;br /&gt;
&amp;lt;code&amp;gt;platform=pc&amp;amp;gameGenre=adventure&amp;amp;gameMode=singleplayer&amp;amp;editorialRatingRange=%5B14%2C)&amp;amp;maxAge=P6M&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez que le &#039;&#039;query editorialRatingRange&#039;&#039; doit être encodé au format URL avant d&#039;être envoyé.&lt;br /&gt;
&lt;br /&gt;
=== Queries des previews ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent la plateforme, le genre et l&#039;événement des jeux testés. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/xaqTQPfr ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des &#039;&#039;previews&#039;&#039; des jeux PS5 de genre FPS en rapport avec l&#039;événement &#039;&#039;Find Your Next Game&#039;&#039;, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;platform=ps5&amp;amp;gameGenre=fps&amp;amp;event=fyng&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries des vidéos ===&lt;br /&gt;
Les &#039;&#039;queries&#039;&#039; renseignent le type des vidéos ainsi que la plateforme, le genre et l&#039;événement des jeux traités. La liste complète des valeurs des &#039;&#039;queries&#039;&#039; possibles pour ces attributs est disponible au format JSON [https://pastebin.com/nBUAP4XX ici].&lt;br /&gt;
&lt;br /&gt;
Par exemple, si vous souhaitez obtenir la liste des vidéos &#039;&#039;gameplays&#039;&#039; des jeux PC de genre Action en rapport avec l&#039;événement E3, votre chaîne de &#039;&#039;queries&#039;&#039; devra être &amp;lt;code&amp;gt;publicationType=gameplay&amp;amp;platform=pc&amp;amp;gameGenre=action&amp;amp;event=e3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Queries globaux ===&lt;br /&gt;
Ce sont les &#039;&#039;queries&#039;&#039; &#039;&#039;offset&#039;&#039; et &#039;&#039;limit&#039;&#039;, de type &#039;&#039;int&#039;&#039;, qui représentent respectivement l&#039;indice de l&#039;item dans la liste à partir duquel les items sont listés (par défaut 0) et le nombre d&#039;items à lister (par défaut 100). Ils fonctionnent avec toutes les recherches.&lt;br /&gt;
&lt;br /&gt;
=== Liste des endpoints connus ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+GET&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!QUERY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/popularity.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/editorialRating.desc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/releaseDate.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|games/{gameCategory}/title.asc&lt;br /&gt;
| &#039;&#039;&#039;gameCategory&#039;&#039;&#039; str&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;release&#039;&#039;&#039; str&lt;br /&gt;
|Renvoie la liste des jeux de la catégorie &amp;lt;code&amp;gt;{gameCategory}&amp;lt;/code&amp;gt; triés par popularité décroissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|news/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;publicationPeriod&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des actualités triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/editorialRating.desc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par note décroissante des rédacteurs JVC et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|reviews/gameTitle.asc&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameMode&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;editorialRatingRange&#039;&#039;&#039; str&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;maxAge&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des tests triés par nom croissant du jeu et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|previews/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des annonces triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|topics/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des articles triés par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|videos/datePublished.desc&lt;br /&gt;
|&lt;br /&gt;
|&#039;&#039;&#039;publicationType&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;platform&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;gameGenre&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;event&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;offset&#039;&#039;&#039; int &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;limit&#039;&#039;&#039; int&lt;br /&gt;
|Renvoie la liste des vidéos triées par date de publication croissante et satisfaisant les &#039;&#039;queries&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessages&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des 25 derniers messages privés.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie la liste des dernières notifications.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/unseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Renvoie le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/profile&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Informations du profil.&lt;br /&gt;
|-&lt;br /&gt;
|config/menu&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Informations à afficher sur les pages Phoenix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+POST&lt;br /&gt;
!PATH&lt;br /&gt;
!PARAMS&lt;br /&gt;
!BODY &lt;br /&gt;
!DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-vues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnseenCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-vus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/subscription/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de notifications non-lues.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notifications/privateMessage/resetUnreadCount&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Met à zéro le nombre de messages privés non-lus.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/notification/{notifId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;notifId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit une notification.&lt;br /&gt;
|-&lt;br /&gt;
|me/{accessToken}/privateMessage/{messageId}/setRead&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;messageId&#039;&#039;&#039; int&lt;br /&gt;
|&lt;br /&gt;
|Lit un message privé.&lt;br /&gt;
|-&lt;br /&gt;
|_auth/{accessToken}/logout&lt;br /&gt;
| &#039;&#039;&#039;accessToken&#039;&#039;&#039; str&lt;br /&gt;
|&lt;br /&gt;
|Se déconnecter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ancienne API (dépréciée) =&lt;br /&gt;
{{Bannière Note|Contenu=Le contenu qui va suivre concerne l&#039;ancienne API qui n&#039;existe plus.}}&lt;br /&gt;
==Identification ==&lt;br /&gt;
L&#039;API utilise le nom de domaine [https://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).&lt;br /&gt;
&lt;br /&gt;
Tous ces identifiants fonctionnement actuellement, et je n&#039;ai pas repéré de page semblant afficher un comportement différent selon.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Utilisateur&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Mot de passe&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 1.0&lt;br /&gt;
|appandr &lt;br /&gt;
|e32!cdf&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.0.3&lt;br /&gt;
|app_and_gnw&lt;br /&gt;
|FC?4554?&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android 2.5&lt;br /&gt;
|app_and_ms &lt;br /&gt;
|D9!mVR4c&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android MP&lt;br /&gt;
| app_ag_jvmp&lt;br /&gt;
|LXnb45=d#&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |Android Tab&lt;br /&gt;
|nex12sz&lt;br /&gt;
|GT4!V2cT&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPhone&lt;br /&gt;
|app_ios_nw&lt;br /&gt;
|W!P45-R&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; |iPad &lt;br /&gt;
|ip45de&lt;br /&gt;
|XpD5!FT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
L&#039;API est accessible en HTTP et en HTTPS, préférez la version HTTPS !&lt;br /&gt;
&lt;br /&gt;
==Utilisation ==&lt;br /&gt;
===Connexion===&lt;br /&gt;
Pour vous connecter, utilisez la page [https://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php].&lt;br /&gt;
&lt;br /&gt;
Voici les paramètres à envoyer (GET ou POST) :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre plainlinks&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Paramètre&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Valeur&lt;br /&gt;
|-&lt;br /&gt;
|newnom&lt;br /&gt;
|Le pseudo de l&#039;utilisateur.&lt;br /&gt;
|-&lt;br /&gt;
| stamp&lt;br /&gt;
|Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l&#039;heure où la requête est envoyée.&lt;br /&gt;
|-&lt;br /&gt;
|hash&lt;br /&gt;
|Un hash MD5 sous la forme :&amp;lt;br&amp;gt;md5(pseudo + motDePasse + &amp;quot;OpX234&amp;quot; + stamp)&amp;lt;br&amp;gt;&#039;&#039;OpX234&#039;&#039; est un [[wikipedia:Salt_(cryptography)|salt]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vous renconterez potentiellement une erreur vous demandant de remplir un captcha, avec un lien vers l&#039;image, et une balise &#039;&#039;params_form&#039;&#039;, qu&#039;il faudra ajouter aux paramètres de la première requête, ainsi que le paramètre &#039;&#039;code&#039;&#039; avec la valeur du captcha.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important : n&#039;ouvrez pas le lien du captcha dans votre navigateur si vous êtes connecté à votre compte JVC ; un captcha différent est renvoyé selon la présence du cookie &#039;&#039;wenvjgol&#039;&#039; (qui ne doit PAS être présent pour afficher un captcha de l&#039;API, sinon vous aurez systématiquement une erreur de captcha invalide).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie &#039;&#039;wenvjgol&#039;&#039;, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.&lt;br /&gt;
&lt;br /&gt;
Pour information, &#039;&#039;wenvjgol&#039;&#039; signifie &#039;&#039;logjvnew&#039;&#039; à l&#039;envers, et c&#039;est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.&lt;br /&gt;
&lt;br /&gt;
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant &#039;&#039;Cisla&#039;&#039; par le pseudo ou bien l&#039;adresse e-mail) :&lt;br /&gt;
&lt;br /&gt;
[https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla https://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=&#039;&#039;Cisla&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
===Jeux, astuces, news...===&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|00.machines_version.xml&amp;lt;br&amp;gt;00.version_tablette.xml&lt;br /&gt;
|Dernière version de l&#039;application, informations sur la publicité, liste des consoles&lt;br /&gt;
|-&lt;br /&gt;
|01.flux_jeux_nouveautes.xml&amp;lt;br&amp;gt;01.flux_jeux_prochainement.xml&lt;br /&gt;
|Listes de jeux&lt;br /&gt;
|-&lt;br /&gt;
|01.jeux/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/details/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/videos/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;03.preview/&#039;&#039;43689&#039;&#039;.xml&amp;lt;br&amp;gt;03.test_complet/&#039;&#039;9813&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/news/&#039;&#039;21963&#039;&#039;.xml&amp;lt;br&amp;gt;05.jeu_astuce/&#039;&#039;41030&#039;&#039;.xml&amp;lt;br&amp;gt;05.astuce/&#039;&#039;33258&#039;&#039;.xml&amp;lt;br&amp;gt;01.jeux/screen_ast/&#039;&#039;38024&#039;&#039;.xml&lt;br /&gt;
|Informations sur le jeu (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|03.dossier/&#039;&#039;18270&#039;&#039;.xml&amp;lt;br&amp;gt;03.dossier/&#039;&#039;18270&#039;&#039;/&#039;&#039;1&#039;&#039;.xml&lt;br /&gt;
|Un dossier : &#039;&#039;18270&#039;&#039; est l&#039;id du dossier, &#039;&#039;1&#039;&#039; est la page (si vous n&#039;en mettez pas, vous avez le sommaire)&lt;br /&gt;
|-&lt;br /&gt;
|02.flux_news.xml&amp;lt;br&amp;gt;02.flux_news-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu&#039;à 9)&lt;br /&gt;
|-&lt;br /&gt;
|03.flux_articles_tests.xml&amp;lt;br&amp;gt;03.flux_articles_tests-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_apercus.xml&amp;lt;br&amp;gt;03.flux_articles_apercus-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;03.flux_articles_dossier.xml&amp;lt;br&amp;gt;03.flux_articles_dossier-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_cliq.xml&amp;lt;br&amp;gt;04.flux_videos_cliq-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_gaming.xml&amp;lt;br&amp;gt;04.flux_videos_gaming-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_autres.xml&amp;lt;br&amp;gt;04.flux_videos_autres-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;05.flux_astuces.xml&amp;lt;br&amp;gt;05.flux_astuces-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques.xml&amp;lt;br&amp;gt;04.flux_videos_chroniques-&#039;&#039;4&#039;&#039;.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos.xml&amp;lt;br&amp;gt;04.flux_toutes_les_videos-&#039;&#039;4&#039;&#039;.xml&lt;br /&gt;
|Même chose pour les derniers articles, tests, astuces et aperçus&lt;br /&gt;
|-&lt;br /&gt;
|02.news/&#039;&#039;1234&#039;&#039;.xml&amp;lt;br&amp;gt;02.news_screen/&#039;&#039;1234&#039;&#039;.xml&lt;br /&gt;
|Voir une news (le nombre correspond à l&#039;id)&lt;br /&gt;
|-&lt;br /&gt;
|ean.php?ean=&#039;&#039;0045496830144&#039;&#039;&lt;br /&gt;
|Voir le jeu associé au code-barre (EAN) 0045496830144&lt;br /&gt;
|-&lt;br /&gt;
| forums_index.xml&lt;br /&gt;
|Liste des forums généraux&lt;br /&gt;
|-&lt;br /&gt;
|search_n/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_sug/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums/&#039;&#039;mario&#039;&#039;&amp;lt;br&amp;gt;search_forums_sug/&#039;&#039;mario&#039;&#039;&lt;br /&gt;
|Effectuer une recherche dans le nom des jeux ou des forums&lt;br /&gt;
|-&lt;br /&gt;
|tab_suggest_blocs.xml&amp;lt;br&amp;gt;tab_suggest_forums.xml&lt;br /&gt;
| &#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| cgi-bin/liste.cgi&lt;br /&gt;
|&#039;&#039;À compléter&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Forums===&lt;br /&gt;
Pour les forums, les URL sont les mêmes que pour JVC, à part que :&lt;br /&gt;
* Le .htm est transformé en .xml&lt;br /&gt;
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com&lt;br /&gt;
*La chaîne de caractères à la fin de l&#039;URL (comme &#039;&#039;blabla-15-18-ans&#039;&#039; ou &#039;&#039;nom-du-topic&#039;&#039;) est remplacée par un 0 (sauf pour la recherche).&lt;br /&gt;
&lt;br /&gt;
Par exemple :&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm&amp;lt;br&amp;gt;&lt;br /&gt;
Devient :&amp;lt;br&amp;gt;&lt;br /&gt;
https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
&lt;br /&gt;
Exemples d&#039;URL :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml&lt;br /&gt;
|La liste des sujets&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml&lt;br /&gt;
|Rechercher « cactus » dans le titre des topics&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/1-50-1-1-0-1-0-0.xml&lt;br /&gt;
|Un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml&lt;br /&gt;
|Formulaire pour créer un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml&lt;br /&gt;
|10 derniers messages d&#039;un topic + formulaire&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml &lt;br /&gt;
| Formulaire de réponse à un topic&lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi&lt;br /&gt;
|Envoyer un message (avec les données POST) &lt;br /&gt;
|-&lt;br /&gt;
|https://ws.jeuxvideo.com/profil/cisla.xml &lt;br /&gt;
| Voir une CDV &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise &#039;&#039;params_form&#039;&#039;, vous devez ajouter le paramètre &#039;&#039;yournewmessage&#039;&#039; qui contient le message et &#039;&#039;newsujet&#039;&#039; qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d&#039;envoyer les données POST à la page &#039;&#039;forums.cgi&#039;&#039;. En cas de captcha à gérer, vous devez répéter l&#039;opération à partir des informations qu&#039;on vous envoie en réponse, avec la solution du captcha en paramètre &#039;&#039;code&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous devez être connecté (envoyer le cookie &#039;&#039;coniunctio&#039;&#039;) pour récupérer et envoyer un formulaire.&lt;br /&gt;
&lt;br /&gt;
Le même formulaire peut aussi bien être envoyé au &#039;&#039;forums.cgi&#039;&#039; de ws.jeuxvideo.com qu&#039;à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.&lt;br /&gt;
&lt;br /&gt;
=== Messages privés===&lt;br /&gt;
L&#039;id de l&#039;utilisateur mentionnée ci-dessous correspond à la partie du cookie &#039;&#039;coniunctio&#039;&#039; qui se trouve avant le premier &amp;quot;$&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Une fois connecté, vous devez envoyer le cookie &#039;&#039;coniunctio&#039;&#039; à chaque requête.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |URL &lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
|jvmp.xml&lt;br /&gt;
|Dernière version de l&#039;application, liste des consoles et des smileys, lien vers la charte, pub activée ou non&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/connexion_ws.php &lt;br /&gt;
|Les paramètres sont les mêmes que pour la connexion depuis &#039;&#039;mon_compte/connexion.php&#039;&#039;, décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/boite-reception_ws.php&lt;br /&gt;
|Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/envoyes_ws.php&lt;br /&gt;
|Permet de connaître la liste des messages envoyés. Paramètre à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/message_ws.php &lt;br /&gt;
| Permet de lire le contenu d&#039;un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;nb_clic&#039;&#039; : le nombre de fois où l&#039;utilisateur a cliqué sur « Voir les messages précédents »&lt;br /&gt;
*&#039;&#039;last_position_message&#039;&#039; : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du &#039;&#039;x&#039;&#039;&amp;lt;sup&amp;gt;ème&amp;lt;/sup&amp;gt; sont affichés, la numérotation débutant à partir de 0.&lt;br /&gt;
|-&lt;br /&gt;
| messages-prives/nouveau_ws.php&lt;br /&gt;
|Permet d&#039;envoyer un nouveau message privé. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;all_dest&#039;&#039; : les destinataires, séparés pas des point-virgules&lt;br /&gt;
*&#039;&#039;sujet&#039;&#039; : le titre du MP&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du MP&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;control&#039;&#039; : md5(&amp;quot;k_ys4+a]x&amp;quot; + idUtilisateur + &amp;quot;j6A=d?6-W*-&amp;quot; + timestamp + &amp;quot;z_.Im&amp;quot;)&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/repondre_ws.php&lt;br /&gt;
|Permet de répondre à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;yournewmessage&#039;&#039; : le contenu du message&lt;br /&gt;
*&#039;&#039;tmp&#039;&#039; : le timestamp actuel&lt;br /&gt;
* &#039;&#039;control&#039;&#039; : md5(&amp;quot;vx*96-dP&amp;quot; + timestamp + &amp;quot;8e63ddO_&amp;quot; + idUtilisateur + &amp;quot;al)orc9W&amp;quot;)&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
Il se peut également que vous ayez à gérer un code de confirmation.&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/suggest_pseudo_ws.php&lt;br /&gt;
|Liste quelques pseudos qui commencent par ce que l&#039;utilisateur est en train de taper. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;search&#039;&#039; : ce que l&#039;utilisateur est en train de taper&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/indesirable_ws.php&lt;br /&gt;
|Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;pseudo_indesirable&#039;&#039; : pseudo de l&#039;utilisateur à ajouter en indésirable&lt;br /&gt;
*&#039;&#039;time_indesirable&#039;&#039; : le timestamp actuel&lt;br /&gt;
*&#039;&#039;key_indesirable&#039;&#039; : md5(&amp;quot;5d*&amp;quot; + timestamp + &amp;quot;v1S{&amp;quot; + idIndesirable + &amp;quot;I,5|S9z)&amp;quot; + pseudoIndesirable + &amp;quot;52Sx69,&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_indesirable_ws.php&lt;br /&gt;
|Permet d&#039;enlever un utilisateur des indésirables. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur actuel&lt;br /&gt;
* &#039;&#039;id_user_indesirable&#039;&#039; : id de l&#039;utilisateur à enlever des indésirables &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/info_alerte_ws.php&lt;br /&gt;
|Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
* &#039;&#039;id_message&#039;&#039; : id du message concerné &lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/alerte_ws.php&lt;br /&gt;
| Permet d&#039;effectuer une DDB (ce qui est inutile, étant donné qu&#039;elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur qui fait la DDB&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;motif&#039;&#039; : le motif, par exemple &#039;&#039;Piratage&#039;&#039; (les mêmes motifs que dans les MP sur JVC normal)&lt;br /&gt;
*&#039;&#039;id_message&#039;&#039; : id du message concerné&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion concernée&lt;br /&gt;
*&#039;&#039;time_alerte&#039;&#039; : timestamp actuel&lt;br /&gt;
*&#039;&#039;key_alerte&#039;&#039; : md5(&amp;quot;v6dE{&amp;quot; + idDiscussion + &amp;quot;d96/&amp;quot; + idMessage + &amp;quot;mvn85Qa&amp;quot; + timestamp + &amp;quot;auxarmeheuuuuuuu&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/connexion_valid_ws.php&lt;br /&gt;
|Permet d&#039;afficher le nombre de messages non-lus ainsi que l&#039;URL de l&#039;avatar. Paramètres à envoyer : &lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;pseudo&#039;&#039; : pseudo de l&#039;utilisateur&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/add_destinataire_ws.php&lt;br /&gt;
|Permet d&#039;ajouter un destinataire à un message privé. Paramètres à envoyer :&lt;br /&gt;
*&#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;id_discussion&#039;&#039; : id de la discussion&lt;br /&gt;
*&#039;&#039;tab_pseudo&#039;&#039; : liste des destinataires à ajouter, séparés par un point-virgule&lt;br /&gt;
|-&lt;br /&gt;
|messages-prives/del_message_ws.php&lt;br /&gt;
|Permet de supprimer un message privé. Paramètres à envoyer :&lt;br /&gt;
* &#039;&#039;id_user&#039;&#039; : id de l&#039;utilisateur&lt;br /&gt;
*&#039;&#039;del_discussion&#039;&#039; : id des discussions à supprimer séparés par un tiret&lt;br /&gt;
*&#039;&#039;box&#039;&#039; : 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ancienne rétro-ingéniérie ==&lt;br /&gt;
===Décompilation===&lt;br /&gt;
Cette section concerne la décompilation de l&#039;application Android de JVC sous Linux.&lt;br /&gt;
&lt;br /&gt;
Pour décompiler l&#039;application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip :&lt;br /&gt;
&lt;br /&gt;
 $ 7z x com.jeuxvideo-2.5.apk&lt;br /&gt;
&lt;br /&gt;
Puis, transformez le .dex en .jar à l&#039;aide de l&#039;utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] :&lt;br /&gt;
&lt;br /&gt;
 $ dex2jar classes.dex&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s&#039;occupera de décompiler les fichiers :&lt;br /&gt;
&lt;br /&gt;
 $ jd-gui classes-dex2jar.jar&lt;br /&gt;
&lt;br /&gt;
===Déobfuscation===&lt;br /&gt;
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :&lt;br /&gt;
&lt;br /&gt;
 this.g.getString(2131230723)&lt;br /&gt;
&lt;br /&gt;
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, &#039;&#039;resources.arsc&#039;&#039;. Pour en extraire le contenu, nous allons utiliser l&#039;utilitaire [http://code.google.com/p/android-apktool/ apktool] :&lt;br /&gt;
&lt;br /&gt;
 $ apktool d com.jeuxvideo-2.5.apk strings&lt;br /&gt;
&lt;br /&gt;
Ensuite, vous pourrez trouver dans le fichier &#039;&#039;strings/res/values/strings.xml&#039;&#039; la liste des chaînes de caractères associées à leurs variables, et dans &#039;&#039;strings/res/values/public.xml&#039;&#039;, la liste des variables associées aux nombres (en hexadécimal) comme &#039;&#039;2131230723&#039;&#039; que vous voyez dans le code décompilé. Ce n&#039;est pas très pratique mais je n&#039;ai pas trouvé d&#039;outil qui modifie directement le code décompilé pour y intégrer les valeurs du &#039;&#039;resources.arsc&#039;&#039; (mais je n&#039;ai pas beaucoup cherché non plus).&lt;br /&gt;
&lt;br /&gt;
Ce n&#039;est pas tout. À partir de la version 2.0.3 de l&#039;application JVC, et pour toutes les version de l&#039;application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;string name=&amp;quot;md5_a&amp;quot;&amp;gt;290B2FB20CFD682C120BBBFFFE5928D9&amp;lt;/string&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j&#039;ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :&lt;br /&gt;
&lt;br /&gt;
 from Crypto.Cipher import AES&lt;br /&gt;
 from passlib.utils.pbkdf2 import pbkdf2&lt;br /&gt;
 &lt;br /&gt;
 cle = &#039;package android.content&#039;&lt;br /&gt;
 cle = AES.new(pbkdf2(cle, cle, 10, 128/8, &#039;hmac-sha1&#039;))&lt;br /&gt;
 &lt;br /&gt;
 string = &#039;290B2FB20CFD682C120BBBFFFE5928D9&#039;&lt;br /&gt;
 string = cle.decrypt(string.decode(&#039;hex&#039;))&lt;br /&gt;
 print repr(string[:-ord(string[-1])])&lt;br /&gt;
&lt;br /&gt;
Modifiez la clé selon l&#039;application que vous décompilez: &lt;br /&gt;
&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.0.3), c&#039;est &#039;&#039;package com.jeuxvideo.activity&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com (version &amp;gt;= 2.5), c&#039;est &#039;&#039;package android.content&#039;&#039;&lt;br /&gt;
*Pour l&#039;application Jeuxvideo.com MP (version &amp;gt;= 1.0), c&#039;est &#039;&#039;package com.jeuxvideomp.activity&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;application pour tablettes n&#039;est pas concernée par ce mécanisme d&#039;obfuscation.&lt;br /&gt;
&lt;br /&gt;
==Liens externes==&lt;br /&gt;
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia]&lt;br /&gt;
*[http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&amp;amp;hl=fr L&#039;application Android]&lt;br /&gt;
*[https://play.google.com/store/apps/details?id=com.jeuxvideomp&amp;amp;hl=fr L&#039;application Android des MP]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id393077232 L&#039;application iPhone]&lt;br /&gt;
*[https://itunes.apple.com/fr/app/id547233024 L&#039;application iPhone des MP]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android :&lt;br /&gt;
**[http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1]&lt;br /&gt;
**[http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5]&lt;br /&gt;
**[http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1]&lt;br /&gt;
**[http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2]&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3]&lt;br /&gt;
**[http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android des MP :&lt;br /&gt;
**[http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0]&lt;br /&gt;
&lt;br /&gt;
*L&#039;APK de l&#039;application Android tablette :&lt;br /&gt;
**[http://dl3.apk-dl.com/root/apk/2015/9/19/com.jeuxvideo.tablet_40.apk?f=Jeuxvideo.com%20tablette_1.0.4_apk-dl.com.apk Version 1.0.4]&lt;br /&gt;
{{SectionRéférences}}&lt;br /&gt;
{{TableauCatégorieFonctionnementJVC}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Fonctionnement technique de Jeuxvideo.com]]&lt;br /&gt;
[[Catégorie:Extensions et outils]]&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
	<entry>
		<id>https://jvflux.fr/index.php?title=Fichier:icon2.png&amp;diff=154664</id>
		<title>Fichier:icon2.png</title>
		<link rel="alternate" type="text/html" href="https://jvflux.fr/index.php?title=Fichier:icon2.png&amp;diff=154664"/>
		<updated>2024-05-19T07:37:45Z</updated>

		<summary type="html">&lt;p&gt;HelloWorld5000 : Fichier téléversé avec MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fichier téléversé avec MsUpload&lt;/div&gt;</summary>
		<author><name>HelloWorld5000</name></author>
	</entry>
</feed>