Package: tweepy-self
Tweepy-selfA modern, easy to use, feature-rich, and async ready API wrapper for Twitter's user API written in Python.Docs (soon)More libraries of the family:better-proxybetter-web3Отдельное спасибоКузнице Ботовза код для авторизации и разморозки! Подписывайтесь на их Telegram :)Key FeaturesModern Pythonic API using async and await.Prevents user account automation detection.Installingpipinstalltweepy-selfExampleimportasyncioimporttwitteraccount=twitter.Account(auth_token="auth_token")asyncdefmain():asyncwithtwitter.Client(account)astwitter_client:awaittwitter_client.tweet("Hello, tweepy-self! <3")asyncio.run(main())MoreAutomating user accounts is against the Twitter ToS. This library is a proof of concept and I cannot recommend using it. Do so at your own riskДокументация (устаревшая)Код ушел немного дальше, чем эта документация.Библиотека позволяет работать с неофициальным API Twitter, а именно:ЛогинАнлокПривязывать сервисы (приложения).Устанавливать статус аккаунта (бан, лок).Загружать изображения на сервер и изменять баннер и аватарку.Изменять данные о пользователе: имя, описание профиля и другое.Изменять имя пользователя и пароль.Запрашивать информацию о подписчиках.Запрашивать некоторую информацию о пользователе (количество подписчиков и другое).Голосовать.Подписываться и отписываться.Лайкать и дизлайкать.Твиттить, ретвиттить с изображением и без.Закреплять твиты.Запрашивать твиты пользователей.Удалять твиты.И другое.Статус аккаунтаПосле любого взаимодействия с Twitter устанавливается статус аккаунта:BAD_TOKEN- Неверный токен.UNKNOWN- Статус аккаунта не установлен.SUSPENDED- Действие учетной записи приостановлено (бан).LOCKED- Учетная запись заморожена (лок) (требуется прохождение капчи).GOOD- Аккаунт в порядке.Не каждое взаимодействие с Twitter достоверно определяет статус аккаунта.
Например, простой запрос данных об аккаунте честно вернет данные, даже если ваш аккаунт заморожен.Для достоверной установки статуса аккаунта используйте методestablish_status()Примеры работыЗапрос информации о пользователе:# Запрос информации о текущем пользователе:me=awaittwitter_client.request_user_data()print(f"[{account.short_auth_token}]{me}")print(f"Аккаунт создан:{me.created_at}")print(f"Following (подписан ты):{me.followings_count}")print(f"Followers (подписаны на тебя):{me.followers_count}")print(f"Прочая информация:{me.raw_data}")# Запрос информации об ином пользователе:elonmusk=awaittwitter.request_user_data("@elonmusk")print(elonmusk)Смена имени пользователя и пароля:account=twitter.Account("auth_token",password="password")...awaittwitter_client.change_username("new_username")awaittwitter_client.request_user_data()print(f"New username:{account.data.username}")awaittwitter_client.change_password("new_password")print(f"New password:{account.password}")print(f"New auth_token:{account.auth_token}")Смена данных профиля:awaittwitter_client.update_birthdate(day=1,month=12,year=2000)awaittwitter_client.update_profile(# Locks account!name="New Name",description="New description",location="New York",website="https://github.com/alenkimov/better_automation",)Загрузка изображений и смена аватара и баннера:image=open(f"image.png","rb").read()media_id=awaittwitter_client.upload_image(image)avatar_image_url=awaittwitter_client.update_profile_avatar(media_id)banner_image_url=awaittwitter_client.update_profile_banner(media_id)Привязка сервиса (приложения):# Изучите запросы сервиса и найдите подобные данные для авторизации (привязки):bind_data={'response_type':'code','client_id':'TjFVQm52ZDFGWEtNT0tKaktaSWU6MTpjaQ','redirect_uri':'https://waitlist.lens.xyz/tw/','scope':'users.read tweet.read offline.access','state':'state',# Может быть как статичным, так и динамическим.'code_challenge':'challenge','code_challenge_method':'plain'}bind_code=awaittwitter_client.oauth_2(**bind_data)# Передайте код авторизации (привязки) сервису.# Сервис также может потребовать state, если он динамический.Отправка сообщения:bro=awaittwitter_client.request_user_data("@username")awaittwitter_client.send_message(bro.id,"I love you!")Запрос входящих сообщений:messages=awaittwitter_client.request_messages()formessageinmessages:message_data=message["message_data"]recipient_id=message_data["recipient_id"]sender_id=message_data["sender_id"]text=message_data["text"]print(f"[id{sender_id}] -> [id{recipient_id}]:{text}")Другие методы:# Выражение любви через твитtweet_id=awaittwitter_client.tweet("I love YOU! !!!!1!1")print(f"Любовь выражена! Tweet id:{tweet_id}")print(f"Tweet is pined:{awaittwitter_client.pin_tweet(tweet_id)}")# Лайкprint(f"Tweet{tweet_id}is liked:{awaittwitter_client.like(tweet_id)}")# Репост (ретвит)print(f"Tweet{tweet_id}is retweeted. Tweet id:{awaittwitter_client.repost(tweet_id)}")# Коммент (реплай)print(f"Tweet{tweet_id}is replied. Reply id:{awaittwitter_client.reply(tweet_id,'tem razão')}")# Подписываемся на Илона Маскаprint(f"@{elonmusk.username}is followed:{awaittwitter_client.follow(elonmusk.id)}")# Отписываемся от Илона Маскаprint(f"@{elonmusk.username}is unfollowed:{awaittwitter_client.unfollow(elonmusk.id)}")tweet_url='https://twitter.com/CreamIce_Cone/status/1691735090529976489'# Цитата (Quote tweet)quote_tweet_id=awaittwitter_client.quote(tweet_url,'oh....')print(f"Quoted! Tweet id:{quote_tweet_id}")# Запрашиваем первых трех подписчиков# (Параметр count по каким-то причинам работает некорректно)followers=awaittwitter_client.request_followers(count=20)print("Твои подписчики:")forfollowerinfollowers:print(follower)