订阅服务手册

跳转到: 导航, 搜索
(使用步骤)
 
(未显示5个用户的41个中间版本)
第19行: 第19行:
 
<font size="2" style="font-weight:bold">订阅用户:</font>
 
<font size="2" style="font-weight:bold">订阅用户:</font>
  
开发者可最多指定10000个用户。当订阅微博时,微博为指定用户发出的,则推送;当订阅评论时,评论对应的微博为指定用户产生的评论则推送;若不指定,则无此限制。
+
开发者可最多指定10000个用户。当订阅微博时,微博为指定用户发出的,则推送;当订阅评论时,推送指定用户发布的微博下的评论(不是该指定用户发出的评论)。
  
  
 
<font size="2" style="font-weight:bold">订阅关键词:</font>
 
<font size="2" style="font-weight:bold">订阅关键词:</font>
  
开发者可最多指定400个关键词。当订阅微博时,微博中含有指定关键词的,则推送;当订阅评论时,评论对应的微博含有此关键词的评论则推送;若不指定,则无此限制。
+
开发者可最多指定20000个关键词。当订阅微博时,微博中含有指定关键词,则推送;当订阅评论时,评论对应的微博(如果是转发微博,不匹配原创微博里的内容)含有此关键词、或评论本身含有此关键词的评论则推送。
 +
 
 +
注:当转发微博的内容中不含该关键词,而原微博中包含,这种情况默认不推送;如需要匹配原创微博中的内容,可单独申请对应配置。
  
  
第55行: 第57行:
  
 
开发者可指定推送开始时间和结束时间。在指定开始时间推送服务准备就绪,结束时间终止推送。若不指定,则开始时间默认等于订阅生成时间,一直推送。在推送服务准备就绪时,开发者可以调用接口进行连接,从而接收数据。
 
开发者可指定推送开始时间和结束时间。在指定开始时间推送服务准备就绪,结束时间终止推送。若不指定,则开始时间默认等于订阅生成时间,一直推送。在推送服务准备就绪时,开发者可以调用接口进行连接,从而接收数据。
 
  
 
=使用步骤=
 
=使用步骤=
  
付费订阅服务使用步骤如下:
+
订阅服务使用步骤如下:
 +
 
 +
{{center|http://www.sinaimg.cn/blog/developer/wiki/pics/subscription.png}}
 +
 
 +
 
 +
<font size="2" style="font-weight:bold">① 生成订阅:</font>
 +
 
 +
开发者线下填写[http://www.sinaimg.cn/blog/developer/wiki/picchart/subscriptionform.doc  订阅服务申请单],填写订阅条件等信息,平台人员根据申请单信息,生成订阅。每个应用可以有多个订阅。需要试用订阅服务的开发者,请在线自助提交申请(详见接入指南),不用填写申请单。
 +
 
 +
 
 +
<font size="2" style="font-weight:bold">② 设置订阅的关键词、用户:</font>
 +
 
 +
[http://www.sinaimg.cn/blog/developer/wiki/picchart/subscriptionform.doc  订阅服务申请单]中“订阅关键词”、“订阅用户”选择否时,忽略此步骤。选择是时,则需保证关键词订阅列表和用户订阅列表一定不为空。订阅关键词、用户(若已经订阅了关键词、用户,则可忽略此步骤),请求接口:[[C/2/subscribe/update_subscribe|subscribe/update_subscribe]]
 +
 
 +
 
 +
请求该接口的IP一定是订阅时指定的IP列表中的某个IP地址,否则会返回错误提示:Ip is limited(ip受限)。当只传subid时,返回该订阅的订阅信息,包括订阅的关键词列表、用户列表。
 +
 
 +
 
 +
每个关键词由逗号分隔,逗号分隔的关键词之间是逻辑“或”的关系。
 +
 
 +
每个关键词长度不能超出35个汉字,不能超出105个英文字母。
 +
 
 +
每个关键词内部支持“与”、“非”逻辑,逻辑“与”,由“空格”分隔:如A B;逻辑“非”,由“空格-”分隔:如A -B。当关键词两边带有双引号时,表示关键词内容绝对匹配,逻辑运算失效,如:“A B”,不再表示逻辑A与B。
 +
 
 +
每个订阅的关键词总数不超过20000个,其中逻辑关键词不超过 1000 个。
 +
 
 +
每次调用接口订阅的关键词不能超过50个。每次调用接口订阅的用户不能超过50个。每个订阅的关键词总数、用户总数不能超过20000个,且不能重复订阅。
 +
 
 +
微博平台对某些关键词和用户会设置成保护状态,被保护的关键词和用户不能被订阅。一个关键词被保护后,包含此关键词的词都不能被订阅。订阅的关键词及按关键词过滤后的数据不区分大小写、简繁体。
 +
 
 +
 
 +
<font size="2" style="font-weight:bold">③ 推送服务就绪:</font>
 +
 
 +
开发者若在申请单中指定了推送开始时间,则在指定开始时间该订阅的推送服务就绪;若没有指定,则订阅生成后推送服务就已经就绪。
 +
 
 +
 
 +
<font size="2" style="font-weight:bold">④ 应用连接、推送开始:</font>
 +
 
 +
若订阅已经生成,但推送服务未就绪,则开发者订阅管理后台的推送状态显示:准备中;若推送服务已经就绪,则显示:准备就绪。在准备就绪状态下,应用才可以调用接口进行连接,接收数据。否则,调用接口时报错。
 +
 
 +
<!--== 广告API ==
 +
调用接口如下:
 +
 
 +
● 订阅微博,调用接口:[[C/2/datapush/status|datapush/status]]
 +
 
 +
● 订阅评论,调用接口:[[C/2/datapush/comment|datapush/comment]]
 +
 
 +
 
 +
java调用,见[[示例代码]]。
 +
-->
 +
*<font style="color:red">订阅微博和评论是一个接口,地址为:</font>[[C/2/commercial/push|commercial/push]]
 +
 
 +
java调用,见[[新版示例代码]]。
 +
 
 +
 
 +
<font size="2" style="font-weight:bold">⑤ 应用接收数据:</font>
 +
 
 +
连接成功后,接口将向开发者的连接地址推送微博、或评论数据。每条完整的微博或评论数据以json形式返回,默认采用UTF-8编码,且以\r\n分隔。
 +
 
 +
 
 +
返回数据见:[[示例]]。
 +
 
 +
 
 +
<font size="2" style="font-weight:bold">⑥ 推送终止:</font>
 +
 
 +
若开发者未指定推送结束时间,则一直推送;若指定结束时间,则在指定的推送结束时间终止推送。相当于此订阅过期,不会再被重启使用。
 +
 
 +
 
 +
<!--== 广告API ==
 +
=旧版使用说明=
 +
 
 +
应用通过HTTP长连接请求接口/datapush/status或/ datapush/comment接收数据。需传入参数subid(订阅ID)告知平台推送哪个订阅的数据。若请求正确,则返回相应[[示例|数据结果]]。若请求异常,则返回相应[[错误代码定义|错误信息]]。
 +
 
 +
 
 +
为了缓解服务器压力,平台推送数据每十分钟会断开一次,应用程序需要兼容,重新HTTP长连接请求接口,并可以带上上次断开时的id值,作为参数since_id的值传入,如:/datapush/status?subid=xxx&since_id=XXX 。应用就可以从断开的点连续获取数据。所以需要应用保留服务断开时的id,作为下次请求的参数值。因为订阅服务推送的数据是实时的,所以平台只保留五分钟的数据,断开超过五分钟,则参数since_id不再支持,若传入since_id,则返回错误提示:Illegal param since_id(since_id不合法,超过时间限制)。 如果不传since_id,平台会过滤当前时间点前5万条数据中符合条件的数据推送给用户。
 +
 
 +
 
 +
当应用出现违规操作或其他原因,平台会暂停该订阅的数据推送功能,即不再推送数据。直到问题解决后,平台可以重启推送功能。应用需要HTTP长连接重新请求接口。
 +
 
 +
 
 +
另外,应用请求接口的IP一定是订阅时指定的IP列表中的某个IP地址,否则会返回错误提示:Ip is limited(ip受限)。
 +
-->
 +
 
 +
=使用说明=
 +
应用通过HTTP长连接请求接口/commercial/push接收数据。需传入参数subid(订阅ID)告知平台推送哪个订阅的数据。若请求正确,则返回相应[[示例|数据结果]]。若请求异常,则返回相应[[新版错误代码定义|错误信息]]。
 +
 
 +
 
 +
当应用出现违规操作或其他原因,平台会暂停该订阅的数据推送功能,即不再推送数据。直到问题解决后,平台可以重启推送功能。应用需要HTTP长连接重新请求接口。
 +
 
  
*1、生成订阅:
+
另外,应用请求接口的IP一定是订阅时指定的IP列表中的某个IP地址,否则会返回错误提示:Ip is limited(ip受限)。
**开发者线下填写附的<b>订阅服务申请单</b>,填写<b>订阅条件</b>等信息,平台人员根据申请单信息,生成订阅。每个应用可以有多个订阅。
+
*2、推送服务就绪:
+
**开发者若在申请单中指定了<b>推送开始时间,</b>则在<b>指定开始时间</b>该订阅的推送服务就绪;若没有指定,则<b>订阅生成</b>后推送服务就已经就绪。
+
*3、应用连接、推送开始:
+
**若<b>订阅已经生成</b>,但<b>推送服务未就绪</b>,则<b>开发者订阅管理后台</b>的<b>推送状态</b>显示:<b>准备中</b>;若推送服务<b>已经就绪</b>,则显示:<b>准备就绪</b>。在<b>准备就绪</b>状态下,应用<b>才可以调用接口</b>进行<b>连接</b>,<b>接收数据</b>。否则,调用接口时报错。调用接口如下:
+
***a.、'''订阅微博''',调用如下接口:
+
****接口名称:datapush/status
+
****调用该接口进行连接,接收'''微博'''数据。
+
****URL:http://180.149.153.38/datapush/status or http://180.149.153.39/datapush/status
+
****HTTP Request Method:
+
****GET
+
****Requires Authentication:
+
****False
+
Parameters:
+
<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="margin-left:5.4pt;border-collapse:collapse;border:none;mso-border-alt:
+
solid windowtext .5pt;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
+
mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext">
+
  
<tr>
 
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
 
  mso-border-alt:solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt"></td>
 
<td width="74" valign="top" style="width:55.55pt;border:solid windowtext 1.0pt;
 
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
 
  solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><b><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体">Required</span></b></p>
 
</td>
 
<td width="77" valign="top" style="width:57.85pt;border:solid windowtext 1.0pt;
 
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
 
  solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><b><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体">Type</span></b></p>
 
</td>
 
<td width="306" valign="top" style="width:229.3pt;border:solid windowtext 1.0pt;
 
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
 
  solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><b><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体">Description</span></b></p>
 
</td>
 
</tr>
 
  
<tr>
+
更多说明请见文档[[C/2/commercial/push|commercial/push]]。
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
=状态说明=
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">subid</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;
+
  mso-bidi-font-family:宋体"></span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">true</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:
+
  宋体"></span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">int</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:
+
  宋体"></span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">订阅</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">(订阅</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">的获取见附</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">2</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">的截图说明)</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体"></span></p>
+
</td>
+
</tr>
+
  
<tr>
+
在开发者管理中心,可以看到服务的各种显示状态,如下图红框所示:{{center|http://www.sinaimg.cn/blog/developer/wiki/picchart/subscription_start.png}}
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">since_id</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;"></span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">long</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">上次连接断开时的数据</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">。保存断开后五分钟内的数据,可以通过</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">since_id</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">获取断开五分钟内的数据</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;"></span></p>
+
</td>
+
</tr>
+
  
<tr>
+
服务状态有:准备中、准备就绪、已开启、已暂停、已终止五种。
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">add_keywords</span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">添加要订阅的关键词,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">20</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">个关键词,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
+
</td>
+
</tr>
+
  
<tr>
 
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
 
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
 
  padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
 
  11.0pt">del_keywords</span></p>
 
</td>
 
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
 
</td>
 
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
 
</td>
 
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
 
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">删除已订阅的关键词,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">20</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
 
  Calibri;mso-hansi-font-family:Calibri">个关键词,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
 
</td>
 
</tr>
 
  
<tr>
+
<font size="2" style="font-weight:bold">1) 准备中:</font>
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">add_users</span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">添加要订阅的用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">50</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">个用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
+
</td>
+
</tr>
+
  
<tr>
+
订阅已经生成但未到开发者指定的推送开始时间,为准备中状态(此时开发者无法连接接收数据)。如果开发者未指定推送开始时间,则订阅生成后,无准备中状态,直接进入准备就绪状态。
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">del_users</span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">删除已订阅的用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">50</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">个用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
+
</td>
+
</tr>
+
  
</table>
 
  
 +
<font size="2" style="font-weight:bold">2) 准备就绪:</font>
  
 +
订阅生成,已经到推送开始时间,但开发者未连接接收数据,为准备就绪状态。或订阅生成,开发者未指定推送开始时间,开发者未连接接收数据,则服务也为准备就绪状态。
  
***b、'''订阅评论''',调用如下接口:
 
****接口名称:datapush/comment
 
****调用该接口进行连接,接收'''评论'''数据。
 
****URL:http://180.149.153.40/datapush/comment or http://180.149.153.41/datapush/comment
 
****HTTP Request Method:
 
****GET
 
****Requires Authentication:
 
****False
 
  
Parameters:
+
<font size="2" style="font-weight:bold">3) 已开启:</font>
<table class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="margin-left:5.4pt;border-collapse:collapse;border:none;mso-border-alt:
+
solid windowtext .5pt;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
+
mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext">
+
  
<tr>
+
在准备就绪状态下,开发者连接接收数据,服务进入已开启状态。
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  mso-border-alt:solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt"></td>
+
<td width="74" valign="top" style="width:55.55pt;border:solid windowtext 1.0pt;
+
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
+
  solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><b><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体">Required</span></b></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border:solid windowtext 1.0pt;
+
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
+
  solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><b><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体">Type</span></b></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border:solid windowtext 1.0pt;
+
  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
+
  solid windowtext .5pt;background:#EEECE1;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><b><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体">Description</span></b></p>
+
</td>
+
</tr>
+
  
<tr>
 
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
 
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
 
  padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
 
  11.0pt">subid</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;
 
  mso-bidi-font-family:宋体"></span></p>
 
</td>
 
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">true</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:
 
  宋体"></span></p>
 
</td>
 
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">int</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:
 
  宋体"></span></p>
 
</td>
 
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
 
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">订阅</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
 
  Calibri;mso-hansi-font-family:Calibri">(订阅</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
 
  Calibri;mso-hansi-font-family:Calibri">的获取见附</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">2</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
 
  Calibri;mso-hansi-font-family:Calibri">的截图说明)</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:宋体"></span></p>
 
</td>
 
</tr>
 
  
<tr>
+
<font size="2" style="font-weight:bold">4) 已暂停:</font>
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">since_id</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;"></span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">long</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">上次连接断开时的数据</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">。保存断开后五分钟内的数据,可以通过</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">since_id</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">获取断开五分钟内的数据</span><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;"></span></p>
+
</td>
+
</tr>
+
  
<tr>
+
当应用出现违规操作或由于其他原因,平台将该订阅的推送功能暂停,则服务转为已暂停状态。
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">add_keywords</span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">添加要订阅的关键词,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">20</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">个关键词,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
+
</td>
+
</tr>
+
  
<tr>
 
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
 
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
 
  padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
 
  11.0pt">del_keywords</span></p>
 
</td>
 
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
 
</td>
 
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
 
</td>
 
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
 
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
 
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
 
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
 
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
 
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">删除已订阅的关键词,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">20</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
 
  Calibri;mso-hansi-font-family:Calibri">个关键词,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
 
</td>
 
</tr>
 
  
<tr>
+
<font size="2" style="font-weight:bold">5) 已终止:</font>
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">add_users</span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">添加要订阅的用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">50</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">个用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
+
</td>
+
</tr>
+
  
<tr>
+
若开发者未指定推送结束时间,则一直推送;若指定结束时间,则在指定的推送结束时间终止推送。相当于此订阅过期,不会再被重启使用。此时服务为已终止状态;
<td width="104" valign="top" style="width:78.0pt;border:solid windowtext 1.0pt;
+
  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;
+
  padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:
+
  11.0pt">del_users</span></p>
+
</td>
+
<td width="74" valign="top" style="width:55.55pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">false</span></p>
+
</td>
+
<td width="77" valign="top" style="width:57.85pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span lang="EN-US" style="font-family:&quot;Segoe UI Symbol&quot;,&quot;sans-serif&quot;">string</span></p>
+
</td>
+
<td width="306" valign="top" style="width:229.3pt;border-top:none;border-left:
+
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
+
  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
+
  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt">
+
<p class="MsoNormal"><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
+
  font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">删除已订阅的用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,最多指定</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">50</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">个用户</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt">ID</span><span style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:宋体;mso-ascii-font-family:
+
  Calibri;mso-hansi-font-family:Calibri">,由英文半角逗号分隔</span><span lang="EN-US" style="font-size:10.0pt;mso-bidi-font-size:11.0pt"></span></p>
+
</td>
+
</tr>
+
  
</table>
 
  
  
<p class="MsoNormal"><b><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">接口调用</span><span lang="EN-US">java</span></b><b><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">代码示例如下:</span><span lang="EN-US"></span></b></p>
+
{{Languages|订阅服务手册}}
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal" style="text-indent:21.0pt;mso-char-indent-count:2.0"><span lang="EN-US">//</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
+
mso-hansi-font-family:Calibri">从</span><span lang="EN-US">datapush</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">服务器获取连接</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //streaming
+
server</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
+
mso-hansi-font-family:Calibri">列表,可以配置,当前</span><span lang="EN-US">sever
+
180.149.153.38</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;
+
mso-hansi-font-family:Calibri">,</span><span lang="EN-US">180.149.153.39</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">微博</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private
+
List&lt;String&gt; streamingUrlList;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">当前连接的</span><span lang="EN-US">streaming server</span><span style="font-family:宋体;mso-ascii-font-family:
+
Calibri;mso-hansi-font-family:Calibri">,可以配置</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private
+
int curStreamUrlIndex =0;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private
+
GetMethod connectStreamServer() throws StreamingException {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String
+
targetURL = streamingUrlList.get(curStreamUrlIndex);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">从指定的</span><span lang="EN-US">location</span><span style="font-family:宋体;mso-ascii-font-family:
+
Calibri;mso-hansi-font-family:Calibri">开始读取数据,保证读取数据的连续性,消息完整性</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">链接断开的重新链接机制</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(lastMsgLocation
+
&gt; 0){</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; targetURL
+
+= "&amp;loc=" + lastMsgLocation;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.info("StreamingReceiver
+
http get url=" + targetURL);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod
+
method = new GetMethod(targetURL);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
+
statusCode;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try
+
{</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; statusCode
+
= httpClient.executeMethod(method);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+
</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception
+
e){</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //dealException;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(statusCode != HttpStatus.SC_OK) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw
+
new StreamingException(".. ");</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try
+
{</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inputStream
+
= new &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataInputStream(method.getResponseBodyAsStream());</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+
catch (IOException e) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw
+
new StreamingException("get stream input io exception", e);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+
method;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">//</span><span style="font-family:宋体;
+
mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">开一个线程从服务器读取数据:</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">public void run() {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetMethod
+
method=null;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recIndex
+
= 0;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recBuf
+
= new byte[recBufSize];</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method
+
= connectStreamServer();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processLine();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception
+
e){</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">当连接断开时,重新连接</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.error("streaming
+
process error ",e);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; curStreamUrlIndex=++curStreamUrlIndex
+
% streamingUrlList.size();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }finally{</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.releaseConnection();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private
+
void processLine() throws IOException{</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[]
+
bytes = readLineBytes();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(bytes
+
!= null &amp;&amp; bytes.length &gt; 0){</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String
+
message = new String(bytes);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //handle
+
the message you get</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleMessage()
+
</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:
+
Calibri">;</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastMsgLocation=Message.getId();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public
+
byte[] readLineBytes() throws IOException {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[]
+
result = null;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByteArrayOutputStream
+
bos = new ByteArrayOutputStream();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
+
readCount = 0;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(recIndex &gt; 0 &amp;&amp; read(bos)) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+
bos.toByteArray();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while
+
((readCount = inputStream.read(recBuf, recIndex, recBuf.length</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -
+
recIndex)) &gt; 0) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recIndex
+
= recIndex + readCount;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(read(bos)) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result
+
= bos.toByteArray();</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(result == null</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ||
+
(result != null &amp;&amp; result.length &lt;= 0 &amp;&amp; recIndex &lt;= 0))
+
{</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw
+
new IOException(</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "++++
+
Stream appears to be dead, so closing it down");</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
+
result;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private
+
boolean read(ByteArrayOutputStream bos) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean
+
result = false;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int
+
index = -1;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for
+
(int i = 0; i &lt; recIndex - 1; i++) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(recBuf[i] == 13 &amp;&amp; recBuf[i + 1] == 10) {//13 cr-</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">回车</span><span lang="EN-US"> 10 lf-</span><span style="font-family:宋体;mso-ascii-font-family:
+
Calibri;mso-hansi-font-family:Calibri">换行</span><span lang="EN-US"></span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index
+
= i;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(index &gt;= 0) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.write(recBuf,
+
0, index);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[]
+
newBuf = new byte[recBufSize];</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(recIndex &gt; index + 2) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.arraycopy(recBuf,
+
index + 2, newBuf, 0, recIndex</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -
+
index - 2);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recBuf
+
= newBuf;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recIndex
+
= recIndex - index - 2;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result
+
= true;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+
else {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if
+
(recBuf[recIndex - 1] == 13) {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.write(recBuf,
+
0, recIndex - 1);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Arrays.fill(recBuf,(byte)0);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recBuf[0]
+
= 13;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recIndex
+
= 1;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+
else {</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bos.write(recBuf,
+
0, recIndex);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Arrays.fill(recBuf,(byte)0);</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recIndex
+
= 0;</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
+
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&n
+

2020年9月28日 (一) 16:44的最后版本

目录

服务简介

微博平台订阅服务提高了应用获取微博数据的效率。根据应用指定的订阅条件,如:关键词、用户、域名等,平台主动将新产生的数据实时推送给应用,应用不需要轮询请求接口。


订阅服务优点如下:

1、将新数据实时推送给应用;

2、节省网络开销;

3、提供数据量更多更全;

4、提高应用访问接口的效率;


订阅条件

订阅用户:

开发者可最多指定10000个用户。当订阅微博时,微博为指定用户发出的,则推送;当订阅评论时,推送指定用户发布的微博下的评论(不是该指定用户发出的评论)。


订阅关键词:

开发者可最多指定20000个关键词。当订阅微博时,微博中含有指定关键词,则推送;当订阅评论时,评论对应的微博(如果是转发微博,不匹配原创微博里的内容)含有此关键词、或评论本身含有此关键词的评论则推送。

注:当转发微博的内容中不含该关键词,而原微博中包含,这种情况默认不推送;如需要匹配原创微博中的内容,可单独申请对应配置。


订阅域名:

开发者可最多指定20个域名。当订阅微博时,微博中包含短链所对应原始链接为指定域名下的,则推送;当订阅评论时,评论对应的微博内包含短链所对应原始链接为指定域名的评论则推送;若不指定,则无此限制。


订阅应用:

开发者可指定只推送生成订阅的应用产生的数据,若不指定则推送所有应用的数据。


订阅媒体类型:

当订阅微博时,才可以指定该条件。开发者可指定原创、转发、视频、音乐、或图片类型。则推送指定类型的微博;若不指定,则无此限制;当订阅评论时,无此筛选条件。


订阅数据类型:

开发者可指定推送微博、或评论数据;若不指定,则默认推送微博。


订阅百分比:

开发者可指定满足以上订阅条件的数据的百分比,若不指定,则推送满足条件的1%数据。


订阅时间范围:

开发者可指定推送开始时间和结束时间。在指定开始时间推送服务准备就绪,结束时间终止推送。若不指定,则开始时间默认等于订阅生成时间,一直推送。在推送服务准备就绪时,开发者可以调用接口进行连接,从而接收数据。

使用步骤

订阅服务使用步骤如下:

subscription.png


① 生成订阅:

开发者线下填写订阅服务申请单,填写订阅条件等信息,平台人员根据申请单信息,生成订阅。每个应用可以有多个订阅。需要试用订阅服务的开发者,请在线自助提交申请(详见接入指南),不用填写申请单。


② 设置订阅的关键词、用户:

订阅服务申请单中“订阅关键词”、“订阅用户”选择否时,忽略此步骤。选择是时,则需保证关键词订阅列表和用户订阅列表一定不为空。订阅关键词、用户(若已经订阅了关键词、用户,则可忽略此步骤),请求接口:subscribe/update_subscribe


请求该接口的IP一定是订阅时指定的IP列表中的某个IP地址,否则会返回错误提示:Ip is limited(ip受限)。当只传subid时,返回该订阅的订阅信息,包括订阅的关键词列表、用户列表。


每个关键词由逗号分隔,逗号分隔的关键词之间是逻辑“或”的关系。

每个关键词长度不能超出35个汉字,不能超出105个英文字母。

每个关键词内部支持“与”、“非”逻辑,逻辑“与”,由“空格”分隔:如A B;逻辑“非”,由“空格-”分隔:如A -B。当关键词两边带有双引号时,表示关键词内容绝对匹配,逻辑运算失效,如:“A B”,不再表示逻辑A与B。

每个订阅的关键词总数不超过20000个,其中逻辑关键词不超过 1000 个。

每次调用接口订阅的关键词不能超过50个。每次调用接口订阅的用户不能超过50个。每个订阅的关键词总数、用户总数不能超过20000个,且不能重复订阅。

微博平台对某些关键词和用户会设置成保护状态,被保护的关键词和用户不能被订阅。一个关键词被保护后,包含此关键词的词都不能被订阅。订阅的关键词及按关键词过滤后的数据不区分大小写、简繁体。


③ 推送服务就绪:

开发者若在申请单中指定了推送开始时间,则在指定开始时间该订阅的推送服务就绪;若没有指定,则订阅生成后推送服务就已经就绪。


④ 应用连接、推送开始:

若订阅已经生成,但推送服务未就绪,则开发者订阅管理后台的推送状态显示:准备中;若推送服务已经就绪,则显示:准备就绪。在准备就绪状态下,应用才可以调用接口进行连接,接收数据。否则,调用接口时报错。

java调用,见新版示例代码


⑤ 应用接收数据:

连接成功后,接口将向开发者的连接地址推送微博、或评论数据。每条完整的微博或评论数据以json形式返回,默认采用UTF-8编码,且以\r\n分隔。


返回数据见:示例


⑥ 推送终止:

若开发者未指定推送结束时间,则一直推送;若指定结束时间,则在指定的推送结束时间终止推送。相当于此订阅过期,不会再被重启使用。


使用说明

应用通过HTTP长连接请求接口/commercial/push接收数据。需传入参数subid(订阅ID)告知平台推送哪个订阅的数据。若请求正确,则返回相应数据结果。若请求异常,则返回相应错误信息


当应用出现违规操作或其他原因,平台会暂停该订阅的数据推送功能,即不再推送数据。直到问题解决后,平台可以重启推送功能。应用需要HTTP长连接重新请求接口。


另外,应用请求接口的IP一定是订阅时指定的IP列表中的某个IP地址,否则会返回错误提示:Ip is limited(ip受限)。


更多说明请见文档commercial/push

状态说明

在开发者管理中心,可以看到服务的各种显示状态,如下图红框所示:
subscription_start.png

服务状态有:准备中、准备就绪、已开启、已暂停、已终止五种。


1) 准备中:

订阅已经生成但未到开发者指定的推送开始时间,为准备中状态(此时开发者无法连接接收数据)。如果开发者未指定推送开始时间,则订阅生成后,无准备中状态,直接进入准备就绪状态。


2) 准备就绪:

订阅生成,已经到推送开始时间,但开发者未连接接收数据,为准备就绪状态。或订阅生成,开发者未指定推送开始时间,开发者未连接接收数据,则服务也为准备就绪状态。


3) 已开启:

在准备就绪状态下,开发者连接接收数据,服务进入已开启状态。


4) 已暂停:

当应用出现违规操作或由于其他原因,平台将该订阅的推送功能暂停,则服务转为已暂停状态。


5) 已终止:

若开发者未指定推送结束时间,则一直推送;若指定结束时间,则在指定的推送结束时间终止推送。相当于此订阅过期,不会再被重启使用。此时服务为已终止状态;


Language: 中文  | English
文档更新时间: 2020-09-28