(以“=公共信息实时推送服务= <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;"> | + | <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×tamp=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×tamp=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:手动测定。 |