Versuchen Sie, den RSS-Feed von arXiv mit Python von Raspeye auf Twitter zu twittern

Einführung

[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.

So funktioniert der RSS-Feed von arXiv

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].

Python-Programm

Verweise

Das Programm wurde unter Bezugnahme auf die folgenden Informationen erstellt.

Schöpfungspunkt

Bibliothek

Entworfen durch Importieren der folgenden Bibliothek.

Informationen zum Authentifizierungsschlüssel

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'

Futter aufnehmen

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")

Auf Twitter posten

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)

Erstellungsergebnis

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)

Tweet

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.

Tweets automatisieren

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

schließlich

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

Versuchen Sie, den RSS-Feed von arXiv mit Python von Raspeye auf Twitter zu twittern
Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Arbeiten mit GPS in Python für Raspberry Pi 3
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Installieren Sie PyCall auf Raspberry PI und versuchen Sie, die GPIO-Bibliothek für Python von Ruby zu verwenden
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Versuchen Sie es mit ArUco mit Raspberry Pi
Probieren Sie L Chika mit Himbeerpi
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
[Memo] Tweet auf Twitter mit Python
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
Sammeln von Informationen von Twitter mit Python (Twitter API)
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Adafruit Python BluefruitLE arbeitet mit Raspeye.
Tweet von Python mit Twitter Developer + Tweepy
Versuchen Sie, mit Raspberry Pi nach Wakasagi zu fischen
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Versuchen Sie die Objekterkennung mit Raspberry Pi 4 + Coral
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Verwenden Sie den Temperatur- / Feuchtigkeits- / Drucksensor BME280 von Python mit Raspberry Pi 2
Erkennen Sie analoge Signale mit dem A / D-Wandler mithilfe von Python auf Raspberry Pi 3!
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
Sammeln von Informationen von Twitter mit Python (Umgebungskonstruktion)
Discord Bot Himbeere Pi Null mit Python [Hinweis]
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Twitter mit Python3
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Genießen Sie die elektronische Arbeit mit GPIO von Raspberry Pi
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Verwendung des digitalen 1-Draht-Temperatursensors DS18B20 mit Raspberry Pi von Python
Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
GPS-Tracking mit Raspeye 4B + BU-353S4 (Python)
Messen Sie die CPU-Temperatur von Raspeye mit Python
Führen Sie eine Twitter-Suche in Python durch und versuchen Sie, Sätze mit der Markov-Kette zu generieren.
Verwenden Sie das Kintone API SDK für Python mit Raspberry Pi (speichern Sie Daten einfach in Kintone von Raspberry Pi).
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Vom Einrichten des Raspberry Pi bis zur Installation der Python-Umgebung
Führen Sie die LED-Matrix interaktiv mit Raspberry Pi 3B + auf Slackbot aus
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Sammeln von Informationen von Twitter mit Python (morphologische Analyse mit MeCab)
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Automatisches Folgen auf Twitter mit Python und Selen! (RPA)
Steuern Sie bürstenlose Motoren mit GPIO von Raspberry Pi Zero
Interagiere mit Python auf Android vom PC über adb
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!