2009-03-05 42 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...') 
相關問題