Introduction
This is my first article on CodeProject. So if there are any mistakes please forgive me. This Article explains how to fetch today's Gold/ Silver
rates (India) from the web. It might not be of use for guys from other than India but, it will help you understand how you can get specific text/ data from webpage.
Background
CodeProject has helped me a lot in my programming. So finally I have decided to contribute to CodeProject.
One of my friend in college has project on "Jewelry System".
For this application he came with an idea to show the user today's Gold/ Silver rate in selected city. He came to me and asked if it is possible?
At first I laughed at him. but later i thought it will be great if done. So I started Googling for it but found nothing.
So I decided to try it myself and after a week had success!
Using the code
Namespaces required-
- To work with Web/ HTTP classes
using System.Net;
- To work with Stream
using System.IO;
Function to get Gold/ Silver Rate
Following is the function
which takes the URL as input and returns the source of the page.
The variable temp
is used to get only required data from the page. Substring
is a function of String
class which takes
two arguments. first is Starting Index and second is [Optional] length. Replace
is another function of String
which replaces
specific/ given string
with given second parameter string
.
public string rates(string urlAddress)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
readStream = new StreamReader(receiveStream);
else
readStream = new StreamReader(receiveStream,
Encoding.GetEncoding(response.CharacterSet));
string data = readStream.ReadToEnd();
response.Close();
readStream.Close();
temp = data.Substring(data.LastIndexOf("10g"), 30);
temp = temp.Replace("<TD>", "");
temp = temp.Replace("</TD>", "");
temp = temp.Replace("\t", " ");
temp = temp.Replace("\n", " ");
}
}
catch (Exception) { MessageBox.Show("Cannot connect to the server."); }
return temp;
}
ComboBox's SelectionChangeCommited Event
Here I have assigned comboBox
Item specific
URL to get Gold and Silver rate from the page.
And called the function rates
with URL as argument.
private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
lbl_gold.Text = "Gold: ";
lbl_silver.Text = "Silver: ";
string temp = comboBox1.SelectedValue.ToString();
temp = temp.Substring(0, temp.IndexOf("@"));
lbl_gold.Text += rates(temp);
temp = comboBox1.SelectedValue.ToString();
temp = temp.Substring(temp.IndexOf("@") + 1);
lbl_silver.Text += rates(temp);
}
Close application on Form1_DoubleClick event
Close the application on Double_Click
of the form.
private void Form1_DoubleClick(object sender, EventArgs e)
{
myDictionary = null;
this.Dispose();
}
Form Load event
In this event I have wrote the code to show application at upper right corner of the screen. And checking if there is an working internet connection availability.
private void Form1_Load(object sender, EventArgs e)
{
this.Left = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right - this.Width;
this.Top = 0;
if (!HasConnection())
{
label4.Text = "No Internet connection!";
comboBox1.Enabled = false;
return;
}
myDictionary.Add("Delhi", "http://www.indiagoldrate.com/gold-rate-in-" +
"delhi-today.htm@http://www.indiagoldrate.com/silver-rate-in-delhi-today.htm");
myDictionary.Add("Mumbai", "http://www.indiagoldrate.com/gold-rate-in-" +
"mumbai-today.htm@http://www.indiagoldrate.com/silver-rate-in-mumbai-today.htm");
myDictionary.Add("Nashik", "http://www.indiagoldrate.com/gold-rate-in-" +
"nashik.htm@http://www.indiagoldrate.com/silver-price-in-nashik.htm");
myDictionary.Add("Chennai",
"http://www.indiagoldrate.com/gold-rate-in-chennai-today.htm@" +
"http://www.indiagoldrate.com/silver-rate-in-chennai-today.htm");
myDictionary.Add("Kolkata", "http://www.indiagoldrate.com/gold" +
"-rate-in-kolkata-today.htm@http://www.indiagoldrate.com/silver-rate-in-kolkata-today.htm");
myDictionary.Add("Kochi", "http://www.indiagoldrate.com/gold-rate" +
"-in-kochi.htm@http://www.indiagoldrate.com/silver-rate-in-kochi.htm");
myDictionary.Add("Hyderabad", "http://www.indiagoldrate.com/gold-rate-in" +
"-hyderabad-today.htm@http://www.indiagoldrate.com/silver-rate-in-hyderabad-today.htm");
myDictionary.Add("Bangalore", "http://www.indiagoldrate.com/gold-rate-in-" +
"bangalore-today.htm@http://www.indiagoldrate.com/silver-rate-in-bangalore-today.htm");
myDictionary.Add("Pune", "http://www.indiagoldrate.com/gold-rate" +
"-in-pune.htm@http://www.indiagoldrate.com/silver-rate-in-pune.htm");
myDictionary.Add("Jaipur", "http://www.indiagoldrate.com/gold-rate-" +
"in-jaipur.htm@http://www.indiagoldrate.com/silver-rate-in-jaipur.htm");
myDictionary.Add("Ahmedabad", "http://www.indiagoldrate.com/gold-rate" +
"-in-ahmedabad.htm@http://www.indiagoldrate.com/silver-rate-in-ahmedabad.htm");
comboBox1.DataSource = new BindingSource(myDictionary, null);
comboBox1.DisplayMember = "Key";
comboBox1.ValueMember = "Value";
}
Function to check internet connection
This function checks whether the computer has a working internet connection.
public static bool HasConnection()
{
try
{
System.Net.IPHostEntry i = System.Net.Dns.GetHostEntry("www.indiagoldrate.com");
return true;
}
catch
{
return false;
}
}
Points of Interest
This article gives an idea on how you can get specific data from website. I know there is a lot of things can be done. Participation in the
project would be greatly appreciated and can be given in any form (direct code contributions, comments, votes, emails and such). The main point is to get ideas going and implement
them which is really useful for learning.
History
- Initial release (9 April 2013)
- Code Improve (10 April 2013)