Skip to content

Commit f5f0491

Browse files
authored
Merge pull request #31 from udger/dev
Pull v3 parser into master
2 parents 14e2fb8 + 20c5133 commit f5f0491

21 files changed

+761
-1030
lines changed

README.md

Lines changed: 98 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,128 @@
1-
# Udger client for PHP
1+
# Udger client for PHP (data ver. 3)
22
Local parser is very fast and accurate useragent string detection solution. Enables developers to locally install and integrate a highly-scalable product.
33
We provide the detection of the devices (personal computer, tablet, Smart TV, Game console etc.), operating system and client SW type (browser, e-mail client etc.).
4+
It also provides information about IP addresses (Public proxies, VPN services, Tor exit nodes, Fake crawlers, Web scrapers .. etc.)
5+
6+
- Tested with more the 50.000 unique user agents.
7+
- Up to date data provided by https://udger.com/
48

59
### Requirements
610
- php >= 5.3.0
711
- ext-sqlite3 (http://php.net/manual/en/book.sqlite3.php)
812

913
### Features
1014
- Fast
11-
- Standalone
12-
- Auto updated datafile and cache from remote server with version checking and checksum datafile
1315
- Released under the GNU (LGPL v.3)
1416

1517
### Install
1618

1719
composer install
1820

1921
### Usage
20-
You should review the included examples (`parse.php`, `isbot.php`, `account.php`, `manual_update_data.php` or `full_example.php`)
22+
You should review the included examples (`parse.php`, `account.php`)
2123

2224
Here's a quick example:
2325

2426
```php
25-
require_once __DIR__ . '/vendor/autoload.php';
26-
$parser = new Udger\Parser();
27-
$parser->setDataDir(sys_get_temp_dir() . "/udgercache/");
28-
$parser->setAccessKey('XXXXXX');
29-
$ret = $parser->parse('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36');
27+
require_once dirname(__DIR__) . '/vendor/autoload.php';
28+
$factory = new Udger\ParserFactory();
29+
$parser = $factory->getParser();
30+
$parser->setDataFile(sys_get_temp_dir() . "/udgercache/udgerdb_v3.dat");
31+
$parser->setUA('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36');
32+
$parser->setIP("2A02:598:7000:116:0:0:0:101");
33+
$ret = $parser->parse();
3034
echo "<pre>";
3135
print_r($ret);
3236
echo "</pre>";
37+
38+
39+
Array
40+
(
41+
[user_agent] => Array
42+
(
43+
[ua_string] => Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
44+
[ua_class] => Browser
45+
[ua_class_code] => browser
46+
[ua] => Chrome 48.0.2564.97
47+
[ua_version] => 48.0.2564.97
48+
[ua_version_major] => 48
49+
[ua_uptodate_current_version] => 48
50+
[ua_family] => Chrome
51+
[ua_family_code] => chrome
52+
[ua_family_homepage] => http://www.google.com/chrome/
53+
[ua_family_vendor] => Google Inc.
54+
[ua_family_vendor_code] => google_inc
55+
[ua_family_vendor_homepage] => https://www.google.com/about/company/
56+
[ua_family_icon] => chrome.png
57+
[ua_family_icon_big] => chrome_big.png
58+
[ua_family_info_url] => https://udger.com/resources/ua-list/browser-detail?browser=Chrome
59+
[ua_engine] => WebKit/Blink
60+
[os] => Windows 7
61+
[os_code] => windows_7
62+
[os_homepage] => https://en.wikipedia.org/wiki/Windows_7
63+
[os_icon] => windows-7.png
64+
[os_icon_big] => windows-7_big.png
65+
[os_info_url] => https://udger.com/resources/ua-list/os-detail?os=Windows 7
66+
[os_family] => Windows
67+
[os_family_code] => windows
68+
[os_family_vendor] => Microsoft Corporation.
69+
[os_family_vendor_code] => microsoft_corporation
70+
[os_family_vendor_homepage] => https://www.microsoft.com/about/
71+
[device_class] => Desktop
72+
[device_class_code] => desktop
73+
[device_class_icon] => desktop.png
74+
[device_class_icon_big] => desktop_big.png
75+
[device_class_info_url] => https://udger.com/resources/ua-list/device-detail?device=Desktop
76+
[crawler_last_seen] =>
77+
[crawler_category] =>
78+
[crawler_category_code] =>
79+
[crawler_respect_robotstxt] =>
80+
)
81+
82+
[ip_address] => Array
83+
(
84+
[ip] => 2A02:598:7000:116:0:0:0:101
85+
[ip_ver] => 6
86+
[ip_classification] => Crawler
87+
[ip_classification_code] => crawler
88+
[ip_hostname] =>
89+
[ip_last_seen] => 2016-02-12 04:28:56
90+
[ip_country] => Czech Republic
91+
[ip_country_code] => CZ
92+
[ip_city] => Prague
93+
[crawler_name] => SeznamBot/3.2-test1
94+
[crawler_ver] => 3.2-test1
95+
[crawler_ver_major] => 3
96+
[crawler_family] => SeznamBot
97+
[crawler_family_code] => seznambot
98+
[crawler_family_homepage] => http://napoveda.seznam.cz/cz/seznambot.html
99+
[crawler_family_vendor] => Seznam.cz, a.s.
100+
[crawler_family_vendor_code] => seznam-cz_as
101+
[crawler_family_vendor_homepage] => http://www.seznam.cz/
102+
[crawler_family_icon] => seznam.png
103+
[crawler_family_info_url] => https://udger.com/resources/ua-list/bot-detail?bot=SeznamBot#id12590
104+
[crawler_last_seen] => 2016-02-15 06:12:28
105+
[crawler_category] => Search engine bot
106+
[crawler_category_code] => search_engine_bot
107+
[crawler_respect_robotstxt] => unknown
108+
[datacenter_name] =>
109+
[datacenter_name_code] =>
110+
[datacenter_homepage] =>
111+
)
112+
113+
)
33114
```
34115

35-
### Running tests
36116

117+
118+
### Running tests
37119
./vendor/bin/codecept run
38120

39-
### Data for parser
40-
- info: https://udger.com/download/data
121+
### Automatic updates download
122+
- for autoupdate data use Udger data updater (https://udger.com/support/documentation/?doc=62)
41123

42124
### Author
43-
The Udger.com Team ([email protected])
125+
- The Udger.com Team ([email protected])
126+
127+
### old v2 format
128+
If you still use the previous format of the db (v2), please see the branch old_format_v2

examples/account.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
require_once dirname(__DIR__) . '/vendor/autoload.php';
44

5-
$factory = new Udger\ParserFactory();
5+
$factory = new Udger\ParserFactory(sys_get_temp_dir() . "/udgercache/udgerdb_v3.dat");
66
$parser = $factory->getParser();
77

8-
// set You Acceskey (see https://udger.com/account/main)
9-
$parser->setAccessKey('XXXXXX');
10-
118
try {
9+
// set You Acceskey (see https://udger.com/account/main)
10+
$parser->setAccessKey('XXXXXXXX');
1211
$ret = $parser->account();
1312
var_dump($ret);
1413
} catch (Exception $ex) {

examples/full_example.php

Lines changed: 0 additions & 38 deletions
This file was deleted.

examples/isbot.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

examples/manual_update_data.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

examples/parse.php

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,15 @@
33
require_once dirname(__DIR__) . '/vendor/autoload.php';
44

55
// creates a new UdgerParser object
6-
$factory = new Udger\ParserFactory();
6+
$factory = new Udger\ParserFactory(sys_get_temp_dir() . "/udgercache/udgerdb_v3.dat");
77
$parser = $factory->getParser();
88

9-
// set data dir (this php script must right write to cache dir)
10-
$parser->setDataDir(sys_get_temp_dir() . "/udgercache/");
11-
12-
// set You Acceskey (see https://udger.com/account/main)
13-
//$parser->setAccessKey('XXXXXX');
14-
// or download the data manually from http://data.udger.com/[ACCESS_KEY]/udgerdb.dat
15-
16-
//If you want information about fragments
17-
$parser->setParseFragments(true);
18-
19-
209
try {
21-
$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36';
22-
// Gets information about the current user agent
23-
$ret = $parser->parse($useragent);
10+
$parser->setUA('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36');
11+
$parser->setIP("66.249.64.1");
12+
13+
$ret = $parser->parse();
2414
var_dump($ret);
2515
} catch (Exception $ex) {
2616
echo "Error: " . $ex->getMessage(). PHP_EOL;
27-
}
17+
}

src/Helper/IP.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
4+
namespace Udger\Helper;
5+
6+
/**
7+
* IP address helper
8+
*
9+
* @author tiborb
10+
*/
11+
class IP implements IPInterface{
12+
13+
/**
14+
* Get IP verison
15+
*
16+
* @param string $ip
17+
* @return integer|boolean Returns version or false on invalid address
18+
*/
19+
public function getIpVersion($ip)
20+
{
21+
if (false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
22+
return self::IPv6;
23+
}
24+
25+
if (false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
26+
return self::IPv4;
27+
}
28+
// invalid ip
29+
return false;
30+
}
31+
32+
/**
33+
* Ip to long
34+
*
35+
* @param string $ip
36+
* @return integer
37+
*/
38+
public function getIpLong($ip)
39+
{
40+
return sprintf('%u', ip2long($ip));
41+
}
42+
}

src/Helper/IPInterface.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace Udger\Helper;
4+
5+
/**
6+
*
7+
* @author tiborb
8+
*/
9+
interface IPInterface {
10+
11+
const IPv4 = 4;
12+
const IPv6 = 6;
13+
14+
public function getIpVersion($ip);
15+
16+
public function getIpLong($ip);
17+
}

0 commit comments

Comments
 (0)