« Documentation de l'API Jeuxvideo.com » : différence entre les versions

(PUT, DELETE, explication sur comment trouver l'API)
Ligne 1 : Ligne 1 :
{{CadreTravaux}}
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==