葡京赌场网址RSS概念 以及 POTO周博通 资讯阅读器 使用入门

乃是不是遇到你的储藏夹凌乱不堪,或者多珍藏网页地址虽然分类,可是下起来也发不极端好,有没有来想念过将你的馆藏夹内容自动生成一个网页的领航页面生成类似Hao123(http://www.hao123.com/),或者番茄花园导航(http://www.tomatolei.com/)一样的网页,用来快速导航及温馨的网址为?

RSS概念

RSS是在线共享内容的如出一辙种植简易方法(也叫聚合内容,Really Simple
Syndication)。
通常以时效性比较强之内容达到运用RSS订阅能更敏捷获取信息,
网站提供RSS输出,有利于让用户获得网站内容之最新更新。
纱用户可以在客户端借助于支持RSS的成团工具软件,
每当未打开网站内容页面的动静下读支持RSS输出的网站内容。

即使采用状况有争执,不过我们啊来关注一下这种自动生成页面的技艺吧,说不定可以以以宜的环境下,如下面我测试了一定量独品种的窖藏夹Favorite目录下,其中“搜索引擎”和“新闻网络”两单目录是本人的测试收藏夹分类,Icon和Images是自构造生成主页所欲的组成部分内容目录。我们根据Index.htm来生成index.htm来当导航的主页面。

POTO周博通 资讯阅读器 使用入门

1.每当周博通网站http://www.potu.com下载
2.如约默认设置安装
3.注册POTO 并登陆
4.针对性本人的频道列表进行整
  a.新建目录
    可以当本人的频道列表 点击右键 选择“新建目录”
    也得以于上面“频道设置”菜单 选择“新建目录”
    输入目录名称 如“博客”
    点击确定 就可以看到刚刚亲建的“博客”目录(为文件夹图标)
  b.新增RSS频道
    可以以自之频段列表 点击右键 选择“新增RSS频道”
    也堪当头“频道设置”菜单 选择“新增RSS频道”
    输入新增的RSS频道或者OPML地址
        可以优先点击博客园中之感恩戴德兴趣之的博客的导航处的 “聚合RSS”
        然后用开辟的网址进行复制 输入到刚刚之对话框中
        点击下同样步
        如果生差不多个目录 可以选将欠RSS频道加入到谁目录之下
        点击确定就好新增RSS频道
    RSS频道在我之频段列表中凡文件的图标
  c.整理目录
    我的频道列表下 的 目录 和 RSS频道 支持拖拉
    这样尽管便宜于目下再次劈目录
    以及用一如既往类的RSS频道 归整到有一个自己定制的目录下
5.对准订制的频道进行创新
  可以以本人的频道列表下 的 相关目录 或 RSS频道 上 点击右键
      选择翻新频道 或 更新具有频道
  也足以在上边之“频道设置”菜单下摘翻新频道 或 更新具有频道

别更多 如备份频道 等 可以于装了POTO后 参看帮助文档

葡京赌场网址 1

鉴于我们不思量改变收藏夹的IE快捷方式的情节,因此收藏夹里的情或坐IE快捷方式来保存,如下图所出示。

葡京赌场网址 2

里IE快捷方式的情节如下所示,文件时利用INI格式进行保存的。

[DEFAULT]
BASEURL=http://g.cn
[InternetShortcut]
URL=http://g.cn

其中的Default中之BaseURL是域名地址,InternetShortcut中的URL是现实性的网页地址,基本上这些情节就是可组织成一个IE快捷方式了。

总体运行的功能使下图所显示。其中内容可动态变化,由于用了NVelocity引擎来变化内容,速度杀抢,和您一直浏览一个html页面的快差不多。

葡京赌场网址 3

 

下面我们来具体介绍下何以实现这页面的自动生成吧。

单击Home主页的下,我们就是自动生成一个页面,生成代码如下所示。

葡京赌场网址 4葡京赌场网址 5代码

        /// <summary>
        /// 导航及主页面
        /// </summary>
        public void GoHome()
        {
            string tempFile = “Favorite/index.txt”;
            try
            {
                HelperClassAdapter helper = new HelperClassAdapter(tempFile);
                helper.Execute();
                //MessageUtil.ShowTips(“生成成”);

                bool found = false;
                foreach (IDockContent content in this.dockPanel.Documents)
                {
                    MainIE form = content as MainIE;
                    if (form != null && form.extendedWebBrowser1.DocumentTitle == “收藏夹导航”)
                    {
                        found = true;
                        form.Activate();
                        break;
                    }
                }
                if (!found)
                {
                    this._currentUrl = “my:home”;
                    AddMainIE();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
                MessageUtil.ShowTips(ex.Message);
            }
        }

 

此处实在根本的即使是别代码的类HelperClassAdapter,这个近乎经过获取模版文件,通过Nevelocity引擎把指定格式的始末附加到模版文件中,然后输出文件即可。

葡京赌场网址 6葡京赌场网址 7代码

    public class HelperClassAdapter : AbstractAdapter
    {
        public HelperClassAdapter(string templateFile)
            : base(templateFile)
        {
        }

        public override void Execute()
        {
            string startPath = Path.Combine(Application.StartupPath, “Favorite”);
            if (!Directory.Exists(startPath))
            {
                Directory.CreateDirectory(startPath);
            }                        

            //遍历目录及文件,根据文件模版输出及文件被

            #region 根据目录放置的字典
            Dictionary<string, List<FavoriteInfo>> fileDict = new Dictionary<string, List<FavoriteInfo>>();
            string[] dirArray = Directory.GetDirectories(startPath);
            foreach (string dir in dirArray)
            {
                string dirName = new DirectoryInfo(dir).Name;
                if (dirName.ToLower() == “icon” || dirName.ToLower() == “images”) //系统图标跳了
                    continue;

                string[] fileArray = Directory.GetFiles(dir);
                List<FavoriteInfo> fileList = new List<FavoriteInfo>();
                FavoriteInfo info = null;
                foreach (string file in fileArray)
                {
                    if (!string.IsNullOrEmpty(file))
                    {
                        info = new FavoriteInfo();
                        info.Category = dirName;
                        info.Title = new FileInfo(file).Name.Replace(“.url”, “”);

                        INIFileUtil iniUtil = new INIFileUtil(file);
                        info.Url = iniUtil.IniReadValue(“InternetShortcut”, “URL”);

                        fileList.Add(info);
                    }

                }
                if (!fileDict.ContainsKey(dir))
                {
                    fileDict.Add(dir, fileList);
                }
            } 
            #endregion

            //设置输出文件名称和页面变量,然后输出文件
            this.FileNameOfOutput = Path.Combine(Application.StartupPath, “Favorite/index.htm”);
            context.Put(“FileDict”, fileDict); 
            OutputFile();
        }
    }

 

 

其中模版文件index.txt文件特别粗略,部分重中之重代码如下所示,其中要关心有$开始的运算符和变量,这些代码是落实目标及页面内容之换的。其中#foreach($FavoriteList
in ${FileDict.Values})是遍历里面的对象,进行巡回处理的,语法也生简单。

葡京赌场网址 8葡京赌场网址 9代码

<DIV id=content>
  <!–/ sidebar–><!–/ board–>
<div class=box id=coolsites>
      <h2 align=”center” class=”style2″>收藏夹导航<a class=”” id=cslayout title=居中针对齐/左对齐>居中针对齐/左对齐</a></h2>
      <div id=list>
#foreach($FavoriteList in ${FileDict.Values})
        <dl>
#set($count = 0)
#foreach($FavoriteInfo in $FavoriteList)
#if($count==0)
          <dt><a href=”#”>[ ${FavoriteInfo.Category.ToString()} ]</a>
#end
#set($count = $count + 1)
          <dd><a href=”${FavoriteInfo.Url.ToString()}”>${FavoriteInfo.Title.ToString()}</a>
#end
        </dd></dl>
#end
      </div>
    </div>
  </div>

 

 另外FavoriteInfo是部分中坚属性之实体类,代码很粗略:

葡京赌场网址 10葡京赌场网址 11代码

    public class FavoriteInfo
    {
        private string m_category;//目录分类名
        private string m_title;//网页标题
        private string m_url;//网页链接

        /// <summary>
        /// 目录分类名
        /// </summary>
        public string Category
        {
            get { return m_category; }
            set { m_category = value; }
        }

        /// <summary>
        /// 网页标题
        /// </summary>
        public string Title
        {
            get { return m_title; }
            set { m_title = value; }
        }

        /// <summary>
        /// 网页链接
        /// </summary>
        public string Url
        {
            get { return m_url; }
            set { m_url = value; }
        }
    }

 

 HelperClassAdapter的基类如下所示,主要是概念有公共的性质变量和操作,方便于延续成各种类型的子类。

葡京赌场网址 12葡京赌场网址 13代码

    public abstract class AbstractAdapter : IAdapter
    {
        #region 保护成员变量

        protected VelocityContext context;
        protected Template template;

        protected string templateFile;

        protected const string NVELOCITY_PROPERTY = “nvelocity.properties”;

        #endregion

        #region 成员变量和集体性质

        private string fileExtension = “.htm”; //输出的文本后缀名,如”.cs”。
        private string directoryOfOutput = “Articles”; //输出文件之文书夹名称
        private string fileNameOfOutput; //输出的文件名称

        /// <summary>
        /// 输出文件的文件夹名称, 如”Entity”,”Common”等
        /// </summary>
        public string DirectoryOfOutput
        {
            set { directoryOfOutput = value; }
            get { return directoryOfOutput; }
        }

        /// <summary>
        /// 输出的文件名称. 如果想出口的文件为 “A.cs”, 那么文件称也”A”.
        /// 默认的文件名称为模板文件之称呼,没有后缀名.
        /// </summary>
        public string FileNameOfOutput
        {
            set { fileNameOfOutput = value; }
            get { return fileNameOfOutput; }
        }

        /// <summary>
        /// 输出的文书后缀名,如”.cs”。
        /// </summary>
        public string FileExtension
        {
            get { return fileExtension; }
            set { fileExtension = value; }
        }

        #endregion

        /// <summary>
        /// 根据参数初始化基类的Adapter
        /// </summary>
        /// <param name=”templateFile”>模板文件名称</param>
        public AbstractAdapter(string templateFile)
        {
            #region 判断输入的参数是否中

            if (templateFile == null)
            {
                const string error = “Invalid parameter of templateFile.”;

                LogHelper.Error(error);
                throw new ArgumentException(error, “templateFile”);
            }

            #endregion

            this.templateFile = templateFile;
          
            InitTemplateEngine(); //初始化模板引擎

            fileNameOfOutput = GetFileNameFromTemplate(templateFile); // 默认情况下, 输出的文件名称为模板名称           
            directoryOfOutput = “Articles”; // 默认情况下,放到Common目录下面
        }

        /// <summary>
        /// 创建输出及文件被的艺术
        /// </summary>
        public virtual void Execute()
        {
        }

        /// <summary>
        ///根据模板创建输出的文书
        /// </summary>
        public virtual void OutputFile()
        {
            if (template != null)
            {
                string filePath = Path.GetDirectoryName(this.fileNameOfOutput);
                DirectoryInfo dir = new DirectoryInfo(filePath);
                if (!dir.Exists)
                {
                    dir.Create();
                }

                LogHelper.Debug(string.Format(“Class file output path:{0}”, this.fileNameOfOutput));
                using (StreamWriter writer = new StreamWriter(this.fileNameOfOutput, false))
                {
                    template.Merge(context, writer);
                }
            }
        }

        /// <summary>
        /// 根据模板创建代码输出及字符串流中
        /// </summary>
        /// <returns>根据模板生成的代码</returns>
        public virtual string OutputString()
        {
            string code = string.Empty;

            if (template != null)
            {
                using (StringWriter writer = new StringWriter())
                {
                    template.Merge(context, writer);
                    code =  writer.GetStringBuilder().ToString();
                }
            }
            return code;
        }

        /// <summary>
        /// 初始化NVelocity模板引擎并加载程序的配置信息e
        /// </summary>
        protected void InitTemplateEngine()
        {
            Velocity.Init(NVELOCITY_PROPERTY);
            //Velocity.Init();

            // Make a context object and populate with the data.  This is where the Velocity engine 
            // gets the data to resolve the references (ex. $foreignList) in the template
            context = new VelocityContext();

            try
            {
                template = Velocity.GetTemplate(templateFile);
            }
            catch (ResourceNotFoundException re)
            {
                string error = string.Format(“Cannot find template ” + templateFile);

                LogHelper.Error(error);
                throw new Exception(error, re);
            }
            catch (ParseErrorException pee)
            {
                string error = string.Format(“Syntax error in template ” + templateFile + “:” + pee.StackTrace);

                LogHelper.Error(error);
                throw new Exception(error, pee);
            }

        }

        #region 辅助方法

        /// <summary>
        /// 从沙盘文件名称获取输出文件称的方
        /// </summary>
        /// <param name=”templateFileName”>带后缀名的沙盘文件名</param>
        /// <returns>输出的公文称(无后缀名)</returns>
        private string GetFileNameFromTemplate(string templateFileName)
        {
            int sindex1 = templateFileName.LastIndexOf(‘/’);
            int sindex2 = templateFileName.LastIndexOf(‘\\’);

            int sindex = (sindex1 > sindex2) ? sindex1 : sindex2;
            int eindex = templateFileName.IndexOf(‘.’);

            if (sindex < eindex)
            {
                return templateFileName.Substring(sindex + 1, eindex – sindex – 1);
            }
            else
            {
                return templateFileName.Substring(sindex);
            }
        }

        #endregion
    }

 

    public interface IAdapter
    {
        /// <summary>
        /// 创建输出及文件被的方法
        /// </summary>
        void Execute();
    }

 

 另外,读取INI文件,需要的辅助类代码INIFileUtil如下所示。

葡京赌场网址 14葡京赌场网址 15代码

    public class INIFileUtil
    {
        public string path;

        public INIFileUtil(string INIPath)
        {
            path = INIPath;
        }

        [DllImport(“kernel32”)]
        private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);

        [DllImport(“kernel32”)]
        private static extern int GetPrivateProfileString(string section,string key,string def, StringBuilder retVal,int size,string filePath);

    
        [DllImport(“kernel32”)]
        private static extern int GetPrivateProfileString(string section, string key, string defVal, Byte[] retVal, int size, string filePath);

        /// <summary>
        /// 写INI文件
        /// </summary>
        /// <param name=”Section”></param>
        /// <param name=”Key”></param>
        /// <param name=”Value”></param>
        public void IniWriteValue(string Section,string Key,string Value)
        {
            WritePrivateProfileString(Section,Key,Value,this.path);
        }

        /// <summary>
        /// 读取INI文件
        /// </summary>
        /// <param name=”Section”></param>
        /// <param name=”Key”></param>
        /// <returns></returns>
        public string IniReadValue(string Section,string Key)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section,Key,””,temp, 255, this.path);
            return temp.ToString();
        }

        public byte[] IniReadValues(string section, string key)
        {
            byte[] temp = new byte[255];
            int i = GetPrivateProfileString(section, key, “”, temp, 255, this.path);
            return temp;

        }

        /// <summary>
        /// 删除ini文件下所发出段
        /// </summary>
        public void ClearAllSection()
        {
            IniWriteValue(null,null,null);
        }
        /// <summary>
        /// 删除ini文件下personal段落下的所有键
        /// </summary>
        /// <param name=”Section”></param>
        public void ClearSection(string Section)
        {
            IniWriteValue(Section,null,null);
        }
    }