产品简介
接入步骤
运营助手
常见问题
先荐文档中心
产品简介

先荐是第四范式出品的,基于“第四范式先知”机器学习平台和其他自主专利研发的,集内容上传、内容管理、内容分发、推荐干预、前端渲染于一体的一站式推荐服务可视化平台。先荐支持PC、WAP、 APP全平台接入,帮助客户从0到1搭建推荐系统,显著提升用户活跃、留存、观看时长等重要业务指标。当前主要提供以下三种推荐服务:

1、个性化推荐:千人千场千面的推荐,先荐基于机器学习强大的意图识别能力,为每个用户在不同时间不同地点推荐最适合当前场景的内容,常见于网站首页的“推荐”、“猜你喜欢”等模块。

2、关联推荐:基于当前内容的语义分析,推荐与当前内容相似的内容,以提高站内停留时长和人均阅读篇数,常见于内容详情页底部或侧边栏的“相关推荐”模块。

3、热门推荐:基于全站内容的阅读量统计,进行全局、分频道或分地域排行,常见于首页或内容详情页的“热门文章”、“排行榜”等模块。

同时,先荐后台也提供了丰富的推荐配置和数据统计功能,支持客户随时了解推荐状态,精确控制自己的推荐服务。

个性化推荐关联推荐热门推荐
接入步骤
1注册登录

使用先荐服务前您必须有一个自己的账号,注册入口 https://nbrecsys.4paradigm.com/
注册邀请码向联系您的商务同学领取,用户名建议您填写自己的公司名称,一个公司最好用一个账号。

2创建场景

先荐的推荐服务是基于场景的,每个先荐账号下可以创建n个推荐场景,每个场景支持PC、wap和app三种平台,客户可以根据当前具体的推荐需求进行选择。

3物料和日志上报数据

推荐服务需要客户将自己的内容上报给,先荐后台提供了最简单快捷的内容上报方式,创建场景后按照流程提示填入您的网站链接,把我们的物料抓取sdk埋入您的文章详情页模版下即可,埋点成功后,后台的场景列表中可以看到内容上报环节已成功的标识如下图所示,后台内容库中也可以看到物料的具体内容。

如果您是app场景或者不方便接入我们的sdk,您可以按照以下流程上报数据。

3.1数据格式说明

先荐推荐需要上报物料和用户行为,请严格按照以下规定进行数据上报。如果上报的数据字段和数据表的字段含义不一致,请务必按照本文档规定的字段名进行上报,否则可能会影响推荐服务的效果。

3.1.1item(物料内容)

用于存放所有可被推荐的物料内容数据,即文章、新闻等图文内容。

字段名是否必传字段类型字段说明示例
itemId必传 string内容唯一ID如“1191180”
title必传 string内容标题如“感动中国的大学生,今成副书记”
content必传 string正文,通常为html中正文片段、markdown片段,最长2000个中英文字符,如有摘要,可以在正文中按照线上格式一起提交,请不要包含html标签。如“生于1982年的徐本禹是山东聊城人,家境贫寒的他在华中农业大学读书期间。”
url必传 string正文链接地址http://www.pcUrl.com/xxx
categoryId选传 string内容所属分类,如果数据库中有相关信息,强烈建议提供该字段,如果没有,就无法做分类目推荐或者按类目进行过滤多级分类用英文分号标识“,”,如1级类目为萌宠,2级类目为狗,3级类目为泰迪,则上传格式为“萌宠,狗,泰迪”,同时属于多个分类,则用英文分号“;”分隔,如“萌宠,狗,泰迪;交通工具,汽车,法拉利”
publishTime选传 timestamp内容发布时间,如果数据库中有相关信息,强烈建议提供该字段。如果没有,就会影响内容时效性的判断,会降低推荐效果格式为Long类型,毫秒级时间戳,例如“1522725647210”
publisherId选传 string写入发布者名称,如果数据库中有相关信息,强烈建议提供该字段。如果没有,就无法按照作者提供相关推荐,会降低推荐效果如“范式推荐”
isRecommend选传 string是否可推荐,如果不传则默认为可推荐可用于推荐传“1”,否则传“0”
tag选传 string标签,如果数据库中有相关信息,强烈建议提供该字 段。如果有的话,可以提高推荐效果多个标签用英文分号“;”,如“感动中国;官员”
coverUrl选传 string封面图链接多个图片地址用英文分号“;”隔开。如“https://img30.360buyimg.com/popWaterMark/jfs/t4447/135/490777486/304711/e78c2e3b/58d0c659N660cfbc1.jpg”
location选传 string新闻发生的地理位置,如果数据库中有相关信息,强烈建议提供该字段。该字段可用于基于用户地理位置进行的推荐内容筛选,可能提高推荐效果精确到省市即可,如“河南省郑州市”
3.1.2action(行为日志)

用于存放物料对用户行为数据,这部分数据对推荐效果有极大影响,需要按照预定的格式上报,并且最好做到实时上报。

字段名是否必传字段类型字段说明示例
itemId必传 string内容唯一ID“123”
actionTime必传 Long行为发生时间,UNIX时间戳,Long类型,毫秒级别如“1522725647210”
action必传 string行为类型,目前先荐支持展现、点击、收藏、分享、赞、踩、使用时长7种行为,其中展现和点击为必传,其他行为视客户需要选传展现为“show”,必传;点击为“detailPageShow”,必传;收藏为“collect”;用户关注为“follow”,选传;分享为“share”,选传;赞/喜欢/顶统一为“like”,选传;踩/不喜欢/不感兴趣统一为“dislike”,选传;使用时长为“duration”,选传;
itemSetId必传 string内容库ID,在后台场景详情页可以查到如“312”
sceneId必传 string场景ID,在后台场景详情页可以查到如“434”
context选传 string来源统计,即推荐结果中的context字段,在推荐系统服务请求接口中获取如“dKZRv70cAir4/Y7ADmF/Ty2UQy4Pyf/QuOGAd0nx7D+NWes2W”
userId必传 string用户唯一ID,如有需要可以通过这个字段上传您的用户ID如"1111111"
requestId选传 string每次行为ID,用来标识独立的请求行为如:"abcde123"
lib选传 string设备类型:android,ios,js如:"android"
deviceId选传 string设备标识,安卓使用imei,苹果设备使用idfa如:"41B2FD07-695A-4A27-8D26-C30ECE6F7EAD"

上传示例:

上面4个图,从左到右表示:

1)请求先荐推荐结果,得到推荐的10个itemid及context(为方便演示,这里把context信息都隐去了);

2)用户在推荐位看到了新的推荐结果,由于屏幕大小限制,一屏只能到10条推荐结果中的前5条;

3)虽然用户看到了5条,但是用户对第3条感兴趣点,就点击进入了文章详情页查看详细内容;

整个过程,所需要上报的用户行为如下:

1)上报5条“show”。解释:虽然一次请求了10条,但是用户看到了前面5条,后面5条并没有看到。这个数据要看是否可以采集,如果采集就上报,这样的话我们就知道用户只看了10条中的5条。

2)上报1条“detailPageShow”。解释:用户点击了第3条推荐结果进入了文章详情页,同时这条推荐结果又是来自先荐推荐接口返回的。

3.2数据上报接口列表

上报数据包括物料数据上报和行为日志上报2部分,其中物料数据上报包括物料上传、查询、删除3种接口,所以数据上报分为物料上传、查询、删除和行为日志上报共4个接口。

3.2.1行为日志上报接口

URL:行为日志上报接口地址为:https://nbrecsys.4paradigm.com/action/api/log?clientToken={您的商家token}
Http Method:POST
Http 返回格式:JSON
上报参数:date为行为上报时间,actions中内容请参见上面的action(行为日志)
说明:异步上报行为请保证距离当前时间在24小时之内;参数名称和数据请填写正确;

Curl命令上报示例:

curl -X POST 
        'https://nbrecsys.4paradigm.com/action/api/log?clientToken={您的商家token}' 
        -H 'Content-Type: application/json' 
        -d '{
              "date":"2018-08-19 11:58:57",
              "actions":[
                  {
                      "itemId": "123",
                      "actionTime": 1536215804000,
                      "action": "show",
                      "userId": "1111111",
                      "itemSetId": "215",
                      "sceneId":"455",
                      "context":"dKZRv70cAir4/Y7ADmF/Ty2UQy4Pyf/QuOGAd0nx7D
                      +NWes2WYs5sulnewqMFHn4YeUuUnMgdW/mHzMzILuxaYqMo+X"
                  },
                  {
                      "itemId": "123",
                      "actionTime": 1536215804000,
                      "action": "detailPageShow",
                      "userId": "2222222",
                      "itemSetId": "215",
                      "sceneId":"455",
                      "context":"dKZRv70cAir4/Y7ADmF/Ty2UQy4Pyf/QuOGAd0nx7D
                      +NWes2WYs5sulnewqMFHn4YeUuUnMgdW/mHzMzILuxaYqMo+X"
                  }
              ]
          }'

请求返回示例:

{
          "statuses": [
              {
                  "ActionLogStatusCode": 0
              },
              {
                  "ActionLogStatusCode": 0
              }
          ]
  }
3.2.2物料上报接口

URL:内容上报接口地址为:https://nbrecsys.4paradigm.com/business/items?accessToken={您物料集合的token}

Http Method:POST

Http 返回格式:JSON

上报参数:请参见上面的item(物料数据)

Curl命令上报示例:

curl -X POST 
        'https://nbrecsys.4paradigm.com/business/items?accessToken={您的物料集合token}'  
        -H 'Content-Type: application/json'  
        -d '[
          {
              "itemId":"999999991",
              "categoryId":"food,meat",
              "title":"第四范式智能推荐",
              "content":"第四范式智能推荐,助力企业成功",
              "publishTime":"1233456671",
              "publisherId":"1111",
              "tag":"food,meat",
              "shopId":"1234",
              "isRecommend":"1",
              "url":"http://abc.dom",
              "coverUrl":"http://abcd.com"
          }
      ]'

返回内容:

{
          "code": 200,
          "info": "成功",
          "data": null
  }

状态码:

状态码提示信息备注
200成功
3317物料必须包含URL
3318物料itemId不能为空
3320物料一次操作不能超过100条
3322上传物料不能为空
3323物料集无效或者不存在
3332该物料必须带有title
3334物料key值不能为空
3338物料本次上报与库中已有的url存在冲突 如果出现url冲突的问题,会在接口返回的data中展示冲突的url
3.2.3物料删除接口

URL:内容上报接口地址为:https://nbrecsys.4paradigm.com/business/items/remove?type={1|2,1-按照itemId;2-按照url}&accessToken={您物料集合的token}

Http Method:POST

Http 返回格式:JSON

参数说明:如果url中type=1,请传入itemId的数组,如果type=2,请传入url的数组

Curl命令上报示例:

curl -X POST  
        'https://nbrecsys.4paradigm.com/business/items/remove?accessToken={物料的token}&type=1'  
        -H 'Content-Type: application/json'  
        -d '["7f6dd2c62dd8677b4d42a617ee901871","d9004ddbffd85641170f97c95ecd8720"]'

返回内容:

{
          "code": 200,
          "info": "成功",
          "data": null
  }

状态码:

状态码提示信息
3320物料一次操作不能超过100条
3323物料集无效或者不存在
3334物料key值不能为空
3.2.4物料查询接口

URL:内容上报接口地址为:https://nbrecsys.4paradigm.com/business/items/search?type={1|2,1-按照itemId;2-按照url}&accessToken={您物料集合的token}

Http Method:POST

Http 返回格式:JSON

参数说明:如果url中type=1,请传入itemId的数组,如果type=2,请传入url的数组

Curl命令上报示例:

curl -X POST  
        'https://nbrecsys.4paradigm.com/business/items/search?accessToken={物料的token}&type=1'  
        -H 'Content-Type: application/json'  
        -d '["7f6dd2c62dd8677b4d42a617ee901871","d9004ddbffd85641170f97c95ecd8720"]'

返回内容:

{
          "code": 200,
          "info": "成功",
          "data": [
              {
                  "itemId": "a875f4dcbfbcd05875ce82272a5f3acb",
                  "categoryId": "",
                  "title": "测试物料0001",
                  "content": "",
                  "publishTime": 1512704640000,
                  "publisherId": "",
                  "isRecommend": 1,
                  "url": "http://test.com/1169444.html",
                  "coverUrl": "",
                  "score": 0,
                  "ctime": 1525978235000,
                  "utime": 1529480592000,
                  "tag": "",
                  "categoryV1": ""
              },
              {
                  "itemId": "d92fddcf379e0001cf72f40ef38352f0",
                  "categoryId": "",
                  "title": "测试物料0003",
                  "content": "",
                  "publishTime": 1420709220000,
                  "publisherId": "",
                  "isRecommend": 1,
                  "url": "http://test.com/889429.html",
                  "coverUrl": "",
                  "score": 0,
                  "ctime": 1525978235000,
                  "utime": 1529480592000,
                  "tag": "",
                  "categoryV1": ""
              }
          ]
  }

状态码:

状态码提示信息
3320物料一次操作不能超过100条
3323物料集无效或者不存在
3334物料key值不能为空
4调用推荐服务
4.1接口描述

一般情况下,您通过我们后台的流程,接入sdk就可以获取推荐结果。

以下说明是特指API调用推荐服务的情况,请和与您对接的商务、售前或运营同学确认清楚您的具体情况,再按照以下步骤操作。

4.2推荐服务方法

URL:https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID={8-18位随机数,只能包含字母和数字}&sceneID={您的场景ID}&userID={您业务中用户表示用户的ID}

调用方式:POST

(备注:推荐方法为post方法,因此必须使用post请求和消息体,允许消息体为空;直接在浏览器中使用该链接默认为get方法,无法生效,示例在下文给出)

4.3Http 请求参数说明

URL中参数说明:

字段名是否必传字段类型字段说明示例
sceneID必传 string场景id,在先荐后台的场景详情页中查到如“149”
requestID必传 string是用来标注请求的ID参数,为随机数,8~18位,只能包含字母和数字如“7fj313149p”
userID必传 string用户唯一ID,8~18位,只能包含字母和数字, 请填写您业务中用于表示用户的ID即可,如果无标示ID请传入如广告ID、手机号之类的标识如"131610183"

requst body中参数说明:

字段名是否必传字段类型字段说明示例
itemID关联推荐必传,其他推荐方式可空 string内容唯一ID"itemID" : "999999991"
itemTitle关联推荐必传,其他推荐方式可空 String内容标题"itemTitle" : "第四范式智能推荐"
page否,如果为空,则feed流展示场景下置顶功能无法生效 int用户在feed流展示情况下刷新的次数"page" : 1 当用户第一次请求推荐结果,应填写“1”,当用户下滑刷新,第二次请求推荐结果,应填写“2”
4.4接口调用必须参数&示例
关联推荐热门推荐个性化推荐
feed流
requst body 参数itemID(必传)
itemTitle(必传)
page(选传)
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
"itemID" : "999999991",
"itemTitle" : "第四范式智能推荐",
"page" : 1
}'
requst body 参数page(选传)
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
"page" : 1
}'
requst body 参数page(选传)
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
"page" : 1
}'
侧边栏
requst body 参数itemID(必传)
itemTitle(必传)
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
"itemID" : "999999991",
"itemTitle" : "第四范式智能推荐"
}'
requst body 参数
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
}'
requst body 参数
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
}'
固定位置
requst body 参数itemID(必传)
itemTitle(必传)
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
"itemID" : "999999991",
"itemTitle" : "第四范式智能推荐"
}'
requst body 参数
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
}'
requst body 参数
示例curl
"https://nbrecsys.4paradigm.com/api/v0/recom/recall?requestID=requestID&sceneID=455&userID=12667677"
--data '{
}'
4.5调用示例&详解
4.5.1调用返回格式

JSON

4.5.2成功返回示例
[{"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/a0/3d/a03d2bfb480a23adaaa6c2f514bd50c6.png","item_id":"8e57a998aa0b7b0987bff4ce0fae7b9d","title":"第四范式戴文渊:提升企业认知智能须构建“机器学习圈”	","url":"http://www.geekpark.net/news/224606","content":"日前,在乌镇举办的“第四届世界互联网大会”上,人工智能公司第四范式的创始人、首席执行官,同时也是人工智能领域杰出青年学者(“迁移学习”单篇论文引用全球前三、中国人工智能最高奖“吴文俊奖”一等奖获得者)的戴文渊阐述了其对于人工智能在工业界广泛应用的观点,戴文渊认为,企业需要的AI已不再是解决单一问题的工具,而是支持各个业务部门决策的认知能力,为此,企业需要为人和机器建立起相互辅助的角色,并据此对现有","cover_url_size":"","category_id":"","publish_time":"2017-12-04 12:00:00","context":"pZz557cknVTVrHFZmTCgBoJ0vSmhe40fz6zg+7020dJpRshjQ/xfNl/FWWXvg7M9tdjN3T+K2MGBqDakYWLFBfow7rD/thj22gtGPckrzGXHzfWD6DKgZtQ9H9bN8FIzrlbB5gDIH53OggkyzrYSWkJW","tag":"第四范式,人工智能,机器学习圈","tag_url":"","item_read_cnt":979},
        {"publisher_id":"Afio","cover_url":"https://imgslim.geekpark.net/uploads/image/file/fe/ec/feec29ee0a98e445e4bb5ca17f2c30ce.png","item_id":"7f70e3102da56151837bcc58f53ea461","title":"双多人模式游戏应用推荐","url":"http://www.geekpark.net/news/166397&gta5","content":"还在打僵尸弹小鸟逗汤姆猫吗,快来看看双多人模式游戏应用都有哪些吧,光棍节、情人节必备应用哦。双十一将至,除了上淘宝疯狂购物之外,打着光棍节的幌子外出聚会、犯醉、搞基腐等各种深入交流活动肯定也是必不可少的了。在iPhone,iPad人手一个的时代如果你还在用段子取悦交流对象那就太凹凸了,拿出手机Pad点开准备好游戏App一块玩是一个不错的选择。那么你的iOS设备里都有哪些适合双多人玩的游戏呢?什么?","cover_url_size":"600X211,600X199,600X176,600X113,600X138","category_id":"","publish_time":"2012-11-11 12:00:00","context":"Zx0Hy8L/kMd6lSvudWezjke/okMhxGF3DnOgpKUG4MQyA3iolI1RO506aO3ww2Vi2DHhYTkr/fCh51gAYwKFrWiwwrCMDHJ20aJarAeAHNY1lLU1btXjAeBtNfwjQ1NuU1n6J3eVfiolg9WzUFW9lbfU","tag":"Mobile Games,iPad,iOS","item_read_cnt":0},
        {"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/01/4f/014f53268ba5645e4d8fa23b49fa045c.png","item_id":"6934650a5e926380f094b232468540a3","title":"打造企业AI核心系统,第四范式先知3.0亮相乌镇	","url":"http://www.geekpark.net/news/224629","content":"2017年12月3日,“第四届世界互联网大会”在浙江乌镇开幕。领先的人工智能技术与服务提供商第四范式受邀参加大会,并发布了全新升级的“第四范式先知”3.0产品。“第四范式先知”3.0产品定位为企业人工智能核心系统,成为继交易核心系统、互联网核心系统之后,企业的又一个重要核心。企业人工智能核心系统帮助企业围绕业务构建机器学习闭环,构建不断提升的智能业务能力,从而帮助企业在AI时代实现策略制定的智能化","cover_url_size":"","category_id":"","publish_time":"2017-12-04 12:00:00","context":"vJ9zwBRqHpAKmjpu91oaxyfz6ekWg17V+CPIJxLN9v3KInnbxqkABmvwb2rr/6lQ5ESk2Z3w1XAHCwkXLsii5qJ9bsqcp+v5BeRUjJyWX48nIX3MLzOwmLBPykRKhgCAteDYFZwt5/jBHwgqQDTZDQld","tag":"第四范式,先知3.0,AI","tag_url":"","item_read_cnt":324},
        {"publisher_id":"诸神之黄昏","cover_url":"https://imgslim.geekpark.net/uploads/image/file/cc/04/cc0480e8136199abd440966ddf856a85.jpg","item_id":"aef147d2f829e7902a84ffaee9a5dc0b","title":"推荐一切不可推荐的新闻","url":"http://www.geekpark.net/news/186117","content":"前不久著名研究机构Pew发布的一项报告,称社会化新闻网站  的用户已经占到了所有美国成人网民总数的6%,相应的Reddit的估值也高达4亿美金。不过如此火爆的新闻网站却在保持自身的独立性方面出奇的用心,它们就像Google在自己的网站介绍里写的各项宗旨一样,有自己的“十不”原则,包括不做广告、不参加流量交易、不强迫注册等等。自成立以来,Reddit关注的焦点似乎一直放在内容本身,其Web站点从未做","cover_url_size":"","category_id":"","publish_time":"2013-08-08 12:00:00","context":"PWqbIbMUAfo/GRTffK7nCt1X1mPm6DsB9/IJTT5/taCK6hcbmdFlyLD/wus08AtdkpQZZuFiUWnvnBqjtxHok+NzwXSguccPS/TVQIirB2wviB/M+Sw4ziB9KQzgalbT2yCJNWXjInz1JmT3IMd6GFrl","tag":"抽屉新热榜,新闻阅读,编辑,Reddit","item_read_cnt":0},{"publisher_id":"Rubberso","cover_url":"https://imgslim.geekpark.net/uploads/image/file/d6/4d/d64da16efa3c5f0f92ecba36216189ac.jpg","item_id":"89b463e4cfef80341cff6276e72c961f","title":"私物推荐:一个能拿来听歌的「智能录音笔」","url":"http://www.geekpark.net/news/214721","content":"因为工作的原因,我时常会用到录音笔(或者说是录音棒),但大多时候只是把它当做一个工具而不是什么让人「心潮澎湃」的电子产品。这次让我甘愿为索尼新发布的录音笔掏腰包的原因主要有两个:最近在VICE上看了一个,讲的是音乐人HotSurgar带着录音笔穿梭在城市的角落,收集采样声音素材并制作成极具想象力的音乐。在他手里,录音笔变成了一个极具创造性的工具。另外一个原因其实是为了听歌。手机听歌的便利性毋庸置疑","cover_url_size":"","category_id":"","publish_time":"2016-02-27 12:00:00","context":"6Y2150erV3kEfAUEjvrdPfuEiIpVBXatVNqLLCTSbUaVgJersWU07sK5vRMcx9yji3hnIcuOcNPSlNJUNiNhdmwPSwjoDeIvaEz/vEgm/UqqAbvrDwSmG21zQbwQImneN+bAzrzAFsTyV+/x1HnRX2cx","tag":"索尼,录音笔","item_read_cnt":4},
        {"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/dc/3e/dc3e8a3535fb7f5693101775486649e8.","item_id":"f289120a62518b4fbbc519b4fd4b11b1","title":"中关村银行与第四范式达成战略合作,携手开创供应链「AI+金融」新纪元","url":"http://www.geekpark.net/news/230520","content":"2018年6月20日,中关村银行与第四范式战略合作签约仪式暨第四范式供应链「AI+金融」服务平台发布会在京举办。中关村银行与第四范式确定达成战略合作,双方将立足各自优势,以产业金融服务与人工智能技术的深度融合作为切入点,通过「AI+金融」双核引擎、助力产业转型升级。中关村银行董事长郭洪、中关村银行首席信息官梁勇、中关村银行智慧金融部总经理窦郁宏、金融科技创新联盟秘书长江艾芸、第四范式创始人&amp","cover_url_size":"893X580,996X593","category_id":"","publish_time":"2018-06-25 12:00:00","context":"RaEIBfnvG9bHStZM2P3Ou7gHpMe3vQMgHtrnmPYwQ6b49WHSEn5HrZT0OK1fhV/EmDZyH7PpOYXlDIC//S3GbyZTJaIPFHNVpAuwqxSnogCbnvDN+V/KDi4Z0VBNuJBfqq7hVCuRuyG6tXj9jusSNUIH","tag":"","item_read_cnt":0},{"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/76/b8/76b87146babb8c03903755605ce0afe9.png","item_id":"2185a689147f1fc8462d8d7f0403f4c6","title":"亚布力夏季高峰会开幕,第四范式戴文渊笑谈币圈挖矿太耗能","url":"http://www.geekpark.net/news/232273","content":"8月24日,亚布力中国企业家论坛夏季高峰会在江西南昌拉开帷幕,上百位国内知名企业家云集赣江之畔,第四范式创始人兼CEO戴文渊受邀出席绿色金融论坛。第四范式是「金融+AI」领域炙手可热的独角兽企业,目前已经服务国内包括工行、交行、招行在内的国内绝大多数银行,因此在一定程度上代表着AI在银行业的发展风向标。戴文渊在论坛表示,技术本身肯定是中立的,但是科学家是人,需要考虑社会责任感。所以第四范式一直在不","cover_url_size":"","category_id":"","publish_time":"2018-08-27 12:00:00","context":"qsehI86tYf8/EnIom+YMhSXsWrGL4WxJ3z+qIr8ScCk8rmIdTesPk//Ppi0ZAe610VaLQtnusJ9L2EJuTYZzHUzxe1h8Rmn50d0lEWJREgNYCRufx6wrRDncBkTlwPCEY9ShzMMzYmGjrZVVzCi3FEPq","tag":"亚布力,金融机构","tag_url":"","item_read_cnt":656},
        {"publisher_id":"刘丢丢","cover_url":"https://imgslim.geekpark.net/uploads/image/file/a6/0b/a60b58c01c7bbffcab3699198dd9399b.jpg","item_id":"75397947f43a3d16aa7885fd789c4b3b","title":"Google 推出一个播客应用,还让智能助理给你推荐节目","url":"http://www.geekpark.net/news/230376","content":"很多人都有听播客的习惯,通勤路上、跑步时,在不方便手动操作和阅读的场合,这是一个不错的信息获取方式。最近Google也推出了自己的播客应用GooglePodcasts,虽然之前GooglePlay中也提供播客节目,不过并没有作为一个独立的播客应用。这次GooglePodcasts的推出也和普通的播客应用不同,基于人工智能的推荐、还有和GoogleAssistant的联动才是重点。就像前段时间推","cover_url_size":"","category_id":"","publish_time":"2018-06-20 12:00:00","context":"BenqS+k5g4/lWpqTL5/erRI8z9WCgwTncSxcJtLCd6u4XiN7+0W83hzuQKGTmV31K124EKW/6daHGXV0fE3QfWTIf/EXbIXHo9NN7SIUtklCC0yAgh+fb/tr4/XRTFeXXhb+9PpJ+1k85MTwyTF5IzZg","tag":"Google 播客,Google Podcasts,播客","item_read_cnt":0},
        {"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/09/d1/09d158e595a8d7d8a320a405e04f7c7d.jpg","item_id":"96fd1163bdbc160dc7e66b863f882a24","title":"糖尿病预防新里程碑,第四范式联合瑞金医院推出AI糖尿病预测产品","url":"http://www.geekpark.net/news/223996","content":"11月14日,是第十一届“世界防治糖尿病日”(以下简称“世糖日”),糖尿病作为一种常见病、多发病,已成为现代疾病中的第二杀手,而更令人忧心的是,我国成年人中50%以上都是糖尿病前期人群,防治的首要工作在于及时发现与早期干预。今年的世糖日,第四范式与瑞金医院基于双方在人工智能和医疗领域的研究成果,联合发布了糖尿病预测软件”瑞宁知糖“,该软件将人工智能技术应用于糖尿病的患病率预测中并取得突破性进展。瑞","cover_url_size":"","category_id":"","publish_time":"2017-11-15 12:00:00","context":"T5ngvbVtBhJEqYGpqTY5TuKdhcH0oCkWFWD+W6Hoo8CMqxa8emgcBhhDoQpcF/Ebf/FtQwqPRXmtYyNGjadqClC1u6GzxOTN4X8QBsXSLvFfDlJC7sOO9Ylih/+vNTVMHDQx2fl5+GG1VQ3qc6rxUI2c","tag":"第四范式,瑞金医院,瑞宁知糖,AI医生","item_read_cnt":1},
        {"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/1e/ad/1eadece84b1002c98f9ac8044a887012.jpeg","item_id":"1ae6aaa5ee428920b285a56921a49ed0","title":"品质高还实惠,四款 50 英寸精品智能电视推荐","url":"http://www.geekpark.net/news/226064","content":"近年来,随着人们生活水平的提高,社会消费升级的大背景下,很多消费者开始对产品品质及服务质量提出了更高的要求。在竞争激烈的智能电视行业,这种改变尤为突出——大部分人都不在把「看电视」当作核心诉求,而是希望通过一台智能电视完成「家庭影音娱乐中心」的心愿。这就不仅要求电视的画质好,还要有强劲的性能和丰富的互联网生态体系支持,当然实惠的价格也非常关键。马上就到春节了,本文就给大家推荐几款「品质高还实惠」的","cover_url_size":"","category_id":"","publish_time":"2018-01-16 12:00:00","context":"d6VFoCqK9FMXQJrWQYBo0AzQINvHRZaHGLRFXv2nfD/Kcsaax5tFr58Ei4vfB991oju/roiZQFtPfkBLz3YZxbDL/R6+QR0BtfR1XqHr6rvhxurMuKMb6HfjR3ClwqoIZA93TlFahdKaq28tYRb0DdR2","tag":"","item_read_cnt":1},{"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/c1/53/c153d261a1b407836df694a7876db883.jpg","item_id":"a0d93e4eceecf6f49cda0500f9533d42","title":"全面屏时尚拍照2018最该入手的智能手机推荐","url":"http://www.geekpark.net/news/226940","content":"就让小编与您一起感受下全面屏智能手机的创新之作,看看哪些款系是你真正的内心所属。2018年的手机行业,可以说是全面屏的爆发时代。这一年的主流趋势在行业里掀起了波澜,从高端旗舰机到实用千元机,每个层面都映射着全面屏的设计身形。智能手机屏幕的不断扩充,在迎合消费用户视觉需求的同时,也在前沿技术上实行着自我挑战。全面屏手机燃似红海,让众多手机厂商相拥而至。除了在拍照体验、娱乐影音等方面呈现优势外,其系统","cover_url_size":"331X326,177X335,179X322","category_id":"","publish_time":"2018-03-01 12:00:00","context":"71MSXqQCnXR+Y9L5lWEa63xDnBSXXqzKbRhJaiuM5Y0gdP0JLtjXSMkRtoNeeVminJVvpcK/r7lfG73rS1Mkk2HC6cBC2FZinP5j5vu0JCVxM58mcSJWvzzENJpZ88aItbB3xkgxZX/4n3d+QGJSz+I2","tag":"","item_read_cnt":1},{"publisher_id":"快讯","cover_url":"https://imgslim.geekpark.net/uploads/image/file/91/32/9132402a5100a86525018a19606d1f3b.png","item_id":"e94e9bd5ce24714bad9aebc42f6a769e","title":"第四范式戴文渊:AI落地不能靠炒概念,需要踏踏实实下苦功","url":"http://www.geekpark.net/news/230519","content":"  由亚布力中国企业家论坛主办的「2018亚布力青年论坛第四届创新年会」于6月23日在香港举行。本次论坛以「2018金融科技新机遇」为议题,促进发展内地高新技术优势与香港国际金融中心优势的的良好合作,全国政协副主席梁振英、香港贸易发展局主席罗康瑞、港交所主席李小加等两地政商界人士出席并致辞。第四范式创始人兼首席执行官戴文渊先生作为高科技企业家代表,应邀分享第四范式在AI落地方面的经验。戴文渊指出,","cover_url_size":"780X520","category_id":"","publish_time":"2018-06-25 12:00:00","context":"NOuhkOiCaRzGRy7Ad12UvAOoSli9n5IAKnJPgD0RRjBVilcWSufReDX1RiofPYrvrfH3OHRedHQgAzHLn8AAmrZCaKBj5//vrtlCc1KL74t5fMnoXv8fMWylcmxlTk/18N08u0RCAD/JPq2w6GyXJmq8","tag":"","item_read_cnt":0}]

以上返回结果为JSON格式,进行格式化后查看如下:

正确返回结果中参数说明:

字段名字段类型字段说明示例
item_id string内容唯一ID如“1191180”
title string内容标题如“感动中国的大学生,今成副书记”
url string正文连接地址如“http://www.pcUrl.com/xxx”
content string内容正文如“生于1982年的徐本禹是山东聊城人,家境贫寒的他在华中农业大学读书期间。”
cover_url string封面图链接如“https://img30.360buyimg.com/popWaterMark/jfs/t4447/135/490777486/304711/e78c2e3b/58d0c659N660cfbc1.jpg”
cover_url_size string封面图尺寸大小,格式为“长X宽” 如“324X243”
category_id string内容所属分类如“2,3;3,4”
tag string内容标签如“110990”
publish_time timestamp内容发布时间格式YYYY-MM-DD HH:mm:ss
publisher_id string内容发布者ID如“110990”
4.5.3错误返回示例

如果未成功,则会返回如下错误:

{"errmsg":"INVALID_REQUEST_BODY","secret":"dl8JC0rWp2doX8XpHx1rOInq07Toc+acs21hxHCDYfufcolKmHAMBH71Po1neOjom3niUvYCII9QYMIx25SPLhH2cXU20o+VpxTGG8f4MBCMVZyxHe+kQfAs1Q/voqfZGFLjURtWfjzSj+2xWJmMS5u1u4x5xaqsdURR/d0tkRprLOLX5ng3SAECDF/DwY3Q43khqLQsp01grUpBzajlRhbazO5HLWuHGvUh2/Tb3RE80Q5EY5aIlaLmVzop9dBfiO2p0m8HtNjtSf68SBoIurBH8HBmZ3In8Ui/7xH3HtABx9qrTL2sllLKWyOakxIFa+sCiTCpt/KDHVvOo/VElP+BKOar+RvTHUhV32DxFdcagIMkpj+MgW6axdALehimUXfFPCmTmOR1YAiI7Ovrn7Y8jH1bzh/nMt+vPtQLM7r+1GrOU1g3zNpVIn2Iat7Um9iWEjcwiJxwAsNc3Q5XF9sgKKB6efftSDiYXJsbUYpPrzQtqdKLgXi2a7k4Uygv8HioP7mrJZB/YoQrsEfk7BCqXcWGESxoa8KWP9fk75fqqQ5m3ISRQ8J6eblESHz3fj9cF1K4lNXgLeXvfk/N/Yw5M2vNsQfl"}

如错误返回,其中“errmsg”为错误类型,可能存在的错误类型有如下种:

错误类型错误描述示例
INVALID_REQUEST 请求接口参数缺失如requestID未填写
INVALID_REQUEST_PARAMS 请求接口参数错误比如sceneID填写错误
INVALID_REQUEST_SEMANTICS 推荐场景所需data参数未填写或填写错误
INVALID_REQUEST_BODY 请求Body参数错误如请求未添加data
RATE_LIMITED 请求频率过高,同一个用户不能同时发送多次请求
4.6注意事项

1、推荐方法为post方法,因此必须使用post请求和消息体,允许消息体为空;

2、直接在浏览器中使用该链接默认为get方法,无法生效

5app接入SDK说明
5.1iOS SDK说明
5.1.1快速接入指南

1、项目配置

Step 1.下载SDK

完成“快速接入推荐系统”, 在您的场景页面选择“iOS SDK”点击下载。

Step 2.导入SDK

将SDK文件添加到你的项目中,如图:

Step 3. 设置Other Linker Flags

在项目Target ——>Build Settings——>Linking——>Other Liker Flags中添加-ObjC

Step 4.初始化SDK

打开 AppDelegate 文件,导入基础模块:#import < ParadigmSDK / ParadigmSDK.h>

然后粘贴下列代码到 application:didFinishLaunchingWithOptions: 方法中并替换为您在“推荐系统”获取的clientToken,位置在“[self.window makeKeyAndVisible]; ”之后。

      // 业务代码 
        [self.window makeKeyAndVisible];
        // SDK提供的初始化接口
        [ParadigmSDK sharedInstanceWithClientToken:@"yourClientToken"];
        

2、项目部署

Step 1.在准备请求得到推荐系统推荐结果的位置中,请粘贴以下以得到请求数据,并设置相应参数:

      // SDK提供的获取推荐结果的接口
        // 第一个参数sceneId 为从推荐系统获取的场景id
        // 第二个参数itemId 为当前物料的物料id,如果是关联推荐,为必传项;
        // 第三个参数itemTitle 为当前物料的标题,如果是关联推荐,为必传项,用于物料语意尚未分析完成时的冷启动,长度不能超过100个字;
        // 第四个参数itemContent 为当前物料的内容,如果是关联推荐,推荐选传,其余情况请忽略,用于物料语意尚未分析完成时的冷启动,长度不能超过200个字;
        // 第五个参数completionHandler 为获取结果的异步回调block,会回传一个结果数组和一个error,error为空时说明请求成功;结果数组results内部每个元素为ParadigmrecomItem对象。
        [[ParadigmSDK sharedInstance] requestRecomsWithSceneId:@"945" itemId:nil itemTitle:nil itemContent:nil completionHandler:^(NSArray<ParadigmRecomItem *> * _Nullable results, NSError * _Nullable error) {
      
          // 以下为纯示例代码,请勿复制使用。请根据您的业务具体处理,如保存数据、刷新页面等
              if (error) {
                  NSLog(@"%@",error.domain);
              } else {
                  dispatch_async(dispatch_get_main_queue(), ^{
                      [self.dataArray removeAllObjects];
                      for (ParadigmRecomItem *item in results) {
                          [self.dataArray addObject:item];
                      }
                      [self.tableView reloadData];
                  });
              }
          }];
        

此步骤中,请求推荐结果的函数为:

- (void)requestRecomsWithSceneId:(NSString *)sceneId
                                  itemId:(nullable NSString *)itemId
                               itemTitle:(nullable NSString *)itemTitle
                             itemContent:(nullable NSString *)itemContent
                       completionHandler:(void(^)(NSArray <ParadigmRecomItem *>* _Nullable results, NSError * _Nullable error))completionHandler;
        

参数:

sceneId:获取推荐结果的当前场景id,从推荐系统获取

itemId:当前场景下当前物料的id,在关联推荐下为必传项,其他推荐方式可以为nil;

itemTitle:当前场景下当前物料的标题,在关联推荐下为必传项,其他推荐方式可以为nil;

itemContent:当前场景下当前物料的内容,在关联推荐下推荐选传,其他推荐方式下请忽略该参数并传递nil;

completionHandler:获取推荐结果的异步回调block,会回传一个结果数组results和一个error,error为空时说明请求成功;结果数组results内部每个元素都为ParadigmRecomItem对象,详见ParadigmRecomItem.h文件。

Step 2. 推荐结果展示反馈函数的接入

如,假设你在这个场景使用推荐系统:

在客户端完成渲染,展示推荐结果时,需要按照示例如下接入:

// 以下为示例代码,请您按照自己的业务逻辑确定渲染位置并接入
        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        {
            static NSString *cellID = @"AI4SDKDemoHomepageCellID";
            DemoItemCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
            if (!cell) {
                cell = [[DemoItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
            }
            ParadigmRecomItem *item = [self.dataArray objectAtIndex:indexPath.row];
            [cell refreshWithItem:item];
        
          //SDK提供的推荐结果展示反馈接口
          //第一个参数itemId 为在获取推荐结果中得到的物料id
          //第二个参数itemSetId 为该物料所属的物料集id
          //第三个参数sceneId 为当前场景id
          //第四个参数position 为该条结果在列表中的位置(NSInteger)
          //第五个参数context 为物料的上下文信息,为ParadigmRecomItem对象的一个属性
        
            [[ParadigmSDK sharedInstance] trackShowWithItemId:item.itemId itemSetId:@"439" sceneId:@"945" position:indexPath.row context:item.context];
            return cell;
        }
        

此步骤中,使用的推荐结果展示反馈函数为:

- (void)trackShowWithItemId:(nonnull NSString *)itemId
                          itemSetId:(NSString *)itemSetId
                            sceneId:(NSString *)sceneId
                           position:(NSInteger)position
                            context:(nullable NSString *)context;
        

参数:

itemId:从推荐结果获取到的物料id

itemSetId:该物料所属的物料集id,可以从推荐系统后台中获取

sceneId:当前场景id,可以从推荐系统后台中获取

position:推荐项在列表中的展示位置

context:该物料的上下文信息,为ParadigmRecomItem对象的一个属性

Step 3. 推荐结果详情页反馈函数接入

如,在该推荐场景下,如果用户点击了这个item,那么请在商品详情页完成初始化处,接入“用户查看详情统计接口函数”。

在客户进入详情页时,需要按照示例如下接入:

//推荐将该接口放在viewDidLoad中
      - (void)viewDidLoad {
          [super viewDidLoad];
          // Do any additional setup after loading the view, typically from a nib.
          // 此处为示例的业务逻辑代码
          self.title = @"详情";
          [self.view addSubview:self.tableView];
        
        // SDK提供的推荐结果详情页反馈接口
        [[ParadigmSDK sharedInstance] trackDetailPageShowWithItemId:self.item.itemId itemSetId:@"439" sceneId:@"945" context:self.item.context];
      
      }
        

Step 4. 在客户退出详情页时,您需要调用“用户退出详情统计接口函数”。

注:该接口用于统计用户在详情页的停留时长,可以在推荐系统后台报表中查看,同时也为推荐系统增加参考维度,如无特殊情况请务必正常接入。

在用户退出详情页时,需要按照示例如下接入:

// 为了准确获取用户的退出事件,此示例中使用了dealloc
      // 注意,如果使用dealloc接入该事件,不需要调用 [super dealloc]
      // 如果按照业务在viewDidDisappear中调用该事件,请区分用户是否真正退出了页面
      // 例如用户点击了评论按钮,进入了该文章的评论页,实际上并没有离开详情页,但是会触发viewDidDisappear
      - (void)dealloc
      {
          [[ParadigmSDK sharedInstance] trackDetailPageDisappearWithItemId:self.item.itemId itemSetId:@"439" sceneId:@"945"];
      }
        

Step 5. 您需要在整个应用内,其他的和推荐场景展现同样类型内容的场景中,按照step1所示设置,来获取推荐结果数据。并同时按照Step 2、Step3、Step4所示设置相应的统计函数。

Step 6. 根据您业务和需求的评估,选择性接入其他统计方法(如收藏行为统计、点赞行为统计、分享行为统计等,详见下方说明)。

Step 7.完成接入,进行测试。

5.1.2SDK接口功能详述

1、接口列表

此接口列表仅为列明SDK覆盖的全部接口,具体的使用细则和参考请分别至下文查看。

所有的统计接口,都应在用户触发行为时调用。

接口名接口说明备注
+(ParadigmSDK *)sharedInstanceWithClient Token:(NSString*)clientToken;根据传入的配置,返回一个初始化完成的SDK单例此接口必须优先于其他接口调用
+(ParadigmSDK *)sharedInstantce;获取SDK单例必须先调用上方接口,此接口才会正常返回
-(void)setCurrentUserId:(NSString *)userId;设置当前的用户id。如果用户进行了登录操作,请调用该方法传入用户的唯一id如果没有账号系统,可以不接入该方法;但是用户更换设备后将导致历史行为无法生效。
-(void)requestRecomsWith SceneId:(NSString*)sceneId itemId:(NSString *)itemId itemTitle:(NSString*)itemTitle itemContent:(NSString *)itemContent completionHandler:(void(^) (NSArray* results,NSError* error)) completionHandler;根据传入的场景id,获取对应的推荐结果数组。数组中每个元素都是ParadigmRecomItem对象,详见ParadigmRecomItem.h文件。
-(void)trackShowWithItemId: (NSString *)itemId itemSetId:(NSString*)itemSetId sceneId:(NSstriing*)sceneId position:(NSInteger)position context:(NSString*)context;推荐结果曝光和展现的统计接口
-(void)trackDetailPageShow WithItemId:(NSString*)itemId itemSetId:(NSString*)itemSetId sceneId:(NSString*)sceneId context:(NSString*)context;查看详情页面的统计接口
-(void)trackDetailPageDisappear WithItemId:(NSString*)itemId itemSetId:(NSString*)itemSetId sceneId:(NSString*)sceneId;退出详情页面的统计接口
-(void)trackCollect WithItemId:(NSString*)itemId itemSetId:(NSString*)itemSetId;点击收藏行为的统计接口
-(void)trackShare WithItemId:(NSString*)itemId itemSetId:(NSString*)itemSetId;点击分享行为的统计接口
-(void)trackLike WithItemId:(NSString*)itemId itemSetId:(NSString*)itemSetId;点击点赞行为的统计接口
-(void)trackDislike WithItemId:(NSString*)itemId itemSetId:(NSString*)itemSetId;点击点踩行为的统计接口
-(void)trackFollow WithItemId:(NSString*)itemId publisherId:(NSString*)publisherId itemSetId:(NSString*)itemSetId;点击关注行为的统计接口

2、SDK 设置类接口

(1)初始化接口

传入配置并初始化SDK,此接口必接

方法:

+ (ParadigmSDK *)sharedInstanceWithClientToken:(NSString *)clientToken;
        

参数:

clientToken:第四范式分配的验证令牌,在推荐系统中获取;

返回:

初始化完成的ParadigmSDK的实例。

使用:

建议在应用初始化完成后就进行调用。

用例:

          [self.window makeKeyAndVisible];
          [ParadigmSDK sharedInstanceWithClientToken:@"test"];
        

(2)设置用户唯一id接口

方法:

- (void)setCurrentUserId:(NSString *)userId;
        

参数:

userId:用户登录后的唯一id

使用:

如果用户进行了登录操作,请调用该方法传入用户的唯一id。

注:如果没有账号系统,可以不接入该方法;但是用户更换设备后将导致历史行为无法生效。

用例:

           [[ParadigmSDK sharedInstance] setCurrentUserId:@"userId123"];
        

3、SDK基本事件收集接口

(1)推荐结果的曝光和展现接口

方法:

- (void)trackShowWithItemId:(nonnull NSString *)itemId
                        itemSetId:(NSString *)itemSetId
                          sceneId:(NSString *)sceneId
                         position:(NSInteger)position
                          context:(nullable NSString *)context;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

sceneId:当前场景id ,可以在推荐系统后台中获取

position:展现给用户的推荐结果项在列表中的位置

context:该物料在推荐中的上下文信息,是ParadigmRecomItem对象的属性

使用:

当推荐结果被曝光/展现时需要调用的接口

用例:

[[ParadigmSDK sharedInstance] trackShowWithItemId:item.itemId itemSetId:@"439" sceneId:@"945" position:indexPath.row context:item.context];
        

(2)用户查看详情页面行为统计接口

方法:

- (void)trackDetailPageShowWithItemId:(nonnull NSString *)itemId
                                  itemSetId:(NSString *)itemSetId
                                    sceneId:(NSString *)sceneId
                                    context:(nullable NSString *)context;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

sceneId:当前场景id ,可以在推荐系统后台中获取

context:该物料在推荐中的上下文信息,是ParadigmRecomItem对象的属性

使用:

当用户查看物料详情时调用的接口。

*注:特别的,请务必将该接口放在查看详情页面进行统计(如viewDidLoad中),以防遗漏。

用例:

[[ParadigmSDK sharedInstance] trackDetailPageShowWithItemId:self.item.itemId itemSetId:@"439" sceneId:@"945" context:self.item.context];
        

(3)用户退出详情页面行为统计接口

方法:

- (void)trackDetailPageDisappearWithItemId:(nonnull NSString *)itemId
                                       itemSetId:(NSString *)itemSetId
                                         sceneId:(NSString *)sceneId;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

sceneId:当前场景id ,可以在推荐系统后台中获取

使用:

当用户退出物料详情时调用的接口。

*注:该接口用于统计用户在详情页面的停留时长,该数据可以在推荐系统后台中查看,同时该数据可以作为推荐系统的重要参数。

用例:

[[ParadigmSDK sharedInstance] trackDetailPageDisappearWithItemId:self.item.itemId itemSetId:@"439" sceneId:@"945"];
        

(4)用户收藏行为统计接口

方法:

- (void)trackCollectWithItemId:(nonnull NSString *)itemId itemSetId:(NSString *)itemSetId;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击收藏行为时调用的接口。

用例:

[[ParadigmSDK sharedInstance] trackCollectWithItemId:self.item.itemId itemSetId:@"439"];
        

(5)用户分享行为统计接口

方法:

- (void)trackShareWithItemId:(nonnull NSString *)itemId itemSetId:(NSString *)itemSetId;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击分享行为时调用的接口。

用例:

[[ParadigmSDK sharedInstance] trackShareWithItemId:self.item.itemId itemSetId:@"439"];
        

(6)用户点赞行为统计接口

方法:

- (void)trackLikeWithItemId:(nonnull NSString *)itemId itemSetId:(NSString *)itemSetId;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击点赞行为时调用的接口。

用例:

[[ParadigmSDK sharedInstance] trackLikeWithItemId:self.item.itemId itemSetId:@"439"];
        

(7)用户点踩行为统计接口

方法:

- (void)trackDislikeWithItemId:(nonnull NSString *)itemId itemSetId:(NSString *)itemSetId;
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击点踩行为时调用的接口。

用例:

[ParadigmSDK sharedInstance] trackDislikeWithItemId:self.item.itemId itemSetId:@"439"];
        

(8)用户关注行为统计接口

方法:

- (void)trackFollowWithItemId:(NSString *)itemId publisherId:(nonnull NSString *)publisherId itemSetId:(NSString *)itemSetId;
        

参数:

itemId:在推荐结果的数组中返回的物料id

publisherId:用户关注的物料的发布者id/name

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击关注行为时调用的接口。

用例:

[[ParadigmSDK sharedInstance] trackFollowWithItemId:self.item.itemId publisherId:self.item.publisherId itemSetId:@"439"];
        

4、获取推荐结果接口

方法:

- (void)requestRecomsWithSceneId:(NSString *)sceneId
                                itemId:(nullable NSString *)itemId
                             itemTitle:(nullable NSString *)itemTitle
                           itemContent:(nullable NSString *)itemContent
                     completionHandler:(void(^)(NSArray <ParadigmRecomItem *>* _Nullable results, NSError * _Nullable error))completionHandler;
        

参数:
itemId:获取关联推荐时的原物料的id,在关联推荐下必传
itemTitle:获取关联推荐时的原物料的标题,在关联推荐下必传,用于物料语意尚未分析完成时的冷启动
itemContent:获取关联推荐时的原物料的内容,在关联推荐下选传,其余情况请忽略该参数并传递nil;用于物料语意尚未分析完成时的冷启动
completionHandler:获取结果的异步回调block

使用:

异步回调completionHandler中的error为空时说明请求成功,error不为空说明请求出现异常。results为推荐结果的数组,其内部包含物料的相关信息,详情见ParadigmRecomItem.h头文件。

5.1.3其他

1、确认接入状态

接入SDK后,在代码中将DebugLogMode设置为ParadigmDebugLogModeNormal,然后运行,每个事件接口均有相应的日志输出。

日志格式参考:


---------------------- ParadigmCaseLog ------------------------- 
 Case NO. : 1 . 
 Case Name: AppForeground.
 Content  : 应用进入前台. 
-----------------------------------------------------------------
        

*注:建议上线前将DebugLogMode改为ParadigmDebugLogModeNone。

另外可以在推荐系统中查看接入状态。

5.2Android SDK说明
5.2.1接入指南

1、项目配置

Step 1.下载SDK

完成“快速接入推荐系统之”, 在您的场景页面“Android_SDK”点击下载。

Step 2.导入SDK

将paradigmsdk.aar包放入项目工程中类似libs的目录(具体目录没有关系)

在Android Studio中,打开项目,点击file -> new -> new module

在弹出来的对话框中选择 “Import .JAR/.AAR Package”,点击next

在弹出来的对话框中,file name一栏选择刚才放入的paradigmsdk.aar包的路径,点击finish。Android studio的Gradle会自动导入aar包并生成gradle文件

在Android Studio中,右键项目主App,选择Open Module Settings

在弹出的对话框左侧框中,选择项目主App,并且选中Dependencies

在Dependencies窗口底下点击加号,选择module dependency

在弹出来的对话框中选择paradigmsdk,并点击OK

最后,在Project Structure对话框中点击OK,Gradle会自行重新build

Step 3. 设置AndroidManifest.xml

需要在AndroidManifest.xml文件中使用如下四个权限:


      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        

Step 4.初始化SDK

在MainActivity中引入基础模块:

import com.paradigm4.paradigmsdk.ParadigmAPI;
        

然后在MainActivity的onCreate方法中,参照如下示例初始化SDK,并替换为您自己的clientToken(在推荐系统中获取):

//以下为示例代码,是MainActivity的onCreate方法,请按照您的项目格式自行填写
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
          // SDK提供的初始化方法
          // 第一个参数为当前的context
          // 第二个参数为clientToken,可以从推荐系统中获取
          final ParadigmAPI paradigmAPI = ParadigmAPI.getInstance(this,"yourClientToken");	                        
          
          // 以下为示例的业务代码,请按照您的需求填入您的业务逻辑代码
          login();
      }
        

此步骤中使用的函数为:

public static ParadigmAPI getInstance(Context context, String clientToken)
        

参数:

context:当前的上下文

clientToken:第四范式提供的验证令牌,可以从推荐系统中获取

如果您有继承Application,则在继承自Application子类的onCreate函数中调用初始化函数

如下所示:

public class MyApplication extends Application { 
        @Override public void onCreate() { 
            super.onCreate(); 
            ParadigmAPI paradigmAPI = ParadigmAPI.getInstance(this,"yourClientToken"); 
         }
    }
        

如果您没有继承Application,则在APP的第一个Activity的onCreate函数中调用初始化函数

如下所示:

public class MainActivity extends Activity { 
        @Override protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            ParadigmAPI paradigmAPI = ParadigmAPI.getInstance(getApplicationContext(),"yourClientToken");
        }
    }
        

2、项目部署

Step 1.在准备请求得到推荐系统推荐结果的位置中,请粘贴以下以得到请求数据,并设置相应参数:

      // 该方法为获取推荐结果的示例方法,请根据您的业务自行开发,以下仅为示例
      public void fetch() {
          // SDK提供的回调接口,需要实现其中的recommendationCompletionHandler来获取推荐结果,该接口会回传一个ArrayList,当其不为空时说明获取成功,其中的每个元素均为ParadigmRecomItem对象。
          CallbackMethod callback = new CallbackMethod() {
          @Override
          public void recommendationCompletionHandler(@Nullable ArrayList<ParadigmRecomItem> results) {
        //以下为示例代码,请按照您的业务逻辑自行开发,如存储数据、刷新页面等
                mResults = results;
                refresh();
          }
      };
        // SDK提供的获取推荐结果的方法
        // 第一个参数sceneId为获取推荐结果的场景id,可以从推荐系统中获取
        // 第二个参数itemId为关联推荐场景下当前物料的id,关联推荐时必传
        // 第三个参数itemTitle为关联推荐场景下当前物料的标题,关联推荐时必传,用于物料语意分析尚未完成时的冷启动,不超过100个字
        // 第四个参数itemContent为关联推荐场景下当前物料的内容,关联推荐时选传,其余情况请忽略并传递null,用于物料语音分析尚未完成时的冷启动,不超过200个字
        //第四个参数callback 为您实现的CallbackMethod接口
        ParadigmAPI.getInstance().requestRecoms(sceneId, null,null,null, callback);
        

此步骤中,获取推荐结果的方法为:

public void requestRecoms (String sceneId, String itemId, String itemTitle, String itemContent,CallbackMethod callback)
        

参数:

sceneId:获取推荐结果的场景id,可以从推荐系统中获取

itemId:当前场景下当前物料的id,在关联推荐下为必传项,其他推荐方式可以为null

itemTitle:当前场景下当前物料的标题,在关联推荐下为必传项,其他推荐方式可以为null;

itemContent:当前场景下当前物料的内容,在关联推荐下推荐选传,其他推荐方式下请忽略该参数并传递null;

callback:CallbackMethod声明的interface,需要实现该接口并传入;该接口会回调一个推荐结果数组,当数组不为null时说明请求成功;数组中每个元素都为ParadigmRecomItem对象,详见ParadigmRecomItem。

Step 2. 推荐结果展示反馈函数的接入:

如,假设你在这个场景使用推荐系统:

在客户端完成渲染,展示推荐结果时,需要按照示例如下接入:

// 以下为示例代码,请根据您的业务自行开发,以下仅作为示例
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          // 以下为示例代码
          LayoutInflater inflater = MainActivity.this.getLayoutInflater();
          View view;
          if (convertView==null) {
              view = inflater.inflate(R.layout.item_list, null);
          }else{
              view = convertView;
          }
          // SDK提供的推荐结果展示反馈接口
          // 第一个参数itemId 为获取推荐结果中得到的物料id
          // 第二个参数itemSetId 为该物料所在的物料集id,可以从推荐系统中获取
          // 第三个参数sceneId 为当前场景id
          // 第四个参数position 为该条结果在列表中的位置
          // 第五个参数context 为当前物料在推荐系统中的上下文,是ParadigmRecomItem对象的一个属性
          ParadigmAPI.getInstance().trackShow(item.itemId,"439","495",position,item.context);
      
          return view;
      }
        

此步骤中,使用的推荐结果展示反馈函数为:

public void trackShow(String itemId, String itemSetId, String sceneId, int position, String context)
        

参数:

itemId:从推荐结果获取到的物料id

itemSetId:该物料所属的物料集id,可以从推荐系统后台中获取

sceneId:当前场景id,可以从推荐系统后台中获取

position:推荐项在列表中的展示位置

context:该物料的上下文信息,为ParadigmRecomItem对象的一个属性

Step 3. 推荐详情页展示反馈函数接入

如,在该推荐场景下,如果用户点击了这个item,那么请在商品详情页完成初始化处,接入“用户查看详情统计接口函数”。

在客户进入详情页时,需要按照示例如下接入:

// 以下为示例代码,请根据您的业务逻辑自行开发,以下仅作为示例
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                               Bundle savedInstanceState) {
          // SDK提供的推荐详情页展示反馈接口
          // 第一个参数itemId 为在推荐结果中获取到的物料id
          // 第二个参数itemSetId为该推荐结果所在的物料集id,可以从推荐系统中获取
          // 第三个参数sceneId为当前场景的id,可以从推荐系统中获取
          // 第四个参数context为该推荐结果在推荐系统中的上下文信息,是ParadigmRecomItem对象的一个属性
           ParadigmAPI.getInstance().trackDetailPageShow(item.itemId,"439","945",item.context);
      
          // 以下为示例的业务逻辑代码,需要您按照情况自行开发
          View rootView = inflater.inflate(R.layout.fragment_detail_page, container, false);
          return rootView;
      }
        

Step 4. 在用户退出详情页时,您需要调用“用户退出详情统计接口函数”。

注:该接口用于统计用户在详情页的停留时长,可以在推荐系统后台报表中查看,同时也为推荐系统增加参考维度,如无特殊情况请务必正常接入。

在用户退出详情页时,需要按照示例如下接入:

// 此示例中使用了onDestroy方法来获取详情页的退出事项,实际开发中请依据真实情况在用户退出时进行调用
      @Override
      protected void onDestroy() {
          ParadigmAPI.getInstance().trackDetailPageDisappear(itemId,"439","945");
          super.onDestroy();
      }
        

Step 5. 您需要在整个应用内,其他的和推荐场景展现同样类型内容的场景中,按照step1所示设置,来获取推荐结果数据。并同时按照Step 2、Step3、Step4所示设置相应的统计函数。

Step 6. 根据您业务和需求的评估,选择性接入其他统计方法(如收藏行为统计、点赞行为统计、分享行为统计等,详见下方说明)。

Step 7.完成接入,进行测试。

5.2.2SDK接口功能详述

1、接口列表

此接口列表仅为列明SDK覆盖的全部接口,具体的使用细则和参考请分别至下文查看。

所有的统计接口,都应在用户触发行为时调用。

接口名接口说明备注
public static ParadigmAPI getInstance(Context context, String clientToken)根据传入的配置,返回一个初始化完成的SDK单例此接口必须优先于其他接口调用
public static ParadigmAPI getInstance()获取SDK单例必须先调用上方接口,此接口才会正常返回
public void setCurrentUserId (String userId)设置当前的用户id。如果用户进行了登录操作,请调用该方法传入用户的唯一id如果没有账号系统,可以不接入该方法;但是用户更换设备后将导致历史行为无法生效。
public void requestRecoms (String sceneId, String itemId, String itemTitle, String itemContent, CallbackMethod callback)根据传入的场景id,获取对应的推荐结果数组。数组中每个元素都是ParadigmRecomItem对象,详见ParadigmRecomItem文件。
public void trackShow (String itemId, String ItemSetId, String sceneId, String position, String context)推荐结果曝光和展现的统计接口
public void trackDetailPageShow (String itemId, String itemSetId, String sceneId, String context)查看详情页面的统计接口
public void trackDetailPageDisappear (String itemId, String itemSetId, String sceneId)退出详情页面的统计接口
public void trackCollect (String itemId, String itemSetId)点击收藏行为的统计接口
public void trackShare (String itemId, String itemSetId)点击分享行为的统计接口
public void trackLike (String itemId, String itemSetId)点击点赞行为的统计接口
public void trackDislike (String itemId, String itemSetId)点击点踩行为的统计接口
public void trackFollow (String itemId, String publisherId, String itemSetId)点击关注行为的统计接口

2、SDK 设置类接口

(1)初始化接口

传入配置并初始化SDK,此接口必接

方法:

public static ParadigmAPI getInstance(Context context, String clientToken)
        

参数:

context:当前的context

clientToken:第四范式分配的验证令牌,在推荐系统中获取;

返回:

初始化完成的ParadigmSDK的实例。

使用:

建议在应用初始化完成后就进行调用。

用例:

final ParadigmAPI paradigmAPI = ParadigmAPI.getInstance(this, "test");
        

(2)设置当前用户id接口

方法:

public void setCurrentUserId(String userId)
        

参数:

userId:用户登录后的唯一id

使用:

如果用户进行了登录操作,请调用该方法传入用户的唯一id。

注:如果没有账号系统,可以不接入该方法;但是用户更换设备后将导致历史行为无法生效。

用例:

ParadigmAPI.getInstance().setCurrentUserId("userId123");
        

3、SDK基本事件收集接口

(1)推荐结果的曝光和展现接口

方法:

public void trackShow(String itemId, String itemSetId, String sceneId, int position, String context)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

sceneId:当前场景id ,可以在推荐系统后台中获取

position:展现给用户的推荐结果项在列表中的位置

context:该物料在推荐中的上下文信息,是ParadigmRecomItem对象的属性

使用:

当推荐结果被曝光/展现时需要调用的接口

用例:

ParadigmAPI.getInstance().trackShow(item.itemId,"439","495",position,item.context);
        

(2)用户查看详情页面行为统计接口

方法:

public void trackDetailPageShow(String itemId, String itemSetId, String sceneId, String context)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

sceneId:当前场景id ,可以在推荐系统后台中获取

context:该物料在推荐中的上下文信息,是ParadigmRecomItem对象的属性

使用:

当用户查看物料详情时调用的接口。

*注:特别的,请务必将该接口放在查看详情页面进行统计(如viewDidLoad中),以防遗漏。

用例:

ParadigmAPI.getInstance().trackDetailPageShow(itemId,"439","945",context);
        

(3)用户退出详情页面行为统计接口

方法:

public void trackDetailPageDisappear(String itemId, String itemSetId, String sceneId)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

sceneId:当前场景id ,可以在推荐系统后台中获取

使用:

当用户退出物料详情时调用的接口。

*注:该接口用于统计用户在详情页面的停留时长,该数据可以在推荐系统后台中查看,同时该数据可以作为推荐系统的重要参数。

用例:

ParadigmAPI.getInstance().trackDetailPageDisappear(itemId,"439","945");
        

(4)用户收藏行为统计接口

方法:

public void trackCollect(String itemId, String itemSetId)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击收藏行为时调用的接口。

用例:

ParadigmAPI.getInstance().trackCollect(itemId, "439");
        

(5)用户分享行为统计接口

方法:

public void trackShare(String itemId, String itemSetId)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击分享行为时调用的接口。

用例:

ParadigmAPI.getInstance().trackShare(itemId,"439");
        

(6)用户点赞行为统计接口

方法:

public void trackLike(String itemId, String itemSetId)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击点赞行为时调用的接口。

用例:

ParadigmAPI.getInstance().trackLike(itemId,"439");
        

(7)用户点踩行为统计接口

方法:

public void trackDislike(String itemId, String itemSetId)
        

参数:

itemId:在推荐结果的数组中返回的物料id

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击点踩行为时调用的接口。

用例:

ParadigmAPI.getInstance().trackDislike(itemId,"439");
        

(8)用户关注行为统计接口

方法:

public void trackFollow(String itemId, String publisherId, String itemSetId)
        

参数:

itemId:在推荐结果的数组中返回的物料id

publisherId:用户关注的物料的发布者id/name

itemSetId:该推荐结果物料所属的物料集id,可以在推荐系统后台中获取

使用:

当用户点击关注行为时调用的接口。

用例:

ParadigmAPI.getInstance().trackFollow(itemId,"jsj","439");
        

4、获取推荐结果接口

方法:

public void requestRecoms (String sceneId, String itemId, String itemTitle, String itemContent,CallbackMethod callback)
        

参数:
itemId:获取关联推荐时的原物料的id,在关联推荐下必传
itemTitle:获取关联推荐时的原物料的标题,在关联推荐下必传,用于物料语意尚未分析完成时的冷启动
itemContent:获取关联推荐时的原物料的内容,在关联推荐下选传,其余情况请忽略该参数并传递null;用于物料语意尚未分析完成时的冷启动
completionHandler:获取结果的异步回调block

使用:

异步回调completionHandler中的results为推荐结果的数组,其内部包含物料的相关信息,详情见ParadigmRecomItem文件。

6Java代码示例

除以上curl命令发起请求方式之外,我们还提供了完整的java代码,方便您快速接入,代码您可以直接从下文复制,也可以到github上直接下载,链接如下
https://github.com/4paradigm-recom/recom-api-demo

6.1通过maven引入需要的lib

        <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.5</version>
        </dependency>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.6</version>
        </dependency>
        
6.2http通用调用类

  package tools;
  
  import org.apache.http.HttpResponse;
  import org.apache.http.client.HttpClient;
  import org.apache.http.client.config.RequestConfig;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.entity.ContentType;
  import org.apache.http.entity.StringEntity;
  import org.apache.http.impl.client.HttpClientBuilder;
  import org.apache.http.util.EntityUtils;
  
  
  public class HttpTools {
      
      public static int HTTP_TIMEOUT_MS = 4000;
  
      public static String get(String url, int timeoutMs) {
          try {
              HttpClient client = HttpClientBuilder.create().build();
              HttpGet get = new HttpGet(url);
              RequestConfig requestConfig =
                      RequestConfig.custom().setConnectionRequestTimeout(timeoutMs)
                              .setConnectTimeout(timeoutMs).setSocketTimeout(timeoutMs).build();
              get.setConfig(requestConfig);
              get.setHeader("Content-type", "application/json;charset=utf-8");
              HttpResponse response = client.execute(get);
              String result = EntityUtils.toString(response.getEntity());
              return result;
          } catch (Exception e) {
              System.out.println("postForResponse error, url:" + url + ", ex:" + e);
          }
          return "";
      }
  
      public static String post(String url, String jsonContent, int timeoutMs) {
          try {
              HttpClient client = HttpClientBuilder.create().build();
              HttpPost post = new HttpPost(url);
              RequestConfig requestConfig =
                      RequestConfig.custom().setConnectionRequestTimeout(timeoutMs)
                              .setConnectTimeout(timeoutMs).setSocketTimeout(timeoutMs).build();
              post.setConfig(requestConfig);
              post.setHeader("Content-type", "application/json;charset=utf-8");
              StringEntity se = new StringEntity(jsonContent, ContentType.APPLICATION_JSON);
              post.setEntity(se);
              HttpResponse response = client.execute(post);
              String result = EntityUtils.toString(response.getEntity());
              return result;
          } catch (Exception e) {
              System.out.println("postForResponse error, url:" + url + ", content:" + jsonContent + "ex:" + e);
          }
          return "";
      }
  }
        
6.3具体调用示例

日志上报


  import java.text.DateFormat;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  
  import com.alibaba.fastjson.JSONArray;
  import com.alibaba.fastjson.JSONObject;
  
  import tools.HttpTools;
  
  public class ActionLogService {
      
      // 商家的clientToken
      private static String clientToken = "730eb3d190664a34a2cb83172f52b729";
      private static String url = "https://nbrecsys.4paradigm.com/action/api/log?clientToken=" + clientToken;
      
      public static void log(){
          JSONObject json = new JSONObject();
          DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          String time = sdf.format(new Date());
          json.put("date", time);
          
          JSONArray actions = new JSONArray();
          json.put("actions", actions);
          
          JSONObject action = new JSONObject();
          action.put("itemId", "123456");
          action.put("userId", "testUser");
          action.put("actionTime", System.currentTimeMillis());// 改行为触发时间,毫秒级时间戳
          action.put("requestId", "requestId");
          action.put("action", "show");// 行为事件:showdetailPageShowcollectshareollowlikedislikeduration        
          action.put("sceneId", 1);// 场景ID
          action.put("context", "I3WxRlJ4lbMLXZB7il18GRkqDfKdmQ1Xs1esaP8VbfMTk5GKscGAwYkxS277bjzADjEeWh8H");//推荐物料中,携带的context内容
          actions.add(action);
          
          System.out.println("日志上报内容为:" + json.toJSONString());
          String result = HttpTools.post(url, json.toJSONString(), HttpTools.HTTP_TIMEOUT_MS);
          System.out.println("返回结果为:"+result);
      }
      
      public static void main(String[] args) {
          log();
      }
  }
        

物料上报


        import com.alibaba.fastjson.JSONArray;
        import com.alibaba.fastjson.JSONObject;
        
        import tools.HttpTools;
        
        public class MaterialService {
            // 物料的访问token,不同的accessToken对应不同的物料集
            private static String accessToken = "407265caafcb4c31bf9dbfb6b3b1ed32";
            private static String saveUrl = "https://nbrecsys.4paradigm.com/business/items?source=1&accessToken="+accessToken;
            // type表示查询类型 : 1-itemId;2-url
            private static String searchUrl = "https://nbrecsys.4paradigm.com/business/items/search?type=1&accessToken="+accessToken;
            // type表示删除类型 : 1-itemId;2-url
            private static String deleteUrl = "https://nbrecsys.4paradigm.com/business/items/remove?type=1&accessToken="+accessToken;
            
            public static void save(){
                // 做多一次可以上报100条
                JSONArray materials = new JSONArray();
                JSONObject material = new JSONObject();
                material.put("itemId", "1234567");//物料ID,物料唯一标识
                material.put("title", "测试物料");
                material.put("content", "物料内容");
                material.put("url", "http://www.material.com/1234567");//物料链接,物料库中唯一
                material.put("categoryId", "科技,计算机");
                material.put("publishTime", System.currentTimeMillis());//物料发布时间,毫秒级时间戳
                material.put("publisherId", "测试作者");
                material.put("isRecommend", 1);
                material.put("tag", "iOS,客户端");
                material.put("coverUrl", "http://www.coverUrl.com");//物料封面链接
                material.put("location", "用户地址");
                materials.add(material);
                
                System.out.println("物料上报内容:"+material.toJSONString());
                String result = HttpTools.post(saveUrl, materials.toJSONString(), HttpTools.HTTP_TIMEOUT_MS);
                System.out.println("返回结果为:"+result);
            }
            
            public static void search(){
                JSONArray itemIds = new JSONArray();
                itemIds.add("123456");
                itemIds.add("1234567");
                
                System.out.println("物料查询itemIds:"+itemIds.toJSONString());
                String result = HttpTools.post(searchUrl, itemIds.toJSONString(), HttpTools.HTTP_TIMEOUT_MS);
                System.out.println("返回结果为:"+result);
            }
            
            public static void delete(){
                JSONArray itemIds = new JSONArray();
                itemIds.add("123456");
                itemIds.add("1234567");
                
                System.out.println("物料查询itemIds:"+itemIds.toJSONString());
                String result = HttpTools.post(deleteUrl, itemIds.toJSONString(), HttpTools.HTTP_TIMEOUT_MS);
                System.out.println("返回结果为:"+result);
            }
            
            public static void main(String[] args) {
                save();
                search();
                delete();
            }
        }
        
运营助手

本手册面向运营人员,分为内容库处理、内容过滤规则设置和运营规则设置

1内容库处理

您的场景对应“内容库”中有内容上报后,您可以按照如下来处理您的内容库数据:

内容管理中,您可以做如下的操作:

1.1关键词查找内容

您可以通过左上角的输入框,直接输入关键词,检索您需要的内容。

关键词查找支持字段包括:内容名称、发布者ID、内容、内容标签。

1.2修改内容权重分

权重分高的内容将会被优先推荐,这里您可以设置的权重范围为“-10-10”,负号表示对内容进行降权处理。

1.3设置必推时效

当您设置了必推时效,则在这个时间范围之内,该内容一定会展示给您的用户,超过您设置的时间范围,设置了必推时效的内容将会失效。

1.4设置必推时效

当您对某条内容设置置顶之后,该内容将位于返回给您推荐结果的第一个,设置置顶也可以设置时间范围,超过您设置的时间范围,设置了置顶的内容将会失效。

1.5内容批量操作

上述操作均可以进行批量设置,批量操作请您先通过内容最左侧的选择框选择您需要进行操作的内容,支持跨页选择,之后您在页面右上角通过批量操作按钮即可完成对内容的批量操作

如果您想要在单页面内一次展示更多的内容条数,您可以通过页面下侧的数量选择进行设置:

1.6内容封禁

如果您想要对您内容库中的某个内容进行封禁,封禁该内容后,所有和该内容库绑定的推荐场景下,均不会推荐这条内容。

封禁操作您需要选择侧边栏中的内容,进行内容库选择:

之后选择您需要设置内容封禁的内容库:

进入内容展示页面后,您可以通过点击封禁按钮对该内容进行封禁:

如果您想对多条内容进行批量操作,您可以在搜索栏中输入内容标题或内容中包含的关键词进行检索,之后通过左侧的选择按钮,对您需要封禁的内容进行选择,之后点击右上角的批量封禁按钮进行操作。

如果您需要对已经封禁的内容进行解封,您只需要筛选对应内容并点击封禁按钮即可。

2内容过滤规则设置

当您的内容库有一定数量的内容后,您可以在场景内容库入口设置“内容过滤规则”。 点击内容库页面右上角“添加过滤规则”,过滤规则支持编辑和删除。

过滤规则设置您可以进行如下操作:

2.1内容类别过滤

如果您希望根据内容类别(或者频道)对当前场景内容库进行内容过滤。可点击内容类别处“编辑”,在内容类别列表弹窗中,筛选希望在当前场景使用的内容类别。

2.2内容时效过滤

如果您希望根据内容时效(或者发布时间)对当前场景内容库进行内容过滤。可在内容时效处选择自定义时间设置,比如设置7,则内容库只包含7天内发布的内容。默认推荐全部时间范围内容。

2.3内容类型过滤

如果您希望根据内容类型(是否有图)对当前场景内容库进行内容过滤。可在内容类型处选择全部推荐还是仅推荐有图内容。

2.4应用已有规则

如果您希望复用其他场景已有内容过滤规则,您可以点击右上角“从已有规则中选择”,进入已有规则列表,选择希望应用的规则,即可实现应用。

2.5过滤结果查看

经过内容过滤规则设置后,点击“保存”,过滤规则被保存下来,同时内容库会更新到应用过滤规则后的内容。

3运营规则设置

当您的场景场景进入“服务开启”状态时,您可以设置运营规则。

点击“运营规则”处的“添加运营规则”。

注:您的运营规则配置成功后,规则将会在5分钟后生效。

3.1关联推荐

当选择的场景类型为“关联推荐”,并且推荐场景为信息流时,推荐系统支持排序规则:

您可以提高某个特征的加权系数,来优化您的推荐结果。

排序规则支持设置多条。

支持可选择的特征包括:发布时间、阅读量、封面图数、一级分类、详情页图片数。

加权系数的设置范围为:1-10的正整数。当设置数量越大时,对推荐结果的影响如下:

字段名称描述
发布时间加权系数为正时,将发布时间距离现在更近的内容,排列靠前;设置为“0”则不对特征加权;加权系数为负时,将发布时间距离现在更远的内容,排列靠前
阅读量加权系数为正时,阅读量更高的内容,排列靠前;设置为“0”则不对特征加权;加权系数为负时,阅读量更高的内容,排列靠后
封面图数加权系数为正时,封面图数量更多的内容,排列靠前;设置为“0”则不对特征加权;加权系数为负时,封面图数量更多的内容,排列靠后
一级分类加权系数为正时,和选择具体类别项相同的内容,排列靠前;设置为“0”则不对特征加权;加权系数为正时,和选择具体类别项相同的内容,排列靠后
详情页图片数加权系数为正时,详情页图片数量更多的内容,排列靠前;设置为“0”则不对特征加权;加权系数为正时,详情页图片数量更多的内容,排列靠后

注:当选择字段为“一级分类”时,您需要选择需要配置“加权系数”的具体分类,当下拉选择框为空时,请您等待内容上报后重新尝试,如遇内容上报问题,请您联系在线客服。

例如,您想为“阅读量”和“一级分类”中的类别“体育”进行加权系数设置,设置系数为“3”,则您可以按照如下图中示例进行设置:

当你的推荐场景为固定位或侧边栏等非信息流推荐场景时,推荐系统除了支持排序规则,还支持去重规则:

去重规则包括“展示数量去重”、“展示时间去重”、 “点击查看去重”。

展示数量去重:当您配置该条规则后,同一推荐内容,在您设置数量范围内,将不会再给用户进行推荐。比如您设置参数为“1000”,那么一条推荐内容展示后,当用户刷新或浏览之后推荐的内容1000条内,该条内容将不会被推荐。

展示时间去重:当您配置该条规则后,同一推荐内容,在您设置时间范围内,不会给用户进行推荐。可选范围包括2小时、6小时、12小时、1天、1周、1个月、全部时间。比如当您设置参数为“1天”,那么一条推荐内容展示给用户后,一天之内,该条内容将不会再次推荐给该用户。

点击查看去重:当您配置该条规则后,当一条推荐内容被用户点击浏览过后,该条内容将不会再给用户推荐。

3.2热门推荐&个性化推荐

当选择的场景类型为“热门推荐”或个性化推荐,并且推荐场景为信息流时,推荐系统支持排序规则和多样性规则:

排序规则相关配置请参考上文2.1小节部分。

多样性配置支持设置多条,每条多样性规则之间是互不影响的。

您可以通过配置多样性规则来让您的推荐结果更加多样化,支持可选择的特征包括:发布者id、一级分类、二级分类。

其中每个特征字段包含两个可选择项:

任意相同:任意相同特征项均不能超过一定数量,比如当您选择特征为发布者id,同时设置不能超过“2”条,那么来源于同一个发布者的内容,在推荐结果中就不能超过两条。

=:比如,当您选择发布者id并在后面填入“推荐助手”,同时设置不能超过条目数量为“2”,那么再推荐结果中,发布者为“推荐助手”的内容不能超过两条。

当你的推荐场景为固定位或侧边栏等非信息流推荐场景时,推荐系统除了支持排序规则和多样性规则,还支持去重规则,具体去重规则请您参考上文2.1小节。

常见问题

1、用户未登录状态的uid和登陆状态的uid不同我应该传哪个?
    a.都传
    b.我们能通过deviceid将两个帐号打通,请客户放心

2、如何上报行为?
    a.目前支持7种行为上报,具体上报某种行为时,请把action改为具体的行为类型即可,其他参数在上报任何行为时都需要。