Yahoo! search interface: Difference between revisions

From Rosetta Code
Content added Content deleted
(added c#)
No edit summary
Line 80: Line 80:
this.Title = title;
this.Title = title;
this.Content = content;
this.Content = content;
}
}</lang>

Usage:

<lang csharp>class Program {
static void Main() {
GoogleSearch search = new GoogleSearch("rosetta code");

foreach (GoogleResult result in search.Results) {
Console.WriteLine(result.Title);
}
}
}
}</lang>
}</lang>

Revision as of 02:35, 3 May 2009

Task
Yahoo! search interface
You are encouraged to solve this task according to the task description, using any language you may know.

Create a class for searching Google results. It must implement a Next Page method, and read URL, Title and Content from results.

C#

<lang csharp>using System; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Collections; using System.Collections.Generic; using System.Linq;

class GoogleSearch {

   private string query;
   private string content;
   private int page = 1;
   public GoogleSearch(string query) {
       this.query = query;
       this.content = new WebClient().DownloadString("http://www.google.com/search?q=" + query);
   }
   public GoogleSearch(string query, int page) {
       this.query = query;
       this.page = page;
       this.content = new WebClient().DownloadString(String.Format("http://www.google.com/search?q={0}&start={1}", query, (this.page - 1) * 10));
   }
   public int Page {
       get {
           return this.page;
       }
   }
   public int Length {
       get {
           return Int32.Parse(new Regex("Results \\d+? - \\d+? of about (.+?)").
               Match(this.content).Groups[1].Value.Replace(",", ""));
       }
   }
   public GoogleResult[] Results {
       get {
           ArrayList results = new ArrayList();

foreach (Match e in new Regex("

  • <a href=\"(.+?)\".+?>(.+?)</a>

    (.+?)").Matches(this.content)) {
                   string rurl = e.Groups[1].Value;
    
                   string rtitle = e.Groups[2].Value.
                       Replace("", "").Replace("", "").Replace(" ...","");
                   string rcontent = e.Groups[3].Value.
                       Replace("", "").Replace("", "").Replace(" ...", "");
    
                   Console.WriteLine(rurl);
                   results.Add(new GoogleResult(rurl, rtitle, rcontent));
               }
               return (GoogleResult[])results.ToArray(typeof(GoogleResult));
           }
       }
    
       public GoogleSearch NextPage() {
           return new GoogleSearch(this.query, this.page + 1);
       }
    
       public GoogleSearch GetPage(int page) {
           return new GoogleSearch(this.query, page);
       }   
    

    }

    class GoogleResult {

       public string URL { get; set; }
       public string Title { get; set; }
       public string Content { get; set; }
    
       public GoogleResult(string url, string title, string content) {
           this.URL = url;
           this.Title = title;
           this.Content = content;
       }
    

    }</lang>

    Usage:

    <lang csharp>class Program {

       static void Main() {
           GoogleSearch search = new GoogleSearch("rosetta code");
    
           foreach (GoogleResult result in search.Results) {
               Console.WriteLine(result.Title);
           }
       }
    

    }</lang>