Kheys
410
modifications
Aucun résumé des modifications |
|||
Ligne 66 : | Ligne 66 : | ||
La classe ''JVApiManager'' (du package arbitrairement nommé ''p379s3'' car nom perdu lors de la compilation) est celle qui envoie les requêtes à l'API. Elle permet de savoir quelles variables sont passées à la requête vers tel ''endpoint''. | La classe ''JVApiManager'' (du package arbitrairement nommé ''p379s3'' car nom perdu lors de la compilation) est celle qui envoie les requêtes à l'API. Elle permet de savoir quelles variables sont passées à la requête vers tel ''endpoint''. | ||
<div id="jvc-auth-header"></div> | |||
=== Le cas Jvc-Auth-Header === | === Le cas Jvc-Auth-Header === | ||
''Jvc-Auth-Header'' est le ''header'' envoyé à l'''endpoint'' nommé ''accounts/register''. Cet ''endpoint'' est crucial en ce qu'il représente l''''unique manière de créer un compte JVC sans le système reCaptcha'''. | ''Jvc-Auth-Header'' est le ''header'' envoyé à l'''endpoint'' nommé ''accounts/register''. Cet ''endpoint'' est crucial en ce qu'il représente l''''unique manière de créer un compte JVC sans le système reCaptcha'''. | ||
Ligne 75 : | Ligne 76 : | ||
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'application. | 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'application. | ||
<div id="interception"></div> | |||
== Interception du trafic == | == Interception du trafic == | ||
Ligne 114 : | Ligne 116 : | ||
Où ''header'' est égal à une chaîne de caractères de la forme ''"PartnerKey=partner_key, Signature=signature, Timestamp=timestamp". | Où ''header'' est égal à une chaîne de caractères de la forme ''"PartnerKey=partner_key, Signature=signature, Timestamp=timestamp". | ||
Veuillez consulter l'[[#annexe | annexe]] pour trouver un script Python permettant de créer ce ''header''. | Veuillez consulter l'[[#annexe|annexe]] pour trouver un script Python permettant de créer ce ''header''. | ||
===Authentification=== | ===Authentification=== | ||
Ligne 123 : | Ligne 125 : | ||
Il est intéressant de remarquer que l'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'URL « www » par « api » et vous vous trouverez sur une page aux informations identiques quoique présentées de manière différente. Ainsi, les URL seront de la forme <code>https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm</code>. | Il est intéressant de remarquer que l'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'URL « www » par « api » et vous vous trouverez sur une page aux informations identiques quoique présentées de manière différente. Ainsi, les URL seront de la forme <code>https://api.jeuxvideo.com/forums/0-51-0-1-0-1-0-blabla-18-25-ans.htm</code>. | ||
[[File:forum_api.png|vignette| | [[File:forum_api.png|vignette|350px|Le forum [[Blabla 18-25 ans]] sur le site de l'API.]] | ||
L'API ne fonctionne donc pas que par ''endpoints''. | L'API ne fonctionne donc pas que par ''endpoints''. | ||
Ligne 136 : | Ligne 138 : | ||
*'''URL''': URL de l'endpoint | *'''URL''': URL de l'endpoint | ||
*'''PARAMS, HEADERS''': | *'''PARAMS, HEADERS''': | ||
** ''' | ** '''param''' : variable entre accolades à remplacer dans l'URL, suivie dans la documentation de son type (''str'' ou ''int''). Par exemple, <code>contents/{contentID}/comments</code> doit être appelé comme suit : <code>contents/123456/comments</code>. | ||
** '''header''' : ''header'' particulier à inclure dans l'en-tête de la requête. Si pas de spécification, l'en-tête ne contient que les ''headers'' de base spécifiés plus haut (''User-Agent'', ''Jvc-Authorization'', etc.). | ** '''header''' : ''header'' particulier à inclure dans l'en-tête de la requête. Si pas de spécification, l'en-tête ne contient que les ''headers'' de base spécifiés plus haut (''User-Agent'', ''Jvc-Authorization'', etc.). | ||
Ligne 782 : | Ligne 784 : | ||
</pre> | </pre> | ||
=== Parsing des queries === | === ''Parsing'' des ''queries'' === | ||
Lors de l'appel à ''contents'' par exemple, vous pouvez passer en ''query'' des chaînes de caractère comme ''categories'' ou ''types''. Ces ''queries'', s'il contiennent plusieurs valeurs, doivent être encodés au format d'encodage URL, ce qui peut être fait en Python : | Lors de l'appel à ''contents'' par exemple, vous pouvez passer en ''query'' des chaînes de caractère comme ''categories'' ou ''types''. Ces ''queries'', s'il contiennent plusieurs valeurs, doivent être encodés au format d'encodage URL, ce qui peut être fait en Python : | ||
<pre> | <pre> | ||
Ligne 901 : | Ligne 903 : | ||
client.post_topic(51, 'Je poste depuis Python', 'Et toi ? :)') | client.post_topic(51, 'Je poste depuis Python', 'Et toi ? :)') | ||
</pre> | </pre> | ||
== Limitations == | |||
L'API v4 comporte plusieurs limitations : | |||
* Il est impossible d'outrepasser les protections [[captcha|captchas]] requises par le site notamment pour [[DDB|signaler]] un message. | |||
* Il est impossible de s'inscrire en utilisation l'''endpoint'' <code>accounts/register</code> car celui-ci nécessite un ''header'' contenant le ''token'' FireBase généré lors de l'installation de l'application (voir le [[#jvc-auth-header|paragraphe à ce sujet]]). Une solution serait de créer un grand nombre de machines virtuelles (ou d'en automatiser la création), et pour chacune d'entre elles d'intercepter le trafic de l'application (voir [[#interception|section associée]]) pour récupérer et conserver les ''tokens'' 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'elle n'utilise pas l'API, serait de créer un compte sur le site à l'aide d'un ''webdriver''. Celle-ci fonctionne (l'auteur de ce paragraphe l'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'avoir un VPN gérable depuis un script). | |||
* Il est particulièrement hardu de faire du ''web scraping'' sur les pages de forum puisque l'API renvoie une page HTML et non un fichier JSON dans ce cas. | |||
==Ressources== | ==Ressources== | ||
* | *[https://archive.org/details/jeuxvideo.com-pc-et-consoles-5.4.7-apkpure APK 5.4.7] décompilable avec JADX. | ||
* | *[https://pastebin.com/LWNDQDKy Classe PHP] exploitant l'API (cette classe est incomplète et sera possiblement rendue obsolète dans le temps). | ||
=Ancienne API (dépréciée) = | =Ancienne API (dépréciée) = |