ServerMods API/fr

L'api "ServerMods" de Curse permet d'obtenir des informations à propos des projets de plugins et de leurs dernières versions. C'est maintenant la **seule manière autorisée par dev.bukkit.org pour que votre plugin vérifie s'il est à jour.**Les informations retournées sont au format JSON.

L'url de base pour accéder à l'api est: https://api.curseforge.com/servermods/. Une clé peut être spécifiée afin d'identifier le serveur qui envoie la requête. Pour l'instant elle n'est pas obligatoire, mais il est préférable que les admins génèrent un clé pour leur serveur ici.

## Recherche de projets

Vous pouvez rechercher des projets de plugins avec leur nom, pour obtenir leur id, et leur phase de développement (alpha, beta, release ou mature).
Cela avec l'url https://api.curseforge.com/servermods/projects?search=name où vous remplacez **name** par le nom du plugin.

Exemple:

URL: https://api.curseforge.com/servermods/projects?search=worldedit

Résultat:

```
[
 {
 "id": 31043,
 "name": "WorldEdit",
 "slug": "worldedit",
 "stage": "release"
 },
 {
 "id": 54713,
 "name": "LimitedWorldEdit",
 "slug": "limitedworldedit",
 "stage": "release"
 },
 {
 "id": 79446,
 "name": "WorldEdit Selection Visualizer",
 "slug": "worldedit-selection-visualizer",
 "stage": "release"
 }
]

```

## Voir la liste des versions

Une fois que vous avez l'id d'un projet, vous pouvez obtenir une liste de ses versions, avec l'url https://api.curseforge.com/servermods/files?projectIds=id où vous remplacez **id** par l'id du projet.

Exemple:

URL: https://api.curseforge.com/servermods/files?projectIds=33921

Résultat:

```
 [
 {
 "downloadUrl":"http:\/\/servermods.cursecdn.com\/files\/553\/160\/yoda.mp3",
 "fileName":"yoda.mp3",
 "fileUrl":"http:\/\/www.curseforge.com\/files\/553160",
 "gameVersion":"1.4.7",
 "md5":"bc301c973d5572e8126930e5e3cc9d10",
 "name":"v0.1",
 "projectId":33921,
 "releaseType":"beta"
 }
 ]

```

## Utilisation dans votre plugin

Voici une simple classe qui utilise l'api ServerMods pour obtenir des infos sur la dernière version de votre plugin:

```
public class ApiUpdate {
 private final int projectId;
 private final String apiKey;

 // Clé des valeurs JSON:
 private static final String API\_NAME\_VALUE = "name",
 API\_LINK\_VALUE = "downloadUrl",
 API\_RELEASE\_TYPE\_VALUE = "releaseType",
 API\_FILE\_NAME\_VALUE = "fileName",
 API\_GAME\_VERSION\_VALUE = "gameVersion";

 //Adresse pour obtenir la liste des versions du projet:
 private static final String API\_QUERY\_URL = "https://api.curseforge.com/servermods/files?projectIds=";

 //Informations récupérées à propos de la dernière version:
 private String latestName, latestLink, latestType, latestFileName, latestGameVersion;

 /\*\*
 \* Crée une nouvelle instance de ApiUpdate pour utiliser de façon anonyme (sans clé) l'api ServerMods.
 \* @param projectId l'id du plugin
 \*/
 public ApiUpdate(int projectId) {
 this(projectId, null);
 }

 /\*\*
 \* Crée une nouvelle instance de ApiUpdate pour utiliser avec une clé l'api ServerMods.
 \* @param projectId l'id du plugin
 \* @param apiKey la clé de l'api
 \*/
 public ApiUpdate(int projectId, String apiKey) {
 this.projectId = projectId;
 this.apiKey = apiKey;
 }

 /\*\*
 \* Se connecte à internet et envoie une requête à l'api pour obtenir les informations sur le projet.
 \*/
 public void query() {
 URL url = null;

 try {
 url = new URL(API\_QUERY\_URL + projectID);//On ajoute l'id dans l'url
 } catch (MalformedURLException e) {
 // Erreur dans la création de l'url
 e.printStackTrace();
 return;
 }

 try {
 // Ouvre une connexion:
 URLConnection conn = url.openConnection();

 if (apiKey != null) {
 // Si on a l'api key, on l'ajoute dans le header X-API-Key de la requête:
 conn.addRequestProperty("X-API-Key", apiKey);
 }

 // On ajoute le header User-Agent qui sert à identifier votre plugin. Remplacer le 2è paramètre par le nom de votre plugin,
 // sa version et son auteur
 conn.addRequestProperty("User-Agent", "ServerModsAPI-Example v1.0 (wiki bukkit fr)");

 // On lit la réponse:
 final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 String response = reader.readLine();

 // On extrait les informations JSON de la réponse:
 JSONArray array = (JSONArray) JSONValue.parse(response);

 if (array.size() > 0) {
 //On ne prend que la dernière version:
 JSONObject latest = (JSONObject) array.get(array.size() - 1);

 latestName = (String) latest.get(API\_NAME\_VALUE);
 latestLink = (String) latest.get(API\_LINK\_VALUE);
 latestType = (String) latest.get(API\_RELEASE\_TYPE\_VALUE);
 latestFileName = (String) latest.get(API\_FILE\_NAME\_VALUE);
 latestGameVersion = (String) latest.get(API\_GAME\_VERSION\_VALUE);

 }
 } catch (IOException e) {
 e.printStackTrace();
 return;
 }
 }

 public String getLatestName() {
 return latestName;
 }

 public String getLatestLink() {
 return latestLink;
 }

 public String getLatestType() {
 return latestType;
 }

 public String getLatestFileName() {
 return latestFileName;
 }

 public String getLatestGameVersion() {
 return latestGameVersion;
 }
}

```

Utilisez-la comme ceci:

```
ApiUpdate updater = new ApiUpdate(projectId);//Spécifiez l'id de votre plugin
updater.query();//Vous devez D'ABORD récupérer les infos via l'api ServersMods
updater.getLatestName();//Vous pouvez ENSUITE récupérez les infos avec getLatestXXX(). Ici on récupère le nom de la derière version

```