Essayez de tweeter le flux RSS d'arXiv sur Twitter avec python de Raspeye

introduction

[arXiv] link-01 est un site exploité par la Cornell University Library, où des articles dans divers domaines sont publiés et la visualisation de PDF est possible gratuitement.

Je pensais que si j'analysais les informations que je voulais voir et que je publiais ce que je pense sur Twitter, je pouvais éviter la recherche, mais comme première étape J'ai décidé de tweeter le flux de [arXiv] link-01 sur Twitter.

L'objectif de cette époque était cs.CV, qui est la catégorie qui m'intéresse.

J'ai choisi Raspeye car il fonctionne tout le temps, mais si python fonctionne, il n'y a pas de restrictions particulières du côté du périphérique d'information.

Comment fonctionne le flux RSS d'arXiv

Vous pouvez le découvrir en lisant les deux contenus suivants sur la page d'aide.

L'important est que "la mise à jour est une fois par jour" écrite dans le Manuel de l'utilisateur de l'API arXiv 3.3.1.1. .. Il est suggéré que les informations ne soient pas mises à jour même si elles sont fréquemment consultées, il est donc nécessaire de les concevoir en tenant compte de la fréquence d'appel de l'API et du mécanisme du cache.

Because the arXiv submission process works on a 24 hour submission cycle, new articles are only available to the API on the midnight after the articles were processed. The tag thus reflects the midnight of the day that you are calling the API. This is very important - search results do not change until new articles are added. Therefore there is no need to call the API more than once in a day for the same query. Please cache your results. This primarily applies to production systems, and of course you are free to play around with the API while you are developing your program!

Le xml du flux peut être obtenu en remplaçant le nom de catégorie décrit ci-dessous.

http://export.arxiv.org/rss/cs.CV/rss.xml

Une liste de catégories peut être trouvée ici [https://arxiv.org/help/api/user-manual#subject_classifications).

programme python

Les références

Le programme a été créé en référence aux informations suivantes.

Point de création

Bibliothèque

Conçu en important la bibliothèque suivante.

informations sur la clé d'authentification

Tout d'abord, selon le modèle, les informations relatives à la clé d'authentification de Twitter sont résumées dans ʻauth.py`.

auth.py


consumer_key        = 'ABCDEFGHIJKLKMNOPQRSTUVWXYZ'
consumer_secret     = '1234567890ABCDEFGHIJKLMNOPQRSTUVXYZ'
access_token        = 'ZYXWVUTSRQPONMLKJIHFEDCBA'
access_token_secret = '0987654321ZYXWVUTSRQPONMLKJIHFEDCBA'

Ingérer le flux

Entrez l'URL xml du flux que vous souhaitez importer dans RSS_URL, et laissez le journal de mise à jour (date et heure: mis à jour) dans le fichier spécifié par PUBDATE_LOG.

Je voulais vérifier le fichier spécifié par PUBDATE_LOG dans le programme, mais je ne l'ai pas tellement implémenté, donc à l'avance

python


$ touch cs.CV.log

Vous devez créer un fichier vide avec. .. ..

** votre répertoire LOG ** est l'emplacement de ce programme. Si vous souhaitez configurer une exécution automatique avec cron, vous devez la décrire avec un chemin absolu.

python


RSS_URL = "http://export.arxiv.org/rss/cs.CV/rss.xml"
PUBDATE_LOG = "/your LOG dir/cs.CV.log"

Enregistrez le contenu du flux dans un format de dictionnaire dans news_dic et publiez les informations nécessaires sur Twitter avec twython. Le contenu du flux arXiv à ce moment est décrit ci-dessous dans les commentaires du programme.

python


news_dic = feedparser.parse(RSS_URL)

"""
new_dic.* : 
updated_parsed
etag
encoding
version
updated
headers
entries
namespaces
bozo
href
status
feed

print(news_dic.updated_parsed)  
print(news_dic.etag          )  #time.struct_time(tm_year=2017, tm_mon=8, tm_mday=16, tm_hour=0, tm_min=30, tm_sec=0, tm_wday=2, tm_yday=228, tm_isdst=0)
print(news_dic.encoding      )  #us-ascii
print(news_dic.version       )  #rss10
print(news_dic.updated       )  #Wed, 16 Aug 2017 00:30:00 GMT
print(news_dic.headers       )  #{'Expires': 'Thu, 17 Aug 2017 00:00:00 GMT', 'Connection': 'close', 'ETag': '"Wed, 16 Aug 2017 00:30:00 GMT", "1502843400"', 'Server': 'Apache', 'Vary': 'Accept-Encoding,User-Agent', 'Content-Type': 'text/xml', 'Content-Length': '15724', 'Date': 'Wed, 16 Aug 2017 06:43:57 GMT', 'Last-Modified': 'Wed, 16 Aug 2017 00:30:00 GMT', 'Content-Encoding': 'gzip'}
print(news_dic.entries       )  #CONTENTS OF RSS FEED!!
print(news_dic.namespaces    )  #{'': 'http://purl.org/rss/1.0/', 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'content': 'http://purl.org/rss/1.0/modules/content/', 'sy': 'http://purl.org/rss/1.0/modules/syndication/', 'dc': 'http://purl.org/dc/elements/1.1/', 'admin': 'http://webns.net/mvcb/', 'taxo': 'http://purl.org/rss/1.0/modules/taxonomy/'}
print(news_dic.bozo          )  #0
print(news_dic.href          )  #http://export.arxiv.org/rss/cs.CV/rss.xml
print(news_dic.status        )  #200
print(news_dic.feed          )  
"""

Vérifiez si les informations du flux ont été mises à jour avec PubID et lastPubID, et sinon, quittez le programme. S'il a été mis à jour, écrasez le fichier pointé par PUBDATE_LOG.

python


pubID = news_dic.updated

#  pubID 
with open(PUBDATE_LOG, "r") as rf:
    lastPubID = rf.readline().rstrip("\n")

# 
if (pubID == lastPubID):
    print("")
    sys.exit()
else:
    with open(PUBDATE_LOG, "w") as f:
        f.write(pubID + "\n")

Publier sur Twitter

Il y a les éléments suivants dans new_dic.entries.

Les informations à publier sont «title» et «link» dans «new_dic.entries». Cependant, title peut être long, alors assurez-vous de le conserver entre 140 caractères et de limiter le nombre de caractères afin que les liens URL puissent être décrits.

python


for i in news_dic.entries:
    if len(i.title) > 100:
        message = i.title[0:100] + "......\n" + i.link
    else:
        message = i.title[0:109] + "\n" + i.link
    #print(len(message))
    #print(message)

    try:
        twitter.update_status(status=message)
    except TwythonError as e:
        print(e)

Résultat de la création

Le programme final à la suite d'essais et d'erreurs est le suivant.

py:twitter_feed_arxiv_cs.CV.py


# coding: utf-8
from twython import Twython, TwythonError
import feedparser
import sys
 
from auth import (
    consumer_key,
    consumer_secret,
    access_token,
    access_token_secret
)

twitter = Twython(
    consumer_key,
    consumer_secret,
    access_token,
    access_token_secret
)

RSS_URL = "http://export.arxiv.org/rss/cs.CV/rss.xml"
PUBDATE_LOG = "/<your LOG dir>/cs.CV.log"
"""

touch cs.CV.log
cron
"""

news_dic = feedparser.parse(RSS_URL)

"""
new_dic.* : 
updated_parsed
etag
encoding
version
updated
headers
entries
namespaces
bozo
href
status
feed

print(news_dic.updated_parsed)  
print(news_dic.etag          )  #time.struct_time(tm_year=2017, tm_mon=8, tm_mday=16, tm_hour=0, tm_min=30, tm_sec=0, tm_wday=2, tm_yday=228, tm_isdst=0)
print(news_dic.encoding      )  #us-ascii
print(news_dic.version       )  #rss10
print(news_dic.updated       )  #Wed, 16 Aug 2017 00:30:00 GMT
print(news_dic.headers       )  #{'Expires': 'Thu, 17 Aug 2017 00:00:00 GMT', 'Connection': 'close', 'ETag': '"Wed, 16 Aug 2017 00:30:00 GMT", "1502843400"', 'Server': 'Apache', 'Vary': 'Accept-Encoding,User-Agent', 'Content-Type': 'text/xml', 'Content-Length': '15724', 'Date': 'Wed, 16 Aug 2017 06:43:57 GMT', 'Last-Modified': 'Wed, 16 Aug 2017 00:30:00 GMT', 'Content-Encoding': 'gzip'}
print(news_dic.entries       )  #CONTENTS OF RSS FEED!!
print(news_dic.namespaces    )  #{'': 'http://purl.org/rss/1.0/', 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'content': 'http://purl.org/rss/1.0/modules/content/', 'sy': 'http://purl.org/rss/1.0/modules/syndication/', 'dc': 'http://purl.org/dc/elements/1.1/', 'admin': 'http://webns.net/mvcb/', 'taxo': 'http://purl.org/rss/1.0/modules/taxonomy/'}
print(news_dic.bozo          )  #0
print(news_dic.href          )  #http://export.arxiv.org/rss/cs.CV/rss.xml
print(news_dic.status        )  #200
print(news_dic.feed          )  
"""

pubID = news_dic.updated

#  pubID 
with open(PUBDATE_LOG, "r") as rf:
    lastPubID = rf.readline().rstrip("\n")

# 
if (pubID == lastPubID):
    print("")
    sys.exit()
else:
    with open(PUBDATE_LOG, "w") as f:
        f.write(pubID + "\n")

for i in news_dic.entries:
    if len(i.title) > 100:
        message = i.title[0:100] + "......\n" + i.link
    else:
        message = i.title[0:109] + "\n" + i.link
    #print(len(message))
    #print(message)

    try:
        twitter.update_status(status=message)
    except TwythonError as e:
        print(e)

Tweet

J'ai fait ce qui suit et j'ai confirmé qu'il était publié sur mon compte Twitter.

python


$ python3 twitter_feed_arxiv_cs.CV.py

J'ai créé un fichier journal et un programme pour cs.RO dans un fichier séparé, mais cela a également réussi.

Automatiser les tweets

Tweetez une fois par jour avec cron. Il semble être mis à jour à ** 00: 30:00 GMT **, alors réglez-le pour aller voir le flux tous les jours à 10h00 (JST).

python


$ crontab -e

Réglez pour accéder au flux tous les jours à 10h00 lorsque l'éditeur démarre. ** votre répertoire LOG ** est l'emplacement de ce programme.

python


00 10 * * * python3 /your LOG dir/twitter_feed_arxiv_cs.CV.py >/dev/null 2>&1

à la fin

Tout d'abord, il est devenu possible de simplement tweeter, mais il semble qu'il y ait plus de 50 soumissions chaque jour dans cs.CV et cs.RO, donc pour rechercher efficacement des articles d'intérêt, il est nécessaire de restreindre davantage les soumissions. ..

Il semble que cela puisse être fait en analysant les chaînes de caractères de «titre» et «description». Cela peut être un exemple d'apprentissage automatique.

Recommended Posts

Essayez de tweeter le flux RSS d'arXiv sur Twitter avec python de Raspeye
Essayez de déboguer Python sur Raspberry Pi avec Visual Studio.
Travailler avec le GPS en Python pour Raspberry Pi 3
Connectez-vous à MySQL avec Python sur Raspberry Pi
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Installez PyCall sur Raspberry PI et essayez d'utiliser la bibliothèque GPIO pour Python de Ruby
Utilisez vl53l0x avec RaspberryPi (python)
Essayez d'utiliser ArUco avec Raspberry Pi
Essayez L Chika avec raspberrypi
Essayez de déplacer 3 servos avec Raspeye
[Memo] Tweet sur Twitter avec Python
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
Collecter des informations sur Twitter avec Python (API Twitter)
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Adafruit Python BluefruitLE fonctionne sur Raspeye.
Tweet de python avec Twitter Developer + Tweepy
Essayez de pêcher le Wakasagi avec Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Essayez d'appeler Python depuis Ruby avec une économie
Détectez la température à l'aide de python sur Raspberry Pi 3!
Utilisez le capteur de température / humidité / pression BME280 de Python avec Raspberry Pi 2
Détectez les signaux analogiques avec un convertisseur A / N en utilisant python sur Raspberry Pi 3!
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
Collecter des informations depuis Twitter avec Python (construction de l'environnement)
Discord bot raspberry pi zéro avec python [Note]
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
twitter avec python3
J'ai essayé L-Chika avec Razpai 4 (édition Python)
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Profitez du travail électronique avec GPIO de Raspberry Pi
Allumez / éteignez votre PC avec Raspberry Pi
Essayez de travailler avec Mongo en Python sur Mac
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Rendre DHT11 disponible avec Raspeye + python (Remarque)
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Utilisation du capteur de température numérique à 1 fil DS18B20 avec Raspberry Pi de Python
Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python
Construire un environnement de développement Python sur Raspberry Pi
Suivi GPS avec Raspeye 4B + BU-353S4 (Python)
Mesurer la température du processeur de Raspeye avec Python
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
Utilisez le SDK API kintone pour Python avec Raspberry Pi (stockez facilement des données dans kintone à partir de Raspberry Pi)
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
De la configuration du Raspberry Pi à l'installation de l'environnement Python
Exécutez la matrice LED de manière interactive avec Raspberry Pi 3B + sur Slackbot
Visualisons la pièce avec tarte aux râpes, partie 1
Installez le sélénium sur votre Mac et essayez-le avec python
Collecte d'informations sur Twitter avec Python (analyse morphologique avec MeCab)
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Suivi automatique sur Twitter avec python et sélénium! (RPA)
Contrôlez les moteurs sans balais avec GPIO de Raspberry Pi Zero
Interagissez avec Python sur Android à partir d'un PC via adb
Installez pyenv sur Raspberry Pi pour gérer Python
Sortie sur "LED 7 segments" en utilisant python avec Raspberry Pi 3!