MrBaguette07

Bucheron
22 Février 2018
15
1
14
25
Bonjour,

Actuellement je suis en train de finaliser mon site de classement de vote.
Mais je n'ai jamais appris comment créer une api de vote.
Enfaite j'aimerais faire comme ceci : https://github.com/MineWeb/Plugin-Vote/blob/master/Model/Website.php

--------------------------------------------------------------------------------------------
case 'MON-SITE':
// Check with API
$result = @file_get_contents("MON-SITE/api/{$website['data']['server_id']}/?ip=$ip");
if ($result || intval($result) > 0)
return true;
break;
default:
return true;
}
return false;
--------------------------------------------------------------------------------------------​

Si je dois allez autre part, ou un forum spécialisé à me conseiller je suis toujours preneur !

Bonne journée à tous !

-Pour éviter toute pub je ne publie pas le lien de mon site-
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Salut,

je n'ai pas bien compris ce que tu essayes de faire. Tu fais un site de vote et donc tu cherches à faire une API permettant aux serveurs Minecraft d'intégrer ton système de vérification dans leur site ou alors tu souhaites intégrer les sites de votes déjà existant au site de ton serveur ?

D'ailleurs, on réfléchit généralement à la manière de faire un système technique (de façon théorique) et on évite de se baser sur un code qui ne sera sûrement pas adapté dans notre cas précis.
 

MrBaguette07

Bucheron
22 Février 2018
15
1
14
25
Salut,

je n'ai pas bien compris ce que tu essayes de faire. Tu fais un site de vote et donc tu cherches à faire une API permettant aux serveurs Minecraft d'intégrer ton système de vérification dans leur site ou alors tu souhaites intégrer les sites de votes déjà existant au site de ton serveur ?

D'ailleurs, on réfléchit généralement à la manière de faire un système technique (de façon théorique) et on évite de se baser sur un code qui ne sera sûrement pas adapté dans notre cas précis.

Je cherche surtout, à faire une API permettant aux serveurs Minecraft d'intégrer le système de vérification dans leur site.
Mais je n'arrive pas à trouver comment faire, ou même chercher quelqu'un qui pourrait me le faire (payant ou gratuit).
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Salut,

je reviens vers toi, désolé pour le délai.

Du coup, vu que je ne sais pas comment tu as fait ton système de vote, on va partir du principe que tu sauvegardes à un endroit l'IP de l'utilisateur ayant voté et que tu bases ta vérification sur ça.
La chose la plus simple à faire, autant pour toi côté serveur que pour les personnes qui l'intégreront côté client, c'est de proposer une page retournant un résultat json qui contient les informations utiles.

Côté serveur :
Par exemple, imaginons un fichier appelé check.php dans un dossier api. Ton fichier ressemblerait à quelque chose comme ça :
PHP:
<?php

$vote = false;

if (isset($_GET["ip"])) {
    $ip = $_GET["ip"];
    $vote = true; // Aller chercher dans ton stockage si l'IP a voté ou non
}

$jsonData = [
    "response" => $vote
];

header('Content-Type: application/json;charset=utf-8');
echo json_encode($jsonData);

Côté client :
Si on se rebase sur mon fichier précédent, il est très simple pour les utilisateurs de l'intégrer. La vérification ressemble à quelque chose comme ça :
PHP:
<?php

$result = file_get_contents("http://SITE/api/check.php?ip=127.0.0.1");
$jsonResult = json_decode($result);

$vote = $jsonResult->response ?: 0;

J'espère que ma réponse éclaire ta lanterne, si tu as encore des questions, n'hésite pas ! ;)
 
  • J'aime
Reactions: MrBaguette07

MrBaguette07

Bucheron
22 Février 2018
15
1
14
25
Bonsoir,

Tout d'abord, merci de votre réponse !

Cela m'éclaire beaucoup. Enfaite, je pense qu'il faut que je refasse mon système de vote, car non je n'ai pas fais de système qui enregistre l'ip, mais un cookie, du coup le problème qui se r'ajoute c'est qu'ils peuvent voter en "illimité" dès qu'il change de navigateur.

Si je schématise, voila ce que ça donne :
api.png

Du coup il faut repartir du moment ou il clique sur le bouton et le moment ou il reçoit le message ou la redirection vers la page d'accueil.
Par dessus on r'ajoute votifier mais ça c'est bon.

Pouvez-vous m'éclaircir sur un tutoriel ou quelque chose dans ce genre pour réaliser l'api ?

Bonne soirée à vous.
 

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Re,

Cela m'éclaire beaucoup. Enfaite, je pense qu'il faut que je refasse mon système de vote, car non je n'ai pas fais de système qui enregistre l'ip, mais un cookie, du coup le problème qui se r'ajoute c'est qu'ils peuvent voter en "illimité" dès qu'il change de navigateur.
oui il faut éviter au maximum de stocker ce genre de chose chez le client ; certains n'auraient pas mis longtemps à trouver le "usebug" (même pas besoin de changer de navigateur)

Du coup il faut repartir du moment ou il clique sur le bouton et le moment ou il reçoit le message ou la redirection vers la page d'accueil.
Côté serveur :
L'idée, derrière un vote, c'est ça :
On va sur ton site de vote et on cherche notre serveur favori -> On clique sur le gros bouton "Voter" sur la page du serveur.
Lorsqu'un joueur clique sur "Voter", c'est là que tu dois faire ta logique :
- D'abord vérifier qu'il n'a pas déjà voté
- S'il n'a pas voté, tu fais ta logique donc ajouter l'IP à la liste de celle qui ont déjà votés et éventuellement afficher un message "Merci pour le vote"

Côté client :
Lorsqu'un utilisateur a été rédigée vers ton site de vote, le site du serveur n'a rien à faire.
Lorsque l'utilisateur a voté (soit le site client vérifies automatiquement toutes les X secondes, soit ils mettent un bouton "Vérifier"), ils font une requête vers ton site de vote avec l'IP de l'utilisateur.
Si ton site (via ton API) leur répond "true" c'est que l'utilisateur a récemment voté et donc ils peuvent donner les récompenses et publier le tout sur Jsonapi. Sinon c'est que l'utilisateur n'a pas voté.

=> Ce qui est important c'est de bien faire la différence entre les actions réalisées par le site de vote (enregistrer un vote par IP et empêcher les votes multiples) et celles réalisés par le site du serveur (vérifier un vote grâce à l'API du site du vote et attribuer les récompenses aux joueurs).

Pouvez-vous m'éclaircir sur un tutoriel ou quelque chose dans ce genre pour réaliser l'api ?
Oui mais où bloques-tu précisément ?
 

MrBaguette07

Bucheron
22 Février 2018
15
1
14
25
Bonjour, désolé de ma réponse tardive.
Effectivement j'avais fais un petit script qui enregistre l'ip ainsi que des points. sous ce type :
$result = $database->query("SELECT `id` FROM `points` WHERE `type` = 1 AND `server_id` = {$_SESSION['server_id']} AND `ip` = '{$_SERVER['REMOTE_ADDR']}' AND `timestamp` > UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)");
Il enregistre l'id du serveur, l'ip, ainsi que le temp pour le vote.
Du coup, je retourne sur le moment ou il faut vérifier l'ip. Je ne sais pas si j'ajoute votre code ci-dessus ?
 
Dernière édition:

DiscowZombie

Développeur
Staff
Modérateur
Support
2 Mars 2017
2 659
1
931
298
Alsace
www.discowzombie.fr
Salut,

$result = $database->query("SELECT `id` FROM `points` WHERE `type` = 1 AND `server_id` = {$_SESSION['server_id']} AND `ip` = '{$_SERVER['REMOTE_ADDR']}' AND `timestamp` > UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)");
ce code enregistre un vote, il doit donc être exécuté lorsqu'un joueur clique sur le bouton "Voter".

Ce que tu dois faire maintenant, c'est la condition pour vérifier si un joueur a voté il y a moins de 24 heures.
PHP:
$vote = true; // Aller chercher dans ton stockage si l'IP a voté ou non
Sinon l'API te dira que tu as déjà voté dans tous les cas.

Ensuite, je ne sais pas où tu as appris à faire du Sql mais ce n'est pas la bonne manière que tu utilises là. Avec ce code, tu vas provoquer ce qui s'appeler des injections Sql car ta requête va être "forcée" à s'éxécuter. La bonne manière de faire du Sql c'est ce qui s'appele les requêtes préparés (notamment avec PDO prepare() en Php), je t'invite à te renseigner là-dessus.

En outre, et pour finir, il me semble qu'il arrive d'avoir des problèmes avec $_SERVER['REMOTE_ADDR'] qui parfois ne retourne pas l'IP attendue. Il pourrait être bon de faire quelques recherches là-dessus également. ;)
 

MrBaguette07

Bucheron
22 Février 2018
15
1
14
25
ce code enregistre un vote, il doit donc être exécuté lorsqu'un joueur clique sur le bouton "Voter".

Ce que tu dois faire maintenant, c'est la condition pour vérifier si un joueur a voté il y a moins de 24 heures.
PHP:
$vote = true; // Aller chercher dans ton stockage si l'IP a voté ou non
Sinon l'API te dira que tu as déjà voté dans tous les cas.

D'accord, je vais approfondir quelques recherches pour pouvoir l'implémenter dans mon scripts de vérification.


Ensuite, je ne sais pas où tu as appris à faire du Sql mais ce n'est pas la bonne manière que tu utilises là. Avec ce code, tu vas provoquer ce qui s'appeler des injections Sql car ta requête va être "forcée" à s'éxécuter. La bonne manière de faire du Sql c'est ce qui s'appele les requêtes préparés (notamment avec PDO prepare() en Php), je t'invite à te renseigner là-dessus.

Ah, d'accord. Merci de votre renseignement, je vais mettre à jour mes connaissance en sql ;)

En outre, et pour finir, il me semble qu'il arrive d'avoir des problèmes avec $_SERVER['REMOTE_ADDR'] qui parfois ne retourne pas l'IP attendue. Il pourrait être bon de faire quelques recherches là-dessus également. ;)

Et bien, comme ça je ne vais pas m'ennuyait, ;)

Bonne journée à vous et merci ;)
 
  • J'aime
Reactions: DiscowZombie