array('q'), 'yahoo' => array('p'), 'ask' => array('q'), 'msn' => array('q'), 'aol' => array('query'), 'jumptap' => array('q'), 'taptu' => array('t'), 'find' => array('q'), 'mowser' => array('p'), 'orangeworld' => array('q', 'searchText'), 'tigo' => array('q'), 'minipoisk' => array('q'), 'orange' => array('q', 'searchText'), 'telusmobility' => array('q'), 'mweb' => array('q'), 'tinytube' => array('q'), 'mph1' => array('q'), 'metajam' => array('p'), '999-search' => array('q'), 'googlemobile' => array('q'), 'mycricket' => array('q'), 'skweezer' => array('q') ); /* * Takes a referer URL and looks for search information. If the referer does * not appear to be a search source it returns a null. If the referer is a * search results page it returns an array containing: * name - search engine name * domain - original domain in the referer * keywords - keywords field */ function search_info($url) { global $engines; $p = parse_url($url); if (!$p || !$p['host'] || !$p['query']) { return null; } $h = strtolower($p['host']); $hp = explode('.',$h); if (count($hp) < 2) { return null; } else if (count($hp) == 2) { $name = $hp[0]; } else { $name = array_shift(array_slice($hp, -2, 1)); if (in_array($name, array('co', 'com'))) { $name = array_shift(array_slice($hp, -3, 1)); } } if (!array_key_exists($name, $engines)) { return null; } parse_str($p['query'], $params); $keywords = null; $potentials = $engines[$name]; while ($keywords == null && count($potentials)) { $param = array_shift($potentials); if (array_key_exists($param, $params)) { $keywords = $params[$param]; } } if ($keywords == null) { return null; } return array( 'name' => $name, 'domain' => $h, 'keywords' => $keywords ); } $fh = fopen('php://stdin', 'r'); while (!feof($fh)) { $line = rtrim(fgets($fh)); $si = search_info($line); if ($si) { print $si['name'] . " " . $si['keywords'] . "\n"; } }