Uma biblioteca python moderna e rápida para eliminar tweets e usuários rapidamente da API não oficial do Twitter.
Esta ferramenta ajuda você a eliminar tweets por frase de pesquisa, tweets por IDs e usuários por nomes de usuário. Ele usa a API do Twitter, a mesma API usada em um site.
Usei o twint para descartar tweets, mas ele contém muitos erros e não funciona corretamente. O código não era simples de entender. Todas as tarefas possuem uma configuração e o usuário deve saber o parâmetro exato. A última coisa importante é o fato de que a API pode mudar – o Twitter é o dono da API e as mudanças dependem disso. É irritante quando algo não funciona e os usuários devem relatar bugs como problemas.
pip install -U stweet
Se você quiser me patrocinar, em agradecimento pelo projeto, envie-me alguma criptografia?:
Moeda | Endereço da carteira |
---|---|
Bitcoin | 3EajE9DbLvEmBHLRzjDfG86LyZB4jzsZyg |
Éter | 0xE43d8C2c7a9af286bc2fc0568e2812151AF9b1FD |
Para fazer um pedido simples a tarefa de sucata deve estar preparada. A tarefa deve ser processada por **runner**.
import stweet as st
def try_search ():
search_tweets_task = st . SearchTweetsTask ( all_words = '#covid19' )
output_jl_tweets = st . JsonLineFileRawOutput ( 'output_raw_search_tweets.jl' )
output_jl_users = st . JsonLineFileRawOutput ( 'output_raw_search_users.jl' )
output_print = st . PrintRawOutput ()
st . TweetSearchRunner ( search_tweets_task = search_tweets_task ,
tweet_raw_data_outputs = [ output_print , output_jl_tweets ],
user_raw_data_outputs = [ output_print , output_jl_users ]). run ()
def try_user_scrap ():
user_task = st . GetUsersTask ([ 'iga_swiatek' ])
output_json = st . JsonLineFileRawOutput ( 'output_raw_user.jl' )
output_print = st . PrintRawOutput ()
st . GetUsersRunner ( get_user_task = user_task , raw_data_outputs = [ output_print , output_json ]). run ()
def try_tweet_by_id_scrap ():
id_task = st . TweetsByIdTask ( '1447348840164564994' )
output_json = st . JsonLineFileRawOutput ( 'output_raw_id.jl' )
output_print = st . PrintRawOutput ()
st . TweetsByIdRunner ( tweets_by_id_task = id_task ,
raw_data_outputs = [ output_print , output_json ]). run ()
if __name__ == '__main__' :
try_search ()
try_user_scrap ()
try_tweet_by_id_scrap ()
O exemplo acima mostra que são necessárias poucas linhas de código para descartar tweets.
Stweet usa API do site, portanto não há documentação sobre o recebimento de resposta. A resposta está sendo salva como bruta, então o usuário final deve analisá-la por conta própria. Talvez o analisador seja adicionado ao recurso.
Os dados descartados podem ser exportados de diferentes maneiras usando a classe abstrata RawDataOutput
. A lista dessas saídas pode ser passada em cada executor – sim, é possível exportar de duas maneiras diferentes.
Atualmente, a sweet implementou:
A biblioteca é integrada ao tor-python-easy. Ele permite usar o proxy tor com porta de controle exposta – para alterar o ip quando necessário.
Se você quiser usar o cliente proxy tor, precisará preparar o cliente web personalizado e usá-lo no runner.
Você precisa executar o proxy - você pode executá-lo em seu sistema operacional local ou pode usar este docker-compose.
O trecho de código abaixo mostra como usar o proxy:
import stweet as st
if __name__ == '__main__' :
web_client = st . DefaultTwitterWebClientProvider . get_web_client_preconfigured_for_tor_proxy (
socks_proxy_url = 'socks5://localhost:9050' ,
control_host = 'localhost' ,
control_port = 9051 ,
control_password = 'test1234'
)
search_tweets_task = st . SearchTweetsTask ( all_words = '#covid19' )
output_jl_tweets = st . JsonLineFileRawOutput ( 'output_raw_search_tweets.jl' )
output_jl_users = st . JsonLineFileRawOutput ( 'output_raw_search_users.jl' )
output_print = st . PrintRawOutput ()
st . TweetSearchRunner ( search_tweets_task = search_tweets_task ,
tweet_raw_data_outputs = [ output_print , output_jl_tweets ],
user_raw_data_outputs = [ output_print , output_jl_users ],
web_client = web_client ). run ()
O Twitter no cliente convidado bloqueia paginação múltipla. Às vezes, em uma consulta é possível solicitar 3 paginações. Para evitar esta limitação, divida o período de sucateamento para peças menores.
O Twitter em 2023 bloqueia a API colocando o intervalo de tempo no carimbo de data/hora – apenas o formato AAAA-MM-DD é aceitável. Na seta você só pode colocar tempo sem horas.
Uma pequena parte da biblioteca usa código do twint. Twint também foi a principal inspiração para criar doces.