Kheys
410
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". | ||
Veuillez consulter l'[[#annexe | annexe]] pour trouver un script Python permettant de créer ce ''header''. | |||
=== | ===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 | |'''categories''' str | ||
'''types''' | '''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''' | |'''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== |