palpalani / laravel-easyrec

Laravel 对 EasyRec 的封装

资助包维护!
palpalani

v2.0.2 2023-02-24 05:16 UTC

README

Latest Version Software License Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

什么是 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 installcomposer 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:表示项目类型的项类型(例如IMAGEBOOK等)。如果不提供,将使用默认值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:表示项目类型的项类型(例如IMAGEBOOK等)。如果不提供,将使用默认值ITEM警告:在指定自定义itemtype之前,您必须使用Easyrec的Web管理面板添加此自定义项类型。
  • $requesteditemtype:要过滤返回的项目的一个项目类型(例如IMAGEVIDEOBOOK等)。如果不提供,将使用默认值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:允许定义在创建个性化推荐时考虑用户的哪些操作。有效值是:VIEWRATEBUY
示例响应

响应将以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:允许定义在创建个性化推荐时考虑用户的哪些操作。有效值是:VIEWRATEBUY
示例响应

响应将以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:表示商品类型的商品类型(IMAGEBOOK等)。如果不提供,则使用默认值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许可证。请参阅许可证文件以获取更多信息。