2009-03-05 11 views

Respuesta

8

Esta es la sintaxis que estaba buscando, funciona con iPhone y iPod Touch:

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

Obtengo 'AttributeError: 'El objeto' WSGIRequest 'no tiene atributos' headers''. – noio

3

This article describe algunas formas de detectar un iPhone comprobando la variable del agente HTTP_USER_AGENT. Dependiendo de dónde quieras hacer el cheque en (nivel HTML, Javascript, CSS, etc.), estoy seguro de que puedes extrapolar esto a tu aplicación Python. Lo siento, no soy un tipo pitón. 8^D

1

Compruebe el agente de usuario. Será

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

No estoy seguro de cómo hacer esto con appengine, pero el código PHP equivalente se puede encontrar aquí: http://www.mattcutts.com/blog/iphone-user-agent/

+0

Bueno, que va a cambiar. Los bits clave que debe verificar una aplicación son 'iPhone' y 'AppleWebKit', usar esa cadena exacta te morderá la próxima vez que Safari obtenga un lanzamiento de punto. – ceejayoz

+0

No, los bits clave son Mobile/(algo) y Safari/(algo). "iPhone" no estará allí en un iPod touch. –

+1

¿Cómo aparece un android? Está basado en webkit, y no me sorprendería si pone Safari en su UA (Chrome hace esto, iirc). –

2

Aquí está cómo hacerlo implementarlo como middleware de Django, asumiendo que es lo que estás usando en 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 

Básicamente busque 'iPhone' en HTTP_USER_AGENT. Tenga en cuenta que el iPod Touch tiene una firma ligeramente diferente a la del iPhone, de ahí la amplia búsqueda de 'iPhone' en lugar de una búsqueda más restrictiva.

2

si está utilizando el marco de trabajo estándar de webapp, el agente de usuario estará en la instancia de solicitud. Esto debe ser lo suficientemente bueno:

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

Creo que su código debería decir self.request.headers ["User-Agent"] Esto funciona muy bien para mí. Gracias – mcotton

3

El artículo Using the Safari on iPhone User Agent String en el sitio web de Apple indican los diferentes agentes de usuario para el iPhone y el 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...') 
Cuestiones relacionadas