[arXiv] link-01 ist eine Website der Cornell University Library, auf der Artikel in verschiedenen Bereichen veröffentlicht werden und die PDF-Anzeige kostenlos möglich ist.
Ich dachte, wenn ich die Informationen, die ich sehen wollte, analysierte und auf Twitter veröffentlichte, was ich dachte, könnte ich mir die Mühe der Suche ersparen, aber als ersten Schritt Ich habe beschlossen, den Feed von [arXiv] link-01 auf Twitter zu twittern.
Das Ziel dieser Zeit war cs.CV, die Kategorie, an der ich interessiert bin.
Ich habe mich für Raspeye entschieden, weil es ständig ausgeführt wird. Wenn Python jedoch funktioniert, gibt es auf der Seite der Informationsgeräte keine besonderen Einschränkungen.
Sie können dies herausfinden, indem Sie die folgenden zwei Inhalte auf der Hilfeseite lesen.
Wichtig ist, dass "Update einmal am Tag" in arXiv API-Benutzerhandbuch 3.3.1.1 geschrieben ist. .. Es wird empfohlen, die Informationen auch dann nicht zu aktualisieren, wenn häufig auf sie zugegriffen wird. Daher muss sie unter Berücksichtigung der Häufigkeit des Aufrufs der API und des Mechanismus des Caches entworfen werden.
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!
Die XML-Datei des Feeds kann durch Ersetzen des unten beschriebenen Kategorienamens abgerufen werden.
http://export.arxiv.org/rss/cs.CV/rss.xml
Eine Liste der Kategorien finden Sie hier [https://arxiv.org/help/api/user-manual#subject_classifications].
Das Programm wurde unter Bezugnahme auf die folgenden Informationen erstellt.
Entworfen durch Importieren der folgenden Bibliothek.
Zunächst werden gemäß dem Modell die Informationen zum Authentifizierungsschlüssel von Twitter in "auth.py" zusammengefasst.
auth.py
consumer_key = 'ABCDEFGHIJKLKMNOPQRSTUVWXYZ'
consumer_secret = '1234567890ABCDEFGHIJKLMNOPQRSTUVXYZ'
access_token = 'ZYXWVUTSRQPONMLKJIHFEDCBA'
access_token_secret = '0987654321ZYXWVUTSRQPONMLKJIHFEDCBA'
Geben Sie die XML-URL des Feeds ein, den Sie in "RSS_URL" importieren möchten, und belassen Sie das Aktualisierungsprotokoll (Datum und Uhrzeit: aktualisiert) in der durch "PUBDATE_LOG" angegebenen Datei.
Ich wollte die von PUBDATE_LOG
im Programm angegebene Datei überprüfen, habe sie aber nicht so oft implementiert, also im Voraus
python
$ touch cs.CV.log
Sie müssen eine leere Datei mit erstellen. .. ..
** Ihr LOG-Verzeichnis ** ist der Speicherort dieses Programms. Wenn Sie die automatische Ausführung mit cron einrichten möchten, müssen Sie diese mit einem absoluten Pfad beschreiben.
python
RSS_URL = "http://export.arxiv.org/rss/cs.CV/rss.xml"
PUBDATE_LOG = "/your LOG dir/cs.CV.log"
Speichern Sie den Inhalt des Feeds in einem Wörterbuchformat in "news_dic" und veröffentlichen Sie die erforderlichen Informationen mit twython auf Twitter. Der Inhalt des arXiv-Feeds zu diesem Zeitpunkt wird unten in den Kommentaren des Programms beschrieben.
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 )
"""
Überprüfen Sie, ob die Feed-Informationen mit "PubID" und "lastPubID" aktualisiert wurden, und beenden Sie das Programm, wenn nicht. Wenn es aktualisiert wurde, überschreiben Sie die Datei, auf die PUBDATE_LOG verweist.
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")
Es gibt die folgenden Elemente in new_dic.entries
.
Die Informationen, die veröffentlicht werden sollen, sind "Titel" und "Link" in "new_dic.entries". Der Titel kann jedoch lang sein. Achten Sie daher darauf, ihn auf 140 Zeichen zu beschränken und die Anzahl der Zeichen zu begrenzen, damit URL-Links beschrieben werden können.
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)
Das endgültige Programm als Ergebnis von Versuch und Irrtum ist wie folgt.
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)
Ich habe Folgendes getan und bestätigt, dass es auf meinem Twitter-Konto veröffentlicht wurde.
python
$ python3 twitter_feed_arxiv_cs.CV.py
Ich habe eine Protokolldatei und ein Programm für cs.RO in einer separaten Datei erstellt, aber es war auch erfolgreich.
Tweet einmal am Tag mit cron
. Es scheint auf ** 00: 30:00 GMT ** aktualisiert zu sein. Stellen Sie es also so ein, dass der Feed jeden Tag um 10:00 Uhr (JST) angezeigt wird.
python
$ crontab -e
Stellen Sie ein, dass Sie jeden Tag um 10:00 Uhr zum Feed wechseln, wenn der Editor startet. ** Ihr LOG-Verzeichnis ** ist der Speicherort dieses Programms.
python
00 10 * * * python3 /your LOG dir/twitter_feed_arxiv_cs.CV.py >/dev/null 2>&1
Zunächst kann ich einfach twittern, aber es scheint, dass es in cs.CV und cs.RO jeden Tag mehr als 50 Einreichungen gibt. Um also effizient nach Artikeln von Interesse zu suchen, müssen die Einreichungen weiter eingegrenzt werden. ..
Es scheint, dass dies durch Parsen der Zeichenketten von "title" und "description" erreicht werden kann. Dies kann ein Beispiel für maschinelles Lernen sein.
Recommended Posts