[PYTHON] Comment supprimer sélectivement les anciens tweets avec Tweepy

introduction

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.

À propos de Tweepy

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.

Préparation

・ 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

politique

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

code

importer

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

Extraction des données de tweet

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

Extraction de tweets à supprimer

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

Supprimer les tweets

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.')

Courir

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

résultat

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

à la fin

N'hésitez pas à jouer avec le code présenté ici et à vivre une vie épanouissante. Merci pour la lecture. Eh bien!

Recommended Posts

Comment supprimer sélectivement les anciens tweets avec Tweepy
Comment supprimer avec SQLAlchemy?
Comment annuler RT avec Tweepy
Obtenez des réponses à des tweets spécifiques avec tweepy
Comment supprimer le journal avec Docker, ne pas collecter le journal
Recevez des tweets avec Tweepy
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Comment modifier avec SQLAlchemy?
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Python: comment utiliser async avec
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS
Comment gérer les données déséquilibrées
Comment créer / supprimer des liens symboliques
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment gérer l'erreur DistributionNotFound
Comment démarrer avec Django
Comment augmenter les données avec PyTorch
Comment supprimer un conteneur Docker
Comment calculer la date avec python
Comment installer mysql-connector avec pip3
Comment INNER JOIN avec SQL Alchemy
Comment installer Anaconda avec pyenv
Comment effectuer un traitement arithmétique avec le modèle Django
[Blender] Comment définir shape_key avec un script
Comment titrer plusieurs figures avec matplotlib
J'ai essayé de supprimer régulièrement les mauvais tweets avec l'API AWS Lambda + Twitter
Comment obtenir l'identifiant du parent avec sqlalchemy
Exclure les tweets contenant des URL avec tweepy [Python]
Comment ajouter un package avec PyCharm
Comment supprimer des sessions expirées dans Django
Comment installer DLIB avec 2020 / CUDA activé
Comment utiliser ManyToManyField avec l'administrateur de Django
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment utiliser Cmder avec PyCharm (Windows)
Comment utiliser Tweepy ~ Partie 1 ~ [Obtenir un Tweet]
Comment empêcher les mises à jour de paquets avec apt
Comment utiliser BigQuery en Python
Comment utiliser Ass / Alembic avec HtoA
Comment gérer les erreurs de compatibilité d'énumération
Comment utiliser le japonais avec le tracé NLTK
Comment faire un test de sac avec python
Comment rechercher Google Drive dans Google Colaboratory
Comment afficher le japonais python avec lolipop
Comment télécharger des vidéos YouTube avec youtube-dl
Comment utiliser le notebook Jupyter avec ABCI
Comment mettre hors tension de Linux sur Ultra96-V2
Comment utiliser la commande CUT (avec exemple)
Comment entrer le japonais avec les malédictions Python
Comment installer zsh (avec la personnalisation .zshrc)