crackmyknuckles
Newcomer
- Joined
- Jan 9, 2009
- Sythe Gold
- 0
- Messages
- 15
I made this as part of a set of tools for Runescape Developers, although I have now rewirtten this class completely with new features and made it more stable/upgradable. This version features some nice things like the GE Image and Graph downloading and Cacheing features it is however rather sloppy as I was never expecting to release it.
I'll give help on how it works if you PM me but please try to figure it out yourself first.. I have alot to do..
Anyway heres the code:
This orignal version was inspired by and parts of it are from Weeb's GElookup and Flaming Idiots VB.Net GELookup Applications.
I take no credit for those parts(if you can find any intact code from them) however the rest is of my own creation..
Enjoy...
I'll give help on how it works if you PM me but please try to figure it out yourself first.. I have alot to do..
Anyway heres the code:
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace GELookup
{
public class GELookup
{
private ArrayList id;
private ArrayList name;
public List<string> Result;
public GELookup(string Item, bool MultiPage, int Page)
{
try
{
Result = new List<string>();
id = new ArrayList();
name = new ArrayList();
//Get GE HTML.
string strPage = GetFile("http://itemdb-rs.runescape.com/results.ws?query=" + Item + "&sup=All&cat=All&sub=All&page=" + Page + "&vis=1&order=1&sortby=name&price=all&members=");
string[] splitter = new string[] { "./viewitem.ws?obj=" };
string[] array;
//Split the HTML at the Items.
array = strPage.Split(splitter, StringSplitOptions.None);
splitter = new string[] { "\"> " };
//Add the Items while cleaning up the names/ID's
for (int i = 1; i < array.Length; i++)
{
id.Add(array[i].Split(splitter, StringSplitOptions.None)[0]);
name.Add(array[i].Split(splitter, StringSplitOptions.None)[1].Split(new string[] { "</a>" }, StringSplitOptions.None)[0]);
}
//Add the Items to the Result List
for (int i = 0; i < id.Count; i++)
{
Result.Add(name[i].ToString()); ;
}
//If MultiPage is true find the last page number and repeat
//the search with ParsePage() method.
if (MultiPage)
{
int Start = strPage.IndexOf("<td class=\"navmid\">\n1");
int Finish = strPage.IndexOf("</td>\n<td class=\"navright\">");
string Data = "blank";
if (Start > 0 && Finish > 0)
{
Data = strPage.Substring(Start);
Data = Data.Substring(0, Data.IndexOf("</td>\n"));
Data = Data.Substring(Data.LastIndexOf("bers=\">") + 7, 1);
string[] Data2 = Data.Split(new string[] { "\n<a href=\"./results.ws?query=" + Item + "&sup=All&cat=All&sub=All&page=2&vis=1&order=1&sortby=name&price=all&members=\">", "</a>", "<td>" }, StringSplitOptions.None);
List<object> _Results = new List<object>();
char[] number = Data.ToCharArray();
if (Char.IsNumber(number[0]))
{
int Count = Convert.ToInt32(Data);
for (int X = 2; X <= Count; X++)
{
_Results.Add(ParsePage(Item, X));
}
//All of the pages have been parsed so add it all to the Result List.
for (int i = 0; i < _Results.Count; i++)
{
Result.AddRange((List<string>)_Results[i]);
}
}
}
}
}
catch
{
MessageBox.Show("Error Code: 010.\r\nPlease post this Error Code in the Bug's\r\nSection of the forum.\r\nThank you.");
}
}
public GELookup()
{ }
//Self Explanitory.
private string GetFile(string strURL)
{
try
{
WebRequest myWebRequest = WebRequest.Create(strURL);
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream ReceiveStream = myWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(ReceiveStream, encode);
string strResponse = readStream.ReadToEnd();
readStream.Close();
myWebResponse.Close();
return strResponse;
}
catch(Execption e)
{
MessageBox.Show(e.ToString());
return null;
}
}
//Basicly a copy of the Constructor only this only parses one page...
private List<string> ParsePage(string Item, int Page)
{
try
{
ArrayList id1 = new ArrayList();
ArrayList name1 = new ArrayList();
List<string> Result1 = new List<string>();
string strPage = GetFile("http://itemdb-rs.runescape.com/results.ws?query=" + Item + "&sup=All&cat=All&sub=All&page=" + Page + "&vis=1&order=1&sortby=name&price=all&members=");
string[] splitter = new string[] { "./viewitem.ws?obj=" };
string[] array;
array = strPage.Split(splitter, StringSplitOptions.None);
splitter = new string[] { "\"> " };
for (int i = 1; i < array.Length; i++)
{
id.Add(array[i].Split(splitter, StringSplitOptions.None)[0]);
name1.Add(array[i].Split(splitter, StringSplitOptions.None)[1].Split(new string[] { "</a>" }, StringSplitOptions.None)[0]);
}
for (int i = 0; i < name1.Count; i++)
{
Result1.Add(name1[i].ToString()); ;
}
return Result1;
}
catch(Execption e)
{
MessageBox.Show(e.ToString());
return null;
}
}
//Takes the Index of the Item in the ListBox and returns
//A string array of prices and the picture.
public string[] GetPrice(int ItemIndex)
{
try
{
string[] ReturnPrices = new string[6];
int index = ItemIndex;
string[] price = new string[3];
string[] array;
string[] splitter = new string[] { "price:</b> " };
if (index != -1)
{
string page = GetFile("http://itemdb-rs.runescape.com/viewitem.ws?obj=" + id[index]);
array = page.Split(splitter, StringSplitOptions.None);
splitter = new string[] { "</span>" };
for (int i = 0; i < 3; i++)
{
price[i] = array[i + 1].Split(splitter, StringSplitOptions.None)[0];
}
Regex Regex = new Regex("\\d{4}_obj_big.gif?");
Match match = Regex.Match(page);
string matchResult = match.Value;
string DynamicId = matchResult.Remove(4);
ReturnPrices[0] = "Name: " + Result[index];
ReturnPrices[1] = "ID: " + id[index];
ReturnPrices[2] = "Minimum Price: " + price[0];
ReturnPrices[3] = "Market Price: " + price[1];
ReturnPrices[4] = "Maximum Price: " + price[2];
ReturnPrices[5] = GetImage(Convert.ToString(id[index]), DynamicId);
}
return ReturnPrices;
}
catch(Execption e)
{
MessageBox.Show(e.ToString());
return null;
}
}
//Gets the Image of Item with the ItemID and returns the path to the saved image.
private string GetImage(string ItemID,string imageDynId)
{
try
{
DirectoryInfo Folder = new DirectoryInfo(Directory.GetCurrentDirectory() + @"\GeImages\");
//Check to see if that folder is there if not
//create it.
if (!Folder.Exists)
{
Folder.Create();
}
//Check to see if the file has been downloaded before
//if not download it, if so return the path.
if (!File.Exists(Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + ".gif"))
{
WebClient objClient = new WebClient();
objClient.DownloadFile(@"http://itemdb-rs.runescape.com/" + imageDynId + "_obj_big.gif?id=" + ItemID, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + ".gif");
}
return Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + ".gif";
}
catch(Execption e)
{
MessageBox.Show(e.ToString());
return null;
}
}
public string[] GetGraph(string ItemID)
{
try
{
DirectoryInfo Folder = new DirectoryInfo(Directory.GetCurrentDirectory() + @"\GeImages\");
//Check to see if that folder is there if not
//create it.
if (!Folder.Exists)
{
Folder.Create();
}
string page = GetFile("http://itemdb-rs.runescape.com/viewitem.ws?obj=" + ItemID);
Regex Regex = new Regex("\\d{4}_graphimg.gif?");
Match match = Regex.Match(page);
string matchResult = match.Value;
string graphDynId = matchResult.Remove(4);
Uri File1 = new Uri("http://itemdb-rs.runescape.com/" + graphDynId + "_scaleimg.gif?id=" + ItemID + "&scale=0&axis=0");
Uri File2 = new Uri("http://itemdb-rs.runescape.com/" + graphDynId + "_graphimg.gif?id=" + ItemID + "&scale=0");
Uri File3 = new Uri("http://itemdb-rs.runescape.com/" + graphDynId + "_scaleimg.gif?id=" + ItemID + "&scale=0&axis=2");
WebClient objClient = new WebClient();
objClient.DownloadFile(File1, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale1.gif");
objClient.DownloadFile(File2, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Graph.gif");
objClient.DownloadFile(File3, Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale2.gif");
return new string[3] {Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale1.gif", Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Graph.gif", Directory.GetCurrentDirectory() + @"\GeImages\" + ItemID + "Graph_Scale2.gif"};
}
catch(Exception e)
{
MessageBox.Show(e.ToString());
return null;
}
}
}
}
This orignal version was inspired by and parts of it are from Weeb's GElookup and Flaming Idiots VB.Net GELookup Applications.
I take no credit for those parts(if you can find any intact code from them) however the rest is of my own creation..
Enjoy...

