UC开放平台—信息流API接入文档

1、前言
欢迎您接入UC信息流开放平台!随着互联网时代的飞速发展,为了满足用户对于内容的检索及消费的核心诉求,UC基于阿里专业数据挖掘能力和智能推荐算法、以及优质丰富的资讯内容,为用户提供个性化内容推荐服务。当我们的合作伙伴接入UC信息流后,可以帮助合作方的APP有效地提升用户的打开频次及使用时长,积累用户数据,与此同时,又能够展示更多的广告,从而帮助合作方带来更多的收益。 目前,已经很多厂商与我们合作,部分合作伙伴在API接入过程中,可能会碰到一些问题,因此我们简要地介绍一下API接入过程以及过程中常见的问题,以帮助大家更快地接入API。在这里也对那些为我们提供过很多帮助的厂商一并表示感谢!
温馨提示
目录中带有*标识为必要接口,否则会影响信息流数据加载或数据统计。

2、展示效果
如果您成功地接入UC信息流,整体的展示效果如下: 以下新闻列表页和新闻详情页的样式,供参考。

新闻列表页 新闻详情页
新闻详情页 新闻详情页

看到效果了吗?好啦,您可以跟随我们的指引开始接入啦~~

3、*应用授权 第一步:应用授权。
为保证接口调用的安全性,UC信息流开放给第三方的接口访问均需要进行授权。
授权流程:
1、UC信息流根据合作方的信息会在内部平台为合作方创建相应的app,并分配app_id,app_secret给合作方。
2、合作方客户端使用步骤1中获取的app_id, app_secret 调用UC信息流平台的获取access_token接口(见3.1获取access_token)。
3、UC信息流收到请求后,回调post请求合作方redirect_url服务,携带参数名为access_token的请求参数。
注:为保证数据不被劫持,合作方redirect_url 对应的服务强烈建议使用https协议。
4、合作方服务端在接收到UC信息流平台的回调时,需返回success的字符串,代表接收成功。
注:如果UC信息流平台没有收到合作方服务端的返回,会以每次间隔递增1分钟的方式,累计回调合作方服务端30次。
5、合作方使用步骤4中获取的access_token 调用UC信息流平台业务接口。

说明
1、为了确保token的安全性,需要合作方在应用创建时提供有效的redirect_url 给UC信息流平台,UC信息流平台会将access_token回调给redirect_url对应的服务,而不是合作方的客户端。 示例:
示例图片
2、token的有效期:token的有效期为7天,UC信息流平台会根据策略更新合作方的token。在请求业务接口时,如果收到access_token无效的code, 合作方直接请求自己的redirect_url服务获取接收的最新的token即可。因为UC信息流平台在更新合作方的token时,会确保合作方成功收到最新的token 回调时,才会生效当前的最新token。因此保证redirect_url服务的可用性十分重要。 接入流程图(图中两次”获取access_token”, 步骤2参考3.1, 步骤4和5 合作方自行设定调用接口): !layers

3.1 *获取access_token
您大概了解UC信息流的授权流程了吗?接下来获取应用授权吧。
接口:https://open.uczzd.cn/openiflow/auth/token
请求方式:post
请求参数:

名称 类型 描述
app_id string app_id
app_secret string app_secret

响应:

名称 类型 描述
code int 状态码0为正常,表示已通知最新的access_token 到第三方的接收服务。非0表示失败,原因见msg
msg string 描述

示例:

{
    "code": "0",
    "msg": "success"
}

好的,经过第一步,相信您已经获取到我们提供的access_token啦,接下来开始接入信息流频道啦~~

4、 业务接口

业务模块介绍

模块接口名称 模块简介 是否必须
频道列表 UC信息流的频道列表,能够获取到该渠道下所有频道信息,包括频道名称、频道id
单个频道新闻列表 UC信息流单个频道的新闻列表,能够获取到该频道下的列表内容
广告接入&统计 1、广告列表有单独的卡片样式,请支持广告卡片样式(具体参考附1)2、如果有接入广告,则必须支持广告展现统计,否则会影响分成
客户端事件上传 用户行为数据上传接口,根据用户画像下发个性化推荐内容,能有效提升用户的打开频次及使用时长
本地新闻 本地城市新闻列表,让用户及时、全面了解当地民生、时政新闻,以及社会动态等信息
推荐相关新闻 相关推荐新闻列表,获得用户感兴趣的推荐文章
获取文章评论 获取用户的评论内容

在接入频道列表之前,您先来看看我们对业务接口的相关约定吧。
相关约定
1.接口协议采用https。
2.接口需要在请求url中上报当前应用的access_token,以便获得接口的访问权限。
3.接口请求公参,所有业务接口请求,都需要携带请求公参

公参列表

名称 类型 是否必须 说明
app string 注册时的appname
dn string 第三方用户的唯一标示,可以是第三方客户端设备的唯一标示
fr string 第三方客户端平台:iphone, android
ve string 第三方客户端版本,建议x.x.x.x格式
imei string 手机的国际移动设备标识,是由15位数字组成的“电子串号”。IMEI对用户画像非常重要,客户端必须提供真实的IMEI信息
由于ios获取不到imei,用idfa替代
nt string 第三方客户端在请求时的网络类型,0:wap,1:net,2:wifi,其它默认99
client_ip string 当前请求是服务器为客户端透传时,必传,代表客户端请求来源ip。客户端直连时不需要传。
utdid string 阿里设备标识,只有在接入阿里的utdid sdk后才能得到utdid,才需要添加此参数

温馨提示
以上access_token、app、dn、fr、ve、imei或idfa、nt公参是必须提供的,请作为query string 直接追加到业务接口的url上,否则可能接入不成功的。

4.接口返回为json格式。

名称 类型 描述
data json object 或者json array 具体业务数据
status int 响应状态码,0 为成功
message string 响应描述

如果接入失败,你收到的返回状态就会如下:

status 含义
-1 access_token无效。可能原因:token已过期,应用被下线等。
-2 业务接口调用缺少比要的公参,app或者dn。
-3 业务接口调用频率过快或次数过高。

4.1 *频道列表
第二步:接入UC信息流频道列表。
接口https://open.uczzd.cn/openiflow/openapi/v2/channels?access_token=your_access_token
请求方式:get
请求参数:本章头部的公参
响应:

名称 类型 说明
channel json array 频道信息
channel.id long 频道id,只下发生效的频道
channel.name string 频道名

请求示例:

  1. 以python方式举例(在使用中请替换为Server端语言,此处仅是举例说明):
    a) Get方式请求channels接口获取所有的频道信息
    b) 参数中如:access_token=xxxx,xxxx是参数的值,在使用中需要替换为对应的正确token值
  2. 请求代码(requests是python一个发送http请求的包):
    >>> r = requests.get('https://open.uczzd.cn/openiflow/openapi/v2/channels?access_token=xxxx?app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
    >>> result = json.loads(r.text)
    >>> print result["data"]["channel"][0]["id"]
    100
    >>> print result["data"]["channel"][0]["name"]
    推荐
    
  3. 返回结果的使用:
    返回结果是一个json串,data.channel是一个数组,数组中的每个元素是一个字典,其中name是频道的中文名称,id是频道唯一标示,此处返回的id替换掉4.2的单个频道新闻列表:
    https://open.uczzd.cn/openiflow/openapi/v2/channel/{cid}?access_token=your_access_token 中的{cid}就可以获取单个频道新闻列表.

响应示例:

{
    "data": {
        "channel": [{
            "id": 1,
            "name": "热门"
        }, {
            "id": 2,
            "name": "体育"
        }]
    },
    "status": 0,
    "message": "OK"
}

接入后效果图(见红框处):
接入后效果图

4.2 *单个频道新闻列表
第三步:有了UC信息流频道列表后,开始接入单个频道新闻列表。
接口https://open.uczzd.cn/openiflow/openapi/v2/channel/{cid}?access_token=your_access_token
说明:{cid} 为路径参数频道id
请求方式:get
请求参数本章头部的公参和下面的接口参数

接口参数

参数名 类型 默认值 必须 描述
method string method,获取数据的方法。new: 取最新的数据,his:取历史数据,renew:在本地频道,当所在城市发生变更时调用
recoid string 取新闻用的游标。如果method=new, 需要客户端提供最新的一个批次文章recoid, 服务端返回最新的推荐新闻。如果 method=his, 需要提供最旧一个批次的文章的recoid, 服务端返回此recoid对应的时间点之前的推荐新闻。在拉新的时候,客户端应该清空旧闻,所以他下拉的时候,所有的历史新闻都需要重新拉取,服务端会保证不出现时间断层。
ftime long 0 method=new时,ftime填客户端最新的文章的grab_time。method=his, ftime填客户端最旧的文章的grab_time,此时ftime最多可支持到7天前。
city_code string 在本地新闻频道,客户端自己选择城市时,通过该参数,上传高德city code
city_name string 本地新闻的城市名。请求本地频道时 city_code或者city_name必须指定一个
content_ratio int 0 含正文的文章比例,取值范围[0, 100], 默认为0.转码页中采用预下发的比例

请求示例-下拉刷新第一刷:

  1. 以python方式举例(在使用中请替换为Server端语言,此处仅是举例说明)
    a) Get方式请求channels接口获取所有的频道信息
    b) 参数中如:access_token=xxxx,xxxx是参数的值,在使用中需要替换为对应的正确token值,第一刷recoid可传空值。
  2. 请求代码(requests是python一个发送http请求的包)

     #推荐频道cid=100,获取方式参考4.1频道列表说明
     >>> r = requests.get('https://open.uczzd.cn/openiflow/openapi/v2/channel/100?access_token=xxxx?method=new&recoid=xxxxx&ftime=0app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
     >>> result = json.loads(r.text)
    
  3. 返回结果的使用
    a) 返回结果是一个json串,data.items data.banners data.articles是三个数组组,数组中元素的含义参考下面的说明
    b) data.articles 字典存放了每篇文章的字段信息,第一刷之后取到所有新闻的grab_time,然后取到时间最新的一个(此处记为:time1),取到recoid(所有文章的recoid是同一个,此处记为recoid1)

请求示例-下拉刷新第二刷:

  1. 请求代码
    #使用第一刷中的time1 和 recoid1
    >>> r = requests.get('https://open.uczzd.cn/openiflow/openapi/v2/channel/100?access_token=xxxx?method=new&ftime=time1&recoid=recoid1&app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
    >>> result = json.loads(r.text)
    
  2. 返回结果使用:
    a) 结果在客户端展示以后如果需要进行后续的下拉刷新则取到最新的grab_time和recoid,更新ftime和recoid参数的值使用channel接口继续请求数据,完后第三刷,第四刷…第N刷

请求示例-上拉加载历史:

  1. 请求代码
    #使用前一刷中所以新闻grab_time的最晚时间(此处记为time1)使用前一次刷中的recoid(此处记为recoid1)
    >>> r = requests.get('https://open.uczzd.cn/openiflow/openapi/v2/channel/100?access_token=xxxx?method=his&ftime=time1&recoid=recoid1&app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
    >>> result = json.loads(r.text)
    
  2. 返回结果使用: a) 结果在客户端展示以后如果需要进行后续的上拉刷新则取到最晚的grab_time和recoid,更新ftime和recoid参数的值使用channel接口继续请求数据,完成后续的上拉刷新。
    b) 上拉刷新和下拉刷新可以随机组合,下拉刷新使用前一刷的最新grab_time,上拉刷新使用前一刷的最晚grab_time

响应:

名称 类型 说明
items json array item列表。列表页按items数组的顺序依次展现各个item
item.id string item id
item.map string item的具体数据从哪个map里取出。注意所有的item服务端保证至少有 (id, recoid, item_type, title, url, grab_time) 这6种属性。
banners json array 置顶item列表。列表元素的定义和items列表一致。如果有生效的banner,那么每次在客户端请求method=new时,banners都不为空, 客户端需要将banner展现在列表顶部。当banners为空数组时,客户端移除顶部banner。
articles json object 普通文章map, id到article的映射.article结构的定义见下表
specials json object 专题文章map, id到 special的映射.specila结构的定义见下表
is_clean_cache int 该值默认为0,如果该值为1,客户端清除缓存数据。

item 的公共结构定义, 以下所有的结构定义都会包含这些字段:

名称 类型 说明
id string 文章id,全局唯一性
title string 文章标题
subhead string 文章副标题,只有运营类文章可能有这个元素
recoid string recoid 记录推荐批次
item_type int 文章类型:0: 新闻 1:阅读 2:图片 3:幽默 4:图片新闻 5:八卦 6:音频 7:网址导航 8:广告 9:小说 11:星座卡片 12:体育直播卡片 13:话题卡片 14:股指卡片 15:自媒体聚合卡片 16: 自媒体人推荐卡片 17:短内容卡片30:视频 50:营销活动卡片 100:专题   // 没有列举出的item_type可以丢弃
style_type int 样式类型。默认值为0,表示机器新闻的样式由客户端根据文章元素自动判断。运营添加的文章/卡片可以指定样式类型,从1开始。样式值需要服务端和客户端约定一致。
grab_time long 新闻发生时间(见前面ftime的说明)
url string 正文页url

article 结构定义:

名称 类型 说明
source_name string 文章来源名
origin_src_name string 文章初始来源
summary string 文章摘要,幽默类型下发,若有就下发
publish_time long 文章在其来源网站上的发布时间,这个时间取值于来源站
tags json array 文章关键字
category json array 文章分类
content string 文章内容,里面的图片用<!--{img:0}-->标志进行占位。<!--{img:0}-->中的0对应images数组中的index = 0的图片。 视频使用<!--{video:0}-->标志占位,0表示videos数组的第0个视频。考虑到信息流客户端不渲染正文,该字段默认为空。
content_length int 普通文章该字段表示正文字符长度。视频文章表示视频播放长度,精确到毫秒。
thumbnails JSON Array 缩略图的图片url列表
thumbnails.url string 缩略图的原图图片url。注意,客户端不能直接抓原图,必须根据原图地址和所需的宽度及高度,拼接新的请求url,最终从图床上抓取。示例url如下:http://cdn.sm.cn/?id=12345&width=120&height=200, 其中width 和 height 至少有一个,可以两个都有。截取规则是宽图取中间,高图取顶部。如果width和height都给定,图床会保证按指定比例裁剪。
thumbnails.width int 缩略图的原图宽
thumbnails.height int 缩略图的原图高
thumbnails.type string jpg, gif.如果类型为gif,url加上width/height参数,图床返回静态图 (gif的第一帧)。不加宽高参数,直接返回gif原图
images json array 正文图片列表。图集类文章此列表不为空
image.index int 图片索引,其实就是图片在正文content中出现的位置(从0 开始)
image.title string 图片标题
image.description string 图说
image.width int 原始图片宽
image.height int 原始图片高
image.type string jpg,gif
image.url string 图片url
image.preload int 图片是否需要预加载,0:不需要,1:需要
cmt_cnt int 评论数
videos json array 视频列表
videos.url string 视频来源地址,需要查询VPS服务得到真正的播放地址
videos.id string 视频id,根据video.url hash算出来
videos.length int 视频长度,单位毫秒 ms
videos.view_cnt int 播放次数
videos.poster json object 视频封面图。具体结构定义同thumbnails,也就是有url/width/height 字段。
videos.channel_play boolean 能否在频道列表播放,true-能,false-否
zzd_url string 自己的转码页url。当导流页url打不开时,客户端可以自动跳转到这个url上
share_url string 分享url
bottom_left_mark json object 文章角标
bottom_left_mark.mark string 角标文案
bottom_left_mark.mark_color int 角标文案颜色
bottom_left_mark.mark_icon_url string 角标icon图片地址
dislike_infos json array 文章不感兴趣信息
dislike_infos.type int 不感兴趣选项类型
dislike_infos.code int 不感兴趣选项编码
dislike_infos.msg string 不感兴趣选项文案
app_download_url string 下载按钮url,如果为空则显示非下载样式
app_download_desc sring 下载按钮文字,如果为空则显示非下载样式
ad_content json object 广告内容
show_impression_url string 广告展现打点url;注意:如果show_impression_url的值不为空,则合作方必须进行打点,否则影响分成。
打点方式:访问show_impression_url的值,返回状态码200则代表打点成功

special 结构定义:

名称 类型 说明
articles json array 专题包含的article数组
enter_desc string “进入专题”
tags json array 文章关键字
bottom_left_mark json object 文章角标
bottom_left_mark.mark string 角标文案
bottom_left_mark.mark_color int 角标文案颜色
bottom_left_mark.mark_icon_url string 角标icon图片地址

响应示例:

{
    "data": {
        "items": [{
            "id": "10238408103",
            "map": "articles"
        }, {
            "id": "89782734",
            "map": "articles"
        }],
        "banners": [{
            "id": "972894",
            "map": "articles"
        }],
        "articles": {
            "10238408103": {
                "id": "10238408103",
                "title": "传Nexus 5将用Nikon三层传感器照相技术",
                "summary": "xxxxxx",
                "item_type": 1,
                "url": "http://zzd.sm.cn/webapp/webview/article/891234879",
                "content": {},
                "recoid": "9830480918324",
                "cmt_cnt": 20,
                "thumbnails": [...],
                "images": [...]
                    ...
            },
            "89782734": {
                ...
            }
        },
        "is_clean_cache": 1
    },
    "status": 0,
    "message": "OK"
}

第四步:接入单个频道列表后,再支持频道中卡片的样式。
为了让合作方的应用展现更加简洁、美观、引入注目,UC信息流支持下发多种卡片样式给客户端,常见有20种样式,UC信息流强烈建议客户端支持以下前8种基础样式(带标识)。具体见《UC开放平台-信息流卡片样式说明文档》*接入后效果图(见红框处):
接入后效果图

4.3 广告接入
当您接入4.2单个频道新闻列表后,这时你一定已经知道了ITEM列表,如果item_type为8,这就是广告啦,为了能够更准确地统计到广告的展现和点击打点数据,请接入它吧。 开始前先说明一下,与其它卡片样式不同,广告列表有单独的卡片样式,目前一共有5种,具体参考附1,请先支持广告的卡片样式。特别需要提醒的是:在频道列表的广告列表展现时,请注意左下角展现特定颜色的文案,具体参见下表中的:bottom_left_mark.mark,bottom_left_mark.mark_color

目前的广告统计主要有场景:1、频道列表中广告展现统计。

一、频道列表广告展现统计
合作方从频道列表中获取到item_type为8的广告后,跟4.2单个频道新闻列表处理方式一样,首先请按照普通文章的方式渲染(item和article结构参见下面两个列表),与此同时参见article 结构表中的打点字段进行展现打点(建议异步进行)

1、广告展示打点时机说明: 广告在当前屏幕露出超过一半即可开始打点,不需要停留时间;

2、广告展示打点时间间隔说明: 用户来回滑动时,满足展现条件后即时打点即可,不需要设置间隔,广告后台根据实际情况作去重处理。


item结构定义(广告)

名称 类型 说明
id string 广告id,全局唯一性
title string 广告标题
subhead string 广告副标题,只有运营类文章可能有这个元素
item_type int 文章类型: 8:广告,注意:该类型的style_type是广告特有的,不要和普通文章混淆
style_type int 广告接入支持5个样式,分别是1(小图),3(大图),5(三图),其中小图包括小图和小图下载,大图包括大图和大图下载,区分是否下载样式的逻辑见article结构中字段
url string 广告url

article结构定义(广告):

名称 类型 说明
source_name string 广告章来源名
origin_src_name string 广告初始来源
thumbnails JSON Array 缩略图的图片url列表
thumbnails.url string 缩略图的原图图片url。注意,客户端不能直接抓原图,必须根据原图地址和所需的宽度及高度,拼接新的请求url,最终从图床上抓取。示例url如下:http://cdn.sm.cn/?id=12345&width=120&height=200, 其中width 和 height 至少有一个,可以两个都有。截取规则是宽图取中间,高图取顶部。如果width和height都给定,图床会保证按指定比例裁剪。
thumbnails.width int 缩略图的原图宽
thumbnails.height int 缩略图的原图高
thumbnails.type string jpg, gif.如果类型为gif,url加上width/height参数,图床返回静态图 (gif的第一帧)。不加宽高参数,直接返回gif原图
bottom_left_mark.mark string 角标文案
bottom_left_mark.mark_color int 角标文案颜色
app_download_url string 下载按钮url,如果为空则显示非下载样式
app_download_desc sring 下载按钮文字,如果为空则显示非下载样式
show_impression_url string 广告展现打点url;注意:如果返回值不为空(该字段绝大多数情况下是非空的,如果联调过程中总是返回空,则需要将请求接口中版本参数ve设置成10.9.9.9及以上即可),则合作方必须进行打点,否则影响分成

完成以上步骤后,合作方的app应该已经能正确渲染出广告、展现打点啦,接下来就要开始展现打点统计的联调啦。
第一步:合作方需要提供imei或idfa给UC接口人,UC接口人做好联调准备,并通知合作方配合下拉刷新频道列表;
第二步:合作方在频道列表刷出广告后,知会UC接口人,UC接口人从后台确认展现统计正常;
整个广告接入完成。

4.4 *客户端事件上传
要求必须上传。根据用户行为数据,结合阿里专业数据挖掘能力和智能推荐算法是我们UC信息流优势所在,合作方接入client_event接口,我们用户画像将会更精准。
第五步:接入客户端事件上传接口
卡片点击事件说明:
1.定义:点击正文卡片、专题卡片或者播放视频卡片等任何对信息流列表页进行消费的情况
a.组合卡片: 包括且不限于专题卡片,主要体现为为父子卡片形式
b.视频卡片 : item_type=30,能够在不进入正文的情况下,直接在列表页中播放视频
c.普通卡片 : 非上述2种卡片
2.上传时机:
a. 从正文页返回信息流列表页时,上传日志
b. 在正文页中,点击其他新闻(相关新闻、专题子文),在跳转之前,上传日志
c. 播放完当前视频卡片时,上传日志

接口https://open.uczzd.cn/openlog/openapi/v1/client_event?access_token=your_access_token
上传时间:从正文页回到列表页的时候上传
请求参数本章头部的公参和下面的post body
请求方式:post,post body 为下面的json格式。

参数名 类型 必须 描述
logs json array 日志内容,不同种类日志内容不同
log.ac int 事件类型。此处ac必须等于1
log.tm long 事件发生的时间,精确至毫秒
log.aid string 被点击卡片的id,对应channel接口中articles\specials的id
log.sub_aid string 当点击卡片子文时,此sub_aid对应卡片内子文的id。 对于组合卡片出上传必须字段外,还需上传sub_aid=卡片子文id
log.recoid string 卡片结构中的的recoid
log.duration long 阅读时长,单位毫秒。如果小于3000毫秒,服务端默认其是误点击
log.cid long 点击事件所在频道的id
log.item_type int 卡片结构中的item_type
log.content string 空字符串

请求示例

{
    "logs": [
        {
            "ac": 1,
            "tm": 1403601709000,
            "aid": "8907198237498132",
            "recoid": "123872389479",
            "duration": 10980,
            "cid": 100,
            "item_type": 1
        },
        {
            "ac": 1,
            "tm": 1403601923784000,
            "aid": "12384812349768",
            "recoid": "123872389479",
            "duration": 30989,
            "cid": 100,
            "item_type": 1
        }
    ]
}

注意:
1、 上述json 格式的参数作为post 的body 整体提交
2、 Content-Type:application/json

响应:status 为0 的服务端空响应。

{
    "data": {},
    "status": 0,
    "message": "ok"
}

恭喜您,前五步您已经完成UC信息流的基础接入啦,您应该可以在接入的应用中看到UC信息流的效果了吧~~ 但是,UC信息流定制化服务还有很多,请跟随我们的文档继续出发,体验更多地UC信息流定制化服务吧!

4.5 支持本地新闻的城市列表
作为资讯类的应用,怎么可以少了本地新闻?接入城市列表让用户及时、全面了解当地民生、时政新闻,以及社会动态等。
第六步:接入本地新闻的城市列表。
接口https://open.uczzd.cn/openiflow/openapi/v2/cities?access_token=your_access_token
请求方式:get
请求参数本章头部的公参
响应:

名称 类型 说明
cities json array 城市列表
city.letter string 拼音首字母用于排序
city.name string 城市名
city.code string 高德city code

请求示例:
1.以python方式举例(在使用中请替换为Server端语言,此处仅是举例说明):
a) Get方式请求cities接口获取city_name和city_code对应信息
b) 参数中如:access_token=xxxx,xxxx是参数的值,在使用中需要替换为对应的正确token值
2.请求代码(requests是python一个发送http请求的包):

>>>r = requests.get('https://open.uczzd.cn/openiflow/openapi/v2/cities?access_token=xxxx?app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
#返回结果是一个json串,将json解析为字典以后就可以使用返回结果中的各种值
>>>result = json.loads(r.text)
>>> print result["data"]["cities"][0]["name"]
阿坝
>>> print result["data"]["cities"][0]["code"]
0837

响应示例:

{
    "data": {
        "cities": [{
            "letter": "G",
            "name": "广州",
            "code": "020"
        }]
    },
    "status": 0,
    "message": "OK"
}

接入后效果图:
接入后效果图

4.6 推荐相关文章
为了更好的用户体验,在用户阅读一篇文章,我们是不是可以多帮他们一点,再推荐一些他们感兴趣的文章呢,来吧~~
第七步:接入推荐阅读。
接口https://open.uczzd.cn/openarticle/openapi/v2/article/{aid}/related?access_token=your_access_token
说明:aid为路径参数文章id
请求方式:get
请求参数本章头部的公参和下面的接口参数

接口参数

参数名 类型 默认值 必须 描述
count int 6 返回新闻数量
cid long 无默认值 频道id

响应:

名称 类型 默认值 必须 说明
articles json array (相关)热门文章列表
articles[0].id string 文章id
articles[0].cid long 文章所属频道id
articles[0].title string 文章标题
articles[0].xx 其他参数同 GET /channel 的响应里的article参数。

请求示例: 1.以python方式举例(在使用中请替换为Server端语言,此处仅是举例说明):
a) Get方式请求相关推荐文章
b) 参数中形如:access_token=xxxx,xxxx是参数的值,在使用中需要替换为对应的正确token值
2.请求代码(requests是python一个发送http请求的包):

#v2/article/5993155282204437061/related? 此处的数字与4.2中返回的data.articles字典中的各个key对应是新闻的文章id
>>>r = requests.get('https://open.uczzd.cn/openiflow/openapi/v2/article/5993155282204437061/related?access_token=xxxx?app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
#返回结果是一个json串,将json解析为字典以后就可以使用返回结果中的各种值
>>>result = json.loads(r.text)
  1. 数据使用说明: 如果返回结果data.articles为空,说明该篇新闻没有相关推荐文章,在客户端上要有响应界面的隐藏逻辑,避免留白或者开空窗。

响应示例:

{
    "data": {
        "articles": [{
            "id": "1002",
            "title": "传Nexus 5将用Nikon三层传感器照相技术",
            "cid": 100
            ...
        }]
    },
    "message": "ok",
    "status": 0
}

接入后效果图:
相关效果图

4.7 获取文章评论接口
接入了推荐阅读后,如何想用户加入评论,点个赞,如何破?
第八步:接入文章评论接口。
接口https://open.uczzd.cn/opencomment/openapi/v1/cmt/article/{aid}/comments/byhot?access_token=your_access_token
说明:路径参数 aid,文章id
请求方式:get
请求参数本章头部的公参和下面的接口参数

接口参数

参数名 类型 默认值 必须 描述
hotValue long -1 热度
count int 20 每次取的数量

响应:

参数名 类型 默认值 必须 描述
article_id string 文章originalid
comments json array 评论id列表
commnet_cnt int 评论数
has_more boolean 是否可能还有更多未加载
comments_map json map 本次响应里所有评论的id到具体评论内容的映射表。
comment.content string 评论内容
comment.time long 发表评论时间戳
comment.timeShow long 显示使用时间戳
comment.user.nickname string 用户昵称
comment.user.faceImg string 用户头像

请求示例:
1.以python方式举例(在使用中请替换为Server端语言,此处仅是举例说明):
a) Get方式请求相关推荐文章
b) 参数中如:access_token=xxxx,xxxx是参数的值,在使用中需要替换为对应的正确token值

2.请求代码(requests是python一个发送http请求的包):

#v1/cmt/article/5993155282204437061/comments/byhot? 此处的数字与4.2中返回的data.articles字典中的各个key对应是新闻的文章id
>>>r = requests.get('https://open.uczzd.cn/opencomment/openapi/v1/cmt/article/13664978794804684790/comments/byhot?access_token=xxxx?app=xxxx&dn=xxxx&fr=xxxx&ve=xxxx&imei=xxxx&nt=xxxx')
#返回结果是一个json串,将json解析为字典以后就可以使用返回结果中的各种值
>>>result = json.loads(r.text)

3.数据使用说明:
如果返回结果data.comments为空,说明该篇新闻没有评论,在客户端上要有响应界面的隐藏逻辑,避免留白或者开空窗 响应示例:

{
    "data": {
        "comments": [
            "1727808435"
        ],
        "article_id": "13664978794804684790",
        "comment_cnt": 1863,
        "has_more": true,
        "comments_map": {
            "1727808435": {
                "id": "1727808435",
                "content": "就我一个人觉得姚晨真的好丑吗?",
                "user": {
                    "nickname": "笨笨蜗牛",
                    "faceimg": "http://image.uc.cn/o/uop/1Ht08/;;0,uop/g/uop/avatar/1604242102809a92f1bc6b814a7c781e26868dec8f.jpg;3,160"
                },
                "time": 1489015228435,
                "timeShow": 1489015228435
            }
        }
    },
    "message": "ok",
    "status": 0
}

接入后效果图:
评论效果图

4.8 文章不感兴趣接口
提交不感兴趣信息
接口https://open.uczzd.cn/openarticle/openapi/v1/article/{aid}/notin?recoid={recoid}&access_token=your_access_token
说明

路径参数 aid,文章id

recoid, 文章下发所所属的recoid

请求方式:post,post body 为下面的json格式。

请求参数本章头部的公参和下面的接口参数

请求参数

参数名 类型 默认值 必须 描述
infos json array 不感兴趣选项集合
infos.type int 选项类型
infos.code int 选项代码
infos.msg string 选项文案

请求示例:

{
    "infos": [
        {
            "type":0,
            "code":1,
            "msg":"内容质量差"
        }
    ]
}

响应示例:

{
    "message": "ok",
    "status": 0
}

5.FAQ
合作方在信息流API接入过程中,可能还是会有一些疑问,现在就将大家常见的问题进行了整理,以协助大家更快地接入。
1:详情页加载过程中出现白屏

这一般来说可能是客户端加载较慢所致,建议客户端增加loading动画改善体验。另外,也可以与我们合作定制详情页-顶部标题及来源样式功能,具体可以找UC产品接口了解。

2:列表页中的图片被压缩、失真、尺寸不对

这可能与客户端展现有关。当客户端展示图片时,请不要选择缩放样式(可以选择居中);裁剪的目标参数(宽和高)最好与客户端展示框的宽高比例一致。

后续大家有新的问题,我们会继续补充……

附1:广告样式:
style_type=1 小图
样式说明:
标题在左,图片在右,一张缩略图。
客户端示例如下

卡片中包含以下元素:
item.title:主标题,必填项。
item.thumbnails:缩略图,一张,必填项。
article.source_name:广告来源,非必填项。
item.url:广告url,必填项。
bottom_left_mark.mark:角标文案,必填项。
bottom_left_mark.mark_color:角标文案颜色,必填项。

style_type=1 小图下载
样式说明:
标题在左,图片在右,一张缩略图。
客户端示例如下

卡片中包含以下元素:
item.title:主标题,必填项。
item.subhead:副标题,必填项。
item.thumbnails:缩略图,一张,必填项。
article.source_name:广告来源,非必填项。
item.url:广告url,必填项。
bottom_left_mark.mark:角标文案,必填项。
bottom_left_mark.mark_color:角标文案颜色,必填项。 article.app_download_url:下载按钮连接
article.app_download_desc:下载按钮文字

style_type=3大图
样式说明:
标题在上,图片在下,一张缩略图。副标题可放在图片下方。
客户端示例如下

卡片中包含以下元素:
item.title:主标题,必填项。
item.thumbnails:缩略图,一张,必填项。
article.source_name:广告来源,非必填项。
item.url:广告url,必填项。
bottom_left_mark.mark:角标文案,必填项。
bottom_left_mark.mark_color:角标文案颜色,必填项。

style_type=3 大图下载
样式说明:
标题在左,图片在右,一张缩略图。
客户端示例如下

卡片中包含以下元素:
item.title:主标题,必填项。
item.subhead:副标题,必填项。
item.thumbnails:缩略图,一张,必填项。
article.source_name:广告来源,非必填项。
item.url:广告url,必填项。
bottom_left_mark.mark:角标文案,必填项。
bottom_left_mark.mark_color:角标文案颜色,必填项。 article.app_download_url:下载按钮连接
article.app_download_desc:下载按钮文字

style_type=5三图
样式说明:
标题在上,图片在下,共包含三张图片。副标题可放在图片下方。
客户端示例如下

卡片中包含以下元素:
item.title:主标题,必填项。
item.thumbnails:缩略图,一张,必填项。
article.source_name:广告来源,非必填项。
item.url:广告url,必填项。
bottom_left_mark.mark:角标文案,必填项。
bottom_left_mark.mark_color:角标文案颜色,必填项。