2009-03-05 17 views

Odpowiedz

8

To składnia szukałem, współpracuje z iPhone i iPod touch:

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

Otrzymuję obiekt AttributeError: 'WSGIRequest' nie ma atrybutów "nagłówków". – noio

3

This article przedstawia kilka sposobów wykrywania iPhone'a poprzez sprawdzenie zmiennej agenta HTTP_USER_AGENT. W zależności od tego, gdzie chcesz sprawdzić (poziom HTML, JavaScript, CSS itp.), Jestem pewien, że możesz to ekstrapolować do aplikacji Python. Przepraszam, nie jestem facetem z Pythona. 8^D

1

Sprawdź klienta użytkownika. To będzie

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

Nie jestem pewien, jak to zrobić z AppEngine, ale równoważny kod PHP można znaleźć tutaj: http://www.mattcutts.com/blog/iphone-user-agent/

+0

Cóż, to się zmieni. Kluczowymi bitami, które powinna sprawdzić aplikacja, są "iPhone" i "AppleWebKit" - użycie tego konkretnego ciągu ugryzie cię w tyłek, gdy następnym razem Safari otrzyma punktową wersję. – ceejayoz

+0

Nie, kluczowymi bitami są Mobile/(coś) i Safari/(coś). "iPhone" nie będzie tam na iPodzie touch. –

+1

Co pokazuje Android? Jest oparty na webkicie i nie zdziwiłbym się, gdyby Safari zawierało UA (chrome to robi, iirc). –

2

Oto jak to zrobić wdrożyć go jako warstwy pośredniej w Django, zakładając, że jest co używasz na 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 

Zasadniczo poszukaj "iPhone" w HTTP_USER_AGENT. Zauważ, że iPod Touch ma nieco inny podpis niż iPhone, stąd szerokie "iPhone" zamiast bardziej restrykcyjnego wyszukiwania.

2

jeśli używasz standardowej architektury internetowej, agent użytkownika będzie w instancji żądania. To powinno być wystarczająco dobre: ​​

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

Myślę, że Twój kod powinien brzmieć self.request.headers ["User-Agent"] To działa doskonale dla mnie. Dzięki – mcotton

3

Using the Safari on iPhone User Agent String artykuł na stronie Apple wskazują różne aplikacje klienckie dla iPhone i 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...') 
Powiązane problemy