Document.cs
上传用户:huiyue
上传日期:2022-04-08
资源大小:1429k
文件大小:7k
源码类别:

搜索引擎

开发平台:

ASP/ASPX

  1. using System;
  2. using System.Collections;
  3. using System.Text.RegularExpressions;
  4. using System.Collections.Generic;
  5. namespace Searcharoo.Common
  6. {
  7.     /// <summary>
  8.     /// Base class for any 'Document' that can be downloaded and indexed off the Internet
  9.     /// </summary>
  10.     public abstract class Document
  11.     {
  12.         #region Private fields: Uri, All, ContentType, MimeType, Extension, Title, Length, Description, Keywords, GpsLocation
  13.         private Uri _Uri;
  14.         private string _All;
  15.         private string _ContentType;
  16.         private string _MimeType = String.Empty;
  17.         private string _Extension = String.Empty;
  18.         private string _Title;
  19.         private long _Length;
  20.         /// <summary>Html &lt;meta http-equiv='description'&gt; tag</summary>
  21.         private string _Description = String.Empty;
  22.         /// <summary>Html &lt;meta http-equiv='keywords'&gt; tag</summary>
  23.         private List<string> _Keywords = new List<string>();
  24.         /// <summary>GPS location</summary>
  25.         private Location _GpsLocation;
  26.         #endregion
  27.         /// <summary>
  28.         /// Subclasses must implement GetResponse
  29.         /// </summary>
  30.         public abstract bool GetResponse(System.Net.HttpWebResponse webresponse);
  31.         /// <summary>
  32.         /// Subclasses must implement Parse
  33.         /// </summary>
  34.         public abstract void Parse();
  35.         public ArrayList LocalLinks = new ArrayList();      // [v7] bugfix
  36.         public ArrayList ExternalLinks = new ArrayList();   // [v7] bugfix
  37.         public virtual string All
  38.         {
  39.             get { return _All; }
  40.             set { _All = value; }
  41.         }
  42.         public virtual string ContentType
  43.         {
  44.             get { return _ContentType; }
  45.             set { _ContentType = value; }
  46.         }
  47.         public virtual string MimeType
  48.         {
  49.             get { return _MimeType; }
  50.             set { _MimeType = value; }
  51.         }
  52.         public virtual string Extension
  53.         {
  54.             get { return _Extension; }
  55.             set { _Extension = value; }
  56.         }
  57.         public abstract string WordsOnly { get; }
  58.         
  59.         public virtual string Title
  60.         {
  61.             get { return _Title; }
  62.             set { _Title = value; }
  63.         }
  64.         public virtual long Length
  65.         {
  66.             get { return _Length; }
  67.             set { _Length = value; }
  68.         }
  69.         public virtual string Description
  70.         {
  71.             get { return _Description; }
  72.             set { _Description = value; }
  73.         }
  74.         /// <summary>
  75.         /// Keywords (tags)
  76.         /// </summary>
  77.         public virtual List<string> Keywords
  78.         {
  79.             get { return _Keywords; }
  80.             set { _Keywords = value; }
  81.         }
  82.         /// <summary>
  83.         /// Comma-seperated list of keywords
  84.         /// </summary>
  85.         public string KeywordString 
  86.         {
  87.             get
  88.             {
  89.                 string s = string.Empty;
  90.                 int i = 0;
  91.                 foreach (string word in _Keywords)
  92.                 {
  93.                     if (i > 0) s += ", ";
  94.                     s += word;
  95.                     i++;
  96.                 }
  97.                 return s;
  98.             }
  99.             set 
  100.             {
  101.                 SetKeywords(value);
  102.             }
  103.         }
  104.         /// <summary>
  105.         /// X = Longitude, Y = Latitude
  106.         /// </summary>
  107.         public Location GpsLocation
  108.         {
  109.             get { return _GpsLocation; }
  110.             set { _GpsLocation = value; }
  111.         }
  112.         /// <summary>
  113.         /// http://www.ietf.org/rfc/rfc2396.txt
  114.         /// </summary>
  115.         public virtual Uri Uri
  116.         {
  117.             get { return _Uri; }
  118.             set { _Uri = value; }
  119.         }
  120.         public virtual string[] WordsArray
  121.         {
  122.             get { return this.WordsStringToArray(WordsOnly); }
  123.         }
  124.         /// <summary>
  125.         /// Most document types don't have embedded robot information
  126.         /// so they'll always be allowed to be followed 
  127.         /// (assuming there are links to follow)
  128.         /// </summary>
  129.         public virtual bool RobotFollowOK
  130.         {
  131.             get { return true; }
  132.         }
  133.         /// <summary>
  134.         /// Most document types don't have embedded robot information
  135.         /// so they'll always be allowed to be indexed 
  136.         /// (assuming there is content to index)
  137.         /// </summary>
  138.         public virtual bool RobotIndexOK
  139.         {
  140.             get { return true; }
  141.         }
  142.         /// <summary>
  143.         /// Constructor for any document requires the Uri be specified
  144.         /// </summary>
  145.         public Document(Uri uri)
  146.         {
  147.             _Uri = uri;
  148.         }
  149.        
  150.         protected string[] WordsStringToArray(string words)
  151.         {
  152.             // COMPRESS ALL WHITESPACE into a single space, seperating words
  153.             if (!String.IsNullOrEmpty(words))
  154.             {
  155.                 Regex r = new Regex(@"s+");            //remove all whitespace
  156.                 string compressed = r.Replace(words, " ");
  157.                 return compressed.Split(' ');
  158.             }
  159.             else
  160.             {
  161.                 return new string[0];
  162.             }
  163.         }
  164.         protected string GetDescriptionFromWordsOnly(string wordsonly)
  165.         {
  166.             string description = string.Empty;
  167.             if (wordsonly.Length > Preferences.SummaryCharacters)
  168.             {
  169.                 description = wordsonly.Substring(0, Preferences.SummaryCharacters);
  170.             }
  171.             else
  172.             {
  173.                 description = WordsOnly;
  174.             }
  175.             description = System.Text.RegularExpressions.Regex.Replace(description, @"s+", " ").Trim();
  176.             return description;
  177.         }
  178.         /// <summary>
  179.         /// Added in [v6]
  180.         /// </summary>
  181.         /// <param name="keywords"></param>
  182.         /// <returns></returns>
  183.         protected bool SetKeywords(string keywords)
  184.         {
  185.             string[] words = keywords.Split(new char[] { ',', ';'});
  186.             foreach (string word in words)
  187.             {
  188.                 if (word.Trim() != "")
  189.                 {
  190.                     this.Keywords.Add(word.Trim());
  191.                 }
  192.             }
  193.             return true;
  194.         }
  195.         /// <summary>
  196.         /// Added in [v6]
  197.         /// </summary>
  198.         protected bool SetGpsCoordinates(string coordinates)
  199.         {
  200.             this._GpsLocation = Location.FromString(coordinates);
  201.             return (_GpsLocation != null);
  202.         }
  203.     }
  204. }