After talking with Ray some more I re-wrote the UDF to use an XML file as
it's source.  Includes options for the XML file URL (remote), and alternate
URL (local in case of connection error), and refresh rate.

Comments welcome.

Thanks,

Sam


----------------------------------------------
Blog:  http://www.rewindlife.com
Chart: http://www.blinex.com/products/charting
---------------------------------------------- 


<!---
      getReferringSearch

      Extracts the search criteria from the referrer, or a supplied URL.

      Thanks to Ryan Hagan for providing a detailed list of search urls.

      Samuel Neff ([EMAIL PROTECTED])
--->

<cffunction name="getReferringSearch" returnType="string" output="false">

   <cfargument name="testUrl" type="string" required="false">

   <cfset var s ="">
   <cfset var refererSplit = "">
   <cfset var p = "">
   <cfset var i = "">
   
   <cfset var xmlDoc = "">
   <cfset var patterns = "">
   <cfset var atts = "">
   
   
   <!---
         OPTIONS
         
         referringSearchPatternDataUrl 
         
            The URL to the search patterns XML file.  This is intended to be
a centrally managed remote file
            that can be kept up to date through community effort.
            
         referringSearchPatternDataAltUrl
         
            Secondary URL to the search patterns XML file.  This is intended
to be a local cache of the patterns
            file in case of connection failure.
            
         referringSearchPatternRefreshRate
         
            Frequency to referesh the XML file.  The file will probably be
rarely changed so a high number is 
            recommended.  In hours.
         
         Data File
         
            The patterns XML file should match the following example:
            
            <?xml version="1.0" ?>
            <patterns>
                  <pattern url="http://altavista.com/sites/search/web";
keys="q" />
                  <pattern url="http://www.google.com/search";
keys="q,as_q,as_epq" />                        
            </patterns>
            
            keys is comma delim list of possible URL keys that indicate
criteria.
         --->
         
   <cfscript>
   
      referringSearchPatternDataUrl =
"http://127.0.0.1/tst/getReferringSearchPatterns.xml";;
      referringSearchPatternDataAltUrl =
"http://127.0.0.1/tst/getReferringSearchPatterns.xml";;
      referringSearchPatternRefreshRate = 6; 
      
   </cfscript>
   

   <!---
         If we don't have the patterns or if they're old, reload them.
         
         Since this function will typically only be called once per request,
         then there's no disadvantage of having this code inside the
function
         as opposed to when the function is loaded.  If for some reason
you're
         calling this a lot in the same request, then you may want to move
this
         code outside the function execution block.
         --->
   <cfif not structKeyExists(application, "getReferringSearchPatterns") or
         application.getReferringSearchPatterns.lastReloadTime LTE 
            dateAdd("h", -1 * referringSearchPatternRefreshRate, now())>
   
      <cftry>
         <cfhttp url="#referringSearchPatternDataUrl#" method="get"
throwOnError="true">
         <cfcatch type="any">
            <cfhttp url="#referringSearchPatternDataAltUrl#" method="get"
throwOnError="true">
         </cfcatch>
      </cftry>
      
      <cfset xmlDoc = xmlParse(cfhttp.fileContent)>
      <cfset patterns = xmlDoc.patterns.pattern>
      
      <cfset s = structNew()>
      <cfloop index="i" from="1" to="#arrayLen(patterns)#">
         <cfset atts = patterns[i].xmlAttributes>
         <cfset s[atts.url] = atts.keys>
      </cfloop>
      
      <cfset s.lastReloadTime = now()>
      <cfset application.getReferringSearchPatterns = s>
      
   </cfif>



   <cfparam name="arguments.testUrl" default="#cgi.http_referer#">
   <cfif arguments.testUrl neq "">
      <cfset refererSplit = listToArray(arguments.testUrl, "?")>
      <cfif arrayLen(refererSplit) GTE 2 and
            structKeyExists(
               application.getReferringSearchPatterns,
               refererSplit[1])>

         <cfset u = listToArray(refererSplit[2],"&")>

         <cfloop
            index="p"
 
list="#application.getReferringSearchPatterns[refererSplit[1]]#">

            <cfloop index="i" from="1" to="#arrayLen(u)#">
               <cfif listGetAt(u[i], 1, "=") is p>
                  <cfset s = listGetAt(u[i], 2, "=")>
                  <cfbreak>
               </cfif>
            </cfloop>
         </cfloop>

      </cfif>
   </cfif>

   <cfreturn s>

</cffunction>



<?xml version="1.0" ?>
<patterns>
      <pattern url="http://altavista.com/sites/search/web"; keys="q" />
      <pattern url="http://altavista.com/web/results"; keys="q" />
      <pattern url="http://br.altavista.com/web/results"; keys="q" />
      <pattern url="http://de.altavista.com/web/results"; keys="q" />
      <pattern url="http://de.altavista.com/web/results/"; keys="aqa" />
      <pattern url="http://es.altavista.com/web/results"; keys="q" />
      <pattern url="http://it.altavista.com/web/results"; keys="q" />
      <pattern url="http://se.altavista.com/web/results"; keys="q" />
      <pattern url="http://uk.altavista.com/web/results"; keys="q" />
      <pattern url="http://www.altavista.com/sites/search/web"; keys="q" />
      <pattern url="http://www.altavista.com/web/results"; keys="q" />
      <pattern url="http://www.altavista.cz/web/results"; keys="q" />
      <pattern url="http://aolsearch.aol.ca/dirsearch.adp"; keys="query" />
      <pattern url="http://search.dogpile.com/texis/search"; keys="q" />
      <pattern url="http://search.earthlink.net/search"; keys="q" />
      <pattern url="http://www.findology.com/2.php"; keys="q" />
      <pattern url="http://go.google.com/hws/search"; keys="q" />
      <pattern url="http://www.google.at/search"; keys="q" />
      <pattern url="http://www.google.be/search"; keys="q" />
      <pattern url="http://www.google.ca/search"; keys="q,as_epq" />
      <pattern url="http://www.google.ch/search"; keys="q" />
      <pattern url="http://www.google.cl/search"; keys="q" />
      <pattern url="http://www.google.co.cr/search"; keys="q" />
      <pattern url="http://www.google.co.hu/search"; keys="q" />
      <pattern url="http://www.google.co.il/search"; keys="q" />
      <pattern url="http://www.google.co.in/search"; keys="q" />
      <pattern url="http://www.google.co.nz/search"; keys="q" />
      <pattern url="http://www.google.co.th/search"; keys="q" />
      <pattern url="http://www.google.co.uk/search"; keys="q" />
      <pattern url="http://www.google.co.ve/search"; keys="q" />
      <pattern url="http://www.google.com.ar/search"; keys="q" />
      <pattern url="http://www.google.com.au/search"; keys="as_epq" />
      <pattern url="http://www.google.com.br/search"; keys="q" />
      <pattern url="http://www.google.com.hk/search"; keys="q" />
      <pattern url="http://www.google.com.mx/search"; keys="q" />
      <pattern url="http://www.google.com.pe/search"; keys="q" />
      <pattern url="http://www.google.com.ru/search"; keys="q" />
      <pattern url="http://www.google.com.tr/search"; keys="q" />
      <pattern url="http://www.google.com.tw/search"; keys="q" />
      <pattern url="http://www.google.com/custom"; keys="q" />
      <pattern url="http://www.google.com/ie"; keys="q" />
      <pattern url="http://www.google.com/search"; keys="q,as_q,as_epq" />
      <pattern url="http://www.google.de/search"; keys="q,as_epq" />
      <pattern url="http://www.google.fi/search"; keys="q" />
      <pattern url="http://www.google.fr/search"; keys="q,as_q" />
      <pattern url="http://www.google.ie/search"; keys="q" />
      <pattern url="http://www.google.it/search"; keys="q,as_epq" />
      <pattern url="http://www.google.nl/search"; keys="q" />
      <pattern url="http://www.google.pl/search"; keys="q" />
      <pattern url="http://www.google.pt/search"; keys="q" />
      <pattern url="http://search.iwon.com/commerce/google.jsp";
keys="searchfor" />
      <pattern url="http://search.lycos.com/default.asp"; keys="query" />
      <pattern url="http://search.metacrawler.com/texis/search"; keys="q" />
      <pattern url="http://auto.search.msn.com/results.asp"; keys="q" />
      <pattern url="http://search.msn.com.mx/results.aspx"; keys="q" />
      <pattern url="http://search.msn.com.tw/spresults.aspx"; keys="q" />
      <pattern url="http://search.msn.com/pass/results.aspx"; keys="q" />
      <pattern url="http://search.msn.com/preview.aspx"; keys="q" />
      <pattern url="http://search.msn.com/results.asp"; keys="q" />
      <pattern url="http://search.msn.com/results.aspx"; keys="q" />
      <pattern url="http://search.msn.com/spresults.aspx"; keys="q" />
      <pattern url="http://search.msn.nl/results.aspx"; keys="q" />
      <pattern url="http://search.netscape.com/nscp_results.adp";
keys="query" />
      <pattern url="http://aolsearch.aol.com/aol/search"; keys="query" />
      <pattern
url="http://eplansekits.com/cgi-bin/smartsearch/smartsearch.cgi";
keys="keywords" />
      <pattern url="http://ms108.mysearch.com/jsp/AVweb.jsp";
keys="searchfor" />
      <pattern url="http://rr.looksmart.com/r_search"; keys="key" />
      <pattern url="http://search.cometsystems.com/search.php"; keys="qry" />
      <pattern url="http://search.virgilio.it/search/cgi/search.cgi";
keys="qs" />
      <pattern url="http://www.1stblaze.com/rel_search.phtml"; keys="xml_kwd"
/>
      <pattern url="http://www.agoodsearch.com/find.php"; keys="terms" />
      <pattern url="http://www.att.net/cgi-bin/websearch"; keys="qry,as_q" />
      <pattern url="http://www.browserwise.com/search/search.cgi";
keys="Terms" />
      <pattern url="http://www.coolwebsearch.com/search.php"; keys="qq" />
      <pattern url="http://www.findtarget.com/cb/hotsheet.php"; keys="q" />
      <pattern url="http://www.go-in-search.com/selink.php"; keys="terms" />
      <pattern url="http://www.hotbot.com/default.asp"; keys="query" />
      <pattern url="http://www.mywebsearch.com/jsp/GGweb.jsp";
keys="searchfor" />
      <pattern url="http://www.overture.com/d/search/p/juno/";
keys="Keywords" />
      <pattern url="http://www.search.com/search"; keys="q" />
      <pattern url="http://www.searchalot.com/texis/open/meta"; keys="q" />
      <pattern url="http://www.search-casual.com/selink.php"; keys="terms" />
      <pattern url="http://www.searches-easy.com/selink.php"; keys="terms" />
      <pattern url="http://www.searchfiend.com/search.php"; keys="keyword" />
      <pattern url="http://www.searching-easy.com/selink.php"; keys="terms"
/>
      <pattern url="http://www.searching-ez.com/selink.php"; keys="terms" />
      <pattern url="http://www.searchit.com/search.php"; keys="keywords" />
      <pattern url="http://www.searchtopper.com/search.php"; keys="s" />
      <pattern url="http://www.sqwire.com/query.php"; keys="kw" />
      <pattern url="http://b.search.yahoo.com/bin/search"; keys="p" />
      <pattern url="http://ca.google.yahoo.com/bin/query_ca"; keys="p" />
      <pattern url="http://ca.search.yahoo.com/search/ca"; keys="p" />
      <pattern url="http://cn.websearch.yahoo.com/search/web_cn"; keys="p" />
      <pattern url="http://google.yahoo.com/bin/query"; keys="p" />
      <pattern url="http://search.yahoo.com/bin/query_msie"; keys="p" />
      <pattern url="http://search.yahoo.com/bin/search"; keys="p" />
      <pattern url="http://search.yahoo.com/search"; keys="p,va" />
      <pattern url="http://search.yahoo.com/search/msie"; keys="p" />
</patterns>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/lists.cfm?link=t:4
Subscription: http://www.houseoffusion.com/lists.cfm?link=s:4
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

Your ad could be here. Monies from ads go to support these lists and provide more 
resources for the community. 
http://www.fusionauthority.com/ads.cfm

Reply via email to