Kheys
1 092
modifications
m (→API endpoints) |
(PUT, DELETE, explication sur comment trouver l'API) |
||
Ligne 1 : | Ligne 1 : | ||
L''''API de [[Jeuxvideo.com]]''', utilisée à l'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. | L''''API de [[Jeuxvideo.com]]''', utilisée à l'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. | ||
Ligne 32 : | Ligne 31 : | ||
URL de base de l'API : ''<nowiki>https://api.jeuxvideo.com/v4/</nowiki>'' | URL de base de l'API : ''<nowiki>https://api.jeuxvideo.com/v4/</nowiki>'' | ||
* URL : endpoint | * '''T''' : Est-ce que l'endpoint à été testé ? N = non, O = Oui | ||
* PARAMS : variable entre accolades à remplacer dans l'URL, suivi de son type ''str'' ou ''int''. | * '''URL''' : url de l'endpoint | ||
* '''PARAMS''' : variable entre accolades à remplacer dans l'URL, suivi de son type ''str'' ou ''int''. | |||
** <code>contents/{contentID}/comments</code> doit être appelé comme suivant <code>contents/someID1234/comments</code> | ** <code>contents/{contentID}/comments</code> doit être appelé comme suivant <code>contents/someID1234/comments</code> | ||
* BODY : corps de la requête au format JSON donc <code>"content": "commentaire"</code> sera en réalité : | * '''QUERY''' : ?page=1& | ||
* '''BODY''' : corps de la requête au format JSON donc <code>"content": "commentaire"</code> sera en réalité : | |||
<pre> | <pre> | ||
{ | { | ||
Ligne 47 : | Ligne 48 : | ||
!PARAMS | !PARAMS | ||
!BODY | !BODY | ||
!T | |||
|- | |- | ||
|addComment | |addComment | ||
Ligne 52 : | Ligne 54 : | ||
|'''contentID''' str | |'''contentID''' str | ||
|<pre>"content": "commentaire"</pre> | |<pre>"content": "commentaire"</pre> | ||
|N | |||
|- | |- | ||
|addCommentVote | |addCommentVote | ||
Ligne 58 : | Ligne 61 : | ||
'''commentID''' str | '''commentID''' str | ||
|<pre>"type": 1 ou -1</pre> | |<pre>"type": 1 ou -1</pre> | ||
|N | |||
|- | |- | ||
|addFavorisGames | |addFavorisGames | ||
Ligne 67 : | Ligne 71 : | ||
]} | ]} | ||
</pre> | </pre> | ||
|N | |||
|- | |- | ||
|addReply | |addReply | ||
Ligne 74 : | Ligne 78 : | ||
'''commentID''' str | '''commentID''' str | ||
|<code>"content": "Super jeu !"</code> | |<code>"content": "Super jeu !"</code> | ||
|N | |||
|- | |- | ||
|addReview | |addReview | ||
Ligne 84 : | Ligne 89 : | ||
"onProfile": true | "onProfile": true | ||
</pre> | </pre> | ||
|N | |||
|- | |- | ||
|login | |login | ||
Ligne 91 : | Ligne 97 : | ||
"password": "mot_de_passe" | "password": "mot_de_passe" | ||
|O | |||
|- | |- | ||
|logout | |logout | ||
Ligne 96 : | Ligne 103 : | ||
| | | | ||
| | | | ||
|O | |||
|- | |- | ||
|register | |register | ||
Ligne 106 : | Ligne 114 : | ||
"optin": false | "optin": false | ||
</pre> | </pre> | ||
|N | |||
|- | |- | ||
|reinitPassword | |reinitPassword | ||
Ligne 122 : | Ligne 131 : | ||
"val2" ]} | "val2" ]} | ||
</pre> | </pre> | ||
|N | |||
|- | |- | ||
|reportAccount | |reportAccount | ||
Ligne 129 : | Ligne 139 : | ||
<code>"message": "Raison"</code> | <code>"message": "Raison"</code> | ||
|N | |||
|- | |- | ||
|reportComment | |reportComment | ||
Ligne 142 : | Ligne 153 : | ||
} | } | ||
</pre> | </pre> | ||
|N | |||
|- | |- | ||
|reportReview | |reportReview | ||
Ligne 155 : | Ligne 167 : | ||
"valeur_captcha": "" | "valeur_captcha": "" | ||
}</pre> | }</pre> | ||
|N | |||
|- | |- | ||
|restoreComment | |restoreComment | ||
Ligne 161 : | Ligne 174 : | ||
'''commentID''' str | '''commentID''' str | ||
|"content" : "comment" | |"content" : "comment" | ||
|N | |||
|- | |- | ||
|validateAccount | |validateAccount | ||
Ligne 170 : | Ligne 184 : | ||
"password": "mdp" | "password": "mdp" | ||
</pre> | </pre> | ||
|N | |||
|- | |- | ||
|validateSignature | |validateSignature | ||
Ligne 177 : | Ligne 192 : | ||
"signed_data": "signed_data" | "signed_data": "signed_data" | ||
</pre> | </pre> | ||
|N | |||
|} | |} | ||
{| class="wikitable mw-collapsible" | {| class="wikitable mw-collapsible" | ||
Ligne 185 : | Ligne 201 : | ||
!QUERY | !QUERY | ||
!HEADER | !HEADER | ||
!T | |||
|- | |- | ||
|config | |config | ||
Ligne 191 : | Ligne 208 : | ||
| | | | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getAccount | |getAccount | ||
Ligne 197 : | Ligne 215 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getAllFavorisGames | |getAllFavorisGames | ||
Ligne 203 : | Ligne 222 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getArticle | |getArticle | ||
Ligne 209 : | Ligne 229 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getArticleList | |getArticleList | ||
Ligne 217 : | Ligne 238 : | ||
'''types''' str | '''types''' str | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getCaptcha | |getCaptcha | ||
Ligne 223 : | Ligne 245 : | ||
|'''nb''' int | |'''nb''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getChroniclesSummary | |getChroniclesSummary | ||
Ligne 229 : | Ligne 252 : | ||
|'''machines''' str | |'''machines''' str | ||
| | | | ||
|N | |||
|- | |- | ||
|getComment | |getComment | ||
Ligne 236 : | Ligne 260 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getCommentAnswers | |getCommentAnswers | ||
Ligne 243 : | Ligne 268 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getComments | |getComments | ||
Ligne 250 : | Ligne 276 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getContentBean | |getContentBean | ||
|contents/{id} | |contents/{id} | ||
|'''id''' int | |'''id''' int | ||
| | |||
| | | | ||
| | | | ||
Ligne 267 : | Ligne 295 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getCurrentAccountReport | |getCurrentAccountReport | ||
|accounts/{accountId}/report | |accounts/{accountId}/report | ||
|'''accountId''' str | |'''accountId''' str | ||
| | |||
| | | | ||
| | | | ||
Ligne 280 : | Ligne 310 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getCurrentReviewReport | |getCurrentReviewReport | ||
Ligne 288 : | Ligne 319 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getFavoris | |getFavoris | ||
Ligne 294 : | Ligne 326 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getFavorisForum | |getFavorisForum | ||
Ligne 301 : | Ligne 334 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getFavorisGames | |getFavorisGames | ||
Ligne 307 : | Ligne 341 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getFavorisTopics | |getFavorisTopics | ||
Ligne 314 : | Ligne 349 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getFolder | |getFolder | ||
Ligne 320 : | Ligne 356 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getGame | |getGame | ||
Ligne 327 : | Ligne 364 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameDetails | |getGameDetails | ||
Ligne 334 : | Ligne 372 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameImages | |getGameImages | ||
Ligne 342 : | Ligne 381 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameList | |getGameList | ||
Ligne 353 : | Ligne 393 : | ||
'''perPage''' int | '''perPage''' int | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getGameNews | |getGameNews | ||
Ligne 360 : | Ligne 401 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameReleaseList | |getGameReleaseList | ||
Ligne 370 : | Ligne 412 : | ||
'''perPage''' int | '''perPage''' int | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getGameReview | |getGameReview | ||
Ligne 378 : | Ligne 421 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameReviews | |getGameReviews | ||
Ligne 384 : | Ligne 428 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameReviews | |getGameReviews | ||
Ligne 391 : | Ligne 436 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameSummary | |getGameSummary | ||
Ligne 397 : | Ligne 443 : | ||
|'''machines''' str | |'''machines''' str | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameUserReviews | |getGameUserReviews | ||
Ligne 405 : | Ligne 452 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameVideos | |getGameVideos | ||
Ligne 413 : | Ligne 461 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getGameWikis | |getGameWikis | ||
Ligne 421 : | Ligne 470 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getHeadlineList | |getHeadlineList | ||
Ligne 429 : | Ligne 479 : | ||
'''perPage''' int | '''perPage''' int | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getHighTechSummary | |getHighTechSummary | ||
Ligne 435 : | Ligne 486 : | ||
|'''machines''' str | |'''machines''' str | ||
| | | | ||
|N | |||
|- | |- | ||
|getLightGame | |getLightGame | ||
Ligne 442 : | Ligne 494 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getNews | |getNews | ||
Ligne 448 : | Ligne 501 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getNewsHighTech | |getNewsHighTech | ||
Ligne 455 : | Ligne 509 : | ||
'''perPage''' int | '''perPage''' int | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getPageContents | |getPageContents | ||
Ligne 462 : | Ligne 517 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getPageReviews | |getPageReviews | ||
Ligne 469 : | Ligne 525 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getProfile | |getProfile | ||
Ligne 475 : | Ligne 532 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getProfilePage | |getProfilePage | ||
Ligne 481 : | Ligne 539 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getRelatedNews | |getRelatedNews | ||
Ligne 488 : | Ligne 547 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getRelatedVideos | |getRelatedVideos | ||
Ligne 495 : | Ligne 555 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getRelatedWikis | |getRelatedWikis | ||
Ligne 502 : | Ligne 563 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|getSpecificNews | |getSpecificNews | ||
Ligne 508 : | Ligne 570 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getStores | |getStores | ||
Ligne 515 : | Ligne 578 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getTechList | |getTechList | ||
Ligne 522 : | Ligne 586 : | ||
'''perPage''' int | '''perPage''' int | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getTopWikis | |getTopWikis | ||
Ligne 528 : | Ligne 593 : | ||
| | | | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getTopsComments | |getTopsComments | ||
Ligne 534 : | Ligne 600 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getVideo | |getVideo | ||
Ligne 540 : | Ligne 607 : | ||
| | | | ||
| | | | ||
|N | |||
|- | |- | ||
|getVideoList | |getVideoList | ||
Ligne 551 : | Ligne 619 : | ||
'''perPage''' int | '''perPage''' int | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|- | |- | ||
|getVideosSummary | |getVideosSummary | ||
Ligne 557 : | Ligne 626 : | ||
|'''machines''' str | |'''machines''' str | ||
| | | | ||
|N | |||
|- | |- | ||
|search | |search | ||
Ligne 563 : | Ligne 633 : | ||
|'''q''' str | |'''q''' str | ||
| | | | ||
|N | |||
|- | |- | ||
|searchArticles | |searchArticles | ||
Ligne 571 : | Ligne 642 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|searchAutocomplete | |searchAutocomplete | ||
Ligne 577 : | Ligne 649 : | ||
|'''q''' str | |'''q''' str | ||
| | | | ||
|N | |||
|- | |- | ||
|searchGames | |searchGames | ||
Ligne 585 : | Ligne 658 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|searchNews | |searchNews | ||
Ligne 593 : | Ligne 667 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|searchVideos | |searchVideos | ||
Ligne 601 : | Ligne 676 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|searchWikis | |searchWikis | ||
Ligne 609 : | Ligne 685 : | ||
'''perPage''' int | '''perPage''' int | ||
| | | | ||
|N | |||
|- | |- | ||
|sponso | |sponso | ||
Ligne 615 : | Ligne 692 : | ||
| | | | ||
|'''If-None-Match''' str | |'''If-None-Match''' str | ||
|N | |||
|} | |||
{| class="wikitable mw-collapsible" | |||
|+PUT | |||
!NOM | |||
!URL | |||
!PARAMS | |||
!BODY | |||
!T | |||
|- | |||
|saveDescription | |||
|accounts/me/profile/description | |||
| | |||
|''rétro-ingénierie à faire'' | |||
|N | |||
|- | |||
|saveExcludedMachines | |||
|accounts/me/profile/excluded-machines | |||
| | |||
|"machines" : [1, 2, 3, 4] // id des machines | |||
|N | |||
|- | |||
|saveMachines | |||
|accounts/me/profile/machines | |||
| | |||
|"machines" : [1, 2, 3, 4] // id des machines | |||
|N | |||
|- | |||
|updateComment | |||
|contents/{contentID}/comments/{commentID} | |||
|'''contentID''' str | |||
'''commentID''' str | |||
|"content": "Super jeu !" | |||
|N | |||
|- | |||
|uploadAvatar | |||
|accounts/me/avatar | |||
| | |||
|''rétro-ingénierie à faire'' | |||
|N | |||
|- | |||
|uploadCover | |||
|accounts/me/cover | |||
| | |||
|''rétro-ingénierie à faire'' | |||
|N | |||
|} | |} | ||
{| class="wikitable" | |||
|+DELETE | |||
!NOM | |||
!URL | |||
!PARAMS | |||
!T | |||
|- | |||
|deleteComment | |||
|contents/{contentID}/comments/{commentID} | |||
|'''contentID''' str | |||
'''commentID''' str | |||
|N | |||
|- | |||
|deleteCommentVote | |||
|contents/{contentID}/comments/{commentID}/vote | |||
|'''contentID''' str | |||
'''commentID''' str | |||
|N | |||
|} | |||
{| class="wikitable" | |||
|+CUSTOM HTTP (''rétro-ingénierie à faire'') | |||
!NOM | |||
!URL | |||
!PARAMS | |||
!T | |||
|- | |||
|deleteFavorisForum | |||
|accounts/{accountId}/favorites/forums | |||
|'''accountId''' str | |||
|N | |||
|- | |||
|deleteFavorisGames | |||
|accounts/{accountId}/favorites/games | |||
|'''accountId''' str | |||
|N | |||
|- | |||
|deleteFavorisTopics | |||
|accounts/{accountId}/favorites/topics | |||
|'''accountId''' str | |||
|N | |||
|} | |||
== Rétro-ingénierie de l'API == | |||
Pour connaître les endpoints de l'API, il faut décompiler l'appli JVC. | |||
# Décompresser l'APK de l'application avec 7zip/Winrar/etc. | |||
# Utiliser un décompilateur Dex vers Java, comme '''[https://github.com/skylot/jadx Jadx]''' . | |||
Une fois le code Java disponible, on peut ouvrir l'interface ''com.jeuxvideo.api.web.'''JvApiService''''', qui contient tous les endpoints. L'appli utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l'API, on peut facilement parcourir la documentation de cette bibliothèque pour découvrir ce qu'il faut faire comme requête aux différentes URL de l'API. | |||
La classe ''com.jeuxvideo.utils.'''ApiLogin''''' (nom de la classe donné arbitrairement car perdu lors de la compilation), permet de déduire qu'il faut mettre dans le header de la requête à l'API ''Jvc-Authorization : '''header''''' ainsi que l'algorithme permettant de trouver ce qu'il faut mettre à la place de '''''header'''''. | |||
==Classe PHP exploitant l'API== | ==Classe PHP exploitant l'API== |