Как мне удалить все твиты, используя python-twitter?
Я использую python-twitter в своем веб-приложении для публикации твитов следующим образом:
import twitter
twitter_api = twitter.Api(
consumer_key="BlahBlahBlah",
consumer_secret="BlahBlahBlah",
access_token_key="BlahBlahBlah",
access_token_secret="BlahBlahBlah",
)
twitter_api.PostUpdate("Hello World")
Как удалить все опубликованные твиты? Я не могу найти документацию, как это сделать.
2 ответа
twitter_api.PostUpdate("Hello World")
должен вернуть Status
объект. Тот Status
Объект также содержит информацию о состоянии, которое, согласно их источнику, присутствует в качестве атрибута.
twitter_api.destroyStatus
по-видимому, метод, который они имеют, который оборачивает вокруг POST statuses/destroy
запрос в твиттере. Чтобы уничтожить статус, он принимает в качестве аргумента status.id
,
Так:
status = twitter_api.PostUpdate("hello world")
twitter_api.destroyStatus(status.id)
должно быть достаточно. Кажется, что нет способа массового удаления контента, вам придется сначала извлечь контент, а затем удалить его статус за статусом.
Извлечение последовательности (которая, я думаю, подразумевает, что она повторяется) из вашей временной шкалы выполняется с помощью twitter_api.GetUserTimeline
с лимитом 200
твиты каждый раз. Это должно позволить вам захватывать твиты, проверять, есть ли результат и повторять ли их, и удалять их destroyStatus
,
import time
import re
import twitter
try:
# UCS-4
HIGHPOINTS = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
# UCS-2
HIGHPOINTS = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
class TwitterPurger():
'''
Purges the a Twitter account of all all tweets and favorites
'''
MAX_CALLS_PER_HOUR = 99
SECONDS_IN_AN_HOUR = 3600
def __init__(self):
self.api_call_count = 0
def increment_or_sleep(self):
'''
Increments the call count or sleeps if the max call count per hour
has been reached
'''
self.api_call_count = self.api_call_count + 1
if self.api_call_count > TwitterPurger.MAX_CALLS_PER_HOUR:
time.sleep(TwitterPurger.SECONDS_IN_AN_HOUR)
self.api_call_count = 0
def delete_everything(self, screen_name, consumer_key,
consumer_secret, access_token, access_token_secret):
'''
Deletes all statuses and favorites from a Twitter account
'''
api = twitter.Api(consumer_key=consumer_key, consumer_secret=consumer_secret,
access_token_key=access_token, access_token_secret=access_token_secret)
var_time_line_statuses = api.GetUserTimeline(screen_name=screen_name, include_rts=True)
self.increment_or_sleep()
while len(var_time_line_statuses) > 0:
for status in var_time_line_statuses:
print('Deleting status {id}: {text}'
.format(id=str(status.id),
text=HIGHPOINTS.sub('_', status.text)))
api.DestroyStatus(status.id)
var_time_line_statuses = api.GetUserTimeline(screen_name=screen_name, include_rts=True)
self.increment_or_sleep()
user_favorites = api.GetFavorites(screen_name=screen_name)
self.increment_or_sleep()
while len(user_favorites) > 0:
for favorite in user_favorites:
print('Deleting favorite {id}: {text}'
.format(id=str(favorite.id),
text=HIGHPOINTS.sub('_', favorite.text)))
api.DestroyFavorite(status=favorite)
user_favorites = api.GetFavorites(screen_name=screen_name)
self.increment_or_sleep()
Пользователям Windows необходимо будет запустить команду "chcp 65001" в своей консоли перед запуском сценария из командной строки.