Résumé

Vous recherchez un autre outil ?

PARTAGEZ

Comment créer un système de vote par SMS simple (Python)

Comprenez l'évolution de la création d'un système de vote par SMS simple (python).

Logo of Callr

La meilleure façon d'apprendre est de faire des choses. Dans cet esprit, ce didacticiel est destiné à vous aider à comprendre les défis liés à la création d'un système de vote par SMS simple. Nous allons mettre en place un numéro permettant aux gens de voter par SMS. Pour faire simple, il n'y aura que 2 votes différents possibles : Bob et Dylan. Donc, si nous traduisons cela dans une perspective plus fonctionnelle, nous devrons :

  1. Procurez-vous un numéro de téléphone portable pour recevoir des SMS.
  2. Recevez les SMS envoyés sur un numéro donné en utilisant le SMS.obtenir méthode et stockez le contenu du message reçu dans une liste pour traitement.
  3. Analysez les réponses et déterminez s'il s'agit d'un vote pour Bob ou Dylan.
  4. Contactez tous les votants pour les remercier de leur vote et annoncer le gagnant.

Ce livre de recettes est destiné à présenter une façon de construire un système de vote par SMS simple en Python. Il est conçu pour être suivi étape par étape, en saisissant des commandes dans le terminal en cours de route. L'objectif est de familiarisez-vous avec l'API de CALLR. Si vous avez besoin de vous rafraîchir sur l'API de CALLR, veuillez lire notre article de démarrage avec l'API de CALLR qui couvre les bases. Vous recherchez le code sans fioritures supplémentaires ? Simplement cliquez ici.

ÉTAPE #1 : Acheter un numéro de téléphone portable

Pour acheter des numéros avec l'API de CALLR, vous devez effectuer un réservation avec le did/store.reserve méthode (doc) et puis lancez un ordre d'achat avec le did/store.buy_order méthode (doc).

La méthode did/store.reserve

Un rapide coup d'œil à la documentation du did/store.reserve nous indique qu'il nécessite quatre paramètres :

  • Un identifiant de code régional : Vous devrez utiliser did/areacode.get_list méthode (doc) pour comprendre celui-ci.
  • Un cours (chaîne) : type de chiffres. Les numéros « GOLD » sont des nombres répétitifs élevés (faciles à retenir). Pour les besoins de notre test, « CLASSIC » fera très bien l'affaire.
  • Une quantité (int): une seule suffira dans notre cas.
  • Et un mode d'assignation (string) : peu importe quand on n'en achète qu'un.

Déterminer l'indicatif régional souhaité

Le did/areacode.get_list méthode (doc) nécessite deux paramètres :

  • Le code du pays souhaité (string) : pour cet exemple, nous allons acheter un numéro français.
  • Et le type de numéro (string) : ici puisque nous voulons recevoir des SMS, nous n'avons pas d'autre choix que « MOBILE ».

Compte tenu du numéro souhaité, voici l'appel d'API :# Récupération de la liste des numéros mobiles français disponibles snbarray = api.call (« did/areacode.get_list », « FR », « MOBILE »)Et voici le résultat :

Il existe deux types de numéros mobiles en France: ceux commençant par +33 6 (id:67) et ceux commençant par +33 7 (id:68) ; l'un ou l'autre fera l'affaire.

Réserver puis acheter le numéro

Maintenant que nous avons notre indicatif régional (67 ou 68), nous avons tout ce dont nous avons besoin pour effectuer notre réservation DID. Voici l'appel passé au réserve le numéro :# La réservation d'un mobile (06) en français numbernbreserve = api.call (« did/store.reserve », 68, « CLASSIC », 1, « RANDOM ») # ou « SEQUENTIAL » fera l'affaireIl ne reste plus qu'à faire pour l'acheter, à condition que vous disposiez d'un crédit suffisant sur votre compte :# Acheter le numéro en utilisant le jeton de réservation obtenu à l'étape précédente pnbtoken = « %s » % nbreserve ['token'] nbbuy = api.call (« did/store.buy_order », nbtoken)

Vérification du numéro que nous avons acheté

Nous sommes désormais fiers propriétaires d'un numéro de téléphone portable français. Nous aurons besoin de connaître le numéro sur lequel recevoir les SMS, alors vérifions-le à l'aide du app.get_dids méthode (doc). Dans l'aperçu suivant, j'ai utilisé le Module PrettyPrint pour améliorer la lisibilité. Le booléen (ici « False ») dépend de l'attribution du numéro à une application vocale. Puisque nous venons de l'acheter, le numéro n'est pas attribué (faux).# Importer PrettyPrint et le paramétrer importimport pprintpp = pprint. PrettyPrinter (indent=4) # Vérification des numéros de téléphone que nous possédons et qui ne sont pas attribués à un appdid = api.call (« apps.get_dids », False) pp.pprint (did)Et voici le résultat, avec le numéro que nous venons d'acheter en surbrillance :

Maintenant que nous avons un numéro, nous sommes prêts pour les prochaines étapes.

ÉTAPE #2 : Recevoir des SMS sur notre numéro

Récupération des identifiants du SMS reçu sur le numéro

Le sms.get méthode (doc) nous permet de récupérer le contenu d'un SMS que nous avons reçu. Il doit avoir ID de hachage du SMS souhaité en tant que paramètre. Pour le trouver, nous allons utiliser recherche par sms méthode (doc). recherche par sms La méthode nécessite deux paramètres qui sont tous deux des tableaux :

  • Filtres: l'objet SMS.SearchFilters (doc) nous aidera à récupérer les SMS reçus sur le numéro.
  • Options: Nous n'avons pas besoin d'options, nous pouvons donc définir celle-ci Aucune.

Nous avons besoin de deux options pour filtrer les SMS en fonction de deux paramètres : SMS reçu (« type » : « IN ») et ceux reçus sur le numéro que nous avons acheté (« to » : « +33644630378 ») Nous devrons également Envoyez-nous un SMS à des fins de test (nous avons donc quelque chose à récupérer). Vous pouvez le faire avec votre propre téléphone portable ou via l'API :# Nous envoyer un test smstestsms = api.call (« sms.send », « SMS », « +33644630378 », « Test de réception sur mon numéro de mobile français », Aucun)Il est maintenant temps de configurez notre filtre et recherchez le SMS que nous venons de nous envoyer : # Créer un objet SMSSearchFilters correspondant à nos besoins et le tester
SMSSearchFilters = {« à » : « +33644630378 », « type » : « DANS »}
SMSIN = api.call (« sms.search », SMSSearchFilters, Aucun)
pp.pprint (SMSIN)
print (SMSIN ['hits'] [0] ['text']) Et voici le résultat :

La réception fonctionne très bien ! Nous aurons besoin plus d'un texte pour tester notre système, nous allons donc nous envoyer un lot de SMS à traiter:# Envoi d'une liste de SMS de test à nousimport callrapi = Callr.API (« callr_28", "UXczArj50Q ») L = [« Un vote pour Bob », « S'il te plaît Bob, sauve-nous de ce monde cruel », « Bob est mon héros ! » , « Je vote Bob », « Dylan, je t'aime, veux-tu m'épouser ? » , « Dylan est un gars cool, laisse-lui voter »] def send (L) : api.call (« sms.send », « SMS », « +336XXXXXXXX », L [i], None) for i, item in enumerate (L) : send (L)

Récupération du contenu du SMS reçu

Le recherche par sms la méthode renvoie diverses données sur le SMS reçu, nous n'aurons besoin que du contenu du texte, et plus tard, le numéro qui l'a envoyé. Python offre un moyen simple de le faire, en utilisant des listes. Le corps du message envoyé est stocké dans le « hits » qui est lui-même une liste SMSIN stockée. Dans la commande suivante, nous disons essentiellement à Python : récupérez-moi la première entrée (la liste commence à l'index 0) de la liste des « résultats » et, dans cette première entrée, récupérez-moi la valeur « texte » :# LOLOLO

Récupération du contenu de tous les SMS reçus

Nous devons répéter l'étape précédente pour récupérer le texte de tous les SMS que nous avons reçus. Nous pouvons le faire de manière très élégante avec a pour boucle et stockez les données dans une liste afin qu'elles soient faciles à traiter. Tout d'abord, nous devons créer une liste vide qui stockera toutes les entrées de texte pour le SMS reçu, vous pouvez le nommer comme vous le souhaitez (ALLSMSIN). Maintenant, nous devons parcourir la liste des résultats du SMSIN et ajouter (c'est-à-dire ajouter à la fin de la liste) chaque entrée « texte » à la nouvelle liste que nous avons créée :# LOLOLOVoici ce que je reçois : les 7 textos que je me suis envoyés (moi et moi sommes très bavards) :

Nous avons désormais contenu de tous les SMS envoyés à notre numéro, qui marque la fin de notre deuxième étape et de la plus grande partie de notre système de vote par SMS. Il ne nous reste plus qu'à traiter les textes et à déterminer le gagnant.

ÉTAPE #3 : Compter les votes et trouver le gagnant

Comptage des voix de chaque candidat

Python a intégré une fonction pour compte les occurrences de sous-chaînes dans une chaîne. Nous allons transformer notre liste ALLSMSIN en chaîne et utiliser cette fonction pour compter facilement les votes. Nous imprimons ensuite chaque variable pour vérifier que notre script se comporte comme prévu :# LOLOLOEt voici le résultat, jusqu'ici tout va bien :

Déterminer le gagnant et l'annoncer

C'est presque terminé ! Il ne nous reste plus qu'à comparer le nombre total de votes de Bob et de Dylan et annoncer le gagnant. Nous avons trois scénarios possibles qui vont de soi si vous regardez le code :# LOLOLOEt voici ce que j'obtiens pour mes 7 textes, Félicitations à Bob :

Notre gagnant étant connu, il est temps de l'annoncer à tous les participants pour terminer notre système de vote simple par SMS.

ÉTAPE #4 : Annonce du gagnant à tous les participants

Pour cette dernière étape, nous devons revenir à notre dictionnaire SMSIN et récupérer l'entrée « from » de chaque accès. Nous avons fait de même avec les textes, alors nous avons simplement besoin d'adapter notre code précédent:# LOLOLOVoici ce que j'obtiens. Puisque je m'envoie le texte du même numéro, nous obtenons une liste contenant 7 itérations de celui-ci :

Nous pouvons maintenant revenir à la fonction que nous avons écrite à l'étape #3 et inclure le corps du message texte que nous enverrons à nos participants dans notre if/ élif boucle: On obtient exactement le même résultat sauf que, cette fois, le message est stocké dans la variable resultsms. Maintenant, il ne nous reste plus qu'à envoyer un SMS contenant le résultats sms variable pour chaque numéro de la liste des numéros. Puisque la cible de la méthode sms.send doit être une chaîne, nous avons besoin d'une autre boucle d'énumération. J'ajoute également l'identifiant de chaque SMS envoyé à une autre liste, FinalSmsID :# LOLOLOVoici le résultat sur mon terminal :

Et mon téléphone est harcelé par l'annonce de la victoire de Bob :

Notes finales

Par souci de simplicité, nous n'avons fait que le strict minimum de ce qui est requis. Un système de vote par SMS entièrement fonctionnel utilisé en production nécessiterait une forme de prétraitement des votes reçus. Avec le système détaillé ci-dessus, un vote pour Bob orthographié « bob » ou « BOB » ne fonctionnerait pas. N'hésitez pas à en tirer parti vous-même, c'est l'exercice de suivi idéal. De plus, au lieu d'exécuter votre script depuis le terminal, vous souhaiterez probablement hébergez-le quelque part et utiliser des crochets Web pour ajouter dynamiquement les nouveaux SMS reçus à votre liste de traitement. Nous aborderons le déploiement Web et les webhooks dans nos prochains livres de recettes. [cta href= » https://www.callr.com/p/python-sms-api/ "txt="Vous recherchez une solution SMS Python intelligente et accessible ? » btn="Consultez notre API "]

Nous maitrisons notre propre réseau

Couverture mondiale

Commandez des numéros en un seul clic dans plus de 220 pays, y compris des numéros premium, personnalisés ou gratuits.

Chiffré et sécurisé

Chiffrement des données à la pointe des dernières technologies avec notamment HTTPS, SIP TLS et SRTP

Un réseau fiable

Grâce à nos nombreux centres de données et serveurs situés dans le monde entier, nous offrons un service robuste sur lequel vous pouvez compter.

Opérateur enregistré

Nous exploitons notre propre réseau pour plus de performance, une meilleure localisation et un support  à votre service.

Illustrations that represent Callr's global network