[PYTHON] So löschen Sie vergangene Tweets mit Tweepy selektiv

Einführung

Ich wollte die früheren Peing-Antwortbeiträge auf Twitter löschen, aber da fast 1000 Elemente gelöscht werden mussten, gab ich das manuelle Löschen auf und schrieb stattdessen ein Skript, das die Ziel-Tweets automatisch löscht. Es war.

Über Tweepy

Tweepy ist eine Python-Bibliothek, die die API von Twitter verwendet. Sie können dies verwenden, um Twitter-Bots zu erstellen und diese automatisch zu mögen und zu verfolgen. Dieses Mal werde ich ein Skript einführen, das bestimmte Tweets automatisch löscht.

Vorbereitung

・ Registrierung der Twitter-API (Siehe hier) ・ Laden Sie die Twitter-Archivdaten herunter (Siehe hier #))) ・ Installation von Tweepy und Pandas

Politik

Wenn Sie die Twitter-Archivdaten herunterladen, wird eine Datei namens tweet.js zusammen heruntergeladen. Diese Datei enthält eine große Menge vergangener Tweet-Daten, wie unten gezeigt. ** "tweet": {** Alles danach zeigt die Daten an, die sich auf einen Tweet beziehen, und unzählige ähnliche Daten werden als eine Datei konfiguriert. Als Richtlinie möchten wir Tweets, die "https://peing.net" enthalten, in der Zeile ** "source": ** der Datei tweet.js unten selektiv löschen. Zu diesem Zeitpunkt ist auch die jedem Tweet zugewiesene ID erforderlich, sodass auch die numerischen Daten in der Zeile ** "id_str": ** extrahiert werden.

 {
  "tweet" : {
    "retweeted" : false,
    "source" : "<a href=\"https://peing.net\" rel=\"nofollow\">Peing</a>",
    "entities" : {
      "hashtags" : [ {
        "text" : "Peing",
        "indices" : [ "18", "24" ]
      }, {
        "text" : "Fragefeld",
        "indices" : [ "25", "29" ]
      } ],
      "symbols" : [ ],
      "user_mentions" : [ ],
      "urls" : [ {
        "url" : "https://t.co/snIXxSjooH",
        "expanded_url" : "https://peing.net/ja/qs/636766292",
        "display_url" : "peing.net/ja/qs/636766292",
        "indices" : [ "30", "53" ]
      } ]
    },
    "display_text_range" : [ "0", "53" ],
    "favorite_count" : "0",
    "id_str" : "1203602228591788032",
    "truncated" : false,
    "retweet_count" : "0",
    "id" : "1203602228591788032",
    "possibly_sensitive" : false,
    "created_at" : "Sun Dec 08 09:08:27 +0000 2019",
    "favorited" : false,
    "full_text" : "Es ist ein praller und glänzender Reis.\n\n#Peing #Fragenfeld https://t.co/snIXxSjooH",
    "lang" : "ja"
  }

Code

importieren

Importieren Sie das Modul ** re **, da beim Extrahieren der Zeichenfolge der zu löschenden Tweet-Daten aus der Datei tweet.js der reguläre Ausdruck verwendet wird. Es werden auch ** Pandas ** importiert, um aus den extrahierten Daten einen Datenrahmen zu erstellen. ** datetime ** ist nicht erforderlich, da ich es persönlich importiere, um zu messen, wie lange es läuft. ** tweepy ** ist natürlich erforderlich.


import re
import pandas as pd
from datetime import datetime
import tweepy

Extraktion von Tweet-Daten

Definieren Sie eine Funktion, die die erforderlichen Daten (** "source": **, ** "id_str": **) aus tweet.js extrahiert und als Datenrahmen ausgibt.

def read_tweet_file(file):
    """
    reads a tweet.js into a pd.DataFrame
    """
    # tweet.Js-Datei lesen
    with open(file) as dataFile:
        datalines = dataFile.readlines()
        #Erstellen eines leeren Datenrahmens zum Speichern der extrahierten Daten
        colname = ['source', 'id']
        df = pd.DataFrame([], columns=colname)
        #Geben Sie das zu extrahierende Teil in der Liste an
        regexes = [r'    \"source\".*', r'    \"id_str\".*' ]
        for i, regex in enumerate(regexes):
            L = []
            for line in datalines:
                #Extrahieren Sie das Teil, das der Bedingung entspricht
                match_obj = re.match(regex, line)
                if match_obj :
                    L.append(match_obj.group())
            #Im Datenrahmen speichern
            df[colname[i]] = pd.Series(L)

        return df

Extraktion der zu löschenden Tweets

Definieren Sie eine Funktion, die die ID des Tweets ausgibt, der aus dem Datenrahmen gelöscht werden soll.

def extract_id(df):
    target_id = []
    for i in range(len(df)):
        #Extrahieren Sie nur Peing-Tweets aus dem Datenrahmen
        match_obj = re.search(r'https://peing.net', df['source'][i])
        if match_obj:
            #Geben Sie die zu löschende Tweet-ID als Liste aus
            target_id.append(int(re.search(r'[0-9]+', df['id'][i]).group()))

    return target_id

Tweets löschen

Geben Sie die Tweet-ID an und definieren Sie die Ausgabefunktion zum Löschen des Tweets.

def delete_tweets(target_id):
    delete_count = 0
    for status_id in target_id:
        try:
            #Tweet löschen
            api.destroy_status(status_id)
            print(status_id, 'deleted!')
            delete_count += 1
        except:
            print(status_id, 'deletion failed.')
    print(delete_count, 'tweets deleted.')

Lauf

Führen Sie die oben definierte Funktion aus.

#Authentifizierung für den Zugriff auf die Twitter-API
auth = tweepy.OAuthHandler('*API key*', '*API secret key*')
auth.set_access_token('*Access token*', '*Access token secret*')

api = tweepy.API(auth)
user = api.me()

#Lauf
print(datetime.now())
df = read_tweet_file('tweet.js')
target_id = extract_id(df)
delete_tweets(target_id)
print(datetime.now())

Ergebnis

Ich konnte die Ziel-Tweets von 976 automatisch löschen. (Die Ausführungszeit beträgt ca. 10 Minuten)

2020-02-07 17:24:57.816773
1204021701639426048 deleted!
1204020924015472640 deleted!
1204020044683833344 deleted!
1203904952684302337 deleted!

... (weggelassen) ...

1204025368052523014 deleted!
1204023316488560640 deleted!
1204023315221733376 deleted!
1204022282311499776 deleted!
976 tweets deleted.
2020-02-07 17:35:16.302221

schließlich

Spielen Sie mit dem hier eingeführten Code und führen Sie ein erfülltes Leben. Danke fürs Lesen. Na dann!

Recommended Posts

So löschen Sie vergangene Tweets mit Tweepy selektiv
Wie lösche ich mit SQLAlchemy?
So brechen Sie RT mit tweepy ab
Erhalten Sie Antworten auf bestimmte Tweets mit tweepy
So löschen Sie ein Protokoll mit Docker, nicht um ein Protokoll zu sammeln
Holen Sie sich Tweets mit Tweepy
So löschen Sie die angegebene Zeichenfolge mit dem Befehl sed! !! !!
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
Wie mit SQLAlchemy ändern?
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
Python: So verwenden Sie Async mit
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS
Umgang mit unausgeglichenen Daten
So erstellen / löschen Sie symbolische Links
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Umgang mit dem DistributionNotFound-Fehler
Wie fange ich mit Django an?
Aufblasen von Daten (Datenerweiterung) mit PyTorch
So löschen Sie einen Docker-Container
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
So verbinden Sie INNER mit SQL Alchemy
So installieren Sie Anaconda mit pyenv
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
[Blender] So legen Sie shape_key mit dem Skript fest
Wie man mit matplotlib mehrere Figuren betitelt
Ich habe versucht, schlechte Tweets regelmäßig mit der AWS Lambda + Twitter API zu löschen
So erhalten Sie die Eltern-ID mit sqlalchemy
Schließen Sie Tweets mit URLs mit tweepy [Python] aus.
So fügen Sie ein Paket mit PyCharm hinzu
So löschen Sie abgelaufene Sitzungen in Django
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
Verwendung von Tweepy ~ Teil 1 ~ [Getting Tweet]
So verhindern Sie Paketaktualisierungen mit apt
So arbeiten Sie mit BigQuery in Python
Wie man Ass / Alembic mit HtoA benutzt
Umgang mit Enum-Kompatibilitätsfehlern
Verwendung von Japanisch mit NLTK-Plot
Wie man einen Taschentest mit Python macht
So suchen Sie in Google Colaboratory nach Google Drive
So zeigen Sie Python-Japanisch mit Lolipop an
So laden Sie YouTube-Videos mit youtube-dl herunter
Verwendung des Jupyter-Notebooks mit ABCI
So schalten Sie Linux unter Ultra96-V2 aus
Verwendung des CUT-Befehls (mit Beispiel)
Wie man mit Python-Flüchen Japanisch eingibt
So installieren Sie zsh (mit .zshrc-Anpassung)