Anyway, since I spent a couple of hours traying to get familiar with the system I decided to share it with you.
The API is so simple, just send few GET HttpRequest and Handle the Xml response.The squencve is as follows:
- Send request with the developer key to get the sessionID.
- Make another request using that sessionID to get the searchID.
- Make last request using both sessionID, searchID and search criteria in the query string.
The Url for each request and query string paramaters are documented in the API Specs .
Here is a simple page with a gridview and a button to grab some data using this API. I didn't consider error handling in the code since you all can do. This is a very simple implementation for the API to be able to get started.
You will need to change the DEVELOPERKEY in the first url with the key you get from the site.
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Net;
using System.IO;
using System.Xml;
using System.Collections.Generic;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string xmlResult = MakeRequst("http://api.kayak.com/k/ident/apisession?token=YOUR TOKEN");
string sid = GetRequiredId(xmlResult, "sid");
xmlResult = MakeRequst("http://www.kayak.com/s/apisearch?basicmode=true&oneway=n&origin=BOS&destination=SFO&destcode=&depart_date=05/09/2008&depart_time=a&return_date=05/13/2008&return_time=a&travelers=2&cabin=b&action=doflights&apimode=1&_sid_=" sid);
string searchId = GetRequiredId(xmlResult, "searchid");
xmlResult = MakeRequst("http://www.kayak.com/s/basic/flight?searchid=" searchId "&c=10&apimode=1&_sid_=" sid);
List<Leg> legs = GetAllLegs(xmlResult);
if (legs != null)
{
GridView1.DataSource = legs;
GridView1.DataBind();
}
}
//Get sessionId and searchId
private string GetRequiredId(string xml, string idName)
{
string id = "";
XmlDataDocument doc = new XmlDataDocument();
doc.LoadXml(xml);
XmlNodeList nodes = doc.GetElementsByTagName(idName);
if (nodes != null && nodes.Count > 0)
id = nodes[0].InnerText;
return id;
}
//Make required request
private string MakeRequst(string requestUrl)
{
System.Net.HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string xmlText = reader.ReadToEnd();
return xmlText;
}
//Get a list of Leg objects.
private List<Leg> GetAllLegs(string responseXml)
{
XmlDataDocument doc = new XmlDataDocument();
doc.LoadXml(responseXml);
List<Leg> legs = new List<Leg>();
XmlNodeList legNodes = doc.GetElementsByTagName("leg");
foreach (XmlNode legNode in legNodes)
{
Leg leg = new Leg();
for(int i=0;i<legNode.ChildNodes.Count;i )
{
if (legNode.ChildNodes[i].Name == "airline_display")
leg.AirLine = legNode.ChildNodes[i].InnerText;
else if (legNode.ChildNodes[i].Name == "orig")
leg.Origin = legNode.ChildNodes[i].InnerText;
else if (legNode.ChildNodes[i].Name == "dest")
leg.Dest = legNode.ChildNodes[i].InnerText;
else if (legNode.ChildNodes[i].Name == "depart")
leg.Depart = Convert.ToDateTime(legNode.ChildNodes[i].InnerText);
else if (legNode.ChildNodes[i].Name == "arrive")
leg.Arrive = Convert.ToDateTime(legNode.ChildNodes[i].InnerText);
else if (legNode.ChildNodes[i].Name == "stops")
leg.Stops = Convert.ToInt32(legNode.ChildNodes[i].InnerText);
else if (legNode.ChildNodes[i].Name == "duration_minutes")
leg.Duration = Convert.ToInt32(legNode.ChildNodes[i].InnerText);
else if (legNode.ChildNodes[i].Name == "cabin")
leg.Cabin = legNode.ChildNodes[i].InnerText;
}
legs.Add(leg);
}
return legs;
}
}
// Leg class represents part of the returned XML
class Leg
{
private string airLine, origin, dest, cabin;
int stops, duration;
private DateTime depart, arrive;
public string AirLine
{
get { return airLine; } set { airLine = value; }
}
public string Origin
{
get { return origin; } set { origin = value; }
}
public string Dest
{
get { return dest; } set { dest = value; }
}
public string Cabin
{
get { return cabin; } set { cabin = value; }
}
public int Stops
{
get { return stops; } set { stops = value; }
}
public int Duration
{
get { return duration; } set { duration = value; }
}
public DateTime Depart
{
get { return depart; } set { depart = value; }
}
public DateTime Arrive
{
get { return arrive; }
set { arrive = value; }
}
}
7 comments:
You should try the hotelscombined.com api. It works perfectly and has no usage limitations.
It seems the problem is, you're not accepting API's cluster cookie; hence search request hits a different node in the cluster, and thus it appears as if you had no active session.
[B]NZBsRus.com[/B]
Dont Bother With Slow Downloads Using NZB Files You Can Easily Find High Quality Movies, Games, MP3 Albums, Applications & Download Them @ Fast Rates
[URL=http://www.nzbsrus.com][B]Newsgroup Search[/B][/URL]
It isn't hard at all to start making money online in the hush-hush world of [URL=http://www.www.blackhatmoneymaker.com]blackhat twitter[/URL], Don’t feel silly if you have no clue about blackhat marketing. Blackhat marketing uses alternative or little-understood ways to generate an income online.
I have been visiting various blogs for my term papers writing research. I have found your blog to be quite useful. Keep updating your blog with valuable information... Regards
I am thoroughly convinced in this said post. I am currently searching for ways in which I could enhance my knowledge in this said topic you have posted here. It does help me a lot knowing that you have shared this information here freely. I love the way the people here interact and shared their opinions too. I would love to track your future posts pertaining to the said topic we are able to read.
top [url=http://www.xgambling.org/]online casinos[/url] coincide the latest [url=http://www.realcazinoz.com/]free casino[/url] free no set aside reward at the foremost [url=http://www.baywatchcasino.com/]no lay down bonus
[/url].
Post a Comment