ad-password-self-service/utils/feishu/api_app_link.py

157 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# coding: utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
from typing import TYPE_CHECKING
from six.moves.urllib.parse import quote
from utils.feishu.helper import join_url
if TYPE_CHECKING:
from utils.feishu.api import OpenLark
class APIAppLink(object):
def __init__(self, host, qs):
self.host = host
self.qs = qs
def open_client(self):
"""唤起飞书客户端的 app_link 链接
"""
base = 'https://{}/client/op/open'.format(self.host)
return join_url(base, self.qs, sep='?')
def open_mini_program(self, app_id, mode='', path='', path_android='', path_ios='', path_pc=''):
"""打开一个小程序或者小程序中的一个页面
:param app_id: 小程序 app_id
:type app_id: str
:param mode: PC 必填 PC小程序的三种模式sidebar-semi、window、appCenter
:type mode: str
:param path: 需要跳转的页面路径路径后可以带参数。也可以使用path_android、path_ios、path_pc参数对不同的客户端指定不同的path
:type path: str
:param path_android: 同 path 参数Android 端会优先使用该参数,如果该参数不存在,则会使用 ptah 参数
:type path_android: str
:param path_ios: 同 path 参数iOS 端会优先使用该参数,如果该参数不存在,则会使用 ptah 参数
:type path_ios: str
:param path_pc: 同 path 参数PC 端会优先使用该参数,如果该参数不存在,则会使用 ptah 参数
:type path_pc: str
:return: url
:rtype: str
使用示例
1. 打开小程序
lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window')
# https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window
2. 打开小程序的一个页面 pages/home
lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window', path='pages/home')
# https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window&path=pages%2Fhome
3. 打开小程序的一个页面带参数 pages/home?xid=123
lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window', path='pages/home?xid=123')
# https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window&
path=pages%2Fhome%3Fxid%3D123
4. 在 PC 端打开页面 pages/pc_home?pid=123在其他端打开页面 pages/home?xid=123
lark_cli.app_link().open_mini_program(app_id='1234567890', mode='window', path='pages/home?xid=123',
path_pc='pages/pc_home?pid=123')
# https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window&
path=pages%2Fhome%3Fxid%3D123&path_pc=pages%2Fpc_home%3Fpid%3D123
5. 在 PC 4.2.0 及以上版本支持打开小程序PC 4.2.0 以下版本提示不支持
lark_cli.app_link(min_ver_pc='4.2.0').open_mini_program(app_id='1234567890', mode='window')
# https://applink.feishu.cn/client/mini_program/open?appId=1234567890&mode=window&min_lk_ver_pc=4.2.0
"""
qs = [
('appId', app_id),
('mode', mode),
('path', quote(path, safe='') if path else ''),
('path_android', quote(path_android, safe='') if path_android else ''),
('path_ios', quote(path_ios, safe='') if path_ios else ''),
('path_pc', quote(path_pc, safe='') if path_pc else ''),
]
for i in self.qs:
qs.append((i[0], i[1]))
base = 'https://{}/client/mini_program/open'.format(self.host)
return join_url(base, qs, sep='?')
def open_chat(self, open_id='', open_chat_id=''):
"""打开一个小程序或者小程序中的一个页面
:param open_id: 用户 open_id
:type open_id: str
:param open_chat_id: 用会话ID包括单聊会话和群聊会话
:type open_chat_id: str
:return: url
:rtype: str
使用示例
使用 open_id 打开聊天页面
lark_cli.app_link().open_chat(open_id='1234567890')
# https://applink.feishu.cn/client/chat/open?openId=1234567890
"""
qs = [
('openId', open_id),
('openChatId', open_chat_id)
]
for i in self.qs:
if i[1]:
qs.append((i[0], i[1]))
base = 'https://{}/client/mini_program/open'.format(self.host)
return join_url(base, qs, sep='?')
class APIAppLinkMixin(object):
@property
def _app_link_host(self):
"""
:type self: OpenLark
"""
if self.is_lark:
return 'applink.larksuite.com'
return 'applink.feishu.cn'
def app_link(self, min_lk_ver='', min_lk_ver_android='', min_lk_ver_ios='', min_lk_ver_pc=''):
"""
:param min_lk_ver:
:param min_lk_ver_android:
:param min_lk_ver_ios:
:param min_lk_ver_pc:
:return:
:rtype: APIAppLink
指定 AppLink 协议能够兼容的最小飞书版本,使用三位版本号 x.y.z。
如果当前飞书版本号小于min_lk_ver打开该 AppLink 会显示为兼容页面。
也可使用 min_lk_ver_android、min_lk_ver_ios、min_lk_ver_pc 参数对不同的客户端指定不同的版本。
"""
qs = [
('min_lk_ver', min_lk_ver),
('min_lk_ver_android', min_lk_ver_android),
('min_lk_ver_ios', min_lk_ver_ios),
('min_lk_ver_pc', min_lk_ver_pc),
]
return APIAppLink(self._app_link_host, qs)