-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUserAgentService.php
77 lines (70 loc) · 2.25 KB
/
UserAgentService.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
namespace Zakharov\Yii2SeleniumTools\Utils\UserAgent;
use Yii;
use Zakharov\Yii2SeleniumTools\models\UserAgent;
use Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentProvider;
class UserAgentService
{
/**
* userAgentProvider
*
* @var UserAgentProvider
*/
protected $userAgentProvider;
public function __construct(UserAgentProvider $userAgentProvider)
{
$this->userAgentProvider = $userAgentProvider;
}
/**
* fill base with user agents by specified in container userAgentProvider
*
* @param string[] $filterKey
* @return int number of inserts
*/
public function fillBaseWithUserAgents($filterKeys = [])
{
$arrayOfUserAgents = array_values($this->userAgentProvider->getArrayOfUserAgents());
if (empty($arrayOfUserAgents)) {
return 0;
}
$arrayOfUserAgents = $this->filterArrayOfUserAgentsWithFilter($arrayOfUserAgents, $filterKeys);
$createdAt = (new \DateTime())->setTimezone(new \DateTimeZone('UTC'))->format('Y-m-d H:i:s');
$updateArray = array_map(fn ($item) => [$item, $createdAt], $arrayOfUserAgents);
return Yii::$app->db
->createCommand()
->batchInsert(UserAgent::tableName(), ['ua', 'created_at'], $updateArray)
->execute();
}
/**
* getUserAgent
*
* @param string[] $keys
* @return UserAgent|null
*/
public function getUserAgent(array $keys = []): ?UserAgent
{
$query = UserAgent::find();
foreach ($keys as $key) {
$query->andFilterWhere(['like', 'ua', $key]);
}
$userAgents = $query->limit(100)->all();
shuffle($userAgents);
return array_pop($userAgents);
}
/**
* filterArrayOfUserAgentsWithFilter
*
* @param array $arrayOfUserAgents
* @param array $filterKeys
* @return void
*/
protected function filterArrayOfUserAgentsWithFilter(array $arrayOfUserAgents, array $filterKeys = [])
{
if (!empty($filterKeys)) {
foreach ($filterKeys as $key) {
$arrayOfUserAgents = array_filter($arrayOfUserAgents, fn ($item) => stripos($item, $key) !== false);
}
}
return $arrayOfUserAgents;
}
}