设为首页收藏本站关注微信<<< 抵制 IE6 人人有责 >>>
搜索
热搜: 活动 交友 discuz
查看: 1932|回复: 2
打印 上一主题 下一主题

[WEB前端] 新手如何使用PHP创建RSS阅读器

[复制链接]
跳转到指定楼层
楼主
发表于 2015-9-24 03:47:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
jacques noah在devshed上发表了一篇关于在php4与任意版本的mysql搭建的平台下创建一个基于php的rss阅读器的文章,rss文档中有三个主要的标签:title,link和description,分别包含着像它们名称提示一样的信息。

jacques列举了来自一个rss文档的两段代码,包含开始部分和结尾部分,并说明创建php的rss阅读器之前所需要的几个步骤。
首先是提取标签所描述的内容。典型的rss文档会是如下的结构:
以下为引用的内容:
[XML] 纯文本查看 复制代码
<rss> 
      <channel> 
      <item> 
      </item> 
      </channel> 
      </rss> 

像<items>这样不包含"/"的标签是起始标签,而包含"/"的“</items>”则是结束标签,所以提取内容的函数应该匹配查找“<item></items>”的内容从而获取具体的内容。
jacques同时也讨论了如何运用php所提供的内置函数使得解析文档更为清晰和方便。在创建完必要的函数之后,jacques用函数循环的提取并显示xml文件中的内容。jacques同时向我们展示了当rss阅读器不可用的时候如何通过其他的途径获取到内容,他创建了一个关于rss信息的数据库,用数据库来帮助更新rss文件,并提供了关于这个数据库的数据表和代码示例。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享淘帖
回复

使用道具 举报

沙发
 楼主| 发表于 2015-9-24 03:49:11 | 只看该作者

RSS阅读器制作之将TreeView数据导出为XML数据
[XML] 纯文本查看 复制代码
//递归遍历节点内容,最关键的函数 private void parsenode(treenode tn) { ienumerator ie = tn.nodes.getenumerator(); while (ie.movenext()) { treenode ctn = (treenode) ie.current; //为最底层节点,即该节点为rss节点 if (ctn.getnodecount(true) == 0) { xmlline = getrsstext(ctn); sr.writeline(xmlline); }
using system;
using system.collections;
using system.io;
using system.windows.forms;
namespace treeviewexport
...{
    /**//// <summary>
   /// 将treeview中导出为xml数据
   /// </summary>
   public class treeviewtoxmlb
   ...{
        //xml每行的内容
        private string xmlline = "";
        //用于写xml文件
        private streamwriter sr;
        /**//// <summary>
        /// 构造函数
        /// </summary>
        public treeviewtoxmlb()
        ...{
            
        }
        /**//// <summary>
        /// 将treeview中导出为xml数据
        /// </summary>
        /// <param name="tv">treeview控件</param>
        /// <param name="filename">xml文件的保存路径</param>
        public void exporttoxml(treeview tv, string filename) 
        ...{
            sr = new streamwriter(filename, false, system.text.encoding.utf8);
            //写文件头部内容
            //下面是生成rss的opml文件
            sr.writeline("<?xml version="1.0" encoding="utf-8"?>");
            sr.writeline("<opml version="1.0">");
            sr.writeline("<head>");
            sr.writeline("<title>rss</title>");
            sr.writeline("</head>");
            sr.writeline("<body>");
            //遍历根节点
            foreach (treenode node in tv.nodes)
            ...{
                if (node.getnodecount(true) == 0)
                ...{
                    xmlline = getrsstext(node);
                }
                else
                ...{
                    xmlline = getdirectorytext(node);
                }
                sr.writeline(xmlline);
                //递归遍历节点
                parsenode(node);
            }
            //写文件尾部内容
            sr.writeline("</body>");
            sr.writeline("</opml>");
            sr.close();
        }
        //递归遍历节点内容,最关键的函数
        private void parsenode(treenode tn) 
        ...{
            ienumerator ie = tn.nodes.getenumerator();
            while (ie.movenext()) 
            ...{
                treenode ctn = (treenode) ie.current;
                //为最底层节点,即该节点为rss节点
                if (ctn.getnodecount(true) == 0)
                ...{
                    xmlline = getrsstext(ctn);
                    sr.writeline(xmlline);
                }
                else//不是最底层节点,即该节点为目录节点
                ...{
                    xmlline = getdirectorytext(ctn);
                    sr.writeline(xmlline);
                }
                //如果还有子节点则继续遍历
                if (ctn.getnodecount(true) > 0)
                ...{
                    parsenode(ctn);
                }
            }
            sr.writeline("</outline>");
        }
        //成生rss节点的xml文本行
        private string getrsstext(treenode node)
        ...{
            //根据node属性生成xml文本
            string rsstext = "<outline type="rss" text="" + node.text + "" xmlurl="url"/>";
            return rsstext;
        }
        //成生目录节点的xml文本行
        private string getdirectorytext(treenode node)
        ...{
            //根据node属性生成xml文本
            string directorytext = "<outline text="" + node.text + "">";
            return directorytext;
        }
   }
}


回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2015-9-24 03:52:06 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|手机版|Archiver|源于生活(个人生活娱乐工作的笔记)css3,html5,学习笔记    

GMT+8, 2024-4-26 05:46 , Processed in 0.109200 second(s), 26 queries .

Powered by Mr.Kevin-ying

© 2004-2015

快速回复 返回顶部 返回列表