⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.rb

📁 用ruby on rails写的一个博客程序,还不错..ruby on rails的确是个好框架
💻 RB
字号:
# Copyright (c) 2007 Thiago Jackiw# # Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to deal# in the Software without restriction, including without limitation the rights# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell# copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:# # The above copyright notice and this permission notice shall be included in all# copies or substantial portions of the Software.# # The "Created with Sitealizer" footer text should not be removed from the # locations where it's currently shown (under the '/sitealizer' controller)# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE# SOFTWARE.require 'uri'module Sitealizer    # The Parser module is used only when processing the stats and  # not when saving the user info, this way it won't influence  # on your site's performance   #   module Parser        class UserAgent            # Process the user agent string and returns       # the users's platform:      #       #   Sitealizer::Parser::UserAgent.get_platform("(Macintosh; U; PPC Mac OS X; en)")      #   => "Macintosh"      #       def self.get_platform(user_agent)        platform = nil        if user_agent =~ /Win/i          platform = "Windows"        elsif user_agent =~ /Mac/i          platform = "Macintosh"        elsif user_agent =~ /Linux/i          platform = "Linux";        elsif user_agent =~ /SunOS/i          platform = "Sun Solaris";        elsif user_agent =~ /BSD/i          platform = "FreeBSD";        else          platform = "Other"        end        return platform      end      # Process the user agent string and returns      # the user's browser info as a hash:      #       #   user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5"      #   Sitealizer::Parser::UserAgent.browser_info(user_agent)      #   => {:type => 'Firefox', :version => '1.5'}      #       def self.browser_info(user_agent)        browser = {          :type => nil,          :version => nil        }        #Internet Exlorer        if user_agent =~ /MSIE/i && user_agent.scan(/AOL|America Online Browser/i).empty?          browser[:type] = "MSIE";          browser[:version] = user_agent.scan(/MSIE ([\d\.]+)/i).to_s        #Firefox/Firebird/Phoenix        elsif user_agent =~ /Firefox|Firebird|Phoenix/i          browser[:type] = "Firefox";          browser[:version] = user_agent.scan(/[Firefox|Firebird|Phoenix].\/(\d.+)/i).to_s        #Galeon        elsif user_agent =~ /Galeon/i          browser[:type] = "Galeon";          browser[:version] = user_agent.scan(/Galeon\/([\d\.]+)/i).to_s        #Safari        elsif user_agent =~ /Safari/i          browser[:type] = "Safari";          browser[:version] = nil        #Opera        elsif user_agent =~ /Opera/i          browser[:type] = "Opera";          browser[:version] = user_agent.scan(/Opera[ |\/]([\d\.]+)/i).to_s        #AOL/America Online Browser        elsif user_agent =~ /AOL|America Online Browser/i          browser[:type] = "AOL"          browser[:version] = if user_agent =~ /AOL/i              user_agent.scan(/AOL[ |\/]([\d.]+)/i).uniq.to_s            else              user_agent.scan(/America Online Browser ([\d\.]+)/i).to_s           end        #Camino        elsif user_agent =~ /Camino/i          browser[:type] = "Camino";          browser[:version] = user_agent.scan(/Camino\/([\d\.]+)/i).to_s        #Konqueror        elsif user_agent =~ /Konqueror/i          browser[:type] = "Konqueror";          browser[:version] = user_agent.scan(/Konqueror\/([\d.]+)/i).to_s        #K-Meleon        elsif user_agent =~ /K-Meleon/i          browser[:type] = "K-Meleon";          browser[:version] = user_agent.scan(/K-Meleon\/([\d.]+)/i).to_s        #Firefox BonEcho        elsif user_agent =~ /BonEcho/i          browser[:type] = "Firefox BonEcho";          browser[:version] = user_agent.scan(/BonEcho\/([\d.]+)/i).to_s        #Netscape        elsif user_agent =~ /Netscape/i          browser[:type] = "Netscape";          browser[:version] = user_agent.scan(/Netscape\/([\d.]+)/i).to_s        #PSP        elsif user_agent =~ /PlayStation Portable/i          browser[:type] = "PlayStation Portable (PSP)";          browser[:version] = user_agent.scan(/PlayStation Portable\); ([\d\.]+)/i).to_s        #PlayStation 3        elsif user_agent =~ /PlayStation 3/i          browser[:type] = "PlayStation 3";          browser[:version] = user_agent.scan(/PlayStation 3; ([\d\.]+)/i).to_s        #Lynx        elsif user_agent =~ /Lynx/i          browser[:type] = "Lynx";          browser[:version] = user_agent.scan(/Lynx\/([\d\.]+)/i).to_s        else          browser[:type] = "Other";          browser[:version] = nil        end        return browser      end    end       class Keyword            # Process the referrers and returns      # the search terms if they're available:      #       #   referer = "http://search.msn.com/results.aspx?srch=105&FORM=AS5&q=sitealizer"      #   Sitealizer::Parser::Keyword.get_terms(referer)      #   => 'sitealizer'      #      def self.get_terms(string)        return if string.nil?        begin          search_string = nil          domain = URI::split(string)[2]          if domain =~ /[google|alltheweb|search\.msn|ask|altavista|]\./ && string =~ /[?|&]q=/i            search_string = CGI.unescape(string.scan(/[?|&]q=([^&]*)/).flatten.to_s)          elsif domain =~ /yahoo\./i && string =~ /[?|&]p=/i            search_string = CGI.unescape(string.scan(/[?|&]p=([^&]*)/).flatten.to_s)          elsif domain =~ /search\.aol\./i && string =~ /[?|&]query=/i            search_string = CGI.unescape(string.scan(/[?|&]query=([^&]*)/).flatten.to_s)          end          return search_string                  rescue          return nil        end          end            # Process the referrers and returns the referer domain.       # <em>Host</em> is your site's url (request.host) but       # you don't have to worry about this, it's all handled      # by the sitealizer controller      #       #   referer = "http://search.msn.com/results.aspx?srch=105&FORM=AS5&q=sitealizer"      #   Sitealizer::Parser::Keyword.get_domain(referer, 'localhost')      #   => "search.msn.com"      #      def self.get_domain(string, host)        return if string.nil?        domain = nil        domain = URI::split(string)[2]        return domain != host ? domain : nil      end    end        class Robot            # Process the robots (when available) found on the      # user agent strings and returns its name:      #       #   user_agent = "Googlebot/2.X (+http://www.googlebot.com/bot.html)"      #   Sitealizer::Parser::Robot.get_name(user_agent)      #   => "Googlebot"      #            def self.get_name(agent)        robot = nil        if agent =~ /Atomz/i          robot = 'Atomz.com'        elsif agent =~ /Googlebot/i          robot = 'Googlebot'        elsif agent =~ /InfoSeek/i          robot = 'InfoSeek'        elsif agent =~ /Ask Jeeves/i          robot = 'Ask Jeeves'        elsif agent =~ /Lycos/i          robot = 'Lycos'        elsif agent =~ /MSNBOT/i          robot = 'MSNBot'        elsif agent =~ /Slurp/i && agent.scan(/Yahoo/i).empty?          robot = 'Inktomi'        elsif agent =~ /Yahoo/i          robot = 'Yahoo Slurp'        end        return robot      end          end        class Language      # Process the user language and returns the      # 'human readable' format if found, otherwise      # its raw code gets returned:      #       #   Sitealizer::Parser::Language.get_name('en-us')      #   => "English/United States"      #      def self.get_name(lang)        lang = lang.scan(/([^,;].*)/).to_s        lang = lang.slice(0,5)        languages = {"af" => "Afrikaans",                     "sq" => "Albanian",                     "eu" => "Basque",                     "bg" => "Bulgarian",                     "be" => "Byelorussian",                     "ca" => "Catalan",                     "zh" => "Chinese",                     "zh-cn" => "Chinese/China",                     "zh-tw" => "Chinese/Taiwan",                     "zh-hk" => "Chinese/Hong Kong",                     "zh-sg" => "Chinese/singapore",                     "hr" => "Croatian",                     "cs" => "Czech",                     "da" => "Danish",                     "nl" => "Dutch",                     "nl-nl" => "Dutch/Netherlands",                     "nl-be" => "Dutch/Belgium",                     "en" => "English",                     "en-gb" => "English/United Kingdom",                     "en-us" => "English/United States",                     "en-au" => "English/Australian",                     "en-ca" => "English/Canada",                     "en-nz" => "English/New Zealand",                     "en-ie" => "English/Ireland",                     "en-za" => "English/South Africa",                     "en-jm" => "English/Jamaica",                     "en-bz" => "English/Belize",                     "en-tt" => "English/Trinidad",                     "et" => "Estonian",                     "fo" => "Faeroese",                     "fa" => "Farsi",                     "fi" => "Finnish",                     "fr" => "French",                     "fr-be" => "French/Belgium",                     "fr-fr" => "French/France",                     "fr,fr" => "French/France",                     "fr-ch" => "French/Switzerland",                     "fr-ca" => "French/Canada",                     "fr-lu" => "French/Luxembourg",                     "gd" => "Gaelic",                     "gl" => "Galician",                     "de" => "German",                     "de-at" => "German/Austria",                     "de-de" => "German/Germany",                     "de-ch" => "German/Switzerland",                     "de-lu" => "German/Luxembourg",                     "de-li" => "German/Liechtenstein",                     "el" => "Greek",                     "he" => "Hebrew",                     "he-il" => "Hebrew/Israel",                     "hi" => "Hindi",                     "hu" => "Hungarian",                     "ie-ee" => "Internet Explorer/Easter Egg",                     "is" => "Icelandic",                     "id" => "Indonesian",                     "in" => "Indonesian",                     "ga" => "Irish",                     "it" => "Italian",                     "it-ch" => "Italian/ Switzerland",                     "ja" => "Japanese",                     "ko" => "Korean",                     "lv" => "Latvian",                     "lt" => "Lithuanian",                     "mk" => "Macedonian",                     "ms" => "Malaysian",                     "mt" => "Maltese",                     "no" => "Norwegian",                     "pl" => "Polish",                     "pt-pt" => "Portuguese",                     "pt-br" => "Portuguese/Brazil",                     "rm" => "Rhaeto-Romanic",                     "ro" => "Romanian",                     "ro-mo" => "Romanian/Moldavia",                     "ru-ru" => "Russian",                     "ru-mo" => "Russian /Moldavia",                     "gd" => "Scots Gaelic",                     "sr" => "Serbian",                     "sk" => "Slovack",                     "sl" => "Slovenian",                     "sb" => "Sorbian",                     "es" => "Spanish",                     "es-do" => "Spanish",                     "es-ar" => "Spanish/Argentina",                     "es-co" => "Spanish/Colombia",                     "es-mx" => "Spanish/Mexico",                     "es-es" => "Spanish/Spain",                     "es-gt" => "Spanish/Guatemala",                     "es-cr" => "Spanish/Costa Rica",                     "es-pa" => "Spanish/Panama",                     "es-ve" => "Spanish/Venezuela",                     "es-pe" => "Spanish/Peru",                     "es-ec" => "Spanish/Ecuador",                     "es-cl" => "Spanish/Chile",                     "es-uy" => "Spanish/Uruguay",                     "es-py" => "Spanish/Paraguay",                     "es-bo" => "Spanish/Bolivia",                     "es-sv" => "Spanish/El salvador",                     "es-hn" => "Spanish/Honduras",                     "es-ni" => "Spanish/Nicaragua",                     "es-pr" => "Spanish/Puerto Rico",                     "sx" => "Sutu",                     "sv" => "Swedish",                     "sv-se" => "Swedish/Sweden",                     "sv-fi" => "Swedish/Finland",                     "ts" => "Thai",                     "tn" => "Tswana",                     "tr" => "Turkish",                     "uk" => "Ukrainian",                     "ur" => "Urdu",                     "vi" => "Vietnamese",                     "xh" => "Xshosa",                     "ji" => "Yiddish",                     "zu" => "Zulu"}        return languages.fetch(lang, lang)       end    end      end  end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -