ZXNA写的XNA源码

ZXNA是一个.net写的聚合器....感觉是国产精品...hoho.....作者写的教学...很有用!!.....

RSS聚合器原理不过是下载RSS,读取每个节点,再按时间顺序排列出来
 其中比较麻烦的是:编码的问题,时间格式的问题应很多网友的要求,贴出我的源码
 rss类
 function 类是一个数据处理的类,在我的BLOG里
 
 public class rss:function
  {
  public int _blogid,_blogclass;
  public string _rssurl;
  public DateTime _lastupdatetime;
  file nn=new file();
  root theroot=new root();
  public DateTime lastupdatetime
  {
  get
  {return _lastupdatetime; }
  set
  {_lastupdatetime=value;}
  }
  public int blogid
  {
  get{return _blogid;}
  set{_blogid=value;}
  }
  public int blogclass
  {
  get{return _blogclass;}
  set{_blogclass=value;}
  }
  public string rssurl
  {
  get{return _rssurl;}
  set{_rssurl=value;}
  }
  public DateTime stime//设置刷新时间
  {
  get{
  if (Application["stime"]==null)
  {
  Application.Lock();
  Application["stime"]=DateTime.Now;
  Application.UnLock();
  }
  return (DateTime)Application["stime"];
  }
  set{
  Application.Lock();
  Application["stime"]=value;
  Application.UnLock();
  }
  }
 
  public bool Rssing//设置是否在刷新
  {
  get{
  if (Application["rssing"]==null)
  {
  Application.Lock();
  Application["rssing"]=false;
  Application.UnLock();
  }
  return (bool)Application["rssing"];
  }
  set{
  Application.Lock();
  Application["rssing"]=value;
  Application.UnLock();
  }
  }
 
 
  public DateTime getlastupdate(int id)//取得每个BLOG最后更新时间,如果大于这个时间,就添加新的RSS
  {
 
  DateTime str=DateTime.Parse("2005-7-20 00:00:00");
  try {
  DataRow dr= returndatarow("select top 1 * from blog_news where blogid="+id+" order by [datetime] desc");
  str=(DateTime)dr["datetime"];
  }
  catch {
  }
  return str;
  }
 
  public void getrss()//下载RSS并入库
 {
 
 String path=foderpath+"xna/rssread/"+blogid+".txt";
 String str;
  System.Net.WebClient myWebClient = new System.Net.WebClient();
  myWebClient.DownloadFile(rssurl,Server.MapPath(path));//我用WEBCLIENT类的DOWNLOADFILE下载文件,再用XML读取文件,这样就避免了乱码的问题
  myWebClient.Dispose();
  str=nn.readfile(path);
  XmlDocument doc = new XmlDocument();
  doc.Load(Server.MapPath(path));
 
  XmlElement root = doc.DocumentElement;
  XmlNodeList nodeList=null;
  //nodeList = root.SelectNodes("/rss/channel/item");//取出节点,标准的RSS文件是这样格式的,为了兼容不合格的RSS用了下面的方法
  nodeList = doc.GetElementsByTagName("item");
  lastupdatetime=getlastupdate(blogid);//取得最后更新时间
  foreach (XmlNode isbn in nodeList)//循环,一系列的转换,处理时间
  {
  XmlElement dd=null;
  string title,content,PubDate,link,utc;
  string[] sArray=null;
  DateTime date;
  title=isbn["title"].InnerText;
  content=isbn["description"].InnerText;
  //content=Regex.Replace(content,@"<.+?>","");
  /*判断时间标签*/
  if (isbn["PubDate"]!=null)
  dd=isbn["PubDate"];
  else if (isbn["pubDate"]!=null)
  dd=isbn["pubDate"];
  else if (isbn["dc:date"]!=null)
  dd=isbn["dc:date"];
 
  PubDate=dd.InnerText;
 
  link=isbn["link"].InnerText;
  sArray=getdate(PubDate);
  //catchit(PubDate);
  date=DateTime.Parse(sArray[0]);
  utc=sArray[1].Replace(":","");
 
  //PubDate=endate(DateTime.Parse(PubDate),"yyyy-MM-ddTH:mmzzz");
  if (date>lastupdatetime)//判断时间
  {
  //Response.Write(title+"
");
  String sql="select top 1 * from blog_news where link='"+link+"'";
  DataSet ds=GetDataList(sql);
  DataRow dr;
  if (ds.Tables[0].Rows.Count>0)
  dr = ds.Tables["table"].Rows[0];
  else
  dr = ds.Tables["table"].NewRow();
  dr["title"]=title;
  dr["content"]=getstring(content,1500);
  dr["datetime"]=date;
  dr["utc"]=utc;
  dr["link"]=link;
  dr["blogid"]=blogid;
  dr["blogclass"]=blogclass;
  if (ds.Tables[0].Rows.Count<1)
  ds.Tables["table"].Rows.Add(dr);
  updatetb(ds,sql);
  }
  }//end for*/
 }
 
 public string utc(string str)//在这里转换进区字符串,没找到怎么把字符转换成时区格的,只好一个个加了,现在只加了两个
  {
  str=str.Replace("CST","-06:00 ");
  str=str.Replace("EST","-05:00 ");
  return str;
  }
 
 public string[] getdate(string str)
 {
  Regex r;
  Match m;
  //str="Fr, 22 Jul 2005 13:00:00 +0800";
  string[] sArray=new string[2];
  str=Regex.Replace(str,@"(.+?,)*","");
  str=str.Replace("+"," +");
  //str=Regex.Replace(str,@"((\w+)\b)*","");
  str=utc(str);
  try {
  sArray[0]=DateTime.Parse(str).ToString();
  str+="+0800";
  }
  catch{
  }
  r = new Regex(@"(.+)((\+|\-).+)",RegexOptions.IgnoreCase);
  m = r.Match(str);
  sArray[0]=m.Groups[1].ToString();
  sArray[1]=m.Groups[2].ToString();
 return sArray;
 }
 
  }//end of class
 
 下面是更新RSS的文件原理就是客记端不停的访问这个文件,这个文件作了限制,只能同时处理一个请求,并隔一段时间
  using System;
 using System.Web;
 using System.IO;
 using System.Net;
 using System.Data;
 using System.Web.UI;
 using System.Collections;
 using System.Configuration;
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Xml;
 using article;
 //非要中文么
 public class main:rss
 {
 file nn=new file();
 root theroot=new root();
 public void Page_Load(Object sender, EventArgs e)
 {
 Response.Buffer = true ;
 Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
 Response.Expires = 0 ;
 Response.CacheControl = "no-cache" ;
 
 
 int rsstime=5;
 double num=(DateTime.Now-stime).TotalSeconds;
 string str=num.ToString();//判断两次时间间隔
 if (num>rsstime)
 {
  string sql="select top 1 * from blogs where ait=1 and fs=0";//取得最大一个没有被下载的RSS
  DataSet mylist=GetDataList(sql);
  if (mylist.Tables[0].Rows.Count==0)
  {
  update("update blogs set fs=0");//如果没有找到,就重新开始
  }
  else
  {
  DataRow dr=mylist.Tables[0].Rows[0];
  if (Rssing==true)//如果正在下载
  catchit("msg=\""+dr["rssurl"]+" Has Rssing\";");
  blogid=(int)dr["id"];
  blogclass=(int)dr["classid"];
  rssurl=dr["rssurl"].ToString();
  Rssing=true;//设定APPTION为正在下载,这样就避免了同时多个进程
  str+=" RSS:"+rssurl;
 try {
  getrss();
  }
 catch(System.Exception ero)
  {
  str=ero.Message+":"+rssurl;
  update("update blogs set fs=1 where id="+blogid);
  Rssing=false;
  theroot.greatlog(str);
  }
  stime=DateTime.Now;
  update("update blogs set fs=1 where id="+blogid);
  Rssing=false;//避免出错,设定值为己下载过,完成后设定为己下载
  }
  }
  Response.Write("msg=\""+str+"\";");
 }//end of page_load
 }
 
 
 也就这些东西了,也不是很复杂的东西,另外时区的问题还没解决,就是上面的那个时区转换,哪位知道告诉一下

发表评论

最新日记

  • 身体不适 回归健身房

    手断了也快3个月了,国庆长假期间去了一次健身房,惊喜的发现终于能卧推了,当然重量下去很多,只能推两片菜园小饼了。这意味着我能恢复训练了,用到手腕的动作都可以恢复了。不过发现一个很悲剧的情况,最近腰不太好,可能是每天折叠车拿上拿下,我的腰好像前所未有的不舒服,涂了黄道益,没见好转,真让人沮丧,需要慢慢的恢复训练,并且补充营养品了。...

  • 伤筋动骨确实需要100天手终于恢复过来了

    骨折到现在一直很失落,因为骨折让我感觉到自己不那么健康,因为骨折让自己失去篮球和其他运动的能力,失去去健身房锻炼的权利。今天,距离716骨折已经2个多月了,做了下俯卧撑,不痛了,太好了我很激动,我知道手腕快好了,恩。我要更注意自己的保护了。 西藏北路的房子有优点也有缺点,优点是感觉房子蛮大的,没有厅所以房间很大,个人空间大,离开8号线站头步行3分钟,交通便捷,去哪里都很方便,自行车到四川路也就8分钟,离开公司那就更近了,舒服。缺点是,虽然马路边风景好了,但是很吵闹,尤其低音从骨骼传递而已,让人感觉很难过,睡觉不好,不过现在已经适应了,无法停车汽车或者电瓶车都没有位置停,停楼下肯定要被偷,不过我发现八号线门口好像有停车场,可以免费停业不错。ADSL还没有转移过来,有线电视倒是好了。最后希望拆迁顺利点。...

  • 车车终于买好了,明锐1.8t

    又是一段时间没写blog,可能是装上MT之后更新频率最慢的一段时间吧。我也不知道为什么,但是总是不能有精神的写。可能自己手腕还没完全恢复,很沮丧吧。 最近的大事就是车子买好了,上海大众斯柯达新明锐2010款1.8t,灰色的,7速dsg变速箱,逸俊版,j加装了ESP,安全很重要。真是相当相当的喜欢,完美的地盘完美的动力配置,外加新款的造型,让人很满意,安全方面假装ESP。比较可惜就是方向盘是全塑料的,没有选择价值3500的选装包5,包含更多的两个喇叭,大点阵的仪表显示屏,一个触摸屏CD机,真皮带蓝牙方向盘,有点点后悔。但是有了更好的选择,RS的真皮方向盘,带拨片式换挡片,配合DSG时王道般的选择。CD,DVD,GPS这种纯娱乐电子的东西是完全不需要,原厂的贵的不行,哪怕国产的都是很贵,一个本本才多少钱,花个几千买电子产品是很不划算的行为,不过也有选择,比如西门子的VDO和明锐的CAN盒完美匹配。还需要一套金属的踏脚板,便宜的很,一套固德的8件套金属件,包含迎宾踏板等。性能方面改装要很多钱,但是可以设想下,仿BBS的轮毂一套,17寸的米其林轮胎一套,b12避震一套完全用不着更好的产品,淘一套拆车的尚酷或者随便什么PQ35系大尺寸刹车,完美车车立即呈现。恩。开心点吧...

  • 一个月拉 身体在快速的康复中

    一下就一个多月没写blog,没有记录生活。不为别的,只是老夫的手骨折了,三角骨撕脱性骨折。这一个月经历了很多事情,尤其一个月前七月十七日。老夫领了结婚证,成为已婚人士。当然是带着手腕的剧痛领的,领完就去瑞金医院绑了石膏。领证前一天想娱乐娱乐,冒着大雨去打篮球,只怪闸北IC的地板太光滑,动作一做出来就摔了,很惨,三角骨就这样骨折了。还好是小伤,大前天拆掉了石膏,恢复中。每天一副云南白药,带上一个护腕,这两天恢复下来,感觉明显好转。从刚拆的有轻微的牵扯静脉的感觉,到现在基本很OK,云南白药对我帮助很大。希望身体快点恢复。这1个多月没有去健身房,有点脂肪堆积了,要开始强化的有氧了。...

  • 几乎一个月没有写blog了 已经完全夏天了 不过没感觉到热....

    上海已经完全夏天了,不过最近雨季,没有前些日子那么闷热。每天家,公司,健身房三点一些,好在都有空调,所以没有感觉到不舒服。但是肚子好像不争气,肠胃不是很好,虽然吃东西已经很注意了。 夏天到来最大的一个好处就是电瓶车的行驶里程大了很多,明显比冬天的时候行程更长,持久高电压带来更高的速度,铅酸电池真是难伺候。不过话说GIANT上的三洋电池用了三年还是如此坚挺,感觉很欣慰。 本周结束,为期一个月的停止供应的补剂,也要准备恢复,迫不及待的想尝试肌肉科技的那绝对美味的蛋白粉了。 然后,7月17要经历一个大事件了。...

关闭