Как создать Twitter-бот с Python 3 и библиотекой Tweepy

Вступление

Twitterbot - это программа, которая интегрируется с платформой Twitter, автоматически публикуя сообщения, ретвиты, лайки или подписку на других пользователей. Twitterbots могут оказаться полезными, предоставляя интересную информацию или обновления, и они также могут быть веселыми или юмористическими.

При создании Twitter-ботов важно проявлять осторожность, поскольку не только домогательства и спам не устраивают, но и приводят к приостановке аккаунта вашего Twitter-бота за нарушение Условий предоставления услуг Twitter. Перед созданием бота Twitter вы должны ознакомиться с его Automation rules и передовыми методами, чтобы убедиться, что ваш Twitterbot является хорошим участником сообщества Twitter.

Этот учебник проведет вас через две программы Twitterbot, одна из которых https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3-and-the-tweepy-library# twitterbot-that-tweets-from-file [твиты из файла] и тот, который https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3 -and-the-tweepy-library # twitterbot-that-retweets, -follows, -and-Favorites [ретвиты, подписки и избранное]. Кроме того, мы пройдем через storing ваши учетные данные в отдельном файле программы и https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3-and-the-tweepy-library#keeping- the-twitterbot-running [поддержание работы Twitterbot на сервере]. Каждый из этих шагов не является обязательным, но они представлены в том порядке, в котором вы их выполняете.

Предпосылки

Хотя вы можете использовать локальный компьютер для настройки и запуска бота Twitter, если вы хотите, чтобы он работал постоянно, https://www.digitalocean.com/community/tutorials/how-to-install-python-3- и-set-up-a-program-environment-on-an-ubuntu-16-04-server [среда программирования Python на сервере] была бы идеальной для этого проекта.

Кроме того, у вас должна быть учетная запись https://twitter.com [Twitter], связанная с действительным номером телефона, который вы можете добавить в разделе * https: //twitter.com/settings/devices [Mobile] * ваши * настройки *, когда вы вошли в систему. Вам нужно будет создать приложение Twitter и установить библиотеку Python Tweepy, что вы можете сделать, следуя нашим «https://www.digitalocean.com/community/tutorials/how-to-create-a-twitter-app [ Как создать приложение для Twitter] ». Прежде чем приступить к изучению данного руководства, вы должны иметь свой ключ потребителя, секрет потребителя, токен доступа и секрет токена в руке.

В рамках этого проекта мы будем использовать Python для чтения файлов. Чтобы ознакомиться с работой с текстовыми файлами в Python, вы можете прочитать наш «https://www.digitalocean.com/community/tutorials/how-to-handle-plain-text-files-in-python-3[How To Обработка простых текстовых файлов в Python 3].

Хранение учетных данных

Вы можете хранить свой ключ потребителя в Twitter, секретный ключ пользователя, токен доступа и секретный ключ доступа в верхней части файла программы, но для оптимальной практики мы должны хранить их в отдельном файле Python, к которому могут обращаться наши основные программные файлы. , Любой, кто имеет доступ к этим strings, может использовать вашу учетную запись Twitter, поэтому вы не хотите делиться ими или сделать их публичными. Помимо безопасности, хранение отдельного файла может позволить нам легко получить доступ к нашим учетным данным в каждом создаваемом нами файле программы.

Для начала мы должны убедиться, что мы находимся в нашей виртуальной среде с установленной библиотекой Tweepy. После активации среды мы можем создать каталог для нашего проекта, чтобы он был организован:

mkdir twitterbot
cd twitterbot

Далее, давайте откроем текстовый редактор, такой как nano, и создадим файл + credentials.py + для хранения этих учетных данных:

nano credentials.py

Мы создадим variables для каждого ключа, секрета и токена, которые мы сгенерировали (если вам нужно создать их, следуйте https://www.digitalocean.com/community/tutorials/how-to-create-a-twitter-app#step-2-%E2%80%94-modify-your-application%E2%80 Токены% 99s-уровень-уровня-и-генерировать ваш-доступ [эти шаги]. Замените элементы в одинарных кавычках вашими уникальными строками с веб-сайта приложений Twitter (и оставьте одинарные кавычки).

credentials.py

consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''

Мы будем вызывать эти переменные в других наших программных файлах. Создание этого отдельного файла + credentials.py также позволяет нам добавить его в ваш файл` + .gitignore` на случай, если мы планируем выпустить наш код через Git.

Twitterbot, который твитит из файла

Мы можем использовать способность Python для обработки и чтения из файлов, чтобы обновить наш статус в Twitter. В этом примере мы будем использовать файл, который уже существует, но вы можете создать свой собственный файл или изменить существующий файл.

Настройка файла программы

Давайте начнем с создания файла нашей программы с помощью текстового редактора, такого как nano:

nano twitterbot_textfile.py

Далее, давайте настроим наши учетные данные Twitter, либо добавив их в начало нашего файла, либо импортировав то, что мы сохранили в файле + credentials.py +, который мы установили в https://www.digitalocean.com/community. / tutorials / how-to-create-a-twitterbot-with-python-3-and-the-tweepy-library # storing-credentials [раздел выше]. Мы также добавим 3 строки для взаимодействия с учетными переменными через библиотеку Tweepy.

twitterbot_textfile.py

# Import our Twitter credentials from credentials.py
from credentials import *

# Access and authorize our Twitter credentials from credentials.py
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

Чтобы узнать больше об этой настройке, обязательно посмотрите «https://www.digitalocean.com/community/tutorials/how-to-create-a-twitter-app#step-4-%E2%80». % 94-create-a-python-application-that-взаимодействует-с-твиттером [Как создать приложение Twitter] ». Чтобы узнать больше об OAuth, вы можете прочитать https://www.digitalocean.com/community/ учебные пособия / введение в oauth-2 [наше введение].

Получение текстового файла для чтения из

Для этого Twitterbot нам понадобится текстовый файл для чтения, поэтому давайте загрузим его из Project Gutenberg, волонтерского проекта, который предоставляет бесплатные электронные книги (в основном в открытом доступе) для читателей. Давайте сохраним перевод Жюля Верна _http: //www.gutenberg.org/ebooks/164 [Двадцать тысяч лиг под морем] _ в файл с именем + verne.txt + и + curl +:

curl http://www.gutenberg.org/cache/epub/164/pg164.txt --output verne.txt

Мы будем использовать возможности обработки файлов в Python, сначала по адресу https://www.digitalocean.com/community/tutorials/how-to-handle-plain-text-files-in-python-3#step-2-%E2 % 80% 94-открытие-файл [открыть файл], затем на https://www.digitalocean.com/community/tutorials/how-to-handle-plain-text-files-in-python-3# step-3-% E2% 80% 94-чтение файла [чтение строк из файла] и, наконец, https://www.digitalocean.com/community/tutorials/how-to-handle-plain-text -files-in-python-3 # step-5-% E2% 80% 94-close-a-file [закрыть файл].

Открытие и чтение файла с помощью Python

Загрузив наш файл, мы можем создавать переменные и добавлять соответствующие функции под строками, которые мы только что настроили для обработки учетных данных.

twitterbot_textfile.py

from credentials import *

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# Open text file verne.txt (or your chosen file) for reading


# Read lines one by one from my_file and assign to file_lines variable


# Close file

С этой настройкой мы можем теперь работать над добавлением кода, чтобы эти строки выводились как обновления статуса в нашей учетной записи Twitter.

Чирикать строки из текстового файла

С нашими строками файлов, хранящимися в переменной, мы готовы обновить вашу учетную запись Twitter Bot.

Мы будем использовать библиотеку Tweepy для взаимодействия с API Twitter, поэтому нам следует import библиотеки в нашу программу.

Мы также собираемся автоматизировать наш Твиттер на основе времени, поэтому мы должны импортировать модуль «+ время ». В наших целях мы будем использовать только функцию ` sleep () +`, поэтому мы импортируем только этот конкретный метод.

twitterbot_textfile.py

# Add all import statements at top of file


from credentials import *
...

Обновления статуса нашей учетной записи Twitter будут поступать из строк + verne.txt +, которые мы присвоили переменной + file_lines +. Эти строки необходимо перебрать, поэтому мы начнем с создания https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-in-python-3 [+ for + цикл]. Чтобы убедиться, что все работает, давайте используем функцию + print () + для вывода этих строк:

twitterbot_textfile.py

import tweepy
from time import sleep
from credentials import *

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

my_file=open('verne.txt','r')
file_lines=my_file.readlines()
my_file.close()

# Create a for loop to iterate over file_lines

Если вы запустите программу в этот момент с помощью команды + python twitter_textfile.py +, вы увидите весь файл + verne.txt +, выведенный в окно вашего терминала, так как у нас нет другого кода или мы вызываем его для остановки.

Вместо того, чтобы получать выходные данные в нашем терминальном окне, мы хотим, чтобы каждая строка стала новым твитом. Для этого нам понадобится функция tweepy + api.update_status () +. Это используется для обновления статуса аутентифицированного пользователя, но будет обновляться только в том случае, если статус: 1) не дубликат или 2) 140 символов или менее.

Давайте добавим эту функцию и передадим в нее переменную + line +:

twitterbot_textfile.py

import tweepy
from time import sleep
from credentials import *

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

my_file=open('verne.txt','r')
file_lines=my_file.readlines()
my_file.close()

for line in file_lines:
   print(line)

Теперь наша программа настроена для чирикания строк в нашем аккаунте.

Обработка исключений и тайминги

С работающей программой в этот момент, если мы запустим код, будет напечатана первая строка. Однако мы не уйдем далеко, пока не получим ошибку:

Output...
tweepy.error.TweepError: [{'code': 170, 'message': 'Missing required parameter: status.'}]

Это связано с тем, что вторая строка в файле является пустой строкой, которую нельзя использовать в качестве статуса. Чтобы решить эту проблему, давайте напечатаем только строку, если она не пустая. Мы добавим оператор + if, который выглядит следующим образом:

if line != '\n':

В Python + \ n + является символом escape для пустых строк, поэтому наш оператор + if + говорит программе, что если строка не равна (+! = +) пустой строке, то мы должны продолжить и напечатать ее. В противном случае Python должен игнорировать строку. Мы рассмотрим заявление в контексте чуть ниже.

Еще одну вещь, которую мы должны добавить, это + sleep () +, чтобы гарантировать, что эти твиты не выходят сразу. Функция + sleep () + работает с единицей измерения времени в секундах, поэтому, если мы хотим, чтобы между твитами был час, мы должны написать функцию как + sleep (3600) +, потому что в часе есть 3600 секунд.

Для наших целей тестирования (и только для наших целей тестирования) давайте использовать 5 секунд. После того, как мы регулярно запускаем наш Twitterbot, мы хотим значительно увеличить время между твитами.

Вы можете поиграть с тем, где вы добавили + sleep (5) + - там, где мы разместили его ниже, будет немного больше задержки между твитами, поскольку будет задержка, даже если строка пуста.

twitterbot_textfile.py

import tweepy
from time import sleep
from credentials import *

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

my_file=open('verne.txt','r')
file_lines=my_file.readlines()
my_file.close()

for line in file_lines:
 print(line)

# Add if statement to ensure that blank lines are skipped

     api.update_status(line)

# Add an else statement with pass to conclude the conditional statement



# Add sleep method to space tweets by 5 seconds each

Когда вы запустите программу на этом этапе - если вы не запускали программу раньше - вы начнете получать на своем терминале вывод первых строк файла. Эти строки также будут опубликованы в вашей аутентифицированной учетной записи Twitter.

Однако, если вы уже запустили программу, вы можете получить следующую ошибку:

Outputtweepy.error.TweepError: [{'code': 187, 'message': 'Status is a duplicate.'}]

Вы можете исправить это, удалив либо ваш предыдущий твит из учетной записи Twitter, либо удалив первую строку вашего файла + verne.txt + и сохранив его.

Чтобы программа не выводила обновления статуса в вашу учетную запись Twitter, удерживайте одновременно клавиши + CTRL + (или + control +) и + C + на клавиатуре, чтобы прервать процесс в окне терминала.

На этом этапе ваша программа может работать, но давайте обработаем ту ошибку, которую мы получаем, когда статус дублируется. Для этого мы добавим `+ try …​ исключая + `block для нашего кода, и пусть консоль распечатает причину ошибки.

twitterbot_textfile.py

import tweepy
from time import sleep
from credentials import *

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

my_file=open('verne.txt','r')
file_lines=my_file.readlines()
my_file.close()

for line in file_lines:
# Add try ... except block to catch and output errors

       print(line)
       if line != '\n':
           api.update_status(line)
       else:
           pass


   sleep(5)

При запуске программы теперь будут обрабатываться исключения, чтобы вы могли поддерживать ее работу. Вы можете изменить время между твитами, скажем, до 15 минут, изменив функцию + sleep (5) + на + sleep (900) +.

Улучшение программы Twitterbot

Чтобы продолжить улучшать вашу программу, вы можете рассмотреть определение некоторых из этих блоков кода как функций и добавление дополнительных функций + sleep () + для обработки различных ситуаций, например:

twitterbot_textfile.py

...
# Tweet a line every 15 minutes

   for line in file_lines:
       try:
            print(line)
            if line != '\n':
                api.update_status(line)

            else:
               pass
       except tweepy.TweepError as e:
           print(e.reason)

Продолжая работать с файлами в Python, вы можете создавать отдельные сценарии для разбиения строк ваших файлов таким образом, чтобы это имело больший смысл, учитывая ограничение на количество твитов в 140 символов.

На данный момент у нас есть полнофункциональный Twitterbot, который отправляет твиты из исходного файла. В следующем разделе мы рассмотрим альтернативного бота Twitter, который ретвитит, подписан и избранным. Вы также можете перейти к разделу на https://www.digitalocean.com/community/tutorials/how-to-create-a-twitterbot-with-python-3-and-the-tweepy-library#keeping-the -twitterbot-running [Поддержание Twitterbot в рабочем состоянии].

Twitterbot, который ретвитит, подписан и избранным

Используя библиотеку Tweepy, мы можем настроить Twitter-бота, который может ретвитить и добавлять в избранное твиты других, а также следить за другими пользователями. В нашем примере мы будем основывать это поведение на запросе поискового запроса в форме хэштега.

Настройка файла программы

Для начала давайте создадим файл Python с именем + twitterbot_retweet.py +. Мы должны либо добавить свои учетные данные в верхнюю часть файла, либо добавить наши операторы импорта и доступ к каждому из наших ключей, секретов и токенов через файл + credentials.py +, который мы создали в https: //www.digitalocean. .com / community / tutorials / how-to-create-a-twitterbot-with-python-3-and-the-tweepy-library # storing-credentials Раздел [Storing Credentials] выше. Мы также добавим 3 строки для взаимодействия с учетными переменными через библиотеку Tweepy.

twitterbot_retweet.py

# Import Tweepy, sleep, credentials.py
import tweepy
from time import sleep
from credentials import *

# Access and authorize our Twitter credentials from credentials.py
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

Чтобы узнать больше об этой настройке, обязательно посмотрите «https://www.digitalocean.com/community/tutorials/how-to-create-a-twitter-app#step-4-%E2%80». % 94-create-a-python-application-that-взаимодействует-с-твиттером [Как создать приложение Twitter] ». Чтобы узнать больше об OAuth, вы можете прочитать https://www.digitalocean.com/community/ учебные пособия / введение в oauth-2 [наше введение].

Поиск твитов на основе запроса

Далее мы создадим цикл for, который может перебирать твиты. Мы рассмотрим твиты с хэштегом ocean, поэтому мы будем использовать + q = ' ocean' +

Related