[PYTHON] Supprimer les tweets pendant une période spécifiée

Je veux dire qu'il n'y avait pas d'histoire noire

Il existe déjà divers outils dans le monde, Selon les spécifications de Twitter, seuls les 3200 derniers peuvent être supprimés. Il y a des frais pour la suppression en masse. J'ai de gros ennuis.

Le nombre de tweets de type trash qui se sont accumulés depuis 2010 est bien supérieur à 100000.

Il existe également une source dans Qiita qui efface tous les tweets si vous la recherchez. Mais tout est en difficulté. En premier lieu, si vous voulez tout effacer, il serait plus rapide de recréer le compte ...

Je veux effacer uniquement l'histoire des Noirs et conserver le véritable être humain récent.

Pour de telles personnes.

procédure

  1. Construire un environnement python3.6
  2. Obtenir une archive pleine d'histoire des Noirs
  3. Modifiez tweet.js dans l'archive
  4. Obtenir la clé API
  5. Modifier le code source
  6. Courir
  7. Terminé

1. Construire un environnement python3.6

Bien sûr, vous pouvez l'utiliser, non? Si vous ne pouvez pas l'utiliser, demandez à Google Sensei

2. Obtention d'une archive chargée d'histoire des Noirs

① Connectez-vous à Twitter sur votre PC et ouvrez l'écran des paramètres (https://twitter.com/settings/account) ② Sélectionnez l'onglet "Données Twitter" (entrez le mot de passe lorsque vous y êtes invité) ③ Appuyez sur "Télécharger les données Twitter".

3. Modifiez tweet.js

Je veux lire ce fichier dans le code source, je vais donc le modifier un peu.

① Ouvrez le dossier "data" dans le dossier décompressé (2) Il existe un fichier nommé "tweet.js", alors ouvrez-le avec un éditeur de texte approprié. ③ Supprimez la chaîne de caractères "window.YTD.tweet.part0 =" au début. ④ Enregistrez et fermez.

4. Obtenir la clé API

Vous avez besoin de quelque chose appelé un jeton d'accès pour utiliser l'API Twitter. Eh bien, ce n'est qu'une chaîne. Suivez les étapes ci-dessous pour obtenir 2 clés et 2 jetons. Il est nécessaire pour le programme, vous pouvez donc le copier dans le Bloc-notes.

① Accédez ici → https://developer.twitter.com/en/apps (2) Il peut y avoir des applications, mais sélectionnez "Détails" bien que l'ID de compte Twitter soit répertorié. ③ Confirmez qu'il existe trois onglets, «Détails de l'application», «Clés et jetons» et «Autorisations».

④ Tout d'abord, sélectionnez "Autorisations" et appuyez sur le bouton "Modifier" pour modifier les autorisations. ⑤ L'autorité est "Lecture, écriture et messages directs". ⑥ Appuyez sur Enregistrer pour enregistrer.

⑦ Ouvrez "Clés et jetons" ⑧ Notez chacun des éléments suivants décrits dans «Gestion des clés, des clés secrètes et des jetons d'accès». · Clé API ・ Clé secrète API ⑨ Copiez les informations de "Jeton d'accès et jeton d'accès secret" Lorsque vous appuyez sur le bouton "Regenerator" ・ Ass et Ken ・ Secret du jeton d'accès Sera affiché, alors notez chaque

C'est acceptable

5. Modifier le code source

L'échantillon source est ci-dessous J'ai écrit dans les commentaires où je veux que vous changiez chacun d'eux, alors faites ce que vous voulez


import json
import twitter # pip install python-twitter

# ======Veuillez écrire les paramètres de manière agréable====== 

#La clé et le jeton sont répertoriés ci-dessous
api_key             = 'Copier ici', # メモした「API key」をCopier ici
api_secret_key      = 'Copier ici', # メモした「API secret key」をCopier ici
access_token        = 'Copier ici', # メモした「Access token」をCopier ici
access_token_secret = 'Copier ici', # メモした「Access token secret」をCopier ici

# tewwt.Décrivez le chemin du fichier de js.("\"Assurez-vous de joindre deux)
js_file_path = "D:\\sample\\hogehoge\\tweet.js" 

#Supprimez les tweets pendant la période du début à la fin indiquée ci-dessous. (Y compris les dates de début et de fin)
begin_year  = 2010 #Cette année
begin_month = 1    #De ce mois
begin_day   = 1    #A partir de ce jour ↓
end_year  = 2019 #Cette année
end_month = 12   #De ce mois
end_day   = 31   #Supprimer jusqu'à cette date

# ================================ 

api = twitter.Api(
    consumer_key        = api_key,
    consumer_secret     = api_secret_key,
    access_token_key    = access_token,
    access_token_secret = access_token_secret,
    sleep_on_rate_limit = True
)

class date():
    def __init__(self, y, m, d):
        self.y = y
        self.m = m
        self.d = d

class date_range():
    def __init__(self):
        self.begin = date(begin_year, begin_month, begin_day)
        self.end   = date(end_year, end_month, end_day)

#Je pense qu'il y a un moyen plus efficace, mais si vous vous souciez, vous perdez
def cnv_month_from_str2int(month):
    if month =='Jan':
        return 1
    elif month =='Feb':
        return 2
    elif month =='Mar':
        return 3
    elif month =='Apr':
        return 4
    elif month =='May':
        return 5
    elif month =='Jun':
        return 6
    elif month =='Jul':
        return 7
    elif month =='Aug':
        return 8
    elif month =='Sep':
        return 9
    elif month =='Oct':
        return 10
    elif month =='Nov':
        return 11
    elif month =='Dec':
        return 12
    else:
        assert False, "ERROR!![{}] is not month".format(month)

def run():
    d_r = date_range()
    cnt = 0
    with open(js_file_path, encoding='utf-8', mode='r') as f:
        tj=json.load(f)
        for tweet0 in tj:
            tweet = tweet0['tweet']
            print()
            print(tweet['id'])

            date = tweet['created_at']
            dow, month, day, time, other, year = date.split()
            _year = int(year)
            _day = int(day)
            _month = cnv_month_from_str2int(month)
            
            # out of custum date range.
            if ( _year > d_r.begin.y  and d_r.end.y < _year) \
            or (_month > d_r.begin.m and d_r.end.m < _month) \
            or (_day > d_r.begin.d   and d_r.end.d < _day):
                continue

            print("The number that deleted tweet is {}".format(cnt))
            print("Now deleting {}/{}/{}".format(_year, _month, _day) )

            try:
                api.DestroyStatus(tweet['id'])
                cnt += 1
            except Exception as e:
                # Error if already deleted or tweet is RT
                print(e.args)
    return cnt

if __name__ == '__main__':
    dl_cnt = run()
    print()
    print("Finish!!")
    print("Deleted {} tweets".format(dl_cnt))


6. Courir

Une fois exécutée, la suppression commence. Vous pouvez voir que le nombre de tweets diminue si vous ouvrez votre compte et appuyez sur les mises à jour à plusieurs reprises. Il faudra un certain temps pour le supprimer, alors soyez patient. (Si vous supprimez des dizaines de milliers d'éléments, cela ne se terminera pas dans une heure ou quelque chose comme ça)

7. Terminé.

Si la fin est affichée, elle doit être terminée. Cela aurait dû effacer presque complètement l'histoire du noir. Je l'ai fait.

Question de non-correspondance

À propos, RT ne peut pas être annulé ... Je n'ai pas examiné les informations de tweet.js en détail, mais il devrait y avoir quelque chose qui puisse être considéré comme RT. Après cela, vous devriez trouver l'API pour annuler RT du document officiel et le frapper. C'était difficile à découvrir. ..

Si vous souhaitez supprimer uniquement les tweets contenant des images, vous devriez pouvoir le faire.

Si vous voulez le faire, vérifiez le contenu de .js et de l'API et réécrivez-le vous-même

référence

https://qiita.com/aeas44/items/a5b82da69b64b32aada4

Recommended Posts

Supprimer les tweets pendant une période spécifiée
Supprimer la sous-chaîne
Supprimer tous les fichiers pyc dans le répertoire spécifié
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
[Python] Créer une liste de dates et d'heures pour une période spécifiée
Premier Kaggle (kaggle ①)
Kaguru pour la première fois
A quoi sert l'interface ...