気になったので、
import re
CARRIER = [
[‘docomo’, re.compile(r’^DoCoMo/\d\.\d[ /]’) ,None],
[‘softbank’,re.compile(r’^(?:(?:SoftBank|Vodafone|J-PHONE)/\d\.\d|MOT-)’),None],
[‘ezweb’,re.compile(r’^(?:KDDI-[A-Z]+\d+[A-Z]? )?UP\.Browser\/’),None],
[‘willcom’,re.compile(r’^Mozilla/3\.0\((?:DDIPOCKET|WILLCOM);|^Mozilla/4\.0 \(compatible; MSIE (?:6\.0|4\.01); Windows CE; SHARP/WS\d+SH; PPC; \d+x\d+\)’),None],
[‘nonmobile’,re.compile(r’.+’),None],
]
class NonMobileFactory:
def __init__(self):
pass
def create(self,environ,context):
from uamobile.nonmobile import NonMobileUserAgent as NonMobile
return NonMobile(environ, context)
class Context(object):
def __init__(self, proxy_ips=None,
extra_docomo_ips=None, extra_ezweb_ips=None, extra_softbank_ips=None, extra_willcom_ips=None,
extra_crawler_ips=None,
docomo_factory=None, ezweb_factory=None, softbank_factory=None, willcom_factory=None):
#(省略)
#
CARRIER[0][2] = docomo_factory or DoCoMoUserAgentFactory
CARRIER[1][2] = softbank_factory or SoftBankUserAgentFactory
CARRIER[2][2] = ezweb_factory or EZwebUserAgentFactory
CARRIER[3][2] = willcom_factory or WillcomUserAgentFactory
CARRIER[4][2] = NonMobileFactory
#(省略)
def detect(self,environ,useragent):
for c in CARRIER:
if c[1].match(useragent):
return c[2]().create(environ,useragent)
とやってみて、uamobile/__init__.py でこうやって見た。
def detect(environ, context=None):
context = context or Context()
return context.detect(environ,environ[‘HTTP_USER_AGENT’])
それだけだが気になったのであった。