Python-Programm, das täglich Tweets mit bestimmten Schlüsselwörtern sammelt und in CSV speichert

Zweck

Ich habe die Idee, dass SNS-Informationen wie Twitter zur Überwachung des Risikos des Auftretens neuer Corona-Virus-Infektionscluster verwendet werden können, und ich möchte Tweets per Stichwortsuche wie "Heutige Trinkparty" sammeln. Da die kostenlose Such-API Tweets erst vor einer Woche verfolgen kann, werden wir einen Mechanismus entwickeln, mit dem Daten jeden Tag automatisch erfasst werden, wobei die Möglichkeit in Betracht gezogen wird, sie für zukünftige Forschungen zu verwenden.

Wenn Sie eine gute Vorstellung von einem Suchwort haben, mit dem das Risiko der Entwicklung eines neuen mit Corona-Viren infizierten Clusters bewertet werden kann, kommentieren Sie dies bitte! </ b>

Referenz-URL

Urheber https://developer.twitter.com/en/docs/twitter-api Sehr leicht verständliche Kommentarseite https://gaaaon.jp/blog/twitterapi Es ist traurig, dass dieser Artikel nicht einmal den "versuchten autarken Code" im obigen Link erreicht hat. In einigen Fällen kann der Artikel daher privat gehalten werden.

Methode

Führen Sie die folgende nomikai_tweets.py aus.

# coding: utf-8
# nomikai_tweets.py

import pandas as pd
import json
import schedule
from time import sleep
from requests_oauthlib import OAuth1Session
import datetime
from datetime import date, timedelta
import pytz

def convert_to_datetime(datetime_str):
    """
Konvertierung des Datums- und Uhrzeitformats
    """
    tweet_datetime = datetime.datetime.strptime(datetime_str,'%a %b %d %H:%M:%S %z %Y')
    return(tweet_datetime)


def job():
    """
Programm, das sich in main wiederholt
    """

    #Suchbegriff Ausgenommen Retweets
    keyword = "Trinkparty heute ausschließen:retweets" 
    #Verzeichnis speichern Zuerst erstellen
    DIR = 'nomikai/' 

    #Informationen, die durch API-Kommunikation und Entwicklerregistrierung erhalten wurden
    Consumer_key = 'bT*****************'
    Consumer_secret = 've*****************'
    Access_token = '25*****************'
    Access_secret = 'NT*****************'
    url = "https://api.twitter.com/1.1/search/tweets.json"
    twitter = OAuth1Session(Consumer_key, Consumer_secret, Access_token, Access_secret)

    #Für die Erfassung verwendete Parameter
    max_id = -1
    count = 100
    params = {'q' : keyword, 'count' : count, 'max_id' : max_id, 'lang' : 'ja', 'tweet_mode' : 'extended'}

    #Vorbereitung zum Vergleichen von Datumsverarbeitung utc und jst in japanischer Zeit
    today =datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
    today_beggining_of_day = today.replace(hour=0, minute=0, second=0, microsecond=0)
    yesterday_beggining_of_day = today_beggining_of_day - timedelta(days=1)
    yesterday_str = datetime.datetime.strftime(yesterday_beggining_of_day, '%Y-%m-%d')

    #Entspricht der Aufzeichnung in der DF while-Anweisung, in der Tweet-Informationen gespeichert sind
    columns = ['time', 'user.id', 'user.location', 'full_text', 'user.followers_count', 'user.friends_count', 'user.description', 'id']
    df = pd.DataFrame(index=[], columns=columns)


    while(True):
        if max_id != -1: #Gehen Sie zurück zu dem Tweet, in dem die Tweet-ID bereits gespeichert ist
            params['max_id'] = max_id - 1
        req = twitter.get(url, params = params)

        if req.status_code == 200: #Wenn Sie es normal bekommen können
            search_timeline = json.loads(req.text)

            if search_timeline['statuses'] == []:  #Nachdem Sie alle Tweets genommen haben
                break

            for tweet in search_timeline['statuses']:
                #Tweet Zeit utc
                tweet_datetime = convert_to_datetime(tweet['created_at'])
                #Überspringen, wenn nicht der gestrige Tweet
                in_jst_yesterday = today_beggining_of_day > tweet_datetime >= yesterday_beggining_of_day

                if not in_jst_yesterday:  #Überspringen, wenn nicht der gestrige Tweet
                    continue

                #In DF speichern
                record = pd.Series([tweet_datetime,
                                    tweet['user']['id'],
                                    tweet['user']['location'],
                                    tweet['full_text'],
                                    tweet['user']['followers_count'],
                                    tweet['user']['friends_count'],
                                    tweet['user']['description'],
                                    tweet['id'],
                                   ],index=df.columns)
                df = df.append(record, ignore_index=True)

            max_id = search_timeline['statuses'][-1]['id']

        else: #Warten Sie 15 Minuten, wenn Sie in den Einschränkungen der Zugriffshäufigkeit stecken bleiben
            print("Total", df.shape[0], "tweets were extracted", sep=" ")
            print('wainting for 15 min ...')
            sleep(15*60)

    #sparen
    df = df.set_index("time")
    df.index = df.index.tz_convert('Asia/Tokyo')
    df.to_pickle(DIR + yesterday_str + keyword +".pkl")
    df.to_csv(DIR + yesterday_str + keyword +".csv")
    print(today, "Total", df.shape[0], "tweets were extracted!\nnext start at 01:00 tommorow")

def main():
    print("start at 01:00 tommorow")
    #Laufen Sie jeden Tag um 01:00 Uhr
    schedule.every().day.at("01:00").do(job)

    while True:
        schedule.run_pending()
        sleep(1)

if __name__ == '__main__':
    main()

Ergebnis

Ich möchte analysieren, sobald die Daten gesammelt sind. Dies liegt daran, dass es nicht möglich ist, auch nur die periodischen Änderungen je nach Tag zu bewerten, indem nur die vergangenen Daten für eine Woche verwendet werden.

Kommentar

Ich habe gelernt, dass ich vorsichtig mit der japanischen Zeit und der Standardzeit umgehen muss, um jeden Tag Daten zu sammeln. Beachten Sie, dass "datetime.datetime.now ()" von der Umgebung abhängt, in der das Programm ausgeführt wird. Daher funktioniert das Ausführen dieser Quelle auf einem Computer in einem anderen Land nicht ordnungsgemäß. Gleiches gilt für schedule.every (). Day.at (" 01: 00 "). Do (job).

Von den Tweets, die die Vergangenheit "heute" und "Trinkparty" enthielten, die extrahiert werden konnten, war "online" in etwa 10% enthalten. Außerdem mögen viele Twitterer keine Firmen-Trinkpartys.

Recommended Posts

Python-Programm, das täglich Tweets mit bestimmten Schlüsselwörtern sammelt und in CSV speichert
Ein Skript, das Tweets mit Python abruft, sie in einer externen Datei speichert und morphologische Analysen durchführt.
Speichern Sie Tweets mit bestimmten Schlüsselwörtern auf Twitter als CSV
Ein Skript, das Tweets mit bestimmten Schlüsselwörtern auf Twitter in Echtzeit an Slack überträgt.
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Ein Programm, das doppelte Anweisungen in Python entfernt
Python-Skript, das SQL-Dateien liest, BigQuery ausführt und CSV speichert
Rufen Sie weiterhin Tweets mit bestimmten Schlüsselwörtern mithilfe der Streaming-API in Python ab
Ich habe in Python ein Programm erstellt, das FX-CSV-Daten liest und eine große Anzahl von Diagrammbildern erstellt
Python-Programm von "Buch, das schwieriges Programmieren leicht lehrt"
Ein Allzweckprogramm, das Linux-Befehlszeichenfolgen mit Python formatiert
Ich habe versucht, "ein Programm, das doppelte Anweisungen in Python entfernt"
Sammeln Sie Tweets mit tweepy in Python und speichern Sie sie in MongoDB
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Ein Programm, das bestimmt, ob eine in Python eingegebene Zahl eine Primzahl ist
[Python] Ein Programm, das Treppen mit # erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Ein Programm, das Python zum Abspielen von Junk verwendet
[Python] Ein Programm, das die Partitur rundet
[Anfänger] Was passiert, wenn ich ein Programm schreibe, das in Python auf PHP läuft?
Veröffentlichen und Verwenden eines Programms, das automatisch Gesichtsbilder bestimmter Personen sammelt
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
[Python] Ein Programm, das die minimalen und maximalen Werte ohne Verwendung von Methoden findet
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Speichern Sie den Tweet von Twitter mit Geo als CSV und zeichnen Sie ihn auf Google Map.
Bis Sie tägliche Daten für mehrere Jahre japanischer Bestände erhalten und diese in einer einzigen CSV (Python) speichern
Organisieren Sie Python-Module und -Pakete in einem Chaos
Ein Memo, das ich schnell in Python geschrieben habe
Ein netter Nimporter, der Nim und Python verbindet
Ich habe eine Klasse in Python3 und Java geschrieben
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
Einfache Pub / Sub-Programmhinweise in Python
Extrahieren Sie mit Pandas Zeilen, die eine bestimmte "Zeichenfolge" enthalten
Schreiben wir ein Python-Programm und führen es aus
Erstellen Sie in Python ein Paket mit globalen Befehlen
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ruft Zeilen mit bestimmten Elementen in np.where ab
Python-Skript, das das Azure-Status-RSS crawlt und an Hipchat sendet
Ein Programm, das ein paar Kilogramm BMI und Standardgewicht verlangt [Python]
[Python] Benennen Sie alle Bilddateien in einem bestimmten Ordner nach Aufnahmedatum und -zeit um
[Python] Ein Programm, das die kürzeste Anzahl von Schritten in einem Spiel findet, das Wolken überquert
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe
[Python] Lassen Sie nur Elemente im Array, die mit einer bestimmten Zeichenfolge beginnen
Programm, das die CSV-Daten der Transaktionshistorie der SBI Securities-Aktie zusammenfasst [Python3]
Eine Lösung für das Problem, dass Dateien mit [und] nicht in glob.glob () aufgeführt sind