Bonjour,
Hier j'ai eu une idée, transformer un script PHP en Ruby... (userAgent = Mozilla/5.0 (X11; U; CrOS i686 0.9.128; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.339)
J'ai réussi à faire pas mal de chose. Voici un des problèmes qui me restent.
---
Ce bout de code PHP me donne un jolie tableau :
preg_match_all(
'/(?P<browser>Camino|Kindle(\ Fire)?|Firefox|Iceweasel|IceCat|Safari|MSIE|Trident|AppleWebKit|TizenBrowser|(?:Headless)?Chrome|YaBrowser|Vivaldi|IEMobile|Opera|OPR|Silk|Midori|Edge|CriOS|UCBrowser|Puffin|OculusBrowser|SamsungBrowser|Baiduspider|Googlebot|YandexBot|bingbot|Lynx|Version|Wget|curl|Valve\ Steam\ Tenfoot|NintendoBrowser|PLAYSTATION\ (\d|Vita)+) (?:\)?;?) (?:(?:[:\/ ])(?P<version>[0-9A-Z.]+)|\/(?:[A-Z]*))/ix',
$userAgent, $result);
Array
[0] => Array
[0] => AppleWebKit/534.10
[1] => Chrome/8.0.552.339
[browser] => Array
[0] => AppleWebKit
[1] => Chrome
[1] => Array
[0] => AppleWebKit
[1] => Chrome
[2] => Array
[0] =>
[1] =>
[3] => Array
[0] =>
[1] =>
[version] => Array
[0] => 534.10
[1] => 8.0.552.339
[4] => Array
[0] => 534.10
[1] => 8.0.552.339
En résumé cela donne :
array("browser" => array("AppleWebKit", "Chrome"), "version" => array("534.10", "8.0.552.339"))
---
Maintenant il s'agit de faire la même chose en Ruby.
Voici ce que j'ai tenté pour le moment (à noter que je ne comprends à peu prêt rien à partir du collect, mais bon) :
result = userAgent.to_enum(:scan,
/(?<browser>Camino|Kindle(\ Fire)?|Firefox|Iceweasel|IceCat|Safari|MSIE|Trident|AppleWebKit|TizenBrowser|(?:Headless)?Chrome|YaBrowser|Vivaldi|IEMobile|Opera|OPR|Silk|Midori|Edge|CriOS|UCBrowser|Puffin|OculusBrowser|SamsungBrowser|Baiduspider|Googlebot|YandexBot|bingbot|Lynx|Version|Wget|curl|Valve\ Steam\ Tenfoot|NintendoBrowser|PLAYSTATION\ (\d|Vita)+) (?:\)?;?) (?:(?:[:\/ ])(?<version>[0-9A-Z.]+)|\/(?:[A-Z]*))/ix
).map { Regexp.last_match.names.collect{ |x| {x => $~[x]} }.reduce({}, :merge) }
.reduce({}) { |h,pairs| pairs.each {|k,v| (h[k] ||= []) << v}; h }
{"browser"=>["AppleWebKit", "Chrome"], "version"=>["534.10", "8.0.552.339"]}
*EDIT* Et ça marche ! Je sais pas par contre si c'est vachement bien ou pas.
Partager