跳转到: 导航, 搜索
(以“=公共信息实时推送服务= <div class="wiki_txtJ"> 公共信息,主要包括地震实时数据、天气气象实时数据、地方热点实时数据等,...”为内容创建页面)
 
第3行: 第3行:
 
<div class="wiki_txtJ">
 
<div class="wiki_txtJ">
 
公共信息,主要包括地震实时数据、天气气象实时数据、地方热点实时数据等,服务于公众的公开数据。
 
公共信息,主要包括地震实时数据、天气气象实时数据、地方热点实时数据等,服务于公众的公开数据。
 +
 +
 +
微博开放平台将面向第三方开放这些数据的实时推送功能,有权限的合作伙伴接入后,将能实时获取到这些公共服务类数据。
 +
 +
 +
第三方结合自己的业务应用这些数据,最终提供给广大用户有价值的数据服务。
 
</div>
 
</div>
  
第14行: 第20行:
 
<div class="wiki_taglist">
 
<div class="wiki_taglist">
 
<ul class="clearfix">
 
<ul class="clearfix">
<li style="font-size:14px;">[[http://open.weibo.com/eq|地震实时数据接入申请]]</li>
+
<li style="font-size:14px;">[http://open.weibo.com/eq|地震实时数据接入申请]</li>
 
</ul>
 
</ul>
 
</div>
 
</div>
第29行: 第35行:
  
 
<div style="margin:15px 0;">
 
<div style="margin:15px 0;">
 +
第三方需要到微博公共信息服务平台配置自己的接收接口,即填写URL和一个token,其中URL就是第三方用来接收微博公共信息服务器传输数据的接口URL。而token将用作生成一个签名(该签名会和接口URL中包含的签名进行比对,从而让第三方可以验证请求的安全性)。
  
 +
 +
在第三方首次连接微博公共信息服务时,需要先通过一次校验来和微博服务器建立首次连接,具体来说:
 +
 +
 +
第三方提交URL等信息后,微博公共信息服务器将发送GET请求到填写的URL上,GET请求携带四个参数:
 
</div>
 
</div>
 +
 +
{|border="1" cellspacing="0" cellpadding="0" width="100%" class="parameters" style="border-color:#CCCCCC;"|-
 +
!width="20%" style="font-weight:bolder;border:1px solid #CCCCCC;"|校验参数字段
 +
!width="10%" style="font-weight:bolder;border:1px solid #CCCCCC;"|字段类型
 +
!width="70%" style="font-weight:bolder;border:1px solid #CCCCCC;"|字段说明
 +
{{rdes_args|signature|string|微博加密签名,signature结合了开发者填写的token、和请求中的timestamp参数,nonce参数。}}
 +
{{rdes_args|timestamp|string|时间戳。}}
 +
{{rdes_args|nonce|string|随机数。}}
 +
{{rdes_args|echostr|string|随机字符串。}}
 +
|}
 +
 +
<div style="margin:15px 0;">
 +
开发者收到请求后,首先通过加密后的signature参数来校验GET请求的真实性,如果确认此次GET请求来自微博公共信息服务器,原样返回echostr参数内容就可以成功建立首次连接,否则连接失败。
 +
 +
 +
signature参数的加密规则为:
 +
 +
 +
将开发者填写的token,和timestamp参数,nonce参数进行字典排序后,将三个参数字符串拼接成一个字符串进行sha1加密。例如:
 +
</div>
 +
 +
<pre>
 +
校验参数:
 +
token=xyz123xyz //开发者填写接收接口URL时,一起填写的token,由开发者自己设定
 +
timestamp=1397022061823
 +
nonce=57155157
 +
 +
加密结果:
 +
拼接后的字符串为:
 +
139702206182357155157xyz123xyz
 +
sha1签名后的结果为:
 +
90e4c22c90a58f26526c2dd5b6c56c8822edeaa1
 +
验证url有效性请求的样例为:
 +
http://yoururl?nonce=57155157&timestamp=1397022061823&echostr=dnPdpTZz85&signature=90e4c22c90a58f26526c2dd5b6c56c8822edeaa1
 +
 +
此时如果返回的是echostr的值(此样例中为dnPdpTZz85)则通过URL验证
 +
</pre>
 +
 +
 +
PHP代码示例:
 +
 +
<pre class="brush:js">
 +
function checkSignature() {
 +
$signature = $_GET["signature"];
 +
$timestamp = $_GET["timestamp"];
 +
$nonce = $_GET["nonce"];
 +
 +
$token= token;  //开发者填写的token
 +
$tmpArr = array($appsecret, $timestamp, $nonce);
 +
sort($tmpArr, SORT_STRING);
 +
$tmpStr = implode( $tmpArr );
 +
$tmpStr = sha1( $tmpStr );
 +
 +
if( $tmpStr == $signature ){
 +
return true;
 +
}else{
 +
return false;
 +
}
 +
}
 +
</pre>
  
  
第36行: 第108行:
  
 
<div style="margin:15px 0;">
 
<div style="margin:15px 0;">
 
+
推送数据按数据类型区分,比如地震数据、天气数据等,不同的数据类型单独区分权限,即仅有地震数据权限的第三方将只能接收到地震类型的数据。
 
</div>
 
</div>
  
  
 
====地震实时基础数据====
 
====地震实时基础数据====
 +
 +
【数据示例】
 +
<pre class="brush:js">
 +
{
 +
    "type": "earthquake",
 +
    "sub_type": "base",
 +
    "push_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "data": {
 +
        "data_id": "CD20141225101208.00",
 +
        "earthquake_time": "2014年12月25日10时12分07.0秒",
 +
        "longitude": "119.241997",
 +
        "latitude": "46.457298",
 +
        "depth": "53.599998",
 +
        "level": "3.1",
 +
        "place": "内蒙古自治区锡林郭勒盟东乌珠穆沁旗",
 +
        "record_type": "M"
 +
    }
 +
}
 +
</pre>
 +
 +
 +
【数据说明】
 +
{|border="1" cellspacing="0" cellpadding="0" width="100%" class="parameters" style="border-color:#CCCCCC;"|-
 +
!width="20%" style="font-weight:bolder;border:1px solid #CCCCCC;"|属性
 +
!width="10%" style="font-weight:bolder;border:1px solid #CCCCCC;"|值的类型
 +
!width="70%" style="font-weight:bolder;border:1px solid #CCCCCC;"|说明描述
 +
{{rdes_args|data_id|string|地震数据编号。}}
 +
{{rdes_args|earthquake_time|string|地震发生时间。}}
 +
{{rdes_args|longitude|string|地震发生经度。}}
 +
{{rdes_args|latitude|string|地震发生纬度。}}
 +
{{rdes_args|depth|string|地震发生深度,单位千米。}}
 +
{{rdes_args|level|string|地震震级。}}
 +
{{rdes_args|place|string|地震发生地点。}}
 +
{{rdes_args|record_type|string|地震测定类型,A:自动测定,M:手动测定。}}
 +
|}
 +
 +
 +
 +
{{#a:nobtns|noheading}}
 +
__NOTOC__

2015年2月3日 (二) 10:27的版本

公共信息实时推送服务

公共信息,主要包括地震实时数据、天气气象实时数据、地方热点实时数据等,服务于公众的公开数据。


微博开放平台将面向第三方开放这些数据的实时推送功能,有权限的合作伙伴接入后,将能实时获取到这些公共服务类数据。


第三方结合自己的业务应用这些数据,最终提供给广大用户有价值的数据服务。


接入流程

目前微博开放平台仅先开放地震实时数据的推送,接入方可以到申请页面提交申请,审核通过后即可进入应用后台进行推送配置,实现数据的接入。


第三方接收推送接口

第三方接收公共信息推送服务推送过来的数据,需要有自己的服务器资源,并完成接收接口的开发。


接收接口的配置与有效性验证

第三方需要到微博公共信息服务平台配置自己的接收接口,即填写URL和一个token,其中URL就是第三方用来接收微博公共信息服务器传输数据的接口URL。而token将用作生成一个签名(该签名会和接口URL中包含的签名进行比对,从而让第三方可以验证请求的安全性)。


在第三方首次连接微博公共信息服务时,需要先通过一次校验来和微博服务器建立首次连接,具体来说:


第三方提交URL等信息后,微博公共信息服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

校验参数字段 字段类型 字段说明
signature string 微博加密签名,signature结合了开发者填写的token、和请求中的timestamp参数,nonce参数。
timestamp string 时间戳。
nonce string 随机数。
echostr string 随机字符串。

开发者收到请求后,首先通过加密后的signature参数来校验GET请求的真实性,如果确认此次GET请求来自微博公共信息服务器,原样返回echostr参数内容就可以成功建立首次连接,否则连接失败。


signature参数的加密规则为:


将开发者填写的token,和timestamp参数,nonce参数进行字典排序后,将三个参数字符串拼接成一个字符串进行sha1加密。例如:

校验参数:
token=xyz123xyz //开发者填写接收接口URL时,一起填写的token,由开发者自己设定
timestamp=1397022061823
nonce=57155157

加密结果:
拼接后的字符串为:
139702206182357155157xyz123xyz
sha1签名后的结果为:
90e4c22c90a58f26526c2dd5b6c56c8822edeaa1
验证url有效性请求的样例为:
http://yoururl?nonce=57155157&timestamp=1397022061823&echostr=dnPdpTZz85&signature=90e4c22c90a58f26526c2dd5b6c56c8822edeaa1

此时如果返回的是echostr的值(此样例中为dnPdpTZz85)则通过URL验证


PHP代码示例:

function checkSignature() {
	$signature = $_GET["signature"];
	$timestamp = $_GET["timestamp"];
	$nonce = $_GET["nonce"];	
	
	$token= token;  //开发者填写的token
	$tmpArr = array($appsecret, $timestamp, $nonce);
	sort($tmpArr, SORT_STRING);
	$tmpStr = implode( $tmpArr );
	$tmpStr = sha1( $tmpStr );
	
	if( $tmpStr == $signature ){
		return true;
	}else{
		return false;
	}
}


推送数据类型及数据说明

推送数据按数据类型区分,比如地震数据、天气数据等,不同的数据类型单独区分权限,即仅有地震数据权限的第三方将只能接收到地震类型的数据。


地震实时基础数据

【数据示例】

{
    "type": "earthquake",
    "sub_type": "base",
    "push_at": "Mon Jul 16 18:09:20 +0800 2012",
    "data": {
        "data_id": "CD20141225101208.00",
        "earthquake_time": "2014年12月25日10时12分07.0秒",
        "longitude": "119.241997",
        "latitude": "46.457298",
        "depth": "53.599998",
        "level": "3.1",
        "place": "内蒙古自治区锡林郭勒盟东乌珠穆沁旗",
        "record_type": "M"
    }
}


【数据说明】

属性 值的类型 说明描述
data_id string 地震数据编号。
earthquake_time string 地震发生时间。
longitude string 地震发生经度。
latitude string 地震发生纬度。
depth string 地震发生深度,单位千米。
level string 地震震级。
place string 地震发生地点。
record_type string 地震测定类型,A:自动测定,M:手动测定。