2009-03-05 15 views

回答

8

这是我一直在寻找的语法,与iPhone和iPod touch的工作原理:

uastring = self.request.headers.get('user_agent') 
if "Mobile" in uastring and "Safari" in uastring: 
    # do iphone/ipod stuff 
3

This article概述了几种通过检查HTTP_USER_AGENT代理变量来检测iPhone的方法。根据你想要在哪里进行检查(HTML级别,Javascript,CSS等),我相信你可以推断这到你的Python应用程序。对不起,我不是一个蟒蛇人。 8^D

1

检查用户代理。这将是

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3

我不知道如何使用AppEngine上做到这一点,但相当于PHP代码可以在这里找到:http://www.mattcutts.com/blog/iphone-user-agent/

+0

那么,它会改变。应用程序应检查的关键字是'iPhone'和'AppleWebKit' - 使用该确切字符串会在下一次Safari获得点数发布时将您咬入屁股中。 – ceejayoz 2009-03-05 23:58:31

+0

不,关键位是Mobile /(something)和Safari /(something)。 “iPhone”不会在iPod touch上。 – 2009-03-06 01:11:09

+1

一个android显示为什么?它基于webkit,如果它将Safari放入其UA中,我不会感到惊讶(Chrome会这样做,iirc)。 – 2009-03-06 06:47:53

2

这里是如何做到实现它在Django的中间件,假设这是你在appengine上使用了什么。

class DetectiPhone(object): 
    def process_request(self, request): 
     if 'HTTP_USER_AGENT' in request.META and request.META['HTTP_USER_AGENT'].find('(iPhone') >= 0: 
      request.META['iPhone'] = True 

基本上在HTTP_USER_AGENT中查找'iPhone'。请注意,iPod Touch的签名与iPhone略有不同,因此广泛的'iPhone'搜索不是更严格的搜索。

2

如果您使用标准webapp框架,用户代理将位于请求实例中。这应该是足够好:

if "iPhone" in request.headers["User-Agent"]: 
    # do iPhone logic 
3

苹果网站上的文章Using the Safari on iPhone User Agent String指示iPhone和iPod touch不同的用户代理。

Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3 
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3 
Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/XXXXX Safari/525.20 
1
import os 

class MainPage(webapp.RequestHandler): 
    @login_required 
    def get(self): 
    userAgent = os.environ['HTTP_USER_AGENT'] 
    if userAgent.find('iPhone') > 0: 
     self.response.out.write('iPhone support is coming soon...') 
    else: 
     self.response.out.write('Hey... you are not from iPhone...') 
相关问题