Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Windows.Forms;
- using System.Xml;
- using System.Xml.Xsl;
- using System.Text;
- using System.IO;
- using System.Text.RegularExpressions;
- namespace RSS_Reader
- {
- public partial class MainForm : Form
- {
- string flFName = "feed_list.log"; // список лент, на которые мы подписались
- RSS rss; // текущая RSS-лента
- [STAThread]
- public static void Main(string[] args)
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new MainForm());
- }
- public MainForm()
- {
- InitializeComponent();
- if (File.Exists(flFName))
- lbFeeds.Items.AddRange(File.ReadAllLines(flFName));
- }
- void LoadFeed(string URL)
- {
- try {
- rss = new RSS(URL);
- wbIE.Navigate(Application.StartupPath+"\\"+rss.TransformToHTML());
- }catch(System.Net.WebException exc){
- MessageBox.Show(exc.Message,"Нет подключения к Интернет");
- }
- }
- void bNewClick(object sender, EventArgs e)
- {
- if (tbFeedURL.Text.Length>0)
- {
- string newURL = tbFeedURL.Text.Trim();
- lbFeeds.Items.Add(newURL);
- File.AppendAllText(flFName, newURL+"\n");
- }
- }
- void LbRSSClick(object sender, EventArgs e)
- {
- tbFeedURL.Text = lbFeeds.SelectedItem.ToString();
- }
- void LbRSSDoubleClick(object sender, EventArgs e)
- {
- tbFeedURL.Text = lbFeeds.SelectedItem.ToString();
- LoadFeed(tbFeedURL.Text);
- }
- void UpdateFeedListFile()
- {
- string bak_file = "feed_list.bak";
- try {
- if (File.Exists(bak_file)) File.Delete(bak_file);
- File.Move(flFName,bak_file);
- if (File.Exists(flFName)) File.Delete(flFName);
- foreach (string item in lbFeeds.Items)
- File.AppendAllText(flFName,item+"\n");
- }catch (Exception e){
- MessageBox.Show(e.Message);
- }
- }
- void BEditClick(object sender, EventArgs e)
- {
- lbFeeds.Items[lbFeeds.SelectedIndex] = tbFeedURL.Text.Trim();
- UpdateFeedListFile();
- }
- void BDeleteClick(object sender, EventArgs e)
- {
- int idx = lbFeeds.SelectedIndex;
- lbFeeds.Items.RemoveAt(idx);
- if (idx>=lbFeeds.Items.Count) idx--;
- if (idx>=0) lbFeeds.SetSelected(idx, true);
- UpdateFeedListFile();
- }
- void SaveAsHTMLToolStripMenuItemClick(object sender, EventArgs e)
- {
- if (sfd1.ShowDialog()==DialogResult.OK)
- File.Move(Application.StartupPath+"\\feed.xls",sfd1.FileName);
- }
- private void MainForm_Load(object sender, EventArgs e)
- {
- }
- private void lbFeeds_SelectedIndexChanged(object sender, EventArgs e)
- {
- }
- private void label2_Click(object sender, EventArgs e)
- {
- }
- private void wbIE_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
- {
- try
- {
- progressBar1.Value = Convert.ToInt32(e.CurrentProgress);
- progressBar1.Maximum = Convert.ToInt32(e.MaximumProgress);
- //progressBar1.Visible = false;
- }
- catch (Exception ex)
- {
- }
- }
- private void wbIE_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
- {
- }
- private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
- {
- About newForm = new About();
- newForm.Show();
- }
- private void pictureBox2_Click(object sender, EventArgs e)
- {
- }
- private void pictureBox2_MouseClick(object sender, MouseEventArgs e)
- {
- }
- private void MainForm_KeyPress(object sender, KeyPressEventArgs e)
- {
- if (e.KeyChar == (char)Keys.Back) //Keys.(клавиша которая вам необходима)
- {
- button1_Click(sender, e); // button_Click кнопка по которой кликнуть надо
- e.Handled = true;
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- }
- private void выходToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Close();
- }
- }
- public class RSS
- {
- private string _URL;
- private XmlDocument doc;
- private string XML_FileName;
- private string HTML_FileName;
- private string XSL_FileName;
- public RSS(string URL): this(URL, "feed.xsl"){}
- public RSS(string URL, string XSLT_File)
- {
- if (! Directory.Exists("files")) Directory.CreateDirectory("files");
- XML_FileName = @"files\"+EscapeUrl(URL)+".xml";
- HTML_FileName = @"files\"+EscapeUrl(URL)+".htm";
- long dt=0;
- if (File.Exists(XML_FileName))
- dt = DateTime.Now.Ticks-File.GetCreationTime(XML_FileName).Ticks;
- XSL_FileName=XSLT_File;
- _URL = URL;
- doc = new XmlDocument();
- if (File.Exists(XML_FileName) && dt<3600e8)
- /* если лента уже была обновлена в течении предыдущего часа
- * то загрузим её из локального файла */
- doc.Load(XML_FileName);
- else
- try
- {
- System.Net.WebClient client = new System.Net.WebClient();
- client.DownloadFile(_URL, XML_FileName);
- string sXML = File.ReadAllText(XML_FileName, Encoding.GetEncoding(1251));
- sXML = Regex.Replace(sXML, @"<\?xml-stylesheet.*\?>", "");
- sXML = Regex.Replace(sXML, @"<\w+\sxmlns:xsi.*\.xsd.?\s*>", "");
- sXML = Regex.Replace(sXML, @"<!DOCTYPE.*>", "");
- File.WriteAllText(XML_FileName, sXML, Encoding.GetEncoding(1251));
- doc.Load(XML_FileName);
- }
- catch (XmlException e)
- {
- MessageBox.Show(e.Message,"Ошибка загрузки или обработки XML");
- }
- }
- private string EscapeUrl(string s)
- {
- return s.Replace('/','_').Replace(".xml","").Replace("http:__","").Replace("www.","");
- }
- public XmlDocument NewsXML
- {
- get
- {
- return doc;
- }
- }
- public string TransformToHTML()
- {
- XslCompiledTransform xslt = new XslCompiledTransform();
- xslt.Load(XSL_FileName);
- xslt.Transform(XML_FileName, HTML_FileName);
- return HTML_FileName;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement