Python使用Whatsapp?

Python使用Whatsapp?

在今天的移动互联网时代,IM(即时通讯)的应用越来越广泛。无论是职场沟通、家庭联系还是朋友聊天,通过IM已经成为人们非常重要,乃至必不可少的一种沟通方式。当然作为全球最流行的短信应用程序之一,Whatsapp越来越受到人们的青睐。但是,如何使用Python进行Whatsapp沟通呢?

阅读更多:Python 教程

Python Whastapp模块

在Python中,有一些功能强大的沟通工具的封装库。比如用于分析和操作Excel文件的openpyxlxlrd等,用于网页爬取的beautifulsoupurllib等。同样地,Python也有一些可用于Whatsapp沟通的库。在此我们推荐使用yowsup这个模块,它是一个完整的Python WhatsApp库和命令行客户端。yowsup是一个底层库,可以轻松地访问WhatsApp网络,并完成与WhatsApp平台的对话。它可以完成许多与WhatsApp通信的任务,如发送和接收消息,发送图片,接收语音消息等等。

安装yowsup

安装yowsup需要pip,因此你需要确保在你的计算机上已经安装了它。接下来进入命令行,执行以下命令来安装。

pip install yowsup

注意:由于Whatsapp的网络目前只对移动设备和web端开放,因此如果使用Python模块进行沟通,则需要一个已注册的账号。

开始使用yowsup

yowsup中,使用EchoLayer类实现对话。首先,我们会为你呈现一个初始化的步骤:

from yowsup.layers import YowLayerEvent
from yowsup.layers.auth import YowCryptLayer, YowAuthenticationProtocolLayer
from yowsup.layers.network import YowNetworkLayer
from yowsup.layers.protocol_messages import YowMessagesProtocolLayer
from yowsup.layers.protocol_receipts import YowReceiptProtocolLayer
from yowsup.layers.protocol_contacts import YowContactsProtocolLayer
from yowsup.layers.protocol_presence import YowPresenceProtocolLayer
from yowsup.layers.protocol_iq import YowIqProtocolLayer
from yowsup.common import YowConstants
from yowsup.layers.axolotl import YowAxolotlLayer
from yowsup.layers.axolotl.stanzas.axolotl_message import AxolotlMessageProtocolEntity
from yowsup.layers.axolotl.stanzas.axolotl_parsedMessage import AxolotlParsedMessageProtocolEntity
from yowsup.layers.axolotl.interfaces import YowAxolotlInterface
from yowsup.layers import YowLayerEvent

在这个初始化过程中,我们声明了一些需要的层。然后进行以下步骤,以建立和Whatsapp服务的连接。

from yowsup.stacks import YowStackBuilder

stackBuilder = YowStackBuilder()

#以下三种信任相关的枚举可能的选项。
#方式 1. 如果信任静态密钥库,请使用STATIC。
#用法 2. 如果您希望在没有任何警告的情况下信任自签名的证书,请使用DynamicBase。这个在开发中非常有用。
#用法 3. 如果您希望通过输入程序员的输入来实现信任,或以交互方式选择是否信任每个证书并指纹,请使用Interactive。
stack = stackBuilder\
    .pushDefaultLayers(True)\
    .push(YowAuthenticationProtocolLayer) \
    .push(YowMessagesProtocolLayer) \
    .push(YowReceiptProtocolLayer) \
    .push(YowPresenceProtocolLayer) \
    .push(YowIqProtocolLayer) \
    .push(YowContactsProtocolLayer) \
    .push(YowAxolotlLayer) \
    .build()

stack.setCredentials(credentials)

# 异步启动堆栈
stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
stack.loop()

上述代码中我们调用YowStackBuilder函数来初始化堆栈,fetch的参数为我们需要包含的层。然后,我们设置对应的登陆信息,包括电话号码(phone_number)和密码(password)。在这里,credentials已经被设置了。

接下来,我们通过YowStack的实例来广播一个YowLayerEvent的实例——YowNetworkLayer.EVENT_STATE_CONNECT,以连接Whatsapp服务。最后,我们使用stack.loop()启动循环。此时,你可以尝试向已经安装了Whatsapp的好友发送一条消息。为了方便调试,可以在pushDefaultLayers()函数中选择传递True作为参数。

使用yowsup发送消息

接下来,我们将通过yowsup模块来完成发送通过Whatsapp发送消息操作。

编写发送消息的程序

首先,我们需要导入所需的参数:

from yowsup.layers.protocol_chatstate.protocolentities import OutgoingChatstateProtocolEntity
from yowsume.layer.protocol_messages.protocolentities import TextMessageProtocolEntity as tme

接下来,我们定义一个sentMessageProtocolEntity对象:

sentMessageProtocolEntity = tme(
    # client端的唯一ID
    id='870763981436294-3',
    # 当前的消息情况,第一次发送置为1
    _type='text',
    # 这里输入需要发送的消息
    body='Hey! Sending through Python',
    # 发送到哪一个好友的手机号码
    to='201313811576', 
)

在上面的代码中,我们定义和初始化了一个对象sentMessageProtocolEntity(需要指定好友的手机号码)。接下来,我们开始将这条消息发送到Whatsapp服务:

    event = YowLayerEvent(YowMessagesProtocolLayer.EVENT_SEND_MESSAGE, sentMessageProtocolEntity)
    self.toLower(event)

发送消息后,我们就可以关闭到Whatsapp服务的连接了:

    try:
        stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT))
    except:
        pass

将这些代码组合在一起,我们就可以成功地使用Python来发送Whatsapp消息了。

from yowsup.layers.auth import YowCryptLayer, YowAuthenticationProtocolLayer
from yowsup.layers.network import YowNetworkLayer
from yowsup.layers.protocol_messages import YowMessagesProtocolLayer
from yowsup.layers.protocol_receipts import YowReceiptProtocolLayer
from yowsup.layers.protocol_chatstate import YowChatstateProtocolLayer, YOWSUP_CHATSTATE_ACTIVE
from yowsup.layers.protocol_chatstate.protocolentities import OutgoingChatstateProtocolEntity
from yowsup.layers.protocol_presence import YowPresenceProtocolLayer, PresenceProtocolEntity
from yowsume.layer.protocol_messages.protocolentities import TextMessageProtocolEntity as tme
from yowsup.stacks import YowStackBuilder
from yowsup.common import YowConstants
from yowsup.layers.axolotl import YowAxolotlLayer
from yowsup.layers.axolotl.stanzas.axolotl_message import AxolotlMessageProtocolEntity
from yowsup.layers.axolotl.stanzas.axolotl_parsedMessage import AxolotlParsedMessageProtocolEntity
from yowsup.layers.axolotl.interfaces import YowAxolotlInterface
from yowsup.layers import YowLayerEvent

class YowsupEchoStack(object):
    def __init__(self, credentials):
        self.credentials = credentials

    def start(self):
        stackBuilder = YowStackBuilder()
        self.stack = stackBuilder.pushDefaultLayers(True).push(
            YowAuthenticationProtocolLayer).push(
            YowMessagesProtocolLayer).push(YowReceiptProtocolLayer).push(
            YowPresenceProtocolLayer).push(YowChatstateProtocolLayer).build()

        self.stack.setCredentials(self.credentials)

        # 添加该基本信息,以实现客户端在线状态
        self.stack.broadcastEvent(YowLayerEvent(YowChatstateProtocolLayer.EVENT_SET, OutgoingChatstateProtocolEntity(YOWSUP_CHATSTATE_ACTIVE)))

        # 需要发送消息的好友的手机号码
        to_number = "201313811576"
        message_text = "Hey! This is a message sent from Python"
        sentMessageProtocolEntity = tme(
            id="92634850267-1591351716@g.us",
            body=message_text, 
            to=to_number
        )

        # 发送消息
        self.stack.broadcastEvent(YowLayerEvent(YowMessagesProtocolLayer.EVENT_SEND_MESSAGE, sentMessageProtocolEntity))

        # 关闭连接 
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_DISCONNECT))

        self.stack.loop()

if __name__ == "__main__":
    # 输入你的电话号码和密码
    credentials = ("8613733241085", "L+4lmPjAhT5snglJ84fWLpfGKos=")
    whatsappstack = YowsupEchoStack(credentials)
    whatsappstack.start()

结论

本篇文章介绍了如何使用Python的yowsup模块进行Whatsapp沟通,包括连接Whatsapp服务,发送消息等。yowsup提供了完整全面的功能,因此我们可以在Python中利用它来自动化Whatsapp沟通的过程。这对于那些想要使用数据自动化技术实现Whatsapp沟通的人来说是一个巨大的帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程