[PYTHON] Löschen Sie Tweets für einen bestimmten Zeitraum

Ich möchte sagen, dass es keine schwarze Geschichte gab

Es gibt bereits verschiedene Werkzeuge auf der Welt, Gemäß den Twitter-Spezifikationen kann nur der neueste 3200 gelöscht werden. Für das Löschen von Massen wird eine Gebühr erhoben. Ich bin in großen Schwierigkeiten.

Die Anzahl der trash-ähnlichen Tweets, die seit 2010 angehäuft wurden, liegt weit über 100.000.

Es gibt auch eine Quelle in Qiita, die alle Tweets löscht, wenn Sie danach suchen. Aber alles ist in Schwierigkeiten. Wenn Sie alles löschen möchten, ist es zunächst schneller, das Konto neu zu erstellen ...

Ich möchte nur die schwarze Geschichte löschen und den jüngsten wahren Menschen behalten.

Für solche Leute.

Verfahren

  1. Erstellen einer Python3.6-Umgebung
  2. Ein Archiv voller schwarzer Geschichte erhalten
  3. Bearbeiten Sie tweet.js im Archiv
  4. Holen Sie sich den API-Schlüssel
  5. Bearbeiten Sie den Quellcode
  6. Führen Sie aus
  7. Fertig

1. Erstellen einer Python3.6-Umgebung

Natürlich kannst du es benutzen, oder? Wenn Sie es nicht verwenden können, fragen Sie Google Sensei

2. Ein Archiv voller schwarzer Geschichte erhalten

① Melden Sie sich auf Ihrem PC bei Twitter an und öffnen Sie den Einstellungsbildschirm (https://twitter.com/settings/account). ② Wählen Sie die Registerkarte "Twitter-Daten" (geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden). ③ Drücken Sie "Twitter-Daten herunterladen".

3. Bearbeiten Sie tweet.js

Ich möchte diese Datei im Quellcode lesen, daher werde ich sie ein wenig ändern.

① Öffnen Sie den Ordner "data" im entpackten Ordner (2) Es gibt eine Datei mit dem Namen "tweet.js". Öffnen Sie sie daher mit einem geeigneten Texteditor. ③ Löschen Sie am Anfang die Zeichenfolge "window.YTD.tweet.part0 =". ④ Speichern und schließen.

4. Holen Sie sich den API-Schlüssel

Sie benötigen ein sogenanntes Zugriffstoken, um die Twitter-API verwenden zu können. Nun, es ist nur eine Schnur. Befolgen Sie die nachstehenden Schritte, um 2 Schlüssel und 2 Token zu erhalten. Es ist für das Programm erforderlich, damit Sie es in den Editor kopieren können.

① Zugriff hier → https://developer.twitter.com/en/apps (2) Möglicherweise sind einige Apps darin enthalten, wählen Sie jedoch "Details", obwohl die Twitter-Konto-ID aufgeführt ist. ③ Vergewissern Sie sich, dass drei Registerkarten vorhanden sind: "App-Details", "Schlüssel und Token" und "Berechtigungen".

④ Wählen Sie zuerst "Berechtigungen" und klicken Sie auf die Schaltfläche "Bearbeiten", um die Berechtigungen zu ändern. ⑤ Die Berechtigung lautet "Lesen, Schreiben und Direktnachrichten". ⑥ Drücken Sie Speichern, um zu speichern.

⑦ Öffnen Sie "Schlüssel und Token" ⑧ Notieren Sie sich die folgenden Punkte unter "Verwaltung von Schlüsseln, geheimen Schlüsseln und Zugriffstoken". · API-Schlüssel ・ API geheimer Schlüssel ⑨ Kopieren Sie die Informationen von "Zugriffstoken & Zugriffstoken geheim". Wenn Sie die Taste "Regenerator" drücken ・ Arsch und Ken ・ Zugriff auf das Token-Geheimnis Wird angezeigt, notieren Sie sich diese

Das ist in Ordnung

5. Bearbeiten Sie den Quellcode

Das Quellbeispiel ist unten Ich habe in den Kommentaren geschrieben, wo ich möchte, dass Sie jeden einzelnen ändern, also tun Sie bitte, was Sie möchten


import json
import twitter # pip install python-twitter

# ======Bitte schreiben Sie die Einstellungen schön====== 

#Der Schlüssel und das Token sind unten aufgeführt
api_key             = 'Hier kopieren', # メモした「API key」をHier kopieren
api_secret_key      = 'Hier kopieren', # メモした「API secret key」をHier kopieren
access_token        = 'Hier kopieren', # メモした「Access token」をHier kopieren
access_token_secret = 'Hier kopieren', # メモした「Access token secret」をHier kopieren

# tewwt.Beschreiben Sie den Dateipfad von js.("\"Stellen Sie sicher, dass Sie zwei anbringen)
js_file_path = "D:\\sample\\hogehoge\\tweet.js" 

#Löschen Sie Tweets während des unten angegebenen Zeitraums von Anfang bis Ende. (Einschließlich Start- und Enddatum)
begin_year  = 2010 #Dieses Jahr
begin_month = 1    #Von diesem Monat
begin_day   = 1    #Ab diesem Tag ↓
end_year  = 2019 #Dieses Jahr
end_month = 12   #Von diesem Monat
end_day   = 31   #Bis zu diesem Datum löschen

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

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)

#Ich denke, es gibt einen effizienteren Weg, aber wenn Sie sich interessieren, verlieren Sie
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. Führen Sie aus

Bei der Ausführung beginnt der Löschvorgang. Sie können sehen, dass die Anzahl der Tweets abnimmt, wenn Sie Ihr Konto eröffnen und wiederholt auf Updates klicken. Das Löschen dauert einige Zeit. Seien Sie also geduldig. (Wenn Sie Zehntausende von Elementen löschen, endet dies nicht in einer Stunde oder so etwas.)

7. Fertig.

Wenn das Finish angezeigt wird, sollte es abgeschlossen sein. Dies hätte die Geschichte des Schwarzen fast vollständig auslöschen sollen. Ich habs gemacht.

Nichtkorrespondenzangelegenheit

RT kann übrigens nicht storniert werden ... Ich habe mir die Informationen in tweet.js nicht im Detail angesehen, aber es sollte etwas geben, das als RT bestimmt werden kann. Danach sollten Sie die API finden, um RT aus dem offiziellen Dokument abzubrechen und darauf zu klicken. Es war mühsam herauszufinden. ..

Wenn Sie nur Tweets mit Bildern löschen möchten, sollten Sie dazu in der Lage sein.

Wenn Sie dies tun möchten, überprüfen Sie den Inhalt von .js und API und schreiben Sie ihn selbst neu

Referenz

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

Recommended Posts

Löschen Sie Tweets für einen bestimmten Zeitraum
Löschen Sie den Teilstring
Löschen Sie alle pyc-Dateien im angegebenen Verzeichnis
So löschen Sie die angegebene Zeichenfolge mit dem Befehl sed! !! !!
[Python] Erstellen Sie eine Datums- und Zeitliste für einen bestimmten Zeitraum
Erster Kaggle (Kaggle ①)
Kaguru zum ersten Mal
Was ist die Schnittstelle für ...