Mobile::UserAgent - mobile user agent string parsing class
### Print the information parsed from a user-agent string:
use Mobile::UserAgent;
my $useragent = 'Nokia6600/1.0 (4.09.1) SymbianOS/7.0s Series60/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.0';
my $uaobj = new Mobile::UserAgent($useragent);
if ($uaobj->success()) {
print 'Vendor: ' . $uaobj->vendor() . "\n";
print 'Model: ' . $uaobj->model() . "\n";
print 'Version: ' . $uaobj->version() . "\n";
print 'Series60: ' . $uaobj->isSeries60() . "\n";
print 'Imode?: ' . $uaobj->isImode() . "\n";
print 'Mozilla?: ' . $uaobj->isMozilla() . "\n";
print 'Standard?: ' . $uaobj->isStandard() . "\n";
print 'Rubbish?: ' . $uaobj->isRubbish() . "\n";
}
else {
print "Not a mobile user-agent: $useragent\n";
}
### Determine if the client is a mobile device.
use Mobile::UserAgent ();
use CGI ();
# Check 1: (check if it sends a user-agent profile URL in it's headers)
foreach my $name ('X_WAP_PROFILE','PROFILE','13_PROFILE','56_PROFILE') {
if (exists($ENV{"HTTP_$name"})) {
print "Client has a user-agent profile header, so it's probably a mobile device.\n";
last;
}
}
# Check 2: (check if it supports WML):
my $q = new CGI();
if ($q->Accept('text/vnd.wap.wml') == 1) {
print "Client supports WML so it's probably a mobile device.\n";
}
# Check 3: (check if this class can parse it)
my $uaobj = new Mobile::UserAgent();
if ($uaobj->success()) {
print "Client's user-agent could be parsed, so it's a mobile device.\n";
}
Parses a mobile user agent string into it's basic constituent parts, the most
important being vendor and model.
One reason for doing this would be to use this information to
lookup vendor-model specific device characteristics in a database. You can
use also use user agent profiles to do this (for which I've developed other
classes), but not all mobile phones have these, especially the older types.
Another reason would be to detect if the visiting client is a mobile
handset.
Only real mobile user-agent strings can be parsed succesfully by
this class. Most WAP emulators are not supported because they usually don't
use the same user-agent strings as the devices they emulate.
- $mua = Mobile::UserAgent->new( [$useragent] )
- This class method constructs a new Mobile::UserAgent object. You can
either pass a user-agent string as parameter or else let the constructor
try to extract it from the HTTP_USER_AGENT environment variable.
The public object methods available are:
- $mua->success()
- Returns true if the user-agent string passed into the constructor could be
parsed, else false. If this method returns false, then it's probably not a
mobile user agent string that was passed into the constructor.
- $mua->userAgent()
- Returns the user agent string as passed into the constructor or read from
the environment variable HTTP_USER_AGENT.
- $mua->vendor()
- Returns the vendor of the handset if success() returns true, else
undef.
- $mua->model()
- Returns the model of the handset if success() returns true, else
undef.
- $mua->version()
- Returns the version part, if any, of the parsed user-agent string, else
undef. The version information is often not present or unreliable.
- $mua->isImode()
- Determines if the parsed user-agent string belongs to an i-mode handset.
Returns a boolean. Examples of such user-agent strings:
portalmmm/1.0 m21i-10(c10)
portalmmm/1.0 n21i-10(c10)
portalmmm/1.0 n21i-10(;ser123456789012345;icc1234567890123456789F)
portalmmm/2.0 N400i(c20;TB)
portalmmm/2.0 P341i(c10;TB)
DoCoMo/1.0/modelname
DoCoMo/1.0/modelname/cache
DoCoMo/1.0/modelname/cache/unique_id_information
DoCoMo/2.0 modelname(cache;individual_identification_information)
- $mua->isMozilla()
- Determines if the parsed user-agent string has a Mozilla 'compatible'
format. Returns a boolean. Examples of such user-agent strings:
Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS; Nokia 3650;424) Opera 6.10 [en]
Mozilla/4.0 (compatible; MSIE 6.0; Nokia7650) ReqwirelessWeb/2.0.0.0
Mozilla/1.22 (compatible; MMEF20; Cellphone; Sony CMD-Z5)
Mozilla/1.22 (compatible; MMEF20; Cellphone; Sony CMD-Z5;Pz063e+wt16)
Mozilla/2.0 (compatible; MSIE 3.02; Windows CE; PPC; 240x320)
mozilla/4.0 (compatible;MSIE 4.01; Windows CE;PPC;240X320) UP.Link/5.1.1.5
Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)
Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; SmartPhone; 176x220)
Mozilla/2.0 (compatible; MSIE 3.02; Windows CE; 240x320; PPC)
Mozilla/2.0 (compatible; MSIE 3.02; Windows CE; Smartphone; 176x220; Mio8380; Smartphone; 176x220)
Mozilla/4.0 (MobilePhone SCP-8100/US/1.0) NetFront/3.0 MMP/2.0
Mozilla/2.0(compatible; MSIE 3.02; Windows CE; Smartphone; 176x220)
Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS Series 60 42) Opera 6.0 [fr]
Mozilla/SMB3(Z105)/Samsung UP.Link/5.1.1.5
- $mua->isStandard()
- Determines if the parsed user-agent string has a standard
vendor-model/version format. Returns a boolean. Examples of such
user-agent strings:
Nokia8310/1.0 (05.57)
NokiaN-Gage/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0
SAGEM-myX-6/1.0 UP.Browser/6.1.0.6.1.c.3 (GUI) MMP/1.0 UP.Link/1.1
SAMSUNG-SGH-A300/1.0 UP/4.1.19k
SEC-SGHE710/1.0
- $mua->isRubbish()
- Determines if the parsed user-agent string has a non-standard or messed up
(to put it in general-public-friendly words) format. Returns a boolean.
Examples of such user-agent strings:
LGE/U8150/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.0
PHILIPS855 ObigoInternetBrowser/2.0
PHILIPS 535 / Obigo Internet Browser 2.0
PHILIPS-FISIO 620/3
PHILIPS-Fisio311/2.1
PHILIPS-FISIO311/2.1
PHILIPS-Xenium9@9 UP/4.1.16r
PHILIPS-XENIUM 9@9/2.1
PHILIPS-Xenium 9@9++/3.14
PHILIPS-Ozeo UP/4
PHILIPS-V21WAP UP/4
PHILIPS-Az@lis288 UP/4.1.19m
PHILIPS-SYSOL2/3.11 UP.Browser/5.0.1.11
Vitelcom-Feature Phone1.0 UP.Browser/5.0.2.2(GUI
ReqwirelessWeb/2.0.0 MIDP-1.0 CLDC-1.0 Nokia3650
SEC-SGHE710
- $mua->imodeCache()
- Returns the maximum i-mode cache data size in kb's of the user agent if it
is an i-mode user-agent, else undef.
- $mua->screenDims()
- Returns the screen dimensions in the format wxh if this information was
parsed from the user agent string itself, else undef. Only a few handsets
contain this information in the user-agent string such as these that use
operating systems from the company I hate most:
mozilla/2.0 (compatible; MSIE 3.02; Windows CE; PPC; 240x320)
mozilla/4.0 (compatible;MSIE 4.01; Windows CE;PPC;240X320) UP.Link/5.1.1.5
Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)
Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; SmartPhone; 176x220)
Mozilla/2.0 (compatible; MSIE 3.02; Windows CE; 240x320; PPC)
Mozilla/2.0 (compatible; MSIE 3.02; Windows CE; Smartphone; 176x220; Mio8380; Smartphone; 176x220)
Mozilla/4.0 (MobilePhone SCP-8100/US/1.0) NetFront/3.0 MMP/2.0
Mozilla/2.0(compatible; MSIE 3.02; Windows CE; Smartphone; 176x220)
- $mua->isSeries60
- Determines if the parsed user-agent string belongs to a Symbian OS Series
60 handset. Examples of such user-agent strings:
NokiaN-Gage/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0
Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS Series 60 42) Opera 6.0 [fr]
Nokia6600/1.0 (4.09.1) SymbianOS/7.0s Series60/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.0
Co-developers are very welcome. Please let me know if you want to help maintain
this class. Since the mobile world is evolving rapidly, this class will have
to keep up with it when new vendors and standards emerge in user-agent
strings.
The project homepage is:
http://sourceforge.net/projects/mobileuseragent/
http://sourceforge.net/projects/mobileuseragent/
http://www.handy-ortung.com
http://www.mobileopera.com/reference/ua
http://www.appelsiini.net/~tuupola/php/Imode_User_Agent/source/
http://www.zytrax.com/tech/web/mobile_ids.html
http://webcab.de/wapua.htm
http://www.nttdocomo.co.jp/english/p_s/i/tag/s2.html
http://test.waptoo.com/v2/skins/waptoo/user.asp
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself. There is NO warranty; not even for
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.