[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.
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).
Le programme a été créé en référence aux informations suivantes.
Conçu en important la bibliothèque suivante.
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'
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")
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)
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)
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.
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
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.