Skip to content

Commit 068d5c5

Browse files
committed
Add feature to UserAgentService -> getUserAgent
1 parent 0b06414 commit 068d5c5

File tree

9 files changed

+468
-18
lines changed

9 files changed

+468
-18
lines changed

Src/SeleniumToolsModule.php

+12
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use yii\base\Module;
77
use yii\base\BootstrapInterface;
88
use Zakharov\Yii2SeleniumTools\Console\SeleniumToolsController;
9+
use Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentService;
910
use Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentProvider;
1011
use Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentsDotIoParser;
1112

@@ -65,6 +66,7 @@ public function bootstrap($app)
6566
public function init()
6667
{
6768
$this->startedAt = time();
69+
Yii::$container->setSingleton(\Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentService::class, \Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentService::class);
6870
Yii::$container->setSingleton(\Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentProvider::class, $this->userAgentProvider);
6971
Yii::$container->setSingleton(\Spatie\Crawler\Crawler::class, \Spatie\Crawler\Crawler::class);
7072
Yii::$container->setSingleton(\Spatie\Crawler\CrawlQueues\CrawlQueue::class, \Spatie\Crawler\CrawlQueues\ArrayCrawlQueue::class);
@@ -121,4 +123,14 @@ public function getUserAgentProvider()
121123
{
122124
return Yii::$container->get(UserAgentProvider::class);
123125
}
126+
127+
/**
128+
* getUserAgentService
129+
*
130+
* @return UserAgentService
131+
*/
132+
public function getUserAgentService()
133+
{
134+
return Yii::$container->get(UserAgentService::class);
135+
}
124136
}

Src/StepBrowser/StepBrowserComponent.php

+6-4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Facebook\WebDriver\Remote\DesiredCapabilities;
1717
use Zakharov\Yii2SeleniumTools\SeleniumToolsModule;
1818
use Zakharov\Yii2SeleniumTools\StepBrowser\ProfileModel;
19+
use Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentService;
1920

2021
/**
2122
* StepBrowser it is a simple chromium profiles manager.
@@ -199,13 +200,14 @@ protected function getDefaultWebdriverBinary()
199200

200201
/**
201202
* buildUserAgent
202-
*
203+
* @param array $keys Keys for find user agent strings in db
203204
* @return string
204205
*/
205-
protected function buildUserAgent()
206+
protected function buildUserAgent(array $keys = [])
206207
{
207-
//TODO: implement user agent generation
208-
return 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36';
208+
$service = $this->module->getUserAgentService();
209+
$userAgent = $service->getUserAgent($keys);
210+
return $userAgent->__toString();
209211
}
210212

211213
/**

Src/Utils/UserAgent/UserAgentService.php

+17-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Zakharov\Yii2SeleniumTools\Utils\UserAgent;
44

5-
use PDO;
65
use Yii;
76
use Zakharov\Yii2SeleniumTools\models\UserAgent;
87
use Zakharov\Yii2SeleniumTools\Utils\UserAgent\UserAgentProvider;
@@ -43,6 +42,23 @@ public function fillBaseWithUserAgents($filterKeys = [])
4342
->execute();
4443
}
4544

45+
/**
46+
* getUserAgent
47+
*
48+
* @param string[] $keys
49+
* @return UserAgent|null
50+
*/
51+
public function getUserAgent(array $keys = []): ?UserAgent
52+
{
53+
$query = UserAgent::find();
54+
foreach ($keys as $key) {
55+
$query->andFilterWhere(['like', 'ua', $key]);
56+
}
57+
$userAgents = $query->limit(100)->all();
58+
shuffle($userAgents);
59+
return array_pop($userAgents);
60+
}
61+
4662
/**
4763
* filterArrayOfUserAgentsWithFilter
4864
*

Src/models/UserAgent.php

+5
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,9 @@ public function attributeLabels()
5555
'created_at' => 'Created At',
5656
];
5757
}
58+
59+
public function __toString()
60+
{
61+
return $this->ua;
62+
}
5863
}

Tests/Fixtures/UserAgentFixture.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
namespace tests\unit\fixtures;
3+
namespace tests\Fixtures;
44

55
use yii\test\ActiveFixture;
66
use Zakharov\Yii2SeleniumTools\models\UserAgent;

Tests/_bootstrap.php

-9
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,3 @@
55

66
require_once __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
77
require __DIR__ . '/../vendor/autoload.php';
8-
9-
// $alias = \Yii::getAlias('@app');
10-
11-
// \Yii::$app->setModule('seleniumTools', [
12-
// 'class' => \Zakharov\Yii2SeleniumTools\SeleniumToolsModule::class,
13-
// 'params' => [
14-
// 'screenshotPath' => '@app/runtime'
15-
// ]
16-
// ]);

0 commit comments

Comments
 (0)