bash.org.pl reader
·495 words·3 mins
blog.dsinf.net
Pierwszy z cyklu odgrzebany program - czytnik losowych cytatów z bash.org.pl. Zrodził się z potrzeby - przy przeglądaniu losowych tekstów na samej stronie polskiego bash’a to co mnie denerwowało to przede wszystkim reklamy oraz zmieniający pozycję w trakcie ładowania witryny przycisk losowy. Rozwiązanie? Prosta aplikacja w niechlujnym C#. Jak pomyślał, tak zrobił.
Jedyne, co warte uwagi w samym algorytmie to metoda ściągająca zawartość strony i wyświetlająca ją tak jak przeglądarka: znaczniki <br />
, <
i inne na graficzne odpowiedniki.
Główny kod to kilka metod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text;
using System.Net;
using System.IO;
namespace Bash.org.pl_Reader
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string http_req(string s)
{
// used to build entire input
StringBuilder sb = new StringBuilder();
// used on each read operation
byte[] buf = new byte[2048];
// prepare the web page we will be asking for
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@s);
// execute the request
HttpWebResponse response = null;
try { response = (HttpWebResponse)request.GetResponse(); }
catch { MessageBox.Show("Błąd połączenia sieciowego!!!"); return "-----"; }
// we will read data via the response stream
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
// fill the buffer with data
count = resStream.Read(buf, 0, buf.Length);
// make sure we read some data
if (count != 0)
{
// translate from bytes to ASCII text
tempString = Encoding.UTF8.GetString(buf, 0, count);
// continue building the string
sb.Append(tempString);
}
}
while (count > 0); // any more data to read?
// print out page source
return sb.ToString();
}
public string wyciagnijTekstOdID(string ID)
{
string zawartosc = http_req("http://bash.org.pl/" + ID + "");
if (zawartosc == "-----") zawartosc = "----- error !!! -----";
else if (zawartosc.IndexOf("
<title>
Nie znaleziono
</title>") != -1) zawartosc = "----- error 404 -----";
else
{
string numer = zawartosc;
numer = numer.Substring(zawartosc.IndexOf("
<title>
bash.org.pl: cytat "));
numer = numer.Substring(27);
numer=numer.Substring(0, numer.IndexOf("
</title>"));
lista.Items.Add(numer);
numertext.Text = numer;
zawartosc = zawartosc.Substring(zawartosc.IndexOf("<div class=\"quote post-content post-body\">") + 45);
zawartosc = zawartosc.Substring(0, (zawartosc.IndexOf("</div>")));
//podmianki
zawartosc = zawartosc.Replace("\n", "");
zawartosc = zawartosc.Replace("\r", "");
zawartosc = zawartosc.Replace("
<br />", "\r\n");
zawartosc = zawartosc.Replace("<br />", "\r\n");
zawartosc = zawartosc.Replace("<", "<");
zawartosc = zawartosc.Replace(">", ">");
zawartosc = zawartosc.Replace(""", "\"");
zawartosc = zawartosc.Replace(" ", " ");
zawartosc = zawartosc.Replace("&", "&");
zawartosc = zawartosc.Replace("';", "'");
zawartosc = zawartosc.Replace("§", "§");
zawartosc = zawartosc.Replace("¦", "|");
zawartosc = zawartosc.Replace("µ", "µ");
zawartosc = zawartosc.Replace("‰", "‰");
zawartosc = zawartosc.Replace("®", "®");
zawartosc = zawartosc.Replace("©", "©");
zawartosc = zawartosc.Replace("'", "'");
}
return zawartosc;
}
string losujTekst()
{
string tekst = wyciagnijTekstOdID("random");
return tekst;
}
public int licznikPermanentny = 0;
private void losujButton_Click(object sender, EventArgs e)
{
tekst.Text = losujTekst();
licznikPermanentny++;
numertekst.Text = licznikPermanentny.ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
tekst.Text = "___";
}
private void idzDoWybranego_Click(object sender, EventArgs e)
{
tekst.Text = wyciagnijTekstOdID(lista.SelectedItem.ToString());
tabControl1.SelectTab(0);
}
private void doSchowka_Click(object sender, EventArgs e)
{
Clipboard.SetText("http://bash.org.pl/" + numertext.Text);
}
}
}
Link do kompletnego projektu wraz z designerem (licencja -“róbta co chceta”).