[PYTHON] J'ai converti le temps en un entier, je l'ai décomposé en facteurs premiers et j'ai fait un bot pour tweeter le résultat (matériel xkcd)

introduction

Cela fait trois mois que je me suis inscrit à l'application avec enthousiasme, "J'utiliserai Twitter avec Python!" Quand je pensais que je devais faire quelque chose, j'ai trouvé cette histoire sur xkcd. Factoring the Time - xkcd.com factoring_the_time.png J'ai fait un bot qui automatise le travail de factorisation du temps en facteurs premiers, ce que cet homme (?) Faisait tuer le temps, et tweetant le résultat. Cela fonctionne comme ça. bot.jpg

environnement

procédure

Quoi qu'il en soit, c'est l'enregistrement des demandes. Puisque de nombreux articles ont été écrits, je vais l'omettre ici. Si vous recherchez "enregistrement python twitter" sur Google, vous devriez en voir.

Créez un fichier appelé token et écrivez-y la chaîne de caractères obtenue.

token


"Consumer Key"
"Consumer Secret"
"Access Token"
"Access Secret"

Après avoir écrit comme ça, créez main.py dans le même répertoire et éditez-le.

main.py


# coding:utf-8
import tweepy
from datetime import datetime
import sympy
import time


def login():
    with open("token") as f:
        (consumer_key,
         consumer_secret,
         access_token,
         access_secret) = f.read().split("\n")[:4]
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)
    api = tweepy.API(auth)
    return api


def get_factor_by_string(i):
    d = sympy.factorint(i)
    return "*".join(str(fact) for fact in d for num in range(d[fact]))


def get_time_by_int():
    return int(datetime.now().strftime('%H%M'))


def main():
    api = login()
    old = get_time_by_int()
    while True:
        now = get_time_by_int()
        if now != old and now != 0 and now != 1:
            old = now
            factor = get_factor_by_string(now)
            if "*" in factor:
                text = str(now) + "=" + factor
            else:
                text = str(now) + " is a prime number"
            api.update_status(text)
        time.sleep(0.1)


if __name__ == '__main__':
    main()

Une fois exécuté, il tweetera le résultat de la factorisation du temps presque toutes les minutes. Tu l'as fait!

Commentaire

Je ne pense pas que ce soit nécessaire, mais pour le moment ... Le déroulement du programme est comme ça ① authentification twitter avec tweepy ② Obtenez l'heure actuelle avec datetime ③ Revenir à ② si l'heure a déjà été tweetée ④ Décomposition des facteurs premiers et changement de format avec sympy ⑤ Tweet le résultat (retour à ②) Twitter est authentifié à l'aide des informations du jeton avec login (). Utilisez datetime.now (). Strftime () avec get_time_by_int () pour obtenir le nombre qui combine l'heure actuelle et la minute actuelle (comme 12:30 → 1230). Ici, si l'heure a déjà été tweetée, ou si le nombre retourné est 0 ou 1, le processus suivant ne sera pas lancé. J'utilise sympy.factorint () pour la factorisation des nombres premiers. Le résultat est renvoyé dans le dictionnaire de type {facteur principal: exposant, facteur premier: exposant ...}, utilisez donc pour pour le convertir en une forme de multiplication sans exposant. Enfin, changez le message selon que le résultat de la factorisation premier contient * (si le nombre de temps est un nombre premier) et tweetez avec ʻapi.update.status () `. En raison du recours à la bibliothèque pour la quasi-totalité du traitement, il était inférieur à 50 lignes. Python est incroyable.

en conclusion

C'était ma première création de bot, mais j'ai trouvé qu'il était assez facile d'en créer un simple. Je l'exécute correctement, donc il s'arrête parfois, mais je veux le déplacer pendant quelques jours de plus.

Recommended Posts

J'ai converti le temps en un entier, je l'ai décomposé en facteurs premiers et j'ai fait un bot pour tweeter le résultat (matériel xkcd)
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
J'ai exécuté GhostScript avec python, divisé le PDF en pages et l'ai converti en image JPEG.
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
Depuis que j'ai commencé à travailler à des moments différents, j'ai créé un Bot qui me dit l'heure de quitter le travail
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
Je veux créer un lecteur de musique et enregistrer de la musique en même temps
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Les débutants en Python ont créé un chat BOT alors j'ai essayé de résumer comment le faire
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
Création d'une méthode pour sélectionner et visualiser automatiquement un graphique approprié pour les pandas DataFrame