Je voulais supprimer les anciens messages de réponse Peing sur Twitter, mais comme il y avait près de 1000 éléments à supprimer, j'ai renoncé à le supprimer manuellement et j'ai plutôt écrit un script qui supprime automatiquement les tweets cibles. C'était.
Tweepy est une bibliothèque Python qui utilise l'API de Twitter. Vous pouvez l'utiliser pour créer des robots Twitter et automatiquement aimer et suivre. Cette fois, je présenterai un script qui supprime automatiquement des tweets spécifiques.
・ Enregistrement de l'API Twitter (Veuillez vous reporter ici) ・ Télécharger les données des archives Twitter ([Veuillez vous reporter ici](https://help.twitter.com/en/managing-your-account/how-to-download-your-twitter-archive?&lang=en #))) ・ Installation de Tweepy et pandas
Lorsque vous téléchargez les données d'archive Twitter, un fichier appelé tweet.js sera téléchargé ensemble. Ce fichier contient une grande quantité de données de tweet passées, comme indiqué ci-dessous. ** "tweet": {** Tout ce qui suit montre les données liées à un tweet, et d'innombrables données similaires sont configurées comme un seul fichier. En tant que politique, nous visons à supprimer sélectivement les tweets qui contiennent "https://peing.net" dans la ligne ** "source": ** du fichier tweet.js ci-dessous. À ce moment-là, l'identifiant attribué à chaque tweet est également requis, de sorte que les données numériques de la ligne ** "id_str": ** sont également extraites.
{
"tweet" : {
"retweeted" : false,
"source" : "<a href=\"https://peing.net\" rel=\"nofollow\">Peing</a>",
"entities" : {
"hashtags" : [ {
"text" : "Peing",
"indices" : [ "18", "24" ]
}, {
"text" : "Boîte à questions",
"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" : "C'est un riz dodu et brillant.\n\n#Peing #Boîte à questions https://t.co/snIXxSjooH",
"lang" : "ja"
}
Importez le module ** re ** car l'expression régulière est utilisée lors de l'extraction de la chaîne de caractères des données tweet à supprimer du fichier tweet.js. Il importe également des ** pandas ** pour créer une trame de données à partir des données extraites. ** datetime ** n'est pas requis car je l'importe personnellement pour mesurer sa durée. ** tweepy ** est bien entendu obligatoire.
import re
import pandas as pd
from datetime import datetime
import tweepy
Définissez une fonction qui extrait les données requises (** "source": **, ** "id_str": **) de tweet.js et les génère sous forme de bloc de données.
def read_tweet_file(file):
"""
reads a tweet.js into a pd.DataFrame
"""
# tweet.Lire le fichier js
with open(file) as dataFile:
datalines = dataFile.readlines()
#Création d'un bloc de données vide pour stocker les données extraites
colname = ['source', 'id']
df = pd.DataFrame([], columns=colname)
#Spécifiez la pièce à extraire dans la liste
regexes = [r' \"source\".*', r' \"id_str\".*' ]
for i, regex in enumerate(regexes):
L = []
for line in datalines:
#Extraire la pièce qui correspond à la condition
match_obj = re.match(regex, line)
if match_obj :
L.append(match_obj.group())
#Stocker dans le bloc de données
df[colname[i]] = pd.Series(L)
return df
Définissez une fonction qui génère l'ID du tweet à effacer de la trame de données.
def extract_id(df):
target_id = []
for i in range(len(df)):
#Extraire uniquement les tweets de pipi de la trame de données
match_obj = re.search(r'https://peing.net', df['source'][i])
if match_obj:
#Sortir l'ID du tweet à supprimer sous forme de liste
target_id.append(int(re.search(r'[0-9]+', df['id'][i]).group()))
return target_id
Spécifiez l'ID du tweet et définissez la fonction de sortie pour supprimer le tweet.
def delete_tweets(target_id):
delete_count = 0
for status_id in target_id:
try:
#Supprimer le tweet
api.destroy_status(status_id)
print(status_id, 'deleted!')
delete_count += 1
except:
print(status_id, 'deletion failed.')
print(delete_count, 'tweets deleted.')
Exécutez la fonction définie ci-dessus.
#Authentification pour accéder à l'API Twitter
auth = tweepy.OAuthHandler('*API key*', '*API secret key*')
auth.set_access_token('*Access token*', '*Access token secret*')
api = tweepy.API(auth)
user = api.me()
#Courir
print(datetime.now())
df = read_tweet_file('tweet.js')
target_id = extract_id(df)
delete_tweets(target_id)
print(datetime.now())
J'ai pu supprimer automatiquement les tweets cibles de 976. (Le temps d'exécution est d'environ 10 minutes)
2020-02-07 17:24:57.816773
1204021701639426048 deleted!
1204020924015472640 deleted!
1204020044683833344 deleted!
1203904952684302337 deleted!
... (Omis) ...
1204025368052523014 deleted!
1204023316488560640 deleted!
1204023315221733376 deleted!
1204022282311499776 deleted!
976 tweets deleted.
2020-02-07 17:35:16.302221
N'hésitez pas à jouer avec le code présenté ici et à vivre une vie épanouissante. Merci pour la lecture. Eh bien!
Recommended Posts