using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using GoogleWebService;
namespace EaseSoft.Utitlity
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class EaseSearch: System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataList DataList1;
protected System.Web.UI.WebControls.LinkButton PrevPage;
protected System.Web.UI.WebControls.DataList DataList2;
protected System.Web.UI.WebControls.LinkButton NextPage;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.TextBox SearWords;
protected System.Web.UI.WebControls.Button Search;
protected System.Web.UI.WebControls.Label Results;
protected System.Web.UI.HtmlControls.HtmlForm frmSiteSearch;
protected System.Web.UI.WebControls.Label GoogleKey;
protected System.Web.UI.WebControls.Label Domain;
int PageRows=10;
public GoogleSearchResult GoogleSearch(string keywords,int
record)
{
string key=GoogleKey.Text;//"IBl1dkdQFHJa8VQknkvdWudugS4TY3o0";
GoogleSearchService s = new GoogleSearchService();
GoogleSearchResult r = s.doGoogleSearch(key, keywords,
record, PageRows, false, "", false, "",
"", "");
return r;
}
private void Page_Load(object sender, System.EventArgs
e)
{
if (!IsPostBack)
{
this.SetCurrentRecord(0);
Results.Visible=false;
PrevPage.Visible=false;
NextPage.Visible=false;
// DisplayResult(0);
}
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form
Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SearWords.TextChanged += new System.EventHandler(this.SearWords_TextChanged);
this.Search.Click += new System.EventHandler(this.Search_Click);
this.PrevPage.Click += new System.EventHandler(this.PrevPage_Click);
this.DataList2.ItemCommand += new System.Web.UI.WebControls.DataListCommandEventHandler(this.DataList2_ItemCommand);
this.DataList2.SelectedIndexChanged += new System.EventHandler(this.DataList2_SelectedIndexChanged);
this.NextPage.Click += new System.EventHandler(this.NextPage_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void DisplayResult(int record)
{
int pages;
int estResults,i;
int maxpages=10;
string keywords;
keywords= "site:"+Domain.Text+ " "+SearWords.Text
;
GoogleSearchResult r = GoogleSearch(keywords,record);
estResults = r.estimatedTotalResultsCount;
Results.Text = "Total Results Found:"+Convert.ToString(estResults);
DataTable Resdt = new DataTable();
DataRow Resdr;
Resdt.Columns.Add(new DataColumn("Order", typeof(string)));
Resdt.Columns.Add(new DataColumn("URL", typeof(string)));
Resdt.Columns.Add(new DataColumn("title", typeof(string)));
Resdt.Columns.Add(new DataColumn("snippet", typeof(string)));
Resdt.Columns.Add(new DataColumn("cachedSize",
typeof(string)));
i=0;
foreach(ResultElement Res in r.resultElements)
{
i++;
Resdr = Resdt.NewRow();
if(Res.title.Trim()=="")
{
i--;
continue;
}
else
Resdr[0] = i.ToString();
Resdr[1]= Res.URL;
Resdr[2]= Res.title;
Resdr[3]= Res.snippet;
Resdr[4]= Res.cachedSize;
Resdt.Rows.Add(Resdr);
}
DataList1.DataSource =new DataView(Resdt);;
DataList1.DataBind();
pages=estResults/PageRows;
int currentpage = record/PageRows ;
int firstpage=0;
int lastpage=currentpage;
if(currentpage>pages)
SetCurrentRecord(pages*PageRows);
if(pages<=maxpages)
{
firstpage=0;
lastpage=pages+1;
}
else
{
if(currentpage+maxpages/2>pages)
{
lastpage=pages;
firstpage=pages-maxpages;
}
else
{
if((currentpage-maxpages/2)>0)
{
firstpage=currentpage-maxpages/2;
}
else
firstpage=0;
if((currentpage+maxpages/2)>pages)
lastpage=pages;
else
{
lastpage=currentpage+maxpages/2;
if((lastpage-firstpage)<maxpages)
lastpage=firstpage+maxpages;
}
}
}
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("Key", typeof(Int32)));
for(i=firstpage+1;i<lastpage+1;i++)
{
if(pages==0)
break;
dr = dt.NewRow();
dr[0] = i;
dt.Rows.Add(dr);
}
this.SetFirstPage(firstpage);
this.SetCurrentRecord(record);
if(currentpage==0)
PrevPage.Visible=false;
else
PrevPage.Visible=true;
if((currentpage==lastpage-1)||(pages==0))
NextPage.Visible=false;
else
NextPage.Visible=true;
DataList2.DataSource=new DataView(dt);
DataList2.DataBind();
}
private void Search_Click(object sender, System.EventArgs
e)
{
Results.Visible=true;
PrevPage.Visible=true;
NextPage.Visible=true;
DisplayResult(0);
}
private int GetViewState(string name)
{
return Int32.Parse(ViewState[name].ToString());
}
private void SetCurrentRecord(int record)
{
if (record < 0) record = 0;
ViewState["CurrentRecord"]= Convert.ToString(record);
}
private void SetFirstPage(int page)
{
if (page < 0) page = 0;
ViewState["FirstPage"]= Convert.ToString(page);
}
private void PrevPage_Click(object sender, System.EventArgs
e)
{
int record = GetViewState("CurrentRecord") - PageRows;
if(record<0)
record=0;
this.DisplayResult(record);
}
private void NextPage_Click(object sender, System.EventArgs
e)
{
int record = GetViewState("CurrentRecord") + PageRows;
this.DisplayResult(record);
}
private void DataList2_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs
e)
{
int page = GetViewState("FirstPage") ;
this.DisplayResult((page+e.Item.ItemIndex)*PageRows);
}
private void DataList2_SelectedIndexChanged(object sender,
System.EventArgs e)
{
}
private void SearWords_TextChanged(object sender, System.EventArgs
e)
{
DisplayResult(0);
}
}
}