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

aucun résumé des modifications
Aucun résumé des modifications
Ligne 114 : Ligne 114 :
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".


Voici un script [https://www.python.org/ python] qui construit  la valeur de ''Jvc-Authorization'' :
Veuillez consulter l'[[#annexe | annexe]] pour trouver un script Python permettant de créer ce ''header''.
<pre>
import hmac
import hashlib
import datetime
 
apiVersion = 4
partnerKey = '550c04bf5cb2b'
hmacSecret = 'd84e9e5f191ea4ffc39c22d11c77dd6c'
 
def createJvcAuthorizationHeader(method, path):
    # Étape 1 : Calcul de la date et de l'heure actuelles au format ISO
    date = datetime.datetime.utcnow().isoformat()
   
    # Étape 2 : Construction de la chaîne signatureStr
    signatureStr = f"{partnerKey}\n{date}\n{method}\napi.jeuxvideo.com\n/v{apiVersion}/{path}\n"
   
    # Étape 3 et 4 : Calcul de la signature HMAC SHA-256
    secret = bytes.fromhex(hmacSecret)
    signature = hmac.new(secret, signatureStr.encode('utf-8'), hashlib.sha256).hexdigest()
   
    # Étape 5 et 6 : Retour d'une chaîne formatée comme en-tête d'autorisation
    return f"PartnerKey={partnerKey}, Signature={signature}, Timestamp={date}"
 
method = 'GET'
apiPath = 'api/endpoint'
authorizationHeader = createJvcAuthorizationHeader(method, apiPath)
print(authorizationHeader)
</pre>


===Authentifiation===
===Authentification===
Comme pour l'ancienne API, le cookie ''coniunctio'' est toujours le cookie de session utilisateur. Il doit être récupéré avec l'appel au point d'entrée ''accounts/login'' (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP <code>"Cookie" : "coniunctio={coniunctio}"</code> pour chaque appel.
Comme pour l'ancienne API, le cookie ''coniunctio'' est toujours le cookie de session utilisateur. Il doit être récupéré avec l'appel au point d'entrée ''accounts/login'' (voir tableau POST) puis il doit être envoyé dans une en-tête HTTP <code>"Cookie" : "coniunctio={coniunctio}"</code> pour chaque appel.


== Comportement du sous-domaine ==
== Comportement du sous-domaine ==
Ligne 382 : Ligne 352 :
|contents
|contents
|
|
|'''categories''' str ''percent-encoding'' (voir annexe)
|'''categories''' str
'''types''' int
'''types''' str
'''events''' str
'''events''' str
'''machines''' str
'''machines''' str
'''page''' int
'''page''' int
'''perPage''' int
'''perPage''' int <br>
Les str peuvent contenir plusieurs valeurs grâce à l'encodage URL (voir l'[[#Annexe | annexe]]).
|-
|-
|getCurrentAccountReport
|getCurrentAccountReport
Ligne 455 : Ligne 426 :
|getGameList
|getGameList
|games/{type}
|games/{type}
|'''type''' int
|'''type''' str
|'''machines''' str
|'''machines''' str
'''machine''' str
'''machine''' str
Ligne 462 : Ligne 433 :
'''page''' int
'''page''' int
'''perPage''' int
'''perPage''' int
Les str peuvent contenir plusieurs valeurs grâce à l'encodage URL (voir l'[[#Annexe | annexe]]).
|-
|-
|getGameNews
|getGameNews
Ligne 761 : Ligne 733 :
||'''topics''' <code>[74229153, 74229154]</code> // ID des topics
||'''topics''' <code>[74229153, 74229154]</code> // ID des topics
|}
|}
<div id="annexe"></div>
== Annexe ==
=== Jvc-Authorization ===
Voici un script Python qui permet de construire le ''header'' ''Jvc-Authorization'' :
<pre>
import hashlib, hmac, datetime, urllib.parse
PARTNER_KEY = '550c04bf5cb2b'
HMAC_SECRET = b'd84e9e5f191ea4ffc39c22d11c77dd6c'
DOMAIN = 'api.jeuxvideo.com'
API_VERSION = 4
def auth_header(path: str, method: str = 'GET', query: dict = None) -> str:
    # Conversion de path en URL avec urllib.parse.urlparse
    date = datetime.datetime.now().isoformat()
    parsed_url = urllib.parse.urlparse(f"https://{DOMAIN}/v{API_VERSION}/{path}")
    if query:
        parsed_url = parsed_url._replace(query=urllib.parse.urlencode(query))
       
    # Création de la chaîne à hash
    string_to_hash = [PARTNER_KEY, date, method, parsed_url.netloc, parsed_url.path]
    if parsed_url.query:
        string_to_hash.append(parsed_url.query)
    else:
        string_to_hash[-1] += '\n'
    string_to_hash = '\n'.join(string_to_hash)
   
    # Hash de la chaîne puis renvoi sous forme de Jvc-Authorization
    signature = hmac.new(HMAC_SECRET, msg=string_to_hash.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()
    return f"PartnerKey={PARTNER_KEY}, Signature={signature}, Timestamp={date}"
</pre>
=== Requêtes à l'API ===
Voici un script Python permettant d'envoyer des requêtes à l'API et qui utilise la fonction précédente :
<pre>
import requests, json
from requests import Response
def call(path: str, method: str = 'GET', query: dict = None, data: dict = None, cookies: dict = cookies) -> Response:
    url = f"https://{DOMAIN}/v{API_VERSION}/{path}"
    jv_auth = auth_header(path, method=method, query=query)
    headers = {
        "Jvc-Authorization":jv_auth,
        "Content-Type": "application/json",
        "jvc-app-platform":"Android",
        "jvc-app-version":"338",
        "user-agent":"JeuxVideo-Android/338",
        "host":"api.jeuxvideo.com"
    }
    if data:
        data = json.dumps(data)
    return requests.request(url=url, method=method, data=data, headers=headers, params=query, cookies=cookies)
</pre>
=== Parsing du query ''categories'' ===
Lors de l'appel à ''contents'', vous pouvez passer en ''query'' une chaîne de caractères '''categories'''. Ce ''query'' doit être encodé au format d'encodage URL, ce qui peut être fait en Python :
<pre>
from urllib.parse import quote
categories = "50,53,56" # la recherche récupérera les articles de catégories 50, 53 et 56.
categories_parsed = quote(categories)
query = {"categories": categories_parsed}
# vous pouvez désormais passer ce dictionnaire en query
</pre>


==Ressources==
==Ressources==
Kheys
410

modifications