会话备份方法、计算机可读存储介质及终端设备与流程

文档序号:26139316发布日期:2021-08-03 14:22阅读:104来源:国知局
会话备份方法、计算机可读存储介质及终端设备与流程

本发明涉及数据备份,特别涉及一种会话备份方法、计算机可读存储介质及终端设备。



背景技术:

随着互联网技术的发展,聊天会话在人们日常生活中的占比越来越大,而随着用户的使用时间越来越长,产生的会话记录也越来越多。当用户需要对会话记录进行导出整理或备份时,就会面临大量的会话信息。目前大多数公司都会进行会话备份的恢复,现将会话记录保存在用于存储会话记录的服务器上,当用户需要恢复备份的会话时,服务器将该用户对应的会话记录发送至客户端,用户从而得到本地保存的会话记录。

目前大多数公司在进行会话备份的过程中,服务器与客户端之间都是进行一次性导出,因此当会话记录的数据量较大时,导出的时间也会变长。而且由于服务器向客户端发送备份数据需要占用大量的宽带,导致用户为了进行会话备份,可能需要长时间卡在备份操作界面,耗时且较为不便利。此外,这种一次性导出的方式还会导致一旦出现故障导致导出出错,需要进行备份的重来,影响备份效率。如何实现快捷地导出或备份会话记录,是目前需要解决的问题。



技术实现要素:

本发明要解决的技术问题在于会话备份时间长且效率低,针对现有技术的不足,提供一种会话备份方法。

为了解决上述技术问题,本发明所采用的技术方案如下:

一种会话备份方法,所述方法包括:

获取用户信息;

根据所述用户信息,生成模拟登录信息并发送至预先连接的服务器;

当检测到所述服务器针对所述模拟登录信息发送的认证信息时,根据所述认证信息,生成会话编号请求并发送至所述服务器;

当检测到所述服务器针对所述会话编号请求发送的会话编号时,针对每一个所述会话编号,生成该会话编号对应的会话数据请求;

将所述会话数据请求循环发送至所述服务器,以获得所述服务器针对每一个所述会话编号发送的会话数据。

所述会话备份方法,其中,所述根据所述用户信息,生成模拟登录信息并发送至预先连接的服务器,具体包括:

根据所述用户信息,生成登录请求并发送至所述服务器;

当检测到所述服务器针对所述登录请求发送的初始登录信息时,基于所述初始登录信息,向所述服务器发送第一重定位请求;

当检测到所述服务器针对所述第一重定位请求发送的第一写入文件时,基于所述第一写入文件,向所述服务器发送第二重定位请求;

当检测到所述服务器针对所述第二重定位请求发送的第二写入文件时,将所述第一写入文件和所述第二写入文件作为所述认证信息。

所述会话备份方法,其中,所述根据所述认证信息,生成会话编号请求并发送至所述服务器,具体包括:

根据所述认证信息,生成查询数据请求并发送至所述服务器;

当检测到所述服务器针对所述查询数据请求发送的查询数据时,根据所述查询数据生成会话编号请求并发送至所述服务器。

所述会话备份方法,其中,所述根据所述查询数据生成会话编号请求并发送至所述服务器,具体包括:

根据预设的解析规则,对所述查询数据进行解析,得到授权信息以及连接信息;

根据所述授权信息以及所述连接信息,生成会话编号请求并发送至所述服务器。

所述会话备份方法,其中,所述根据所述授权信息以及所述连接信息,生成会话编号请求并发送至所述服务器,具体包括:

对所述授权信息进行加密处理,得到所述授权信息对应的授权值并作为会话编号请求头;以及,

将预设的设置参数和所述连接信息重组,得到会话编号请求体;

将所述会话编号请求头和所述会话编号请求体进行拼接,生成所述用户信息对应的会话编号请求。

所述会话备份方法,其中,所述针对每一个所述会话编号,生成该会话编号对应的会话数据请求,具体包括:

针对每一个所述会话编号,将所述授权信息作为该会话数据请求头;以及,

将该会话编号以及预设的会话设置参数作为会话数据请求体;

将所述会话数据请求头与所述会话数据请求体进行拼接,生成该会话编号对应的会话数据请求。

所述会话备份方法,其中,所述将所述会话数据请求循环发送至所述服务器,以获得所述服务器针对每一个所述会话编号发送的会话数据之后,还包括:

针对每一个所述会话数据,对该会话编号对应的会话数据中的数据节点进行遍历,得到若干个节点数据;

针对每一个所述节点数据,对该节点数据进行解析,得到会话信息;

根据预设的显示参数,将所述会话信息进行可视化,得到该会话数据对应的会话界面。

所述会话备份方法,其中,所述数据节点为成员节点时,所述会话信息还包括成员账号;所述针对每一个所述节点数据,对该节点数据进行解析,得到会话信息之后,还包括:

对所述成员账号进行拼接,得到拼接账号;

将所述拼接账号作为成员信息请求中的拼接节点,生成所述成员信息请求并发送至所述服务器;

当检测到所述服务器针对所述成员信息请求发送的成员实体信息时,对所述成员实体信息中的实体节点进行遍历,得到每一个所述成员账号对应的成员实体信息;

将所述成员实体信息与所述会话界面进行整合,得到该会话数据对应的会话备份。

一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任一所述的会话备份方法中的步骤。

一种终端设备,其包括:处理器、存储器及通信总线;所述存储器上存储有可被所述处理器执行的计算机可读程序;

所述通信总线实现处理器和存储器之间的连接通信;

所述处理器执行所述计算机可读程序时实现如上任一所述的会话备份方法中的步骤。

有益效果:与现有技术相比,本发明提供了一种会话备份方法、计算机可读存储介质及终端设备,先获取用户信息,然后采用模拟登录的形式登录到会话软件,因为在登录以及进行操作的过程中,服务器会下发包含认证信息的cookies,因此根据cookies,模仿常规范围服务器的请求,生成用于请求会话编号的请求至服务器。服务器针对会话编号请求会下发该用户信息对应的会话编号,客户端再针对每一个会话编号向服务器请求会话数据。由于是以会话编号为单位进行会话数据的获取,因此将会话备份的一个长过程进行了拆分,从而将每一个会话数据的获取的时间缩短。也因此,用户可以在上一个会话数据获取后,下一个会话数据获取前进行其他的操作,并不会影响会话备份的进行。若中途出现故障,只需要将某一个会话编号对应的会话数据请求重新请求即可,提高了备份的有效率。

附图说明

图1为本发明提供的会话备份方法的应用场景示意图。

图2为本发明提供的会话备份方法的流程图。

图3为本发明提供的会话备份方法中获取查询数据的模式图。

图4为本发明提供的会话备份方法中获取会话数据的模式图。

图5为本发明提供的终端设备的结构原理图。

具体实施方式

本发明提供一种会话备份方法、计算机可读存储介质及终端设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

发明人经过研究发现,现有基于会话软件的会话数据备份存在时间长、效率低等问题。为了解决上述问题,在本发明实施例中,获取用户信息;根据所述用户信息,生成模拟登录信息并发送至预先连接的服务器;当检测到所述服务器针对所述模拟登录信息发送的认证信息时,根据所述认证信息,生成会话编号请求并发送至所述服务器;当检测到所述服务器针对所述会话编号请求发送的会话编号时,针对每一个所述会话编号,生成该会话编号对应的会话数据请求;将所述会话数据请求循环发送至所述服务器,以获得所述服务器针对每一个所述会话编号发送的会话数据。

举例说明,本发明实施例可以应用到如图1所示的场景,其中,a为服务器,b为客户端。在用户通过会话软件进行会话时,会话内容会同步至服务器上。而客户端是用户想要进行会话备份保存的终端。

可以理解的是,在上述应用场景中,客户端可包括电脑、手机等终端。

需要注意的是,上述应用场景仅是为了便于理解本发明而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

下面结合附图,通过对实施例的描述,对发明内容作进一步说明。

如图2所示,本实施提供了一种会话备份方法,所述方法可以包括以下步骤:

s10、获取用户信息。

具体地,在对用户的会话进行备份之前,首先获取待进行备份的用户的相关信息,即用户信息,包括用户账号以及用户密码。

s20、根据所述用户信息,生成模拟登录信息并发送至预先连接的服务器。

具体地,如果直接用户信息进行登录,则直接进入会话软件中的登录界面,只能通过会话软件内部的备份软件进行备份。因此,在本实施例中,采用模拟登录的方式进行用户登录。模拟登录需要尽可能地模仿客户端上传登录请求,因此模拟登录的方式根据会话软件的不同存在不同的差异。模拟登录的方式存在多种,其本质都是将用户账号以及用户密码打包发送至想要模拟登录对象的服务器,以获得服务器的响应。本实施例进行模拟登录所希望得到的是服务器针对用户信息发送的认证信息。

在本实施例中,用于说明实施例运行的会话软件为谷歌公司的环聊软件。环聊(hangouts)是谷歌发布的一款统一消息服务应用,包含会话、短信、视频会话等服务。通过这些服务,环聊为用户提供社交和办公功能,用户可以在不同的设备或终端上进行会话。由于环聊本身登录访问的特性,模拟登录得到认证信息的过程包括:

a10、根据所述用户信息,生成登录请求并发送至所述服务器。

具体地,先参考模拟登录服务器的请求协议,设置登录请求并发送环聊软件的服务器,该登录请求用于向服务器请求身份验证。

a20、当检测到所述服务器针对所述登录请求发送的初始登录信息时,基于所述初始登录信息,向所述服务器发送第一重定位请求。

具体地,服务器接收到登录请求后,会下发与登录请求对应的初始登录信息,在本实施例中,初始登录信息包括aph(api-proxy-house,api代理平台)值。然后使用初始登录信息向服务器发送第一重定位请求,以访问登录后的重定位连接。

a30、当检测到所述服务器针对所述第一重定位请求发送的第一写入文件时,基于所述第一写入文件,向所述服务器发送第二重定位请求。

具体地,服务器接收到第一重定位请求后,服务器会发送第一重定位请求对应的网络数据,并下发一个cookie文件作为第一写入文件。当检测到该cooki文件时,即第一写入文件时,客户端使用第一写入文件发送第二重定位请求,以范围第一次重定位后的重定位连接。

a40、当检测到所述服务器针对所述第二重定位请求发送的第二写入文件时,将所述第一写入文件和所述第二写入文件作为所述认证信息。

具体地,与接收到第一重定位请求一样,服务器会下发第二重定位请求对应的网络数据,并下发另一个cookie文件作为第二写入文件。当检测到该cookie文件时,即检测到第二写入文件时,客户端将第一写入文件和第二写入文件作为模拟登录得到的认证信息,用于后续的操作。

此外,将第一写入文件和第二写入文件作为认证信息过程中,还可对第一写入文件和第二写入文件进行简单的处理,例如拼接、去除重复的数据,以简化认证信息的内容。

s30、当检测到所述服务器针对所述模拟登录信息发送的认证信息时,根据所述认证信息,生成会话编号请求并发送至所述服务器。

具体地,得到了认证信息相当于得到了访问服务器的通行证,因此根据认证信息,可生成多种功能的请求。将这些请求发送至服务器,会得到该请求对应的数据内容。由于不同的会话软件在请求的形式、方式等存在多种区别,因此针对不同的会话软件,生成会话编号请求的方式存在一定差异,本实施例以环聊软件为例进行实施描述,如图2所示,其具体过程为:

b10、根据所述认证信息,生成查询数据请求并发送至所述服务器。

具体地,当检测到认证信息时,将认证信息作为查询数据请求的请求头的一部分、模拟会话软件中其他参数信息获取的访问请求的请求头参数,并参照该会话软件中采用的请求体,生成查询数据请求并发送至服务器。查询数据请求主要用于获取与授权、会话所基于的软件版本号等信息,生成查询请求的具体过程为:

b11、根据所述认证信息,生成启动数据请求并发送至所述服务器。

具体地,当检测到认证信息时,将认证信息作为启动数据请求的请求头的一部分、模拟会话软件中其他参数信息作为启动数据请求头的其他参数,并参照该会话软件中采用的请求体,生成启动数据请求并发送至服务器。启动数据请求用于获取初始登录服务器时两者连接的属性相关的数据。

b12、当检测到所述服务器针对所述启动数据请求发送的启动数据时,根据所述启动数据中的查询参数,生成查询请求并发送至所述服务器。

具体地,接收到启动数据请求后,服务器根据启动数据请求将启动数据发送回客户端。在本实施例中,启动数据是json格式的字符串,其中包含有标识信息、pvt信息、邮箱地址、链接信息等。提取启动数据中的pvt信息的值作为查询参数之一。此外,查询参数还包括常规访问服务器的请求的相关参数。例如在本实施例中,采用的模拟登录是基于网页版环聊实现的,因此在生成查询请求时,用于模拟网页上连接的服务器的url(统一资源定位系统,uniformresourcelocator)请求的连接属性也作为查询参数,例如加载连接属性、ec值。将连接属性以及认证信息进行整合,生成查询请求并发送至服务器。

b20、当检测到所述服务器针对所述查询数据请求发送的查询数据时,根据所述查询数据生成会话编号请求并发送至所述服务器。

具体地,服务器接收到查询数据请求后返回查询数据至客户端。当检测到所述服务器针对所述查询数据请求发送的查询数据时,客户端提取查询数据中的相关信息,再基于这些相关信息生成会话编号请求并发送至服务器。针对环聊这一款软件,如图4所示,生成会话编号请求的方式为:

b21、根据预设的解析规则,对所述查询数据进行解析,得到授权信息以及连接信息。

具体地,在本实施例中,查询数据是html格式的数据。当检测到所述服务器针对所述查询请求发送的查询数据时,客户端需要对查询数据进行解析。在本实施例中,预先设定一个用于解析查询数据的解析规则。解析规则用于解析查询数据中的授权信息、连接账号等连接信息。因此解析规则的设定可根据不同类型的会话软件返回的查询数据的格式、内容、编排等进行调整。

在本实施例中,针对环聊这一会话软件,预先设置用于提取授权信息的第一提取规则,以及用于提取版本信息和连接账号的第二提取规则。解析的具体过程为:

根据预设的第一提取规则,提取所述查询数据中的目标数据,并对所述目标数据进行处理,得到授权信息;以及,

根据预设的第二提取规则,提取所述访问数据中的连接信息。

具体地,本实施例中的授权信息通过时间戳哈希的值(timestamphash,也被称为sapisid)、时间戳以及需要授权的url得到。先提取访问数据中的sapisid,然后将时间戳、sapsid和需要授权的url进行拼接,得到授权信息。

同时,第二提取规则包括提取该会话软件对应的连接信息。连接信息是指服务器与客户端建立连接以及进行会话的基础信息,例如版本信息和连接账号,连接账号是指当前用户账号与服务器连接所编号的账号。在本实施例中,采用关键词法和标识,在查询数据寻找包含连接版本与连接账号的json数据,然后对查询数据进行提取,得到版本信息和连接账号。连接版本以及连接账号都可以通过一定的关键词提取规则实现提取,例如正则表达式,在此不再一一例举。

b22、根据所述授权信息以及所述连接信息,生成会话编号请求并发送至所述服务器。

具体地,得到授权信息以及客户端与服务器连接的连接信息后,客户端即可生成会话编号请求。本实施例中会话编号请求是指获取该用户账号所对应的各个会话的编号。例如用户a分别与用户b、用户c进行了会话,则用户a的用户账号对应的会话有两个,分别为与用户b的会话的编号以及与用户c的会话的编号。

针对环聊这一会话软件而言,对所述授权信息进行加密处理,得到所述授权信息对应的授权值。加密方式可采用sha1(securehashalgorithm1,安全散列算法1)加密,得到授权值。然后将当前的时间戳与授权值通过下划线连接,作为会话编号请求头。同时,将预设的设置参数、所述版本信息以及所述连接账号进行重组,得到会话编号请求体。设置参数还包括x-origin、x-goog-authuser以及限制返回的数据的格式类型的protobuf(googleprotocolbuffers,一种轻便高效的结构化数据存储格式)+json。最后将所述会话编号请求头和所述会话编号请求体进行拼接,生成会话编号请求。

s40、当检测到所述服务器针对所述会话编号请求发送的会话编号时,针对每一个所述会话编号,生成该会话编号对应的会话数据请求。

具体地,服务器接收到会话编号请求后,根据会话编号请求中的授权信息等内容,在数据库中寻找与用户信息对应的会话编号并发送至客户端。值得注意的是,返回的会话编号并非单独以字符串的形式存在,此时可采用遍历的方式提取服务器返回的数据,从而得到会话编号。

客户端接收到会话编号后,针对每一个会话编号,生成与之对应的会话数据请求。在本实施例中,会话编号请求可基于之前从服务器返回的数据生成。针对每一个所述会话编号,先将所述授权信息作为会话数据请求头。同时将所述会话编号以及预设的会话设置参数作为会话数据请求体,最后将所述会话数据请求头与所述会话数据请求体进行拼接,生成该会话编号对应的会话数据请求。其中,会话设置参数包括语言类型、经过填充字体对其的时间戳等。

s50、将所述会话数据请求循环发送至所述服务器,以获得所述服务器针对每一个所述会话编号发送的会话数据。

具体地,以会话编号为单位,循环向服务器发送。服务器接收到会话数据请求后,根据会话数据请求中的会话编号,从数据库中调取对应的会话数据并发送至客户端。例如先将会话数据请求按照会话编号的顺序、生成顺序等进行排序,生成会话数据请求列表。根据会话数据请求列表,客户端接收到上一个会话数据请求对应的会话数据后,再将下一个会话数据请求发送到服务器,以此实现对会话数据请求的循环发送。如图4所示,先发送会话编号a对应的会话数据请求,在检测到会话编号a对应的会话数据后,再发送会话编号b对应的会话数据请求,循环进行,直至会话数据请求列表中的会话数据请求发送完毕。

相对于循环发送会话数据请求,服务器也会循环发送会话数据,从而将一次性的会话数据发送拆分为多个小段。当用户下发暂停备份时,即检测到暂停备份指令时,暂停与服务器之间的传输,后续可采用断点续传或者重新发送请求的方式获取会话数据。

此外,在对会话数据请求进行排序时,可根据用户的需求,限制只有某一些会话进行本地备份,也就是说,对会话数据请求进行筛选,只有被用户指定的会话才会作为排序对象,进而进一步减少了需要传输的会话数据的数据量,提高备份效率。

进一步地,很多会话软件中所发送的会话数据是以json格式的形式,用户无法实现对会话数据的可视化,甚至有一些会话软件无法支持外部数据备份,即便将备份数据导入到会话软件中也会存在无法正常观看的现象。为了能够实现会话数据备份后用户可直观地看到备份的会话内容,在得到会话数据后,还会对会话数据进行可视化,其具体过程为:

针对每一个所述会话数据,对该会话编号对应的会话数据中的数据节点进行遍历,得到若干个节点数据;

针对每一个所述节点数据,对该节点数据进行解析,得到会话信息;

根据预设的显示参数,将所述会话信息进行可视化,得到该会话数据对应的会话界面。

在本实施例中,之前采用的限制会话数据的格式类型为protobuf+json,因此在对会话数据进行遍历之前,现将会话数据进行解析处理得到json格式的数据,再对json格式的会话数据的数据节点进行遍历,判断每一个数据节点中的数据类型并进行解析,得到媒体信息。本实施例中的媒体信息包括的数据类型有多媒体类型以及文本类型,多媒体类型包括图像、视频等。对节点数据进行解析还可以得到会话编号、会话时间戳、该会话中的每一条信息对应的收发状态等。将这些解析得到的媒体信息、会话时间戳等作为会话信息,根据预设的显示参数,将这些会话信息进行可视化,得到会话界面。其中,显示参数可采用与针对的会话软件相类似的参数设置。

其中,当所述数据节点为通话节点时,所述会话信息包括通话记录和参与信息。当所述数据节点为成员节点时,所述会话信息还包括成员账号。

有时候一个会话时一对一地进行,有时候是一对多地进行,当进行一对多的会话时,每一个会话对象的身份非常重要。在真实对话过程中,用户可点击会话对象的头像或名称等界面,发送身份请求,以得到该会话对象的实体信息。但在备份得到的会话数据中,一般只出在简单的会话对象的信息,例如头像、名称。因此为了实现对于备份的会话,用户也能简便地得到会话对象的实体信息,本实施例中,先对保存参与会话的成员属性的成员节点,然后对成员节点进行遍历,得到参与会话的成员账号。

先将解析得到成员账号进行拼接,得到拼接账号。然后将所述拼接账号作为成员信息请求中的拼接节点,得到成员信息请求体,同时采用上述根据授权信息生成会话数据请求的方式,生成拼接账号对应的成员信息请求并发送至服务器。

服务器根据成员信息请求发送成员实体信息至客户端。客户端检测到成员实体性信息后,对成员实体信息中的存储实体数据的实体节点中的数据进行遍历,提取得到每一个成员的名称、别名、头像和邮箱等成员实体信息。

最后将成员实体信息与之前得到的会话界面进行整合,得到包含有每一个成员的成员实体信息的会话备份。

基于上述会话备份方法,本实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上述实施例所述的会话备份方法中的步骤。

基于上述会话备份方法,本发明还提供了一种终端设备,如图5所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(communicationsinterface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。

此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取计算机可读存储介质中。

存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器20通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。

存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态计算机可读存储介质。

此外,上述计算机可读存储介质以及终端设备中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1