PDA

Ver la Versión Completa : Intentar reconocer al cliente o navegador


dec
05-09-2008, 18:23:26
Hola,

Llevo unos días trabajando o perdiendo el tiempo, no lo sé bien, con cierto proyecto, con cierta clase capaz de reconocer el cliente o navegador del usuario desde nuestros "scripts" PHP. El caso es que algo he avanzado, mas, sin embargo, necesito que alguien me diga que algo así tiene más o menos futuro, que merece la pena ser "continuado", o, realmente, no merece la pena. Cualquier palabra, crítica, sugerencia, comentario, idea, lo que sea, será bienvenida, como no podía ser de otro modo, y, especialmente, por cuanto me estoy comiendo el coco con este asunto tal vez demasiado, tal vez sin sentido.

Adjunto lo que he hecho hasta ahora. Será necesario que contéis con PHP 5 si queréis "probarlo", aunque, en todo caso podréis echar un vistazo y opinar sobre eso. Por otro lado, desde este enlace (http://www.davidesperalta.com/browserinfo/) (temporal, no lo mantendré ahí para siempre, me temo), podéis también ver a "BrowserInfo" funcionando, es decir, en teoría tendríais que poder ver los datos de vuestro navegador, o algunos apróximados... Bueno, pataliebres, espero vuestros comentarios, de verdad, porque no sé si es un churro lo que me traigo entre manos, si podría quizás pensarse en utlizarlo, en fin, que estoy hecho un lío. :(

PD. Huelga decir que la clase "BrowserInfo" (principal en todo esto) no está acabada, y que aún contaría con más métodos, y hasta habría que quitar alguno de los actuales, pero, lo "básico" sí que está ya ahí, es decir, la especie de "base de datos" con los "identificadores" de los clientes, y, tratar de sacar la información a partir de ahí, desde el "agente de usuario" correspondiente. Faltan seguro algunas cosas, pero, precisamente, lo que me planteo es si merece la pena seguir, si está bien planteado el asunto, si me paso, si no llego, etc. Lo que sea que se os ocurra será bienvenido, ya digo. ¡Muchas gracias! ;)

Caral
05-09-2008, 19:18:25
Hola
Esto es lo que me puso a mi:

BrowserInfo Object
(
[os:private] => Windows
[name:private] => Firefox
[type:private] => PC
[family:private] => GECKO
[version:private] => 2.0.0.16
[userAgent:private] => Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
[compatibility:private] => Mozilla
)
No se si te servira de algo?.
Si es la informacion de mi equipo no lo se, lo unico que si reconozco es que navego con Mozilla.
Por cierto: Que sera GECKO ?.
Saludos

egostar
05-09-2008, 19:30:09
Hola



BrowserInfo Object
(
[os:private] => Windows
[name:private] => Opera
[type:private] => PC
[family:private] => OPERA
[version:private] => 9.52
[userAgent:private] => Opera/9.52 (Windows NT 5.1; U; en)
[compatibility:private] => Unknown
)



Habrá que revisar la compatibilidad :)

Por otro lado, antes de decir si es oscioso o nó, pues mas bien que utilidad tiene esto que haces amigo, :)

Salud OS

dec
05-09-2008, 19:33:43
Hola,

Lo que os "sale" es, supuestamente, información sobre vuestro navegador, el que estáis utilizando. Respecto de la utilidad, ¡pues ahí está la madre del cordero! ¿Reconoce los navegadores más "populares"? Yo diría que sí... poco más o menos... ahora bien, se supone que habría de poder reconocer muchos otros navegadores, "televisores", teléfonos móviles, consolas de vídeo juegos, en fin... quizá es demasiado, quizá no merece la pena "tanto" para saber si te visitan con Firefox o no...

En todo caso gracias por vuestras opiniones. Egostar, eso de la compatibilidad... pues la cosa es que hasta ahora se busca "MSIE" y "Mozilla"... y en tu "agente de usuario" no pone nada de eso. ¿Igual tendría que incluir además "Opera" en la "compatibilidad? Chico, estoy más perdido que un pato mareado en un garaje donde un pingüino le mira de hito en hito y una cebra está ahí, sin hacer nada... sospechosamente... :D :D :D

Más que nada vuestra opinión sobre si está bien planteado el asunto, o, directamente, os parece poco menos que una burrada. :D :D

Se me olvidaba... Egostar, la utilidad podría ser, por ejemplo, poder reconocer si el cliente o navegador es un dispositivo móvil, para, siendo así, tomar las medidas oportunas. Pero, yendo un poco más allá, el asunto pasa por poder reconocer un determinado cliente o navegador, para, de esta forma, poder actuar de una forma u otra.

egostar
05-09-2008, 19:45:31
Más que nada vuestra opinión sobre si está bien planteado el asunto, o, directamente, os parece poco menos que una burrada. :D :D

Se me olvidaba... Egostar, la utilidad podría ser, por ejemplo, poder reconocer si el cliente o navegador es un dispositivo móvil, para, siendo así, tomar las medidas oportunas. Pero, yendo un poco más allá, el asunto pasa por poder reconocer un determinado cliente o navegador, para, de esta forma, poder actuar de una forma u otra.

Me parece que no es una burrada, viendo la utilidad podriamos hacer una agencia de espionaje (perdón he dicho espionaje???? :D:D:D) quise decir de investigación de mercado :)

Salud OS

maeyanes
05-09-2008, 19:49:02
Hola
Por cierto: Que sera GECKO ?.
Saludos

Hola... GECKO es el motor de renderizado de páginas web que usa Firefox para mostrar las páginas web...

En otras palabras, es quien se encarga de dibujar lo que ves en tu navegador... :D


Saludos...

dec
05-09-2008, 19:50:32
Hola,

Gracias Egostar. Esperemos a otros compañeros a ver qué dicen. :)

Maeyanes, ¿acertó contigo o te dijo que estabas navegando con un Spectrum? ¿Navegas con un Spectrum? :D

maeyanes
05-09-2008, 19:54:59
Hola,

Gracias Egostar. Esperemos a otros compañeros a ver qué dicen. :)

Maeyanes, ¿acertó contigo o te dijo que estabas navegando con un Spectrum? ¿Navegas con un Spectrum? :D

Esto es lo que me contestó:


BrowserInfo Object
(
[os:private] => Windows
[name:private] => MS Explorer
[type:private] => PC
[family:private] => MSIE
[version:private] => 7.0
[userAgent:private] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;
FDM; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022;
MAXTHON 2.0)
[compatibility:private] => Mozilla
)


:D


Saludos...

felipe88
05-09-2008, 20:08:34
Hey amigo, entonces cuida tu idea... no sea que google te la quite para mirar las estadisticas de quienes estan usando su Chrome en sus páginas, como dice Eliseo, eso si seria espionage :rolleyes: :D

enecumene
05-09-2008, 20:21:10
BrowserInfo Object
(
[os:private] => Windows
[name:private] => Firefox
[type:private] => PC
[family:private] => GECKO
[version:private] => 3.0.1
[userAgent:private] => Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
[compatibility:private] => Mozilla
)

Pues ha acertado perfectamente amigo Dec ;).

Saludos.

dec
05-09-2008, 20:26:24
Hola,

Veo que al menos con los navegadores "habituales" más o menos va bien. Me interesaría saber si os parece que tal y como se conforma la "base de datos" (en realidad un "Array" de PHP) es demasiado cutre, o, por el contrario, una idea más o menos acertada.

También, a los que usáis PHP, os pregunto, si os sería útil esto... si alguna vez necesitáisteis de algo así (que lo hay, no invento nada, por supuesto) y qué es lo que usáisteis entonces, en fin, que me digáis algo, leñe. :D :D :D

¡Gracias a todos! ;)

roman
05-09-2008, 20:44:46
BrowserInfo Object
(
[os:private] => Windows
[name:private] => Google Chrome
[type:private] => PC
[family:private] => WEBKIT
[version:private] => 0.2.149.27
[userAgent:private] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
[compatibility:private] => Mozilla
)


:D



¿Has probado get_browser (http://mx2.php.net/manual/en/function.get-browser.php) en conjunto con browscap.ini?

// Saludos

dec
05-09-2008, 20:47:58
Hola,

Pues algo he leído Román, pero, no sé si lo suficiente. Y es que se me ocurre que algo así sería ideal, pero, ¿de dónde sale el "browsecap.ini"? ¿Todos los navegadores cuentan con algo así? Mejor dicho... ¿Cuántos navegadores cuentan con algo así? ¿Por qué las soluciones que he visto, similares a la "mía", hacen algo parecido a lo que yo hago y no usan el "browsecap.ini"? Hum... ¿qué decís?

Román, ¿te parece un código demasiado rebuscado? Porque además va a haber que hacer alguna que otra filigrana, por ejempo, ¿cómo averiguas que un navegador soporta el "AJAX" famoso? Me temo que habría que comprobar si se trata de este o aquél navegador, o de unos cuantos... de sus versiones... por eso digo que esto me supera: por un lado me parece una chapuza, pero, por otro lado, parece que medio funciona... :D

TOPX
05-09-2008, 20:48:50
Google Chrome:

BrowserInfo Object
(
[os:private] => Windows
[name:private] => Google Chrome
[type:private] => PC
[family:private] => WEBKIT
[version:private] => 0.2.149.27
[userAgent:private] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
[compatibility:private] => Mozilla
)

Lynx para DOS:


BrowserInfo Object
(
[os:private] => Unknown
[name:private] => Lynx
[type:private] => PC
[family:private] => TEXT
[version:private] => 2.8.2rel.1
[userAgent:private] => Lynx/2.8.2rel.1 libwww-FM/2.14FM
[compatibility:private] => Unknown
)


Hola,

Siempre me han gustado los detectores de navegadores, principalmente aquellos que están en widgets incrustados en blogs o firmas de foristas, ya que intentan mostrar que "se está vigilando".

Me gusta la idea de dec, de encapsular esto en una(s) clase(s)... supondría que, para su reuso (y qué tal en una versión WebService? jeje).

Hace ya varios años, tuve que implementar alguna rutina para esta detección en mi proyecto de grado de Ingeniería, en la que tenía que prestar atención especial a los navegadores de dispositivos móviles... y de esa anécdota, mi recomendacion:

Para saber si tiene "futuro" esta utilidad, podría enfocarse en incluir funcionalidades que no se vean fácilmente en desarrollos abiertos:

Soporte generalizado para "otros" dispositivos, por ejemplo, usando RDF (http://es.wikipedia.org/wiki/Resource_Description_Framework) (con UAProf (http://en.wikipedia.org/wiki/UAProf), o similares) en lugar de regexps, bases de datos locales (desactualizadas) o qué se yo
-
Presentando scripts orientados al navegador ya detectado, para conocer cosas como: sus versiones exactas y si están desactualizadas, plugins/complementos/add-ons instalados, idioma, etc.
-

roman
05-09-2008, 20:55:20
Hola,
Pues algo he leído Román, pero, no sé si lo suficiente. Y es que se me ocurre que algo así sería ideal, pero, ¿de dónde sale el "browsecap.ini"? ¿Todos los navegadores cuentan con algo así? Mejor dicho... ¿Cuántos navegadores cuentan con algo así? ¿Por qué las soluciones que he visto, similares a la "mía", hacen algo parecido a lo que yo hago y no usan el "browsecap.ini"? Hum... ¿qué decís?


Hasta donde veo, siempre y cuando tengas acceso al php.ini, tú mismo puedes colocar el browsecap.ini. En el enlace a la página del manual, se cita una fuente de dónde descargar las últimas versiones (yo lo acabo de probar así). Supongo que este browscap equivaldría a tu base de datos.


Román, ¿te parece un código demasiado rebuscado? Porque además va a haber que hacer alguna que otra filigrana, por ejempo, ¿cómo averiguas que un navegador soporta el "AJAX" famoso? Me temo que habría que comprobar si se trata de este o aquél navegador, o de unos cuantos... de sus versiones... por eso digo que esto me supera: por un lado me parece una chapuza, pero, por otro lado, parece que medio funciona... :D

A decir verdad, no he examinado el código más que por encima, de manera que poco puedo decir. Si tengo tiempo, lo haré el fin de semana.

// Saludos

dec
05-09-2008, 20:58:38
Hola,

Gracias TOPX. La verdad es que me pierdo un poco. Lo que sí me parece buena idea es apurar un poco más una vez se detecte un navegador. Hacer como una especie de "segunda pasada" sobre la cadena del "agente de usuario" y tratar de conseguir más información de ahí. Pero, en parte esto ya se hace, obteniendo la versión, el sistema operativo, la "compatibilidad"...

El problema es que no hay ninguna uniformidad en las cadenas identificativas de los agentes de usuario: de ahí el uso de expresiones regulares, porque, buscar por las cadenas sería una locura, al menos hasta donde yo llego. Yo he trabajado sobre la información que recopila Zytrax.com (http://www.zytrax.com/tech/web/browser_ids.htm), pero, me temo que la "base de datos" actual puede mejorarse mucho, sobre todo en lo que a las expresiones regulares se refiere, en primer lugar, y luego que no sé hasta qué punto no tardaría en quedarse desactualizada.

A mí lo que realmente me preocupa es lo siguiente, y soy totalmente sincero: no puede ser que si fuera necesario algo así no existiese ya. O bien no existe porque es una locura intentar algo así, dado que cada agente de usuario (pasado, presente y futuro) va un poco a su bola, o bien no es necesario algo de ese "tamaño", sino que bastaría con identificar si un navegador es un "móvil", por ejemplo, con cierta fiabilidad, importando bien poco si se trata de otra cualquier cosa.

No sé... tengo la sensación de que he perdido el tiempo, pero, bueno, lo doy por bien empleado, en el sentido de que me conformo con reconocer esto: lo prefiero a seguir en mis trece, si mis trece no van a ningún lado...

dec
05-09-2008, 21:01:20
Holas,

No había visto la posibilidad de descargar "browsecap.ini" Román, estoy mirándolo ahora mismo, pero,... eso tiene muy, muy buena pinta... ¿cómo no lo he visto "usado" en ninguna aplicación de PHP? Hay un archivo que por lo visto contiene más de 80.000 agentes de usuario? :rolleyes: Definitivamente... no es cuestión de reconocer un navegador entre un millón, sino de ver qué nos interesa a nosotros en concreto... ¿es Firefox? ¿soporta AJAX? ¿es un móvil? Más allá de eso, saber qué navegador es uno entre un millón... igual no tiene mucho sentido... ¿no os parece?

dec
05-09-2008, 21:08:09
Hola,

Echando un vistazo a los "browsecap.ini", al que recomiendan descargar "para todos los websites", veo que lo que yo estaba tratando de hacer no tiene ningún sentido en absoluto. De verdad, reconozco ahora mi error y me tiro de los pelos por no haber leído mejor el manual de PHP sobre esta cuestión. El "browsecap.ini" que he descargado incorpora dispositivos móviles... y otros cientos de navegadores. Combinado con la función de PHP "get_browser"... es cuestión de hacer pruebas, pero, parece desde luego lo más apropiado.

Ahora sí, abandono definitivamente lo que estaba haciendo. Gracias Román. Gracias a todos. :rolleyes:

roman
05-09-2008, 21:08:25
¿cómo no lo he visto "usado" en ninguna aplicación de PHP?

Quizá porque no todos pueden hacer cambios en php.ini (hay que apuntar la directiva browscap). Pero si ése fuera el caso, aún podrías usar ese archivo (incluso descargarlo en automático) para "alimentar" tu propia clase en lugar de la base que ahora usas.

// Saludos

TOPX
05-09-2008, 21:13:23
[sic] no puede ser que si fuera necesario algo así no existiese ya.

Tal vez ya existe o tal vez tenga Ud. la oportunidad de un millón de dólares, que genere la necesidad desde ya. Pues, si la idea se sigue desarrollando, sobrepasaría esa preocupación de la desactualización de la base de datos de browsers y las limitaciones de la interpretación de los nombres de SOs y demás.

No sé... tengo la sensación de que he perdido el tiempo [sic]

Yo opino que la iniciativa es un excelente caldo de cultivo para implementar funcionalidades "novedosas" y "competitivas".

Ahora, le dí una revisadita a:

http://browsershots.org/http://www.davidesperalta.com/browserinfo/

... y las capturas de pantallas que ha generado, se ven que funciona muy bien :cool:

TOPX
05-09-2008, 21:17:23
Ahora sí, abandono definitivamente lo que estaba haciendo. Gracias Román. Gracias a todos. :rolleyes:

Ay... :(

Ahora sí, abandono definitivamente lo que estaba haciendo. Gracias Román. Gracias a todos.

Ay...

dec
05-09-2008, 21:23:56
Hola,

Uy, no te creas TOPX... ya estoy pensando en una clase que acaso fuera útil para trabajar con el "browscap.ini"... no me quedo con las ganas, pero, efectivamente, la idea de hacer una base de datos por mi cuenta y riesgo... habiendo algo como el "browscap.ini"... es demasiado.

La duda que me queda es porqué no se usa entonces, o porqué se usa "la otra forma", y, quizá tenga que ver con las características de PHP. Por ejemplo, tratando de establecer la directiva de PHP INI correspondiente, no me ha sido posible...

Sin embargo, en los cometarios de la función "get_browser()" me han dado la pista: es posible leer en todo caso el archivo "INI" como tal, con la función "parse_ini_file()", de modo que no se depende del PHP INI.

El caso es que ideas no faltan, pero, hay que reconocer que no tenía mucho sentido continuar por donde iba... o eso creo, vaya. ;)

TOPX
05-09-2008, 21:37:52
Qué bueno saberlo :). Entonces, ánimo con la validación de ese .ini (para empezar).

Y no deje de ver el link de browsershots.org, mientras aún esté vigente.

dec
05-09-2008, 21:56:41
Hola,

Aquí un colega (http://alexandre.alapetite.net/doc-alex/php-local-browscap/index.en.html) ya logró algo por donde empezar, por lo menos. ;)

egostar
05-09-2008, 22:03:29
Hola,

Aquí un colega (http://alexandre.alapetite.net/doc-alex/php-local-browscap/index.en.html) ya logró algo por donde empezar, por lo menos. ;)

Changos, se me hace que no vuelvo a usar ningún puto explorador, no vaya a ser que se metan hasta la cocina en mi maquina :eek::eek:

joder,

viendo la utilidad podriamos hacer una agencia de espionaje

Salud OS

roman
05-09-2008, 22:56:34
ya estoy pensando en una clase que acaso fuera útil para trabajar con el "browscap.ini"... no me quedo con las ganas, pero, efectivamente, la idea de hacer una base de datos por mi cuenta y riesgo... habiendo algo como el "browscap.ini"... es demasiado.

La duda que me queda es porqué no se usa entonces, o porqué se usa "la otra forma", y, quizá tenga que ver con las características de PHP. Por ejemplo, tratando de establecer la directiva de PHP INI correspondiente, no me ha sido posible...


Ejem, ejem

Quizá porque no todos pueden hacer cambios en php.ini (hay que apuntar la directiva browscap). Pero si ése fuera el caso, aún podrías usar ese archivo (incluso descargarlo en automático) para "alimentar" tu propia clase en lugar de la base que ahora usas.


:rolleyes:

// Saludos

roman
05-09-2008, 23:07:27
Changos, se me hace que no vuelvo a usar ningún puto explorador, no vaya a ser que se metan hasta la cocina en mi maquina :eek::eek:

joder,


Hombre amigo, no te asustes. Ésa es precisamente la información que da la función get_browser() de PHP:


string 'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16' (length=92)

object(stdClass)[1]
public 'browser_name_regex' => string '^mozilla/5\.0 (windows; .*; windows nt 5\.1; .*; rv:1\.8.*) gecko/.* firefox/2\.0.*$' (length=84)
public 'browser_name_pattern' => string 'Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*' (length=73)
public 'parent' => string 'Firefox 2.0' (length=11)
public 'platform' => string 'WinXP' (length=5)
public 'win32' => string '1' (length=1)
public 'browser' => string 'Firefox' (length=7)
public 'version' => string '2.0' (length=3)
public 'majorver' => string '2' (length=1)
public 'frames' => string '1' (length=1)
public 'iframes' => string '1' (length=1)
public 'tables' => string '1' (length=1)
public 'cookies' => string '1' (length=1)
public 'javaapplets' => string '1' (length=1)
public 'javascript' => string '1' (length=1)
public 'cssversion' => string '2' (length=1)
public 'supportscss' => string '1' (length=1)
public 'minorver' => string '0' (length=1)
public 'alpha' => string '' (length=0)
public 'beta' => string '' (length=0)
public 'win16' => string '' (length=0)
public 'win64' => string '' (length=0)
public 'backgroundsounds' => string '' (length=0)
public 'cdf' => string '' (length=0)
public 'vbscript' => string '' (length=0)
public 'activexcontrols' => string '' (length=0)
public 'isbanned' => string '' (length=0)
public 'ismobiledevice' => string '' (length=0)
public 'issyndicationreader' => string '' (length=0)
public 'crawler' => string '' (length=0)
public 'aol' => string '' (length=0)
public 'aolversion' => string '0' (length=1)


formada a partir del user agent y de la información en browscap.ini. Tal como se informa en el manual, mucha de esa información es sólo genérica y no específica a tu navegador. Por ejemplo, esta información puede indicar que el navegadorque usas soporta javascript, pero no puede detectar si tú en particular tienes o no habilitado el uso de javascript. ;)

// Saludos

egostar
05-09-2008, 23:15:34
Hombre amigo, no te asustes. Ésa es precisamente la información que da la función get_browser() de PHP:

formada a partir del user agent y de la información en browscap.ini. Tal como se informa en el manual, mucha de esa información es sólo genérica y no específica a tu navegador. Por ejemplo, esta información puede indicar que el navegadorque usas soporta javascript, pero no puede detectar si tú en particular tienes o no habilitado el uso de javascript. ;)

// Saludos

Eso es lo que dicen, pero vaya uno a saber si no le metieron un raton y no lo muestran :D:D:D

Salud OS