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.
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.
・ Registrierung der Twitter-API (Siehe hier) ・ Laden Sie die Twitter-Archivdaten herunter (Siehe hier #))) ・ Installation von Tweepy und Pandas
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"
}
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
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
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
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.')
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())
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
Spielen Sie mit dem hier eingeführten Code und führen Sie ein erfülltes Leben. Danke fürs Lesen. Na dann!
Recommended Posts