[PYTHON] J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.

introduction

J'implémentais des tweets RSS réguliers avec ifttt, mais je l'ai fait moi-même car les restrictions étaient strictes.

Produit fini

https://hub.docker.com/r/hashito/tweetrss

docker run -it --rm \
    -e RSS_URL=https://news.google.com/rss/search?hl=ja&gl=JP&ceid=JP:ja&q=twitter \
    -e CONSUMER_KEY=x \
    -e CONSUMER_SECRET=x \
    -e ACCESS_TOKEN=x \
    -e ACCESS_TOKEN_SECRET=x \
    -e 'ADD_TEXT="#rss2tweet"' \
    hashito/tweetrss

D'en haut

Vous pouvez le faire en insérant. Si vous voulez changer le cycle de Tweet, jouez avec SCAN_SPAN et TWEET_DELAY. (Les deux sont des secondes) Soyez prudent lorsque vous vous fâchez si vous tweetez trop ...

De plus, si vous avez une valeur monétaire en interne et que vous la reconstruisez, vous oublierez jusqu'où vous avez lu RSS la dernière fois.

Créons un fichier comme celui ci-dessous et montons-le.

Contenu


{}

-v {you chash file}:/root/cash

(C'est gênant ici ... je vais le réparer un jour)

Code source

La source est simple. Lisez et tweetez régulièrement des flux RSS. RSS conserve l'ID et ne cible pas le même ID. Si le même ID n'est pas reçu pendant un certain temps, l'ID sera ignoré.

import feedparser
import json
import os
import time
import datetime
import json
from requests_oauthlib import OAuth1Session

RSS_URL=os.environ["RSS_URL"]
CONSUMER_KEY=os.environ["CONSUMER_KEY"]
CONSUMER_SECRET=os.environ["CONSUMER_SECRET"]
ACCESS_TOKEN=os.environ["ACCESS_TOKEN"]
ACCESS_TOKEN_SECRET=os.environ["ACCESS_TOKEN_SECRET"]

CASH_FILE=os.environ["CASH_FILE"]
ADD_TEXT=os.environ["ADD_TEXT"]
SCAN_SPAN=int(os.environ["SCAN_SPAN"])
TWEET_DELAY=int(os.environ["TWEET_DELAY"])


def cash_read():
    with open(CASH_FILE) as f:
        return json.loads(f.read())

def cash_write(data):
    with open(CASH_FILE,mode="w") as f:
        f.write(json.dumps(data,ensure_ascii=False))

def read_rss():
    return feedparser.parse(RSS_URL)
    
def send_tweet(text):
    twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) #Processus d'authentification
    url = "https://api.twitter.com/1.1/statuses/update.json" #Point de terminaison du message du Tweet
    params = {"status" : text}
    res = twitter.post(url, params = params) #post envoyer
    return res.status_code == 200

if(__name__ == '__main__'):
    cash=cash_read()
    print("cash:",cash)
    while(1):
        tm=datetime.datetime.now().timestamp()
        rss=read_rss()
        for i in rss["entries"]:
            if(not i["id"] in cash):
                print("tweet:",f"{i['title']} {i['link']} {ADD_TEXT}")
                send_tweet(f"{i['title']} {i['link']} {ADD_TEXT}")
                time.sleep(TWEET_DELAY)
            cash[i["id"]]=tm
            cash_write(cash)
        for k in list(cash.keys()):
            if((cash[k]+60)<tm):
                print("delete:",k,cash[k],tm)
                cash.pop(k)
        time.sleep(SCAN_SPAN)

docker file C'est aussi simple. Installez requirements.txt en utilisant l'image de python3. C'est comme préparer une variable d'environnement et la démarrer.

  
FROM python:3
COPY . /root/

RUN pip install -r /root/requirements.txt

ENV RSS_URL=https://news.google.com/rss/search?hl=ja&gl=JP&ceid=JP:ja&q=twitter \
    CONSUMER_KEY=x \
    CONSUMER_SECRET=x \
    ACCESS_TOKEN=x \
    ACCESS_TOKEN_SECRET=x \
    CASH_FILE=/root/cash \
    ADD_TEXT="#rss2tweet" \
    SCAN_SPAN=600 \
    TWEET_DELAY=150

CMD ["python","/root/main.py"]

Recommended Posts

J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
J'ai créé un outil qui facilite un peu la création et l'installation d'une clé publique.
Procédure pour créer un Job qui extrait une image Docker et la teste avec des actions Github
Je veux créer un fichier pip et le refléter dans le menu fixe
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber
J'ai créé un bot Discord en Python qui se traduit quand il réagit
Un programme python qui redimensionne une vidéo et la transforme en image
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
J'ai créé un LINE BOT qui renvoie une image de riz terroriste en utilisant l'API Flickr
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
J'ai créé un système avec Raspberry Pi qui mesure périodiquement l'indice d'inconfort de la pièce et envoie une notification LINE s'il s'agit d'une valeur dangereuse
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 fait un simple lecteur RSS ~ Edition C ~
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
J'ai fait un processus d'initialisation KMEANS rapide avec une meilleure précision que aléatoire
Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
J'ai fait un calendrier qui met à jour automatiquement le calendrier de distribution de Vtuber (édition Google Calendar)
J'ai créé une application Twitter qui identifie et enregistre l'image d'un personnage spécifique sur la chronologie de Twitter par pytorch transfer learning
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
J'ai créé un serveur syslog prêt à l'emploi avec Play with Docker
J'ai créé une VM qui exécute OpenCV pour Python
J'ai essayé de faire LINE BOT avec Python et Heroku
[Python] J'ai créé une fonction qui déchiffre et décrypte AES simplement en le lançant avec pycrypto.
Création d'un toolver qui crache le système d'exploitation, Python, les modules et les versions d'outils à Markdown
Une histoire qui a cessé de fonctionner sur mglearn.plots.plot_nmf_faces et qui se demandait s'il s'agissait d'une erreur?
Lorsque je déploie une application Django sur Apache2 et qu'elle ne lit plus les fichiers statiques
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.
Une histoire qui a permis de créer automatiquement une liste de lecture Anison à partir de vos fichiers musicaux
Création d'un outil qui facilite la définition des paramètres des modèles d'apprentissage automatique
Création d'une méthode pour sélectionner et visualiser automatiquement un graphique approprié pour les pandas DataFrame
J'ai automatiquement collecté mes données de publication Qiita avec Raspberry Pi et je les ai régulièrement notifiées avec Slack
J'ai essayé de créer un script qui retrace les tweets d'un utilisateur spécifique sur Twitter et enregistre l'image publiée à la fois