Python Line Messaging Api
Line Messaging
line 是国外一个很火的实时通信软件,类似与WX,由于公司业务需求,需要基于line开发一个聊天平台,下面主要介绍关于line messaging api 的使用。
官方api:https://developers.line.biz/en/docs/messaging-api/overview/
起步
创建开发人员账号和创建channel
官方教程:https://developers.line.biz/en/docs/line-developers-console/overview/
python开发人员使用
安装 module
pip install line-bot-sdk
要求:python2 >= 2.7 或 python3 >=3.4
示例
from flask import Flask, request, abort from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
) app = Flask(__name__) line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN') # channel的token,创建channel之后有
handler = WebhookHandler('YOUR_CHANNEL_SECRET') # channel的secret,创建channel之后有 @app.route("/callback", methods=['POST'])
def callback(): # 用于确认通信
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature'] # get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body) # handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessage) # 处理消息事件,text类型的信息
def handle_message(event):
line_bot_api.reply_message( # 回复消息
event.reply_token,
TextSendMessage(text=event.message.text)
) if __name__ == "__main__":
app.run()
Python Api
githup: https://github.com/line/line-bot-sdk-python
创建实例
line_bot_api = linebot.LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
答复消息
用于响应来自用户,组和聊天室的事件。您可以从webhook事件对象获取reply_token。
reply_message(self, reply_token, messages, notification_disabled=False, timeout=None)
line_bot_api.reply_message(reply_token, TextSendMessage(text='Hello World!'))
发送消息
1.随时向单个用户,组和聊天室发送消息
push_message(self, to, messages, notification_disabled=False, timeout=None)
line_bot_api.push_message(to, TextSendMessage(text='Hello World!'))
2.随时向多个用户,组和聊天室发送消息
multicast(self, to, messages, notification_disabled=False, timeout=None)
line_bot_api.multicast(['to1', 'to2'], TextSendMessage(text='Hello World!'))
广播
随时向所有关注的用户发送消息
broadcast(self, messages, notification_disabled=False, timeout=None)
line_bot_api.broadcast(TextSendMessage(text='Hello World!'))
获取用户信息
get_profile(self, user_id, timeout=None)
profile = line_bot_api.get_profile(user_id) # 通过用户id,获取用户信息
print(profile.display_name)
print(profile.user_id)
print(profile.picture_url)
print(profile.status_message)
获取消息内容
获取用户发送的图像,视频和音频数据。
get_message_content(self, message_id, timeout=None)
message_content = line_bot_api.get_message_content(message_id)
basedir = os.path.abspath(os.path.dirname(__file__))
file_path = basedir + "../.."
with open(file_path, 'wb') as fd:
for chunk in message_content.iter_content():
fd.write(chunk)
获取机器人信息
get_bot_info(self, timeout=None)
bot_info = line_bot_api.get_bot_info()
print(bot_info.display_name)
print(bot_info.user_id)
print(bot_info.basic_id)
print(bot_info.premium_id)
print(bot_info.picture_url)
print(bot_info.chat_mode)
print(bot_info.mark_as_read_mode)
Exception
line api 服务器返回错误
try:
line_bot_api.push_message('to', TextSendMessage(text='Hello World!'))
except linebot.exceptions.LineBotApiError as e:
print(e.status_code)
print(e.request_id)
print(e.error.message)
print(e.error.details)
Webhook
示例:
{
"destination": "xxxxxxxxxx",
"events": [
{
"replyToken": "0f3779fba3b349968c5d07db31eab56f",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"message": {
"id": "325708",
"type": "text",
"text": "Hello, world"
}
},
{
"replyToken": "8cf9239d56244f4197887e939187e19e",
"type": "follow",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
}
}
]
}
字段说明
destination:接收Webhook事件,漫游器的用户IDevents: 事件列表replyToken:使用reply token能够直接回复type:事件类型mode:channel的状态active:活动状态standby(正在开发中):频道正在等待
timestamp:事件的时间(时间戳)source:具有事件源信息,user、group、room对象type:类型userId:用户Id
message:消息对象id:消息idtype:消息类型text:文本
更多字段清查:https://developers.line.biz/en/reference/messaging-api/
消息事件
未发生事件
用户在组或聊天室中取消发送消息时的事件对象
type:unsend查看
跟踪事件
LINE官方帐户被添加为好友(或被拒绝)时触发的事件对象
type: follow 查看
取消关注事件
LINE官方帐户被取消关注时触发的事件对象
type: unfollow 查看
参加事件
LINE官方帐户加入群组或聊天室时触发的事件对象
type: join 查看
会员加入事件
用户加入LINE官方帐户所在的组或聊天室时触发的事件对象
type: memberJoined 查看
会员退出事件
用户退出LINE官方帐户所在的组或聊天室时触发的事件对象
type: memberLeft 查看
更多事件
请查看:https://developers.line.biz/en/reference/messaging-api/#webhook-event-objects
Python Line Messaging Api的更多相关文章
- 使用Python结合Face++ API识别人脸
Face++是北京旷视科技旗下的视觉服务平台,可以进行人脸识别.检测等功能.其人脸识别技术据悉在目前准确率较高,其API非常友好,免费使用,功能众多,而且调用几乎没有限制.这里我使用了Python调用 ...
- 使用Python调用Flickr API抓取图片数据
Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...
- 使用python+pychram进行API测试(接口测试)初级STEP 1
花了一天时间安装了解了下最基本的python+pychram进行API测试,下面这个可以指导自己以后入门:基本的开发级别还需要学习 1.python下载地址:https://www.python.or ...
- 如何使用Native Messaging API 打开window程序
问 如何使用Native Messaging API 打开window程序 cmd javascript terminal chrome Tychio 2013年03月26日提问 关注 1 关注 收藏 ...
- WEB自动化(Python+selenium)的API
在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家 ...
- 使用sphinx快速为你python注释生成API文档
sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...
- 基于python调用libvirt API
基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...
- python安装包API文档
在python开发过程中,经常会使用第三方包,或者内置的包. 那么这些包,具体有哪些选项,有哪些方法,你知道吗?下面介绍一种万能方法. 使用命令:<注意,命令里python显示的API版本是根据 ...
- python入门-使用API
python入门-使用API import requests #执行API调用并存储响应 url = 'https://api.github.com/search/repositories?q=lan ...
随机推荐
- C++把数字排序
C++把数字排序 描述 思路 代码 描述 如题,详细如下: 输入不超过1024个数字,以特殊数字结尾,如(-999),把数字从小到大排序. 思路 目前,我们有两种思路可以写: 1是 在输入的时候,排序 ...
- LeetCode448-数组中消失的数字
题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能 ...
- mmal商城商品模块总结
学习目标 FTP服务器的对接 SpringMVC文件上传 流读取properties配置文件 抽象POJO.BO.VO对象之间的转换关系及解决思路 joda-time快速入门 静态代码块 mybati ...
- LeetCode637. 二叉树的层平均值
题目 1 class Solution { 2 public: 3 vector<double>ans; 4 vector<double> averageOfLevels(Tr ...
- vxfs(Veritas File System)扩充目录大小
1.新增加一个磁盘并初始化 # vxdisk list # vxdisksetup -i 3pardata0_22 2.将新增加的磁盘合并到磁盘组中 # vxdg -g testdg01 adddis ...
- OGG类异常汇总
1.启动ogg后,进程不ABEND也不向前走 原因:ogg启动后,会收集表的统计信息耗费大量时间,导致进程不往前走 解决:在参数文件中加入 SQLEXEC 'alter session set OPT ...
- 视图V_160M和表T_160M的维护
今天发现一个视图,通过SM30居然无法维护,这个视图就是V_160M,表为T_160M,是采购相关的系统消息, 不过别着急,有办法维护的,呵呵,看下面: 试一试OMCQ这个事物代码吧! 分享出来,给需 ...
- luogu P1453 城市环路
题目描述 整个城市可以看做一个N个点,N条边的单圈图(保证图连通),唯一的环便是绕城的环路.保证环上任意两点有且只有2条路径互通.图中的其它部分皆隶属城市郊区. 现在,有一位名叫Jim的同学想在B市开 ...
- 基于.NET Core的优秀开源项目合集
开源项目非常适合入门,并且可以作为体系结构参考的好资源, GitHub中有几个开源的.NET Core项目,这些项目将帮助您使用不同类型的体系结构和编码模式来深入学习 .NET Core技术, 本文列 ...
- USB限流IC,输入5V,输出5V,最大3A限流
USB限流芯片,5V输入,输出5V电压,限流值可以通过外围电阻进行调节,PWCHIP产品中可在限流范围0.4A-4.8A,并具有过压关闭保护功能. 过压关闭保护: 如芯片:PW1555,USB我们一半 ...