Kheys
1 092
modifications
(Ajout des requêtes GET) |
|||
Ligne 2 : | Ligne 2 : | ||
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. | ||
Elle est au format JSON, ce qui fait qu'elle est plus facile à parser, mais aussi plus rapide à charger qu'une page web normale. | Elle est au format JSON<ref>https://fr.wikipedia.org/wiki/JavaScript_Object_Notation</ref>, ce qui fait qu'elle est plus facile à parser<ref>[https://fr.wiktionary.org/wiki/parser#:~:text=Verbe,-parser%20%5Cpa%CA%81.se&text=(Anglicisme%20informatique)%20(Programmation),ou%20en%20extraire%20des%20%C3%A9l%C3%A9ments. https://fr.wiktionary.org/wiki/parser#:~:text=Verbe,-parser%20%5Cpa%CA%81.se&text=(Anglicisme%20informatique)%20(Programmation),ou%20en%20extraire%20des%20%C3%A9l%C3%A9ments.]</ref>, mais aussi plus rapide à charger qu'une page web normale. | ||
L'ancienne API était hébergée sur le sous-domaine "ws". Désormais, l'API est hébergée sur le sous-domaine "api". | L'ancienne API était hébergée sur le sous-domaine "ws". Désormais, l'API est hébergée sur le sous-domaine "api", et est actuellement à sa quatrième version (v4). | ||
=API v4= | =API v4= | ||
L'API v4 utilise un système de sécurité afin que même personne ne puisse accéder à l'API. Pour pouvoir accéder y accéder, l'''Header'' de vos requêtes devra toujours être de la forme : | L'API v4 utilise un système de sécurité afin que même personne ne puisse accéder à l'API. Pour pouvoir accéder y accéder, l'''Header'' de vos requêtes devra toujours être de la forme : | ||
Jvc-Authorization: "'''''<u>header</u>'''''" | |||
"User-Agent": "JeuxVideo-Android/267" | |||
"Content-Type" : "application/json" | |||
Où '''''header''''' est égal à une chaîne de charactère de cette forme : ''"PartnerKey='''<u>partner_key</u>''', Signature='''<u>signature</u>''', Timestamp='''<u>date</u>'''".'' (Voir section rétro-ingénierie pour plus d'information) | |||
====== Voici un script [https://www.python.org/ python] qui construit la signature ====== | |||
import hashlib | |||
from datetime import datetime | |||
Voici un script python qui construit la signature | api_version = 4 | ||
partner_key = "550c04bf5cb2b" | |||
import hashlib | date = datetime.utcnow().isoformat() | ||
from datetime import datetime | method = "POST" | ||
api_version = 4 | signature = hashlib.sha256(f"{self.partner_key}\n{date}\n{method}\napi.jeuxvideo.com\n/v{self.api_version}/{path}".encode()).hexdigest() | ||
partner_key = "550c04bf5cb2b" | |||
date = datetime.utcnow().isoformat() | header = f"PartnerKey={partner_key}, Signature={signature}, Timestamp={date}" | ||
method = "POST" | |||
signature = hashlib.sha256(f"{self.partner_key}\n{date}\n{method}\napi.jeuxvideo.com\n/v{self.api_version}/{path}".encode()).hexdigest() | |||
== API endpoints == | == API endpoints == | ||
Url de base : ''<nowiki>https://api.jeuxvideo.com/v4/</nowiki>'' | Url de base : ''<nowiki>https://api.jeuxvideo.com/v4/</nowiki>'' | ||
* URL : endpoint | |||
* PARAMS : variable entre accolades à remplacer dans l'URL. | |||
* Exemple : <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 "content": "commentaire" sera en réalité { | |||
* "content": "commentaire" | |||
* } | |||
{| class="wikitable mw-collapsible" | {| class="wikitable mw-collapsible" | ||
Ligne 38 : | Ligne 42 : | ||
!NOM | !NOM | ||
!URL | !URL | ||
!PARAMS | !PARAMS | ||
!BODY | !BODY | ||
Ligne 44 : | Ligne 47 : | ||
|addComment | |addComment | ||
|contents/{contentID}/comments | |contents/{contentID}/comments | ||
|'''contentID''' str | |'''contentID''' str | ||
|<pre>"content": "commentaire"</pre> | |<pre>"content": "commentaire"</pre> | ||
Ligne 50 : | Ligne 52 : | ||
|addCommentVote | |addCommentVote | ||
|contents/{contentID}/comments/{commentID}/vote | |contents/{contentID}/comments/{commentID}/vote | ||
|'''contentID''' str | |'''contentID''' str | ||
'''commentID''' str | '''commentID''' str | ||
Ligne 57 : | Ligne 58 : | ||
|addFavorisGames | |addFavorisGames | ||
|accounts/{accountId}/favorites/games | |accounts/{accountId}/favorites/games | ||
|'''accountId''' str | |'''accountId''' str | ||
|<pre>"games": [{ | |<pre>"games": [{ | ||
Ligne 68 : | Ligne 68 : | ||
|addReply | |addReply | ||
|contents/{contentID}/comments/{commentID}/answers | |contents/{contentID}/comments/{commentID}/answers | ||
|'''contentID''' str | |'''contentID''' str | ||
'''commentID''' str | '''commentID''' str | ||
Ligne 75 : | Ligne 74 : | ||
|addReview | |addReview | ||
|games/{id}/{machine}/reviews/users | |games/{id}/{machine}/reviews/users | ||
|'''id''' int | |'''id''' int | ||
'''machine''' str | '''machine''' str | ||
Ligne 86 : | Ligne 84 : | ||
|login | |login | ||
|accounts/login | |accounts/login | ||
| | | | ||
|"alias": "pseudo", | |"alias": "pseudo", | ||
Ligne 94 : | Ligne 91 : | ||
|logout | |logout | ||
|accounts/logout | |accounts/logout | ||
| | | | ||
| | | | ||
Ligne 101 : | Ligne 97 : | ||
|accounts/register | |accounts/register | ||
''l'<nowiki/>'''Header''' doit inclure'' : <code>"Jvc-Auth-Token" : str</code> | ''l'<nowiki/>'''Header''' doit inclure'' : <code>"Jvc-Auth-Token" : str</code> | ||
| | | | ||
|<pre>"email": "email", | |<pre>"email": "email", | ||
Ligne 111 : | Ligne 106 : | ||
|reinitPassword | |reinitPassword | ||
|accounts/reset | |accounts/reset | ||
| | | | ||
|<pre>"alias": "pseudo", | |<pre>"alias": "pseudo", | ||
Ligne 128 : | Ligne 122 : | ||
|reportAccount | |reportAccount | ||
|accounts/{accountId}/report | |accounts/{accountId}/report | ||
|'''accountId''' str | |'''accountId''' str | ||
|<code>"reason": 1,</code> | |<code>"reason": 1,</code> | ||
Ligne 136 : | Ligne 129 : | ||
|reportComment | |reportComment | ||
|contents/{contentID}/comments/{commentID}/report | |contents/{contentID}/comments/{commentID}/report | ||
|'''contentID''' str | |'''contentID''' str | ||
'''commentID''' str | '''commentID''' str | ||
Ligne 150 : | Ligne 142 : | ||
|reportReview | |reportReview | ||
|games/{id}/{machine}/reviews/users/{reviewId}/report | |games/{id}/{machine}/reviews/users/{reviewId}/report | ||
|'''id''' int | |'''id''' int | ||
'''machine''' str | '''machine''' str | ||
Ligne 164 : | Ligne 155 : | ||
|restoreComment | |restoreComment | ||
|contents/{contentID}/comments/{commentID} | |contents/{contentID}/comments/{commentID} | ||
|'''contentID''' str | |'''contentID''' str | ||
'''commentID''' str | '''commentID''' str | ||
Ligne 171 : | Ligne 161 : | ||
|validateAccount | |validateAccount | ||
|accounts/confirm | |accounts/confirm | ||
| | | | ||
|<pre>"id": 123, | |<pre>"id": 123, | ||
Ligne 181 : | Ligne 170 : | ||
|validateSignature | |validateSignature | ||
|general/stores/android/validation | |general/stores/android/validation | ||
| | | | ||
|<pre>"signature": "signature", | |<pre>"signature": "signature", | ||
"signed_data": "signed_data" | "signed_data": "signed_data" | ||
</pre> | </pre> | ||
|} | |||
{| class="wikitable mw-collapsible" | |||
|+GET | |||
!NOM | |||
!URL | |||
!PARAMS | |||
!QUERY | |||
!HEADER | |||
|- | |||
|config | |||
|general/config | |||
| | |||
| | |||
|'''If-None-Match''' str | |||
|- | |||
|getAccount | |||
|accounts/{accountId} | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getAllFavorisGames | |||
|accounts/{accountId}/favorites/games/all | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getArticle | |||
|contents/{id} | |||
|'''id''' int | |||
| | |||
| | |||
|- | |||
|getArticleList | |||
|''rétro-ingénierie à faire'' | |||
| | |||
|'''page''' int | |||
'''perPage''' int | |||
'''types''' str | |||
|'''If-None-Match''' str | |||
|- | |||
|getCaptcha | |||
|captcha/start | |||
| | |||
|'''nb''' int | |||
| | |||
|- | |||
|getChroniclesSummary | |||
|contents/chronicles | |||
| | |||
|'''machines''' str | |||
| | |||
|- | |||
|getComment | |||
|contents/{contentID}/comments/{commentID} | |||
|'''contentID''' str | |||
'''commentID''' str | |||
| | |||
| | |||
|- | |||
|getCommentAnswers | |||
|contents/{contentID}/comments/{commentID}/answers | |||
|'''contentID''' str | |||
'''commentID''' str | |||
| | |||
| | |||
|- | |||
|getComments | |||
|contents/{contentID}/comments | |||
|'''contentID''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getContentBean | |||
|contents/{id} | |||
|'''id''' int | |||
| | |||
| | |||
|- | |||
|getContentList | |||
|''rétro-ingénierie à faire'' | |||
| | |||
|'''categories''' str | |||
'''types''' str | |||
'''events''' str | |||
'''machines''' str | |||
'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getCurrentAccountReport | |||
|accounts/{accountId}/report | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getCurrentCommentReport | |||
|contents/{contentID}/comments/{commentID}/report | |||
|'''contentID''' str | |||
'''commentID''' str | |||
| | |||
| | |||
|- | |||
|getCurrentReviewReport | |||
|games/{id}/{machine}/reviews/users/{reviewId}/report | |||
|'''id''' int | |||
'''machine''' str | |||
'''reviewId''' int | |||
| | |||
| | |||
|- | |||
|getFavoris | |||
|accounts/{accountId}/favorites | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getFavorisForum | |||
|accounts/{accountId}/favorites/forums | |||
|'''accountId''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getFavorisGames | |||
|accounts/{accountId}/favorites/games | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getFavorisTopics | |||
|accounts/{accountId}/favorites/topics | |||
|'''accountId''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getFolder | |||
|contents/{id} | |||
|'''id''' int | |||
| | |||
| | |||
|- | |||
|getGame | |||
|games/{id}/{machine} | |||
|'''id''' int | |||
'''machine''' str | |||
| | |||
| | |||
|- | |||
|getGameDetails | |||
|games/{id}/{machine}/details | |||
|'''id''' int | |||
'''machine''' str | |||
| | |||
| | |||
|- | |||
|getGameImages | |||
|games/{id}/{machine}/images | |||
|'''id''' int | |||
'''machine''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getGameList | |||
|games/{type} | |||
|'''type''' str | |||
|'''machines''' str | |||
'''machine''' str | |||
'''genre''' str | |||
'''mode''' str | |||
'''page''' int | |||
'''perPage''' int | |||
|'''If-None-Match''' str | |||
|- | |||
|getGameNews | |||
|games/{id}/{machine}/news | |||
|'''id''' int | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getGameReleaseList | |||
|games/releases | |||
| | |||
|'''month''' str | |||
'''year''' str | |||
'''machines''' str | |||
'''page''' int | |||
'''perPage''' int | |||
|'''If-None-Match''' str | |||
|- | |||
|getGameReview | |||
|games/{id}/{machine}/reviews/users/{review} | |||
|'''id''' int | |||
'''machine''' str | |||
'''review''' str | |||
| | |||
| | |||
|- | |||
|getGameReviews | |||
|games/{id}/any/reviews | |||
|'''id''' int | |||
| | |||
| | |||
|- | |||
|getGameReviews | |||
|games/{id}/{machine}/reviews | |||
|'''id''' int | |||
'''machine''' str | |||
| | |||
| | |||
|- | |||
|getGameSummary | |||
|contents/games | |||
| | |||
|'''machines''' str | |||
| | |||
|- | |||
|getGameUserReviews | |||
|games/{id}/{machine}/reviews/users | |||
|'''id''' int | |||
'''machine''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getGameVideos | |||
|games/{id}/{machine}/videos | |||
|'''id''' int | |||
'''machine''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getGameWikis | |||
|games/{id}/{machine}/wikis | |||
|'''id''' int | |||
'''machine''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getHeadlineList | |||
|contents/trending | |||
| | |||
|'''machines''' str | |||
'''page''' int | |||
'''perPage''' int | |||
|'''If-None-Match''' str | |||
|- | |||
|getHighTechSummary | |||
|contents/hightech | |||
| | |||
|'''machines''' str | |||
| | |||
|- | |||
|getLightGame | |||
|games/{id}/{machine}/light | |||
|'''id''' int | |||
'''machine''' str | |||
| | |||
| | |||
|- | |||
|getNews | |||
|contents/{id} | |||
|'''id''' int | |||
| | |||
| | |||
|- | |||
|getNewsHighTech | |||
|contents/hightech | |||
| | |||
|'''page''' int | |||
'''perPage''' int | |||
|'''If-None-Match''' str | |||
|- | |||
|getPageContents | |||
|accounts/{accountId}/page/contents | |||
|'''accountId''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getPageReviews | |||
|accounts/{accountId}/page/reviews | |||
|'''accountId''' str | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getProfile | |||
|accounts/{accountId}/profile | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getProfilePage | |||
|accounts/{accountId}/page | |||
|'''accountId''' str | |||
| | |||
| | |||
|- | |||
|getRelatedNews | |||
|contents/{id}/news | |||
|'''id''' int | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getRelatedVideos | |||
|contents/{id}/videos | |||
|'''id''' int | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getRelatedWikis | |||
|contents/{id}/wikis | |||
|'''id''' int | |||
|'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|getSpecificNews | |||
|''rétro-ingénierie à faire'' | |||
| | |||
| | |||
| | |||
|- | |||
|getStores | |||
|games/{id}/{machine}/stores | |||
|'''id''' int | |||
'''machine''' str | |||
| | |||
| | |||
|- | |||
|getTechList | |||
|contents/hightech | |||
| | |||
|'''page''' int | |||
'''perPage''' int | |||
|'''If-None-Match''' str | |||
|- | |||
|getTopWikis | |||
|contents/wikis | |||
| | |||
| | |||
|'''If-None-Match''' str | |||
|- | |||
|getTopsComments | |||
|contents/{contentID}/comments/tops | |||
|'''contentID''' str | |||
| | |||
| | |||
|- | |||
|getVideo | |||
|videos/{id} | |||
|'''id''' int | |||
| | |||
| | |||
|- | |||
|getVideoList | |||
|''rétro-ingénierie à faire'' | |||
| | |||
|'''categories''' str | |||
'''chronicles''' str | |||
'''machines''' str | |||
'''types''' str | |||
'''page''' int | |||
'''perPage''' int | |||
|'''If-None-Match''' str | |||
|- | |||
|getVideosSummary | |||
|contents/videos | |||
| | |||
|'''machines''' str | |||
| | |||
|- | |||
|search | |||
|''rétro-ingénierie à faire'' | |||
| | |||
|'''q''' str | |||
| | |||
|- | |||
|searchArticles | |||
|search/articles | |||
| | |||
|'''q''' str | |||
'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|searchAutocomplete | |||
|search/games/autocomplete | |||
| | |||
|'''q''' str | |||
| | |||
|- | |||
|searchGames | |||
|search/games | |||
| | |||
|'''q''' str | |||
'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|searchNews | |||
|search/news | |||
| | |||
|'''q''' str | |||
'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|searchVideos | |||
|search/videos | |||
| | |||
|'''q''' str | |||
'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|searchWikis | |||
|search/wikis | |||
| | |||
|'''q''' str | |||
'''page''' int | |||
'''perPage''' int | |||
| | |||
|- | |||
|sponso | |||
|general/nativeads | |||
| | |||
| | |||
|'''If-None-Match''' str | |||
|} | |} | ||
Ligne 509 : | Ligne 935 : | ||
print repr(string[:-ord(string[-1])]) | print repr(string[:-ord(string[-1])]) | ||
Modifiez la clé selon l'application que vous décompilez : | Modifiez la clé selon l'application que vous décompilez: | ||
*Pour l'application Jeuxvideo.com (version >= 2.0.3), c'est ''package com.jeuxvideo.activity'' | *Pour l'application Jeuxvideo.com (version >= 2.0.3), c'est ''package com.jeuxvideo.activity'' | ||
Ligne 518 : | Ligne 944 : | ||
==Liens externes== | ==Liens externes== | ||
*[https://fr.wikipedia.org/wiki/Interface_de_programmation API sur Wikipédia] | |||
*[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] | *[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] | ||
*[https://play.google.com/store/apps/details?id=com.jeuxvideo&hl=fr L'application Android] | *[https://play.google.com/store/apps/details?id=com.jeuxvideo&hl=fr L'application Android] | ||
Ligne 539 : | Ligne 966 : | ||
*L'APK de l'application Android tablette : | *L'APK de l'application Android tablette : | ||
**[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] | **[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] | ||
{{SectionRéférences}} | {{SectionRéférences}} | ||
{{TableauCatégorieFonctionnementJVC}} | {{TableauCatégorieFonctionnementJVC}} |