Если вы писали в Твиттере о технологиях и использовали хэштеги, такие как «# 100DaysOfCode», «# 30DaysOfCode», «dotnet», «csharp», «python» или любой другой хэштег, связанный с технологиями, вы могли заметить, что ваш Твиты мгновенно ретвитируются некоторыми интересными аккаунтами.
При ближайшем рассмотрении они кажутся ботами, которые ретвитят определенные хэштеги. Теперь вам может быть любопытно. Как создать собственного ретвит-бота? Что ж, сначала давайте начнем с важного вопроса. Зачем делать собственного ретвит-бота?
Зачем делать ретвит-бота в Твиттере?
- Они делают крутой личный проект, которым можно хвастаться перед работодателями, не опасаясь какого-либо соглашения о неразглашении.
- Это отличный способ автоматически сделать свое имя или бренд более заметным для других разработчиков в Twitter.
- Это отличная возможность для обучения.
- Вы помогаете платформам своих коллег-разработчиков, поскольку люди, скорее всего, начнут подписываться на вашего бота в Twitter.
Если вам нравится какая-либо из этих причин, и вы хотите изучить основы создания ретвит-бота с помощью Python и библиотеки с названием tweepy, то читайте дальше!
Шаг 1. Создайте новую учетную запись Twitter для ретвит-бота и зарегистрируйтесь в программе для разработчиков Twitter.
Мы начнем с создания новой учетной записи Twitter для вашего ретвит-бота. Это помогает добавить изображение профиля, короткую биографию со ссылкой на репозиторий github вашего бота и заголовок профиля, чтобы сделать его более представительным.
После создания новой учетной записи перейдите на платформу разработчика Twitter (войдя в учетную запись своего бота) и зарегистрируйтесь, нажав кнопку Применить в правом верхнем углу. Он задаст вам множество вопросов, от того, для бизнеса или личного использования, а также попросит вас указать номер телефона.
После этого вы сможете получить доступ к панели инструментов.
Шаг 2. Создайте новый проект
Следующий шаг - нажать на эту красивую блестящую кнопку «Создать проект». Он попросит вас назвать проект, спросит, для чего вы используете этот проект, попросит у вас небольшое описание проекта, а затем попросит вас назвать свое приложение (вы можете создать множество приложений для каждого проекта, поэтому назовите его соответствующим образом.) После этого вы должны быть перенаправлены на этот экран:
На этом экране возьмите свой ключ API и секретный ключ API и сохраните его где-нибудь. Примечание. НЕ публикуйте публично свой ключ API и секретный ключ и не передавайте их неавторизованным лицам ни при каких обстоятельствах. Если вы это сделаете, вам следует быстро восстановить свои ключи и секретные ключи.
После этого вы теперь можете видеть свой проект и приложение в меню в левой части экрана. Разверните кнопку и щелкните свое приложение. В моем случае я назвал свое приложение «LQ RT Bot».
Теперь вы должны увидеть этот экран:
Если в разрешениях приложения указано: «Только для чтения», нажмите «Изменить» и убедитесь, что у него есть разрешения на чтение и запись. После этого перейдите в «Ключи и токены» и создайте новый токен доступа и секрет токена доступа.
Отложите их вместе со своим ключом API и секретом ключа API, они понадобятся вам позже. Примечание. НЕ публикуйте свой токен доступа или секретный ключ доступа и не передавайте их неавторизованным лицам. Если вы подозреваете, что ваш токен / секрет был взломан, создайте их заново.
Шаг 3. Настройка виртуальной среды
Следующим шагом в создании ретвит-бота является настройка. Мы будем использовать удобный модуль виртуальной среды Python, чтобы убедиться, что все остается согласованным, на случай, если вы когда-нибудь захотите загрузить его на сервер. Откройте свой любимый командный терминал (я делаю это в Windows, поэтому все будет работать в соответствии с командами терминала Windows CMD. Обратитесь к этой странице, чтобы узнать, что вам нужно для Mac или Linux), перейдите туда, где вы хотите начать кодирование и убедитесь, что у вас есть venv, выполнив команду:
python -m pip install --user virtualenv
Если у вас уже установлена виртуальная среда, выполните эту команду:
python -m venv venv
Это должно создать папку с именем «venv» (я знаю, что было глупо писать venv дважды в последней команде, вторая называет папку.) Внутри этой папки находятся еще три папки и файл конфигурации. Теперь нам просто нужно активировать виртуальную среду. Если вы используете Windows Powershell, пропустите этот шаг, но если вы используете Windows CMD, выполните:
powershell
Это позволит вам использовать возможности PowerShell при использовании обычной командной строки Windows. Теперь мы можем выполнить команду:
venv/Scripts/activate
Если у вас все получилось, теперь в начале каждой строки должна стоять «(venv)».
Шаг 4. Установка зависимостей и создание файлов зависимостей
Следующим шагом после активации venv является окончательная установка наших зависимостей. Это делается путем выполнения команды:
python -m pip install tweepy
Это установит tweepy, библиотеку python для легкого доступа к Twitter API. Мы также продолжим и установим python-dotenv, выполнив команду:
python -m pip install python-dotenv
Мы будем использовать python-dotenv для хранения некоторых переменных среды. Для этого мы могли бы использовать скрипт активации venv, но для простоты в этом уроке мы будем использовать именно его.
После установки ваших зависимостей мы сохраним их в файле с именем requirements.txt с помощью команды:
pip freeze > requirements.txt
Это сделает так, что вам больше не придется вручную загружать все свои зависимости одну за другой, если вы решите развернуть это где-то еще, помимо того, что это будет довольно хорошей практикой.
Шаг 5. Время писать код
Теперь пришло время, которого мы все ждали, время написать код. Откройте свой любимый инструмент кодирования и откройте папку, которую мы создали для этого проекта. В моем случае я буду использовать Visual Studio Code.
Создайте файл с именем .env в базовом каталоге проекта. Помните те ключи API и токены доступа, которые мы отложили? Здесь мы их и будем размещать. Назовите их соответствующим образом, затем поставьте знак равенства и значение.
In .env twitter_api_key=<YOUR API KEY HERE> twitter_api_secret=<YOUR API SECRET HERE> twitter_access_token=<YOUR ACCESS TOKEN HERE> twitter_access_token_secret=<YOUR ACCESS TOKEN SECRET HERE>
После этого мы создадим файл с именем bot.py и будем использовать его для написания нашего кода для аутентификации / входа в систему.
Начнем с импорта наших зависимостей и переменных среды. Импорт таких переменных среды необязателен, но в результате он делает код немного более читаемым и чистым.
in bot.py # import dependencies import tweepy import os from dotenv import load_dotenv # load our .env file to make use of the environment variables load_dotenv() # import and assign our environment variables API_KEY = os.getenv('twitter_api_key') API_SECRET = os.getenv('twitter_api_secret') ACCESS_TOKEN = os.getenv('twitter_access_token') TOKEN_SECRET = os.getenv('twitter_token_secret')
Затем мы собираемся создать экземпляр обработчика аутентификации tweepy, используя ключ api и секрет api. После этого мы установим токен доступа в нашем обработчике аутентификации, используя наш токен доступа и секрет токена, чтобы завершить процесс аутентификации. Как только это будет сделано, мы сможем создать новый объект API-интерфейса tweepy, используя созданный нами объект обработчика аутентификации.
in bot.py # import dependencies import tweepy import os from dotenv import load_dotenv # load our .env file to make use of the environment variables load_dotenv() # import and assign our environment variables API_KEY = os.getenv('twitter_api_key') API_SECRET = os.getenv('twitter_api_secret') ACCESS_TOKEN = os.getenv('twitter_access_token') TOKEN_SECRET = os.getenv('twitter_token_secret') # instantiate oauth handler and set access token twitter_oauth = tweepy.OAuthHandler(API_KEY, API_SECRET) twitter_oauth.set_access_token(ACCESS_TOKEN, TOKEN_SECRET) # instantiate tweepy api object using the authentication handler object twitter_api = tweepy.API(twitter_oauth)
Теперь вам может быть интересно, как узнать, все ли вы сделали правильно до сих пор. Мы можем протестировать, сообщив нам об этом с помощью нашего нового объекта API-интерфейса tweepy. У объекта API есть метод с именем «verify_credentials», который либо вернет кучу данных с информацией о том, какой пользователь вошел в систему, либо вернет ошибку. Поместите это в блок try с блоком except, улавливающим «tweepy.TweepError», за которым следует последний блок except, чтобы уловить что-нибудь еще, что могло пойти не так.
in bot.py # import dependencies import tweepy import os from dotenv import load_dotenv # load our .env file to make use of the environment variables load_dotenv() # import and assign our environment variables API_KEY = os.getenv('twitter_api_key') API_SECRET = os.getenv('twitter_api_secret') ACCESS_TOKEN = os.getenv('twitter_access_token') TOKEN_SECRET = os.getenv('twitter_token_secret') # instantiate oauth handler and set access token twitter_oauth = tweepy.OAuthHandler(API_KEY, API_SECRET) twitter_oauth.set_access_token(ACCESS_TOKEN, TOKEN_SECRET) # instantiate tweepy api object using the authentication handler object twitter_api = tweepy.API(twitter_oauth) # attempt credential verification. prints exception if something is wrong try: print(twitter_api.verify_credentials()) print("Successfully logged in") except tweepy.TweepError as e: print(e) except Exception as e: print(e)
Теперь мы можем запустить bot.py и посмотреть, какие результаты мы получим. Если все прошло успешно, вы должны получить огромное сообщение, которое расскажет вам все об учетной записи, в которую вошел tweepy. Если что-то не так, консоль должна сообщить вам, что происходит (обычно это связано с неправильным ключом api, секретом, токеном и т. Д.).
Если ваша аутентификация прошла успешно, мы можем перейти к захватывающей части: получать твиты и ретвитнуть их.
Создайте новый файл с именем streamlistener.py и начните с импорта tweepy. В этом файле мы будем хранить всю нашу логику для обработки каждого твита. После этого мы создадим новый класс с именем «StreamListener», и он будет принимать параметр «tweepy.StreamListener».
in streamlistener.py # import dependencies import tweepy # create new class "StreamListener" # takes in tweepy.StreamListener as a parameter class StreamListener(tweepy.StreamListener): def __init__(self, api): self.api = api self.me = api.me()
Далее мы собираемся определить две функции: on_status и on_error. Функция on_status будет содержать логику того, что мы делаем с каждым твитом, который мы получаем от слушателя потока. Функция on_error будет содержать логику того, что произойдет, если что-то пойдет не так.
in streamlistener.py # import dependencies import tweepy # create new class "StreamListener" # takes in tweepy.StreamListener as a parameter class StreamListener(tweepy.StreamListener): def __init__(self, api): self.api = api self.me = api.me() # the function containing the logic on what to do for each tweet def on_status(self, tweet): # We only want the bot to retweet original tweets, not replies. # We also don't want the bot to retweet itself if tweet.in_reply_to_status_id is not None or \ tweet.use.id == self.me.id: return # If we haven't retweeted this tweet yet, retweet it if not tweet.retweeted: try: tweet.retweet() print("Tweet retweeted successfully") except Exception as e: print(e) # the function containing the logic in case there is an error def on_error(self, status): print(f"Error while retweeting: {status}")
В функции on_status мы хотим игнорировать любые твиты, являющиеся ответами на другие твиты, и мы хотим, чтобы бот игнорировал свои собственные ретвиты. Для этого мы просто проверяем эти условия и просто «возвращаем», если они верны. После этого мы проверяем, ретвитнули ли мы этот твит, и если нет, мы используем метод retweet (), доступный для объекта твита, для ретвита этого твита.
Кстати, некоторые боты также добавляют твит в избранное, когда ретвитят его. Если вам также нужна эта функциональность, вы просто проверяете, добавили ли вы твит в избранное, так же, как вы проверяете ретвиты, а затем используете метод favourite (), доступный для объекта твита.
# the function containing the logic on what to do for each tweet def on_status(self, tweet): # We only want the bot to retweet original tweets, not replies. # We also don't want the bot to retweet itself if tweet.in_reply_to_status_id is not None or \ tweet.use.id == self.me.id: return # If we haven't retweeted this tweet yet, retweet it if not tweet.retweeted: try: tweet.retweet() print("Tweet retweeted successfully") except Exception as e: print(e) # If we haven't favorited this tweet yet, favorite it if not tweet.favorited: try: tweet.favorite() print("Tweet favorited successfully") except Exception as e: print(e)
Теперь, когда мы закончили работу с этим файлом, мы можем использовать его в нашем файле bot.py. Импортируйте класс StreamListener и создайте экземпляр нового объекта StreamListener. Передайте объект API Twitter в качестве параметра. После этого мы собираемся создать экземпляр объекта tweepy.Stream, передав параметр auth нашего Twitter API и новый объект StreamListener.
После этого мы используем метод filter (), доступный для класса tweepy.Stream, передавая 'track = [«# 100DaysOfCode», «#AnotherHashtagWeMightWannaTrack»]', чтобы сигнализировать, что мы хотим отслеживать эти конкретные хэштеги / результаты поиска и ' languages = [«en», «MaybeSomeOtherLanguage»] ', чтобы указать, что нам нужны твиты только на английском и, возможно, на другом конкретном языке. Ваш bot.py теперь должен выглядеть примерно так:
in bot.py # import dependencies import tweepy import os from dotenv import load_dotenv from streamlistener import StreamListener <-- Make sure to have this # load our .env file to make use of the environment variables load_dotenv() # import and assign our environment variables API_KEY = os.getenv('twitter_api_key') API_SECRET = os.getenv('twitter_api_secret') ACCESS_TOKEN = os.getenv('twitter_access_token') TOKEN_SECRET = os.getenv('twitter_token_secret') # instantiate oauth handler and set access token twitter_oauth = tweepy.OAuthHandler(API_KEY, API_SECRET) twitter_oauth.set_access_token(ACCESS_TOKEN, TOKEN_SECRET) # instantiate tweepy api object using the authentication handler object twitter_api = tweepy.API(twitter_oauth) # attempt credential verification. prints exception if something is wrong try: print(twitter_api.verify_credentials()) print("Successfully logged in") except tweepy.TweepError as e: print(e) except Exception as e: print(e) # instantiate a StreamListener object tweets_listener = StreamListener(twitter_api) # instantiate a tweepy.Stream object tweet_stream = tweepy.Stream(twitter_api.auth, tweets_listener) # Use the filter method tweet_stream.filter(track=["#100DaysOfCode", "#30DaysOfCode"], languages=["en"])
На этом этапе вы должны иметь возможность запустить «python bot.py» в своем терминале, и он войдет в систему и начнет ретвитить и добавлять в избранное.
Заключение
Это лишь верхушка айсберга, когда дело доходит до того, что вы можете делать с этим ботом. Вы можете добавить дополнительную логику к методу on_status StreamListener, чтобы выполнять такие действия, как фильтрация других пользователей-ботов или определение на основе чьего-либо профиля, хотите ли вы ретвитнуть его твит (пытаясь реализовать фильтр, который пытается идентифицировать описания, принадлежащие злонамеренным пользователям) .
Если вы нашли это руководство особенно полезным, не стесняйтесь заглядывать в @LiquetBot в Твиттере, Репозиторий Liquet Bot на Github, Мой Ko-Fi или подписывайтесь на меня в среде, чтобы увидеть больше подобных статей. Для получения дополнительной информации о tweepy ознакомьтесь с учебником, который я использовал, чтобы создать своего собственного бота, или посетите официальный сайт tweepy! Спасибо, что прочитали мою статью!