using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
namespace VE
{
public class Search
{
public
static object[] SearchAddress(string address)
{
object[] foundResults
= Search.SearchForAddress(address);
if (foundResults.Length==3)
{
return foundResults;
}
else
{
return null;
}
}
public static string ProxyAddress
{
get
{ return proxyAddress; }
set { proxyAddress = value; }
}
static
string proxyAddress =String.Empty;
public static string ProxyUserName
{
get { return proxyUserName; }
set { proxyUserName = value;
}
}
static string proxyUserName = String.Empty;
public
static string ProxyPassword
{
get { return proxyPassword; }
set
{ proxyPassword = value; }
}
static string proxyPassword
= String.Empty;
public static object[] SearchForAddress(
string
address)
{
double pointLat=0;
double pointLong=0;
string
pointAddr=String.Empty;
string searchParams =
"a=&b="
+ address + "&c=0.0&d=0.0&e=0.0&f=0.0&g=&i=&r=0";
string results = DoSearchRequest(searchParams);
if (results ==
null || results == string.Empty)
{
return null;
}
//
this gets the first set of javascript returned, for viewport, which we don't
need
// Parse results
// Regex r = new Regex(@"SetViewport\((?<lat1>\S+),(?<long1>\S+),(?<lat2>\S+),(?<long2>\S+)\)");
// Match m = r.Match(results);
try
{
Regex r2 = new
Regex(@"VE_Scratchpad.AddLocation\((?<pointAddr>.+\S+), (?<pointLat>\S+),
(?<pointLong>\S+)\)") ;
Match m2 = r2.Match(results);
pointAddr=(string)m2.Groups["pointAddr"].Value;
pointAddr= pointAddr.Replace("'","") ;
pointLat=double.Parse(m2.Groups["pointLat"].Value)
;
pointLong = double.Parse(m2.Groups["pointLong"].Value );
}
catch
{}
object[] res= new object[] {pointAddr,pointLat,pointLong};
return res;
}
private static string DoSearchRequest(string
searchParams)
{
string results = String.Empty;
HttpWebRequest
searchRequest =
(HttpWebRequest)WebRequest.Create( "http://207.46.159.133/search.ashx"
);
searchRequest.Method = "POST";
if(Search.proxyAddress.Length
>0)
{
WebProxy loProxy = new WebProxy( Search.proxyAddress ,true);
loProxy.Credentials = new NetworkCredential(Search.proxyUserName ,Search.proxyPassword);
searchRequest.Proxy = loProxy;
}
searchRequest.ContentType
= "application/x-www-form-urlencoded";
System.Text.UTF8Encoding
encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(searchParams);
searchRequest.ContentLength = bytes.Length;
try
{
Stream
requestStream = searchRequest.GetRequestStream();
requestStream.Write(bytes,
0, bytes.Length);
requestStream.Close();
results = GetSearchResults(searchRequest);
}
catch (WebException ex)
{
System.Diagnostics.Debug.Write(ex.Message
+ex.StackTrace ) ;
}
return results;
}
private
static string GetSearchResults(HttpWebRequest searchRequest)
{
string
results = string.Empty;
HttpWebResponse searchResponse;
searchResponse
=
(HttpWebResponse)searchRequest.GetResponse();
Stream receiveStream
= searchResponse.GetResponseStream();
System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(receiveStream, encode);
Char[]
read = new Char[256];
int count = readStream.Read(read, 0, 256);
while
(count > 0)
{
String str = new String(read, 0, count);
results
+= str;
count = readStream.Read(read, 0, 256);
}
searchResponse.Close();
return results;
}
}
}
Submission
Date: 10/23/2005 3:56:57 PM
Submitted By: Peter
Bromberg
My Home Page: http://www.eggheadcafe.com