palpalani / laravel-easyrec
Laravel 对 EasyRec 的封装
Requires
- php: ^8.0
- guzzlehttp/guzzle: ^6.3|^7.0
- illuminate/session: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
Requires (Dev)
- laravel/pint: ^1.2
- nunomaduro/collision: ^6.0|^7.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^6.0|^7.0|^8.0
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpunit/phpunit: ^8.0|^9.3|^10.0
README
什么是 EasyRec?
EasyRec 是一个开源的推荐引擎系统,它使用 RESTful API 提供个性化的推荐。
推荐引擎服务器
您可以使用服务器并调用 easyrec 团队维护的关联 RESTful API,或者下载 easyrec 并在您的服务器上调用 API。
有关更多信息,请参阅 easyrec 网站。
使用团队维护的服务器上的 EasyRec
这是一个现成的解决方案。如果您不想配置另一个专门用于 easyrec 的服务器,则可能希望使用此方案。
- 创建 easyrec 账户: http://easyrec.org/register
- 打开您的邮箱并激活您的账户
- 在仪表板上创建一个新的租户
- 在配置文件中填写您的 API 密钥和租户 ID
配置您自己的 easyrec 服务器
请参阅 easyrec 安装指南。
安装
需要 PHP 8.0+ 和 Composer。
要获取 Laravel Easyrec 的最新版本,只需将以下行添加到您的 composer.json
文件的 require 块中
"palpalani/laravel-easyrec": "~2.0"
然后您需要运行 composer install
或 composer update
来下载它并更新自动加载器。
对于旧版本的 Laravel,您需要使用以下信息注册扩展。一旦 Laravel EasyRec 安装完成,您需要注册服务提供者。打开 config/app.php
并将以下内容添加到 providers
键。
Antoineaugusti\LaravelEasyrec\LaravelEasyrecServiceProvider::class
如果您喜欢,可以在 config/app.php
文件的 aliases
键中注册 Easyrec 门面。
- `'Easyrec' => Antoineaugusti\LaravelEasyrec\Facades\LaravelEasyrec::class
配置
要开始,您需要发布所有供应商资产
$ php artisan vendor:publish
这将创建一个 config/easyrec.php
文件,您可以修改它来设置配置。同时,请确保检查该包中原始配置文件之间的更改。
用法
操作
以下变量是操作方法的公共变量。
必需参数
$itemid
:用于识别您网站上项目的项目 ID。例如:"POST42"$itemdescription
:在您的网站上显示推荐时显示的项目描述。$itemurl
:链接到项目页面的项目 URL。请提供绝对路径。$sessionid
:用户的会话 ID。如果没有提供,将尝试使用会话外观Session::getId()
来猜测。
可选参数
$userid
:用户 ID。$itemimageurl
:可选的项目图片 URL,该 URL 链接到项目的图片。请提供绝对路径。$actiontime
:一个动作时间参数,它覆盖了动作的当前时间戳。参数的格式为 "dd_MM_yyyy_HH_mm_ss"。$itemtype
:表示项目类型的项类型(例如IMAGE
、BOOK
等)。如果不提供,将使用默认值ITEM
。 警告:在指定自定义itemtype
之前,您必须使用Easyrec的Web管理面板添加此自定义项类型。
错误
如果发生错误,将抛出一个异常Antoineaugusti\LaravelEasyrec\Exceptions\EasyrecException
,并带有以下代码和消息之一
- 代码299:
APIKey/Tenant组合错误!
- 代码301:
项目需要ID!
- 代码303:
项目需要描述!
- 代码304:
项目需要URL!
- 代码305:
项目需要有效的评分值!
(仅在调用rate
方法时) - 代码401:
需要会话ID!
- 代码912:
操作失败!对于租户YYY找不到itemType XXX
视图
如果用户查看一个项目,则应引发此操作。
函数签名
Easyrec::view($itemid, $itemdescription, $itemurl, $userid = null, $itemimageurl = null, $actiontime = null, $itemtype = null, $sessionid = null)
参数
函数签名中的非空变量是必需的。
示例响应
响应将以PHP数组的形式返回。
[ "action": "view", "tenantid": "EASYREC_DEMO", "userid": "24EH1723322222A3", "sessionid": "F3D4E3BE31EE3FA069F5434DB7EC2E34", "item": [ "id": "42", "itemType": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "url": "/item/fatboyslim" ] ]
购买
如果用户购买了一个项目,则应引发此操作。
函数签名
Easyrec::buy($itemid, $itemdescription, $itemurl, $userid = null, $itemimageurl = null, $actiontime = null, $itemtype = null, $sessionid = null)
参数
函数签名中的非空变量是必需的。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "EASYREC_DEMO", "action": "buy", "userid": "24EH1723322222A3", "sessionid": "F3D4E3BE31EE3FA069F5434DB7EC2E34", "item": [ "id": "42", "type": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "url": "/item/fatboyslim" ] ]
评分
如果用户对一个项目进行评分,则应引发此操作。
函数签名
Easyrec::rate($itemid, $ratingvalue, $itemdescription, $itemurl, $userid = null, $itemimageurl = null, $actiontime = null, $itemtype = null, $sessionid = null)
参数
函数签名中的非空变量是必需的。评分值是额外的参数。
$ratingvalue
:项目的评分值。必须是一个介于1到10之间的整数。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "rate", "action": "rate", "userid": "24EH1723322222A3", "sessionid": "F3D4E3BE31EE3FA069F5434DB7EC2E34", "item": [ "id": "42", "type": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "ratingValue": "10", "url": "/item/fatboyslim" ] ]
发送自定义操作
此操作可以用于发送通用的用户操作。
函数签名
sendAction($itemid, $itemdescription, $itemurl, $actiontype, $actionvalue = null, $userid = null, $itemimageurl = null, $actiontime = null, $itemtype = null, $sessionid = null)
参数
函数签名中的非空变量是必需的。有两个额外的参数。
$actiontype
:您想要在API调用中使用的必需操作类型。您必须在Web界面中创建操作类型后才能在API调用中使用它。$actionvalue
:如果您的操作类型使用操作值,此参数是必需的。它用于保存您的操作的操作值。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "rate", "action": "delete", "userid": "24EH1723322222A3", "sessionid": "F3D4E3BE31EE3FA069F5434DB7EC2E34", "item": [ "id": "42", "type": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "ratingValue": "10", "url": "/item/fatboyslim" ] ]
推荐
以下变量是推荐方法共有的。
必需参数
$itemid
:用于识别您网站上项目的项目 ID。例如:"POST42"
可选参数
$userid
:一个用户ID。如果提供了此参数,将抑制此用户查看的项目。$numberOfResults
:确定返回的结果数量。必须是一个介于1到15之间的整数。$itemtype
:表示项目类型的项类型(例如IMAGE
、BOOK
等)。如果不提供,将使用默认值ITEM
。 警告:在指定自定义itemtype
之前,您必须使用Easyrec的Web管理面板添加此自定义项类型。$requesteditemtype
:要过滤返回的项目的一个项目类型(例如IMAGE
、VIDEO
、BOOK
等)。如果不提供,将使用默认值ITEM
。$withProfile
:如果此参数设置为true
,则结果包含一个额外的元素profileData
,其中包含项目配置文件。默认值为false
。
错误
如果发生错误,将抛出一个异常Antoineaugusti\LaravelEasyrec\Exceptions\EasyrecException
,并带有以下代码和消息之一
- 代码299:
APIKey/Tenant组合错误!
- 代码300:
项目不存在!
- 代码403:
未提供用户ID!
(仅在调用recommendationsForUser
方法时) - 代码912:
操作失败!对于租户YYY找不到itemType XXX
用户也查看
查看指定项目的用户还查看了返回的项目。
函数签名
Easyrec::usersAlsoViewed($itemid, $userid = null, $numberOfResults = 10, $itemtype = null, $requesteditemtype = null, $withProfile = false)
参数
函数签名中的非空变量是必需的。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "EASYREC_DEMO", "action": "otherUsersAlsoViewed", "user": [ "id": "24EH1723322222A3" ], "baseitem": [ "item": [ "id": "42", "type": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "url": "/item/fatboyslim" ] ], "recommendeditems": [ "item": [ "id": "43", "type": "ITEM", "description": "Beastie Boys - Intergalactic", "profileData": [ "profile":[ "year": "1990" ] ], "url": "/item/beastieboys" ] ], "listids": [ 43 ] ]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
用户还买了
购买了指定商品的用户还购买了由该方法返回的商品。
函数签名
Easyrec::usersAlsoBought($itemid, $userid = null, $numberOfResults = 10, $itemtype = null, $requesteditemtype = null, $withProfile = false)
参数
函数签名中的非空变量是必需的。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "EASYREC_DEMO", "action": "otherUsersAlsoBought", "user": [ "id": "24EH1723322222A3" ], "baseitem": [ "item": [ "id": "42", "type": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "url": "/item/fatboyslim" ] ], "recommendeditems": [ "item": [ "id": "43", "type": "ITEM", "description": "Beastie Boys - Intergalactic", "profileData": [ "profile":[ "year": "1990" ] ], "url": "/item/beastieboys" ] ], "listids": [ 43 ] ]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
其他用户评分高的商品
给指定商品评分“好”的用户也对通过此方法返回的商品进行了同样的评分。
函数签名
Easyrec::ratedGoodByOther($itemid, $userid = null, $numberOfResults = 10, $itemtype = null, $requesteditemtype = null, $withProfile = false)
参数
函数签名中的非空变量是必需的。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "EASYREC_DEMO", "action": "itemsRatedGoodByOtherUsers", "user": [ "id": "24EH1723322222A3" ], "baseitem": [ "item": [ "id": "42", "type": "ITEM", "description": "Fatboy Slim - The Rockafeller Skank", "url": "/item/fatboyslim" ] ], "recommendeditems": [ "item": [ "id": "43", "type": "ITEM", "description": "Beastie Boys - Intergalactic", "profileData": [ "profile":[ "year": "1990" ] ], "url": "/item/beastieboys" ] ], "listids": [ 43 ] ]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
用户推荐
返回给定用户ID的推荐。
函数签名
Easyrec::recommendationsForUser($userid, $numberOfResults = 10, $requesteditemtype = null, $actiontype = "VIEW", $withProfile = false)
参数
函数签名中的非空变量是必需的。还有一个额外的参数
$actiontype
:允许定义在创建个性化推荐时考虑用户的哪些操作。有效值是:VIEW
、RATE
、BUY
。
示例响应
响应将以PHP数组的形式返回。
[ "tenantid": "EASYREC_DEMO", "action": "recommendationsForUser", "user": [ "id": "24EH1723322222A3" ], "recommendeditems": [ "item": [ "id": "43", "type": "ITEM", "description": "Beastie Boys - Intergalactic", "profileData": [ "profile":[ "year": "1990" ] ], "url": "/item/beastieboys" ] ], "listids": [ 43 ] ]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
用户历史
返回最新用户操作中涉及的商品。
函数签名
Easyrec::actionHistoryForUser($userid, $numberOfResults = 10, $requesteditemtype = null, $actiontype = null)
参数
函数签名中的非空变量是必需的。还有一个额外的参数
$actiontype
:允许定义在创建个性化推荐时考虑用户的哪些操作。有效值是:VIEW
、RATE
、BUY
。
示例响应
响应将以PHP数组的形式返回。
[ 'action' => 'actionhistory', 'recommendeditems' => [ 'item' => [ 0 => [ 'creationDate' => '2014-08-24 12:40:32.0', 'description' => 'Quote 17982', 'imageUrl' => [ '@nil' => 'true' ], 'id' => '17982', 'itemType' => 'QUOTE', 'profileData' => [ '@nil' => 'true' ], 'url' => 'http://example.com/quotes/17982' ], 1 => [ 'creationDate' => '2014-08-24 12:00:59.0', 'description' => 'Quote 17987', 'imageUrl' => [ '@nil' => 'true' ], 'id' => '17987', 'itemType' => 'QUOTE', 'profileData' => [ '@nil' => 'true' ], 'url' => 'http://example.com/quotes/17982' ] ] ], 'tenantid' => 'demo', 'userid' => '27', 'listids' => [ 0 => 17982, 1 => 17987, ] ]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
排名
以下变量是排名方法共有的。
可选参数
$numberOfResults
:确定返回的结果数。必须是1到50之间的整数。$requesteditemtype
:表示商品类型的商品类型(IMAGE
、BOOK
等)。如果不提供,则使用默认值ITEM
。$timeRange
:一个可选参数,用于确定时间范围。可用值DAY
:过去24小时内最多浏览的商品WEEK
:过去一周内最多浏览的商品MONTH
:过去一个月内最多浏览的商品ALL
(默认):如果没有值或提供此值,将显示所有时间最多浏览的商品。
$withProfile
:如果此参数设置为true
,则结果包含一个额外的元素profileData
,其中包含项目配置文件。默认值为false
。
错误
如果发生错误,将抛出一个异常Antoineaugusti\LaravelEasyrec\Exceptions\EasyrecException
,并带有以下代码和消息之一
- 代码299:
APIKey/Tenant组合错误!
- 代码300:
项目不存在!
- 代码912:
操作失败!对于租户YYY找不到itemType XXX
最多浏览商品
显示所有用户最多浏览的商品。
函数签名
Easyrec::mostViewedItems($numberOfResults = 30, $timeRange = 'ALL', $requesteditemtype = null, $withProfile = false)
示例响应
响应将以PHP数组的形式返回。
[
"tenantid": "EASYREC_DEMO",
"action": "mostViewedItems",
"recommendeditems": [
"item": [
"id": "43",
"type": "ITEM",
"description": "Beastie Boys - Intergalactic",
"profileData": [
"profile": [
"year": "1990"
]
],
"url": "/item/beastieboys",
"imageurl": "/img/covers/beastieboys.jpg",
"value": "111.0"
]
],
"listids": [
43
]
]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(\DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
最多购买商品
显示最多被购买的商品。
函数签名
Easyrec::mostBoughtItems($numberOfResults = 30, $timeRange = 'ALL', $requesteditemtype = null, $withProfile = false)
示例响应
响应将以PHP数组的形式返回。
[
"tenantid": "EASYREC_DEMO",
"action": "mostBoughtItems",
"recommendeditems": [
"item": [
"id": "43",
"type": "ITEM",
"description": "Beastie Boys - Intergalactic",
"profileData": [
"profile": [
"year": "1990"
]
],
"url": "/item/beastieboys",
"imageurl": "/img/covers/beastieboys.jpg",
"value": "111.0"
]
],
"listids": [
43
]
]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(\DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
最多评分商品
显示最多被评分的商品。
函数签名
Easyrec::mostRatedItems($numberOfResults = 30, $timeRange = 'ALL', $requesteditemtype = null, $withProfile = false)
示例响应
响应将以PHP数组的形式返回。
[
"tenantid": "EASYREC_DEMO",
"action": "mostRatedItems",
"recommendeditems": [
"item": [
"id": "43",
"type": "ITEM",
"description": "Beastie Boys - Intergalactic",
"profileData": [
"profile": [
"year": "1990"
]
],
"url": "/item/beastieboys",
"imageurl": "/img/covers/beastieboys.jpg",
"value": "111.0"
]
],
"listids": [
43
]
]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(\DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
最佳评分商品
显示最佳评分的商品。排名仅包括平均排名值大于5.5的商品。
函数签名
Easyrec::bestRatedItems($numberOfResults = 30, $timeRange = 'ALL', $requesteditemtype = null, $withProfile = false)
示例响应
响应将以PHP数组的形式返回。
[
"tenantid": "EASYREC_DEMO",
"action": "bestRatedItems",
"recommendeditems": [
"item": [
"id": "43",
"type": "ITEM",
"description": "Beastie Boys - Intergalactic",
"profileData": [
"profile": [
"year": "1990"
]
],
"url": "/item/beastieboys",
"imageurl": "/img/covers/beastieboys.jpg",
"value": "111.0"
]
],
"listids": [
43
]
]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(\DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
最差评分商品
显示最差评分的商品。排名仅包括平均排名值小于5.5的商品。
函数签名
Easyrec::worstRatedItems($numberOfResults = 30, $timeRange = 'ALL', $requesteditemtype = null, $withProfile = false)
示例响应
响应将以PHP数组的形式返回。
[
"tenantid": "EASYREC_DEMO",
"action": "worstRatedItems",
"recommendeditems": [
"item": [
"id": "43",
"type": "ITEM",
"description": "Beastie Boys - Intergalactic",
"profileData": [
"profile": [
"year": "1990"
]
],
"url": "/item/beastieboys",
"imageurl": "/img/covers/beastieboys.jpg",
"value": "111.0"
]
],
"listids": [
43
]
]
检索您的模型
注意,您可以使用以下简单代码检索您的模型
YourModel::whereIn('id', $result['listids'])->get();
如果您想保持项目的顺序,您可以使用以下代码(如果您使用的是MySQL
)
$ids = $result['listids']: YourModel::whereIn('id', $ids) ->orderBy(\DB::raw('FIELD(`id`, '.implode(',', $ids).')')) ->get();
测试
composer test
更新日志
请参阅更新日志以获取最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全漏洞
请查阅我们的安全策略以了解如何报告安全漏洞。
版本控制
我们使用SemVer进行版本控制。有关可用的版本,请参阅此存储库的标签。
致谢
许可证
Apache许可证。请参阅许可证文件以获取更多信息。