使用 Python 构建 Twitter Bot2025年1月8日 | 阅读16分钟 在本教程中,我们将学习如何使用Python编程语言和**Tweepy**包来构建我们自己的Twitter机器人,该包提供了一种有效的方式来使用Twitter应用程序编程接口(API)。 Twitter被认为是应用最广泛的社交网络之一。对于许多组织和个人来说,拥有一个良好的Twitter形象是保持受众参与度的主要因素。 良好的Twitter形象意味着参与到诸如保持活跃账户,发布新推文和转发,关注有趣账户,以及快速回复关注者消息等活动中。我们可以手动完成所有这些工作;但是,这会花费时间。相反,我们可以依赖Twitter机器人,一个自动执行全部或部分Twitter活动的程序。 通过本教程,我们将能够学习以下内容:
但在开始之前,让我们简要了解一下Twitter API。 理解Twitter APITwitter API为开发者提供了访问Twitter几乎所有功能的权限。我们可以利用API读取和写入与Twitter实体相关的信息,包括推文、用户和趋势。 从技术上讲,API暴露了与以下内容相关的各种HTTP端点:
正如我们稍后将讨论的,**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端点,并透明地处理了各种实现细节,例如:
如果我们不使用**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。这些凭据是四个文本字符串:
如果您已经有Twitter用户账户,请按照以下步骤创建密钥、令牌和秘密。否则,您需要先注册成为Twitter用户,然后才能继续。 步骤1:申请Twitter开发者账户 步骤2:创建应用程序 步骤3:创建身份验证凭据 申请Twitter开发者账号首先,我们需要前往Twitter开发者网站申请开发者账号。网站链接如下: https://developer.twitter.com/en 在这里,我们需要选择负责此账户的Twitter用户。这必须是我们自己或我们的组织。 Twitter随后会要求提供一些关于我们计划如何利用开发者账户的详细信息。 然后我们需要指定开发者账户的名称,以及我们是打算将其用于个人用途还是组织用途。 创建应用程序Twitter向应用程序而非账户授予身份验证凭据。应用程序可以是任何使用Twitter API的实用工具或机器人。因此,我们必须注册应用程序才能进行API调用。 我们必须前往Twitter应用页面注册应用程序并选择“创建应用”选项。 然后我们将提供与应用程序及其目的相关的以下详细信息:
创建身份验证凭据我们可以前往Twitter应用页面创建身份验证凭据。在这里,我们将找到应用程序的“详细信息”按钮。点击此按钮后,我们将进入下一页,在那里可以生成凭据。 通过选择“密钥和令牌”选项卡,我们可以生成并复制密钥、令牌和秘密,以便在代码中使用。生成凭据后,我们可以保存它们,以便稍后在代码中使用。 我们可以借助以下代码片段测试凭据: 示例 说明 在上面的代码片段中,我们导入了所需的包。我们创建了**Tweepy**包的**OAuthHandler**类的一个对象来向Twitter进行身份验证。然后我们创建了一个API类的对象。之后,我们使用了**try-expect**方法,其中我们使用了**verify_credentials()**函数并打印了一些相关的语句。如果一切顺利,我们应该看到一条消息,显示“Authentication Successful”(身份验证成功)。 注意:本文中使用的所有凭据仅供理解,无法实际工作。您需要生成并使用自己的凭据。回顾Tweepy功能Tweepy为其用户提供了从Python编程语言访问Twitter API的接口。它通过封装Twitter API的大部分复杂性,并在其之上添加了一个模型层和一些有用的功能来实现这一点。 由于随着时间的推移,Twitter不同概念的名称有所演变,一些旧名称仍在**Tweepy**中使用。因此,最好记住,在本教程的上下文中,这些等价关系成立:
现在我们知道**Tweepy**如何命名事物了,让我们了解它的工作原理。 我们可以将**Tweepy**的功能分为以下几组:
现在我们将研究这些组,以了解每个组提供的功能。 理解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的方法可以分为以下几类:
在下面的小节中,我们将回顾不同的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**”。 流式处理方法流式处理允许我们实时主动监测符合特定条件的推文。这意味着当没有新推文符合条件时,程序将等待直到新的推文被创建和处理。 我们需要创建两个对象来使用流式处理:
让我们考虑以下代码片段,它演示了同样的情况: 示例 说明 在上面的代码片段中,我们导入了所需的模块,并创建了一个**StreamListener**类。此L类用于流监听器**tweetsListener**。我们通过扩展**Tweepy**包的**StreamListener**来重用所有流监听器的通用代码。来自流的推文由**onStatus()**函数处理。 我们借助**tweepy.Stream**创建了流,传入了身份验证凭据和我们的流监听器。我们必须调用**filter()**函数才能从流中获取推文,通过过滤推文传递条件。然后,对于每个符合条件的新推文,流对象都会调用流监听器的**onStatus()**函数。 型号**Tweepy**利用其模型类封装来自不同Twitter API方法的响应。这为我们提供了一种方便的方法来使用API操作的输出。 模型类如下:
让我们考虑一个例子,我们需要获取所有提及我们的推文,然后将每条推文标记为“喜欢”并关注其作者: 示例 说明 在上面的代码片段中,我们使用了属于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活动:
选择哪种选项取决于使用场景。使用流是最有效的选项,但我们只能监视与推文相关的活动,因此灵活性较低。在下面的部分中,我们将只使用一种选项来构建机器人。 关注关注者机器人在接下来的部分中,我们将学习如何构建关注关注者机器人,该机器人会自动关注任何关注我们的人。该机器人每分钟从Twitter获取关注者列表,然后遍历该列表,关注每个我们尚未关注的用户。 让我们考虑以下源代码,它演示了同样的情况。 示例 说明 在上面的代码片段中,我们导入了所需的库。然后我们定义了一个函数**createApi()**,它从环境变量中读取身份验证凭据并创建**Tweepy** API对象。这些凭据是:
该函数使用**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**停止机器人。 下一主题Python进度条模块 |
我们请求您订阅我们的新闻通讯以获取最新更新。