Advertisement
egorfake

rss reader

Apr 26th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.40 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using System.Xml;
  6. using System.Xml.Xsl;
  7. using System.Text;
  8. using System.IO;
  9. using System.Text.RegularExpressions;
  10.  
  11. namespace RSS_Reader
  12. {
  13.        
  14.     public partial class MainForm : Form
  15.     {
  16.         string flFName = "feed_list.log"; // список лент, на которые мы подписались
  17.         RSS rss; // текущая RSS-лента
  18.        
  19.         [STAThread]
  20.         public static void Main(string[] args)
  21.         {
  22.             Application.EnableVisualStyles();
  23.             Application.SetCompatibleTextRenderingDefault(false);
  24.             Application.Run(new MainForm());
  25.         }
  26.        
  27.         public MainForm()
  28.         {
  29.             InitializeComponent();
  30.  
  31.             if (File.Exists(flFName))
  32.                 lbFeeds.Items.AddRange(File.ReadAllLines(flFName));
  33.         }  
  34.  
  35.         void LoadFeed(string URL)
  36.         {
  37.             try {
  38.                 rss = new RSS(URL);
  39.                 wbIE.Navigate(Application.StartupPath+"\\"+rss.TransformToHTML());
  40.             }catch(System.Net.WebException exc){
  41.                 MessageBox.Show(exc.Message,"Нет подключения к Интернет");  
  42.             }
  43.         }
  44.        
  45.  
  46.        
  47.         void bNewClick(object sender, EventArgs e)
  48.         {
  49.             if (tbFeedURL.Text.Length>0)
  50.             {
  51.                 string newURL = tbFeedURL.Text.Trim();
  52.                 lbFeeds.Items.Add(newURL);
  53.                 File.AppendAllText(flFName, newURL+"\n");
  54.             }
  55.         }
  56.        
  57.         void LbRSSClick(object sender, EventArgs e)
  58.         {
  59.             tbFeedURL.Text = lbFeeds.SelectedItem.ToString();
  60.         }
  61.        
  62.         void LbRSSDoubleClick(object sender, EventArgs e)
  63.         {
  64.             tbFeedURL.Text = lbFeeds.SelectedItem.ToString();
  65.             LoadFeed(tbFeedURL.Text);
  66.         }
  67.        
  68.         void UpdateFeedListFile()
  69.         {
  70.             string bak_file = "feed_list.bak";
  71.             try {
  72.                 if (File.Exists(bak_file)) File.Delete(bak_file);
  73.                 File.Move(flFName,bak_file);
  74.                 if (File.Exists(flFName)) File.Delete(flFName);
  75.                 foreach (string item in lbFeeds.Items)
  76.                     File.AppendAllText(flFName,item+"\n");
  77.             }catch (Exception e){
  78.                 MessageBox.Show(e.Message);
  79.             }
  80.         }
  81.            
  82.         void BEditClick(object sender, EventArgs e)
  83.         {
  84.             lbFeeds.Items[lbFeeds.SelectedIndex] = tbFeedURL.Text.Trim();
  85.             UpdateFeedListFile();      
  86.         }
  87.        
  88.         void BDeleteClick(object sender, EventArgs e)
  89.         {
  90.             int idx = lbFeeds.SelectedIndex;
  91.             lbFeeds.Items.RemoveAt(idx);
  92.             if (idx>=lbFeeds.Items.Count) idx--;
  93.             if (idx>=0) lbFeeds.SetSelected(idx, true);
  94.             UpdateFeedListFile();
  95.         }
  96.        
  97.         void SaveAsHTMLToolStripMenuItemClick(object sender, EventArgs e)
  98.         {
  99.             if (sfd1.ShowDialog()==DialogResult.OK)
  100.                 File.Move(Application.StartupPath+"\\feed.xls",sfd1.FileName);
  101.         }
  102.  
  103.         private void MainForm_Load(object sender, EventArgs e)
  104.         {
  105.  
  106.         }
  107.  
  108.         private void lbFeeds_SelectedIndexChanged(object sender, EventArgs e)
  109.         {
  110.  
  111.         }
  112.  
  113.         private void label2_Click(object sender, EventArgs e)
  114.         {
  115.  
  116.         }
  117.  
  118.         private void wbIE_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
  119.  
  120.         {
  121.             try
  122.             {
  123.                 progressBar1.Value = Convert.ToInt32(e.CurrentProgress);
  124.                 progressBar1.Maximum = Convert.ToInt32(e.MaximumProgress);
  125.                 //progressBar1.Visible = false;
  126.             }
  127.             catch (Exception ex)
  128.             {
  129.                
  130.             }
  131.            
  132.         }
  133.  
  134.         private void wbIE_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
  135.         {
  136.  
  137.         }
  138.  
  139.         private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
  140.         {
  141.             About newForm = new About();
  142.             newForm.Show();
  143.         }
  144.  
  145.         private void pictureBox2_Click(object sender, EventArgs e)
  146.         {
  147.  
  148.         }
  149.  
  150.         private void pictureBox2_MouseClick(object sender, MouseEventArgs e)
  151.         {
  152.            
  153.         }
  154.  
  155.         private void MainForm_KeyPress(object sender, KeyPressEventArgs e)
  156.         {
  157.             if (e.KeyChar == (char)Keys.Back)       //Keys.(клавиша которая вам необходима)
  158.             {
  159.                 button1_Click(sender, e);                   // button_Click кнопка по которой кликнуть надо
  160.                 e.Handled = true;
  161.             }
  162.         }
  163.  
  164.         private void button1_Click(object sender, EventArgs e)
  165.         {
  166.  
  167.         }
  168.  
  169.         private void выходToolStripMenuItem_Click(object sender, EventArgs e)
  170.         {
  171.             Close();
  172.         }
  173.     }
  174.  
  175.     public class RSS
  176.     {
  177.         private string _URL;
  178.         private XmlDocument doc;
  179.         private string XML_FileName;
  180.         private string HTML_FileName;
  181.         private string XSL_FileName;
  182.         public RSS(string URL): this(URL, "feed.xsl"){}
  183.         public RSS(string URL, string XSLT_File)
  184.         {
  185.             if (! Directory.Exists("files")) Directory.CreateDirectory("files");
  186.             XML_FileName = @"files\"+EscapeUrl(URL)+".xml";
  187.             HTML_FileName = @"files\"+EscapeUrl(URL)+".htm";
  188.             long dt=0;
  189.             if (File.Exists(XML_FileName))
  190.                 dt = DateTime.Now.Ticks-File.GetCreationTime(XML_FileName).Ticks;
  191.             XSL_FileName=XSLT_File;
  192.             _URL = URL;
  193.             doc = new XmlDocument();
  194.             if (File.Exists(XML_FileName) && dt<3600e8)
  195.                 /* если лента уже была обновлена в течении предыдущего часа
  196.                  * то загрузим её из локального файла */
  197.                 doc.Load(XML_FileName);
  198.             else
  199.                 try
  200.             {
  201.                 System.Net.WebClient client = new System.Net.WebClient();
  202.                 client.DownloadFile(_URL, XML_FileName);
  203.                 string sXML = File.ReadAllText(XML_FileName, Encoding.GetEncoding(1251));
  204.                 sXML = Regex.Replace(sXML, @"<\?xml-stylesheet.*\?>", "");
  205.                 sXML = Regex.Replace(sXML, @"<\w+\sxmlns:xsi.*\.xsd.?\s*>", "");
  206.                 sXML = Regex.Replace(sXML, @"<!DOCTYPE.*>", "");
  207.                 File.WriteAllText(XML_FileName, sXML, Encoding.GetEncoding(1251));
  208.                 doc.Load(XML_FileName);
  209.             }
  210.             catch (XmlException e)
  211.             {
  212.                 MessageBox.Show(e.Message,"Ошибка загрузки или обработки XML");
  213.             }
  214.         }
  215.         private string EscapeUrl(string s)
  216.         {
  217.             return s.Replace('/','_').Replace(".xml","").Replace("http:__","").Replace("www.","");
  218.         }
  219.         public XmlDocument NewsXML
  220.         {
  221.             get
  222.             {
  223.                 return doc;
  224.             }
  225.         }
  226.         public string TransformToHTML()
  227.         {      
  228.             XslCompiledTransform xslt = new XslCompiledTransform();
  229.             xslt.Load(XSL_FileName);   
  230.             xslt.Transform(XML_FileName, HTML_FileName);
  231.             return HTML_FileName;
  232.         }
  233.        
  234.     }
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement