使用 Python 构建 Twitter Bot

2025年1月8日 | 阅读16分钟

在本教程中,我们将学习如何使用Python编程语言和**Tweepy**包来构建我们自己的Twitter机器人,该包提供了一种有效的方式来使用Twitter应用程序编程接口(API)。

Twitter被认为是应用最广泛的社交网络之一。对于许多组织和个人来说,拥有一个良好的Twitter形象是保持受众参与度的主要因素。

良好的Twitter形象意味着参与到诸如保持活跃账户,发布新推文和转发,关注有趣账户,以及快速回复关注者消息等活动中。我们可以手动完成所有这些工作;但是,这会花费时间。相反,我们可以依赖Twitter机器人,一个自动执行全部或部分Twitter活动的程序。

通过本教程,我们将能够学习以下内容:

  1. 改善并自动化与Twitter受众的互动
  2. 安装**Tweepy**
  3. 注册成为Twitter开发者以使用其API
  4. 利用**Tweepy**调用Twitter API
  5. 构建一个Twitter机器人

但在开始之前,让我们简要了解一下Twitter API。

理解Twitter API

Twitter API为开发者提供了访问Twitter几乎所有功能的权限。我们可以利用API读取和写入与Twitter实体相关的信息,包括推文、用户和趋势。

从技术上讲,API暴露了与以下内容相关的各种HTTP端点:

  1. 推文
  2. 转推
  3. 点赞
  4. 收藏
  5. 私信
  6. 媒体
  7. 趋势

正如我们稍后将讨论的,**Tweepy**包提供了一种调用这些HTTP端点的方法,而无需处理低级细节。

Twitter API使用OAuth(一种广泛使用的开放授权协议)来验证所有请求。在向Twitter API进行任何调用之前,我们必须创建并配置身份验证凭据。我们将在本教程后面查看详细说明。

我们可以利用Twitter API来构建各种自动化,如机器人、分析工具和其他实用程序。需要记住的是,Twitter对其API可构建和不可构建的内容施加了某些限制和政策。禁止开发用于垃圾邮件、误导用户和其他活动的工具。这样做是为了保证用户获得良好的体验。

Twitter API还对我们允许调用API方法的频率施加了速率限制。如果超过这些限制,我们将不得不等待大约5到15分钟才能再次使用API。在设计和实现机器人时必须考虑到这一点,以避免不必要的等待。

有关Twitter API策略和限制的更多详细信息,请参见其官方文档。

现在让我们了解**Tweepy**包。

理解Python Tweepy包

**Tweepy**是一个开源的Python包,它为我们提供了使用Python访问Twitter API的有效方式。**Tweepy**包由一组类和方法组成,它们描述了Twitter模型和API端点,并透明地处理了各种实现细节,例如:

  1. 数据编码和解码
  2. 结果分页
  3. HTTP请求
  4. OAuth身份验证
  5. 速率限制

如果我们不使用**Tweepy**包,我们就必须处理与HTTP请求、速率限制、身份验证和数据序列化相关的低级细节。整个过程可能耗时且容易出错。相反,多亏了**Tweepy**,我们可以专注于我们想要构建的功能。

我们可以通过**Tweepy**使用Twitter API提供的几乎所有功能。截至3.7.0版本,目前唯一的限制是由于Twitter API最近的一些改动,私信无法正常工作。

使用Python Tweepy包

以下部分将讨论如何安装用于开发的**Tweepy**包,配置身份验证凭据以及与Twitter API进行交互。

让我们从安装包开始。

安装

我们可以使用Python包管理器pip来安装**Tweepy**包。在接下来的部分中,我们将为项目使用虚拟环境(**virtualenv**),以避免依赖系统范围的包。

我们可以创建一个名为**tweepyBots**的项目。主要步骤是创建一个目录和一个虚拟环境。让我们考虑以下语法:

语法

上述命令将在项目目录中创建虚拟环境。

然后我们可以安装**Tweepy**包。首先,我们需要激活新创建的虚拟环境,然后使用pip安装程序进行安装。

语法

现在**Tweepy**包已安装,让我们创建一个包含依赖项名称的requirements.txt文件。我们可以使用pip freeze命令来完成此任务,如下所示:

语法

在部署项目时,我们将使用这个requirements.txt文件。

创建Twitter API认证凭据

正如我们前面讨论的,Twitter API要求所有请求都使用OAuth进行身份验证。因此,我们必须创建所需的身份验证凭据才能使用API。这些凭据是四个文本字符串:

  1. 消费者密钥
  2. 消费者秘密
  3. 访问令牌
  4. 访问秘密

如果您已经有Twitter用户账户,请按照以下步骤创建密钥、令牌和秘密。否则,您需要先注册成为Twitter用户,然后才能继续。

步骤1:申请Twitter开发者账户

步骤2:创建应用程序

步骤3:创建身份验证凭据

申请Twitter开发者账号

首先,我们需要前往Twitter开发者网站申请开发者账号。网站链接如下:

https://developer.twitter.com/en

在这里,我们需要选择负责此账户的Twitter用户。这必须是我们自己或我们的组织。

Twitter随后会要求提供一些关于我们计划如何利用开发者账户的详细信息。

然后我们需要指定开发者账户的名称,以及我们是打算将其用于个人用途还是组织用途。

创建应用程序

Twitter向应用程序而非账户授予身份验证凭据。应用程序可以是任何使用Twitter API的实用工具或机器人。因此,我们必须注册应用程序才能进行API调用。

我们必须前往Twitter应用页面注册应用程序并选择“创建应用”选项。

然后我们将提供与应用程序及其目的相关的以下详细信息:

  1. 应用程序名称:此信息将作为识别应用程序的名称(例如,**testbot**)
  2. 应用程序描述:此信息将作为应用程序的目的(例如,用于学习tweepy的测试机器人)
  3. 应用程序网站URL:此信息是必需的;但是,我们可以使用某些个人网站的URL,因为机器人不需要URL才能运行。
  4. 应用程序用途:此信息说明用户将如何使用应用程序(例如,此应用程序是一个将自动回复用户的机器人)

创建身份验证凭据

我们可以前往Twitter应用页面创建身份验证凭据。在这里,我们将找到应用程序的“详细信息”按钮。点击此按钮后,我们将进入下一页,在那里可以生成凭据。

通过选择“密钥和令牌”选项卡,我们可以生成并复制密钥、令牌和秘密,以便在代码中使用。生成凭据后,我们可以保存它们,以便稍后在代码中使用。

我们可以借助以下代码片段测试凭据:

示例

说明

在上面的代码片段中,我们导入了所需的包。我们创建了**Tweepy**包的**OAuthHandler**类的一个对象来向Twitter进行身份验证。然后我们创建了一个API类的对象。之后,我们使用了**try-expect**方法,其中我们使用了**verify_credentials()**函数并打印了一些相关的语句。如果一切顺利,我们应该看到一条消息,显示“Authentication Successful”(身份验证成功)。

注意:本文中使用的所有凭据仅供理解,无法实际工作。您需要生成并使用自己的凭据。

回顾Tweepy功能

Tweepy为其用户提供了从Python编程语言访问Twitter API的接口。它通过封装Twitter API的大部分复杂性,并在其之上添加了一个模型层和一些有用的功能来实现这一点。

由于随着时间的推移,Twitter不同概念的名称有所演变,一些旧名称仍在**Tweepy**中使用。因此,最好记住,在本教程的上下文中,这些等价关系成立:

  1. “状态”指的是“推文”。
  2. “友谊”被认为是“关注-被关注”的关系。
  3. “收藏”等同于“点赞”。

现在我们知道**Tweepy**如何命名事物了,让我们了解它的工作原理。

我们可以将**Tweepy**的功能分为以下几组:

  1. OAuth
  2. API类
  3. 型号
  4. 游标

现在我们将研究这些组,以了解每个组提供的功能。

理解OAuth

**Tweepy**包负责处理Twitter API所需的所有OAuth信息,以验证每个请求。它提供了一个**OAuthHandler**类,我们可以用它来设置所有API调用中的凭据。

以下代码片段演示了如何创建一个**OAuthHandler**对象,我们稍后可以将其用于API调用:

示例

说明

在上面的代码片段中,我们导入了所需的包。然后我们创建了一个**OAuthHandler**类的对象,将其消费者密钥和消费者秘密作为参数,并使用**set_access_token()**函数提供访问令牌及其秘密来向Twitter进行身份验证。

在这里,我们告诉**Tweepy**使用我们在“步骤3:创建身份验证凭据”中创建的凭据。必须用之前生成的值替换**CONSUMER_KEY、CONSUMER_SECRET、ACCESS_TOKEN**和**ACCESS_TOKEN_SECRET**。

理解API类

API类包含多个方法,提供对Twitter API端点的访问。借助这些方法,我们可以访问Twitter API的功能。

让我们考虑以下代码片段,它演示了如何创建一个API对象,我们可以使用它来调用Twitter API。我们还将**wait_on_rate_limit**和**wait_on_rate_limit_notify**参数设置为True,以确保API对象在超出速率限制时打印消息并等待:

示例

说明

在上面的代码片段中,我们设置了身份验证凭据并创建了一个API对象。我们可以调用该对象的方法以执行任何API调用。

API的方法可以分为以下几类:

  1. 用户时间线方法
  2. 推文方法
  3. 用户方法
  4. 关注者方法
  5. 账户方法
  6. 点赞方法
  7. 屏蔽用户方法
  8. 搜索方法
  9. 趋势方法
  10. 流媒体方法

在下面的小节中,我们将回顾不同的API方法组。有关所有API方法的详细列表,我们可以访问API类的完整文档。

用户时间线方法

这些方法处理从时间线或任何其他用户的公共时间线中读取推文、提及和转发。

让我们考虑以下代码片段,它打印主时间线中最后几条推文的作者和文本:

示例

说明

在上面的代码片段中,我们使用了API类的**home_timeline()**方法。此方法用于获取时间线中最近的二十个条目。**20**是**Tweepy**包中的默认值。我们将在后面看到如何获取超过**20**个结果并处理分页结果。

推文方法

这些方法处理创建、获取和转发推文。让我们考虑以下代码片段,它演示了如何使用**Tweepy**包创建带有文本的推文:

示例

说明

在上面的代码片段中,我们使用了**update_status()**方法来从Python字符串创建新的推文。

用户方法

此组中的方法允许我们使用过滤条件搜索用户,获取用户详细信息,并列出任何用户的关注者(如果该用户帐户是公开的)。

让我们考虑以下代码片段,以获取用户详细信息并打印它以及最近的20个关注者:

示例

说明

在上面的代码片段中,我们使用了**get_user()**方法,该方法返回一个包含用户详细信息的对象。此返回的对象还具有访问与用户相关信息的方法。然后我们使用了**followers**属性来获取关注者列表并打印他们的姓名。

关注者方法

这组方法处理关注和取消关注用户、查询用户关注者以及列出用户正在关注的账户。

让我们考虑以下代码片段,它展示了如何使用**Tweepy**开始关注一些用户。

示例

说明

在上面的代码片段中,我们使用了**create_friendship()**方法将用户添加到我们关注的账户列表中。

账户方法

这些方法使我们能够读取和写入自己的个人资料详细信息。

让我们考虑以下代码片段,它展示了我们如何更新个人资料描述:

示例

说明

在上面的代码片段中,我们使用了**update_profile()**方法,并在其中传递了**description**参数,将个人资料描述更改为“**Welcome to javatpoint.com**”。

流式处理方法

流式处理允许我们实时主动监测符合特定条件的推文。这意味着当没有新推文符合条件时,程序将等待直到新的推文被创建和处理。

我们需要创建两个对象来使用流式处理:

  1. **流对象**利用Twitter API获取符合某些条件的推文。此对象是**流监听器**处理推文的来源。
  2. **流监听器**从流中接收推文。

让我们考虑以下代码片段,它演示了同样的情况:

示例

说明

在上面的代码片段中,我们导入了所需的模块,并创建了一个**StreamListener**类。此L类用于流监听器**tweetsListener**。我们通过扩展**Tweepy**包的**StreamListener**来重用所有流监听器的通用代码。来自流的推文由**onStatus()**函数处理。

我们借助**tweepy.Stream**创建了流,传入了身份验证凭据和我们的流监听器。我们必须调用**filter()**函数才能从流中获取推文,通过过滤推文传递条件。然后,对于每个符合条件的新推文,流对象都会调用流监听器的**onStatus()**函数。

型号

**Tweepy**利用其模型类封装来自不同Twitter API方法的响应。这为我们提供了一种方便的方法来使用API操作的输出。

模型类如下:

  1. 用户
  2. 地位
  3. 友谊
  4. 搜索结果

让我们考虑一个例子,我们需要获取所有提及我们的推文,然后将每条推文标记为“喜欢”并关注其作者:

示例

说明

在上面的代码片段中,我们使用了属于Status类的**mentions_timeline()**方法,它返回一个推文对象。然后我们使用了**favorite()**方法将其标记为“喜欢”。然后我们使用了**user**属性以及**follow()**方法将推文作者添加到我们关注的人列表中。

利用**Tweepy**模型使我们能够创建简洁易懂的代码。

游标

许多Twitter API端点都使用分页来返回其输出。默认情况下,每个方法返回第一页,通常包含几十个项目。

**Tweepy**游标简化了处理分页输出的复杂性。游标作为**Tweepy**类**Cursor**实现。**Cursor**对象负责透明地获取不同的结果页面。我们可以通过选择API方法来获取项目以及我们想要的项目数量来使用游标。

让我们考虑以下代码片段,它演示了如何从时间线中获取第一页和最后一百条推文,借助游标。

示例

说明

在上面的代码片段中,我们使用**tweepy.Cursor**创建了一个游标对象。该类构造函数接收一个API方法作为结果源。在上面的示例中,我们使用了**home_timeline()**函数作为源,因为我们想要获取时间线中的推文。**Cursor**对象有一个**items()**方法,它返回一个可迭代对象,我们可以用来遍历结果。我们可以将我们想要的结果项数传递给**items()**。

使用Tweepy在Python中制作Twitter机器人

现在我们已经了解了**Tweepy**的工作原理,让我们看看如何使用**Tweepy**在Python中制作一个Twitter机器人。机器人通过持续监视某些Twitter活动并自动对其做出反应来工作。

监控Twitter活动

有两种方法可以持续监控Twitter活动:

  1. 使用流:在创建新内容(例如符合特定条件的推文)时接收通知。
  2. 使用轮询:定期进行**Tweepy** API调用,然后检查其结果,看是否有新内容。

选择哪种选项取决于使用场景。使用流是最有效的选项,但我们只能监视与推文相关的活动,因此灵活性较低。在下面的部分中,我们将只使用一种选项来构建机器人。

关注关注者机器人

在接下来的部分中,我们将学习如何构建关注关注者机器人,该机器人会自动关注任何关注我们的人。该机器人每分钟从Twitter获取关注者列表,然后遍历该列表,关注每个我们尚未关注的用户。

让我们考虑以下源代码,它演示了同样的情况。

示例

说明

在上面的代码片段中,我们导入了所需的库。然后我们定义了一个函数**createApi()**,它从环境变量中读取身份验证凭据并创建**Tweepy** API对象。这些凭据是:

  1. CONSUMER_KEY
  2. CONSUMER_SECRET
  3. ACCESS_TOKEN
  4. ACCESS_TOKEN_SECRET

该函数使用**os.getenv()**函数读取环境变量,然后创建**Tweepy** **the_auth**对象。然后创建API对象。

在创建**tweepy.API**对象时传入**wait_on_rate_limit**和**wait_on_rate_limit_notify**参数,使得**Tweepy**在超出速率限制时等待并打印消息。

在返回API对象之前,**createApi()**函数调用**verify_credentials()**方法以检查有效的凭据。

我们可以看到,我们还使用了**logging** Python模块来报告错误和信息消息,这有助于我们在出现任何问题时进行调试。

我们还定义了**main()**函数,该函数使用**createApi()**函数创建一个**Tweepy** API对象。我们在一个循环中每分钟调用一次**followFollowers()**函数。

我们还定义了**followFollowers()**函数,该函数使用**Tweepy**游标和**Tweepy** API方法**followers()**来获取关注者列表。此列表包含每个关注我们的用户的**Tweepy**用户模型。

然后机器人遍历列表,并利用**following**属性检查我们是否已经关注了每个用户。尚未关注的用户将通过**follow()**函数被关注。

机器人的执行

我们必须首先为身份验证凭据创建环境变量。我们可以通过替换实际凭据的值来执行此操作。

一旦设置了包含使用Twitter API所需凭据的环境变量,我们需要激活虚拟环境并执行Python项目文件。

语法

在执行过程中,机器人将关注任何关注我们的人。我们可以通过取消关注某个正在关注我们的人来测试它是否工作。一分钟后,他们将再次被关注。我们可以使用**Ctrl + C**停止机器人。