2009-07-07 16 views
5

Estoy intentando que la API de un sitio web llamado zillow me funcione, pero soy muy nuevo en materia de web. Intentan explicar here cómo usarlo, pero me había perdido, así que miré en sus foros. Alguien publicó un "ejemplo" allí, pero no puedo ver dónde su código llama a la API. Básicamente necesito tomar un campo de formulario que va a ser una dirección para enviar esa información para obtener datos de nuevo, aquí está el código fuente tomada del ejemplo chicos,Cómo enviar datos a una llamada API y recuperarlos, usando la API de zillow.com

<html xml:lang="en" lang="en"> 
<head> 
    <title></title> 
</head> 
<body> 
<h3><font face="Verdana, Arial, Helvetica, sans-serif">Get Property < # >Zestimates 
    from Zillow</a></font></h3> 
<form method="post" action="/Real-Estate/Zestimate.php" name="zip_search"> 
    <table align="center" width="618"> 
    <tr> 
     <td colspan="2"><font face="verdana, arial, sans-serif">Please specify the 
     Property address. </font></td> 

     <td width="205" align="left"> <div align="left"><font face="Verdana, Arial, Helvetica, sans-serif"><#></a></font></div></td> 
    </tr> 
    <tr> 
     <td colspan="2"><font face="Verdana, Arial, Helvetica, sans-serif">Street</font>: 
     <input id="street2" type="text" maxlength="50" size="50" value="" name="street"/></td> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td colspan="2"><font face="verdana, arial, sans-serif">City, State or ZipCode:</font> 
     <input id="citystatezip3" type="text" maxlength="50" size="20" value="" name="citystatezip"/></td> 

     <td>&nbsp; </td> 
    </tr> 

    </table> 
    <div align="center"> 
    <input name="submit" type="submit" value="Get Zestimate"> 
    </div> 
</form> 

Se puede ver que es sólo una forma simple que mensajes a sí mismo ¿verdad? Pero cuando presiono ir, extrae los datos de la API y los muestra, pero no veo cómo. Me encantaría cualquier ayuda que pueda ofrecer, ¡gracias!

+0

¿Puedes enlazar a la entrada del foro de la que estás hablando? –

Respuesta

5

Basado en http://www.zillow.com/howto/api/APIFAQ.htm#devkit, no hay API de JavaScript. Debido a esto (y restricciones entre dominios), debe usar un lenguaje del lado del servidor. Agregaré un simple ejemplo de Java.

EDITAR: Bien, aquí va. Simplemente toma la dirección y la ciudad/estado, y devuelve un valor formateado. Comprobación de errores dejado fuera:

import java.text.NumberFormat; 

import org.w3c.dom.*; 
import org.xml.sax.*; 

import javax.xml.parsers.*; 

import javax.xml.transform.*; 
import javax.xml.transform.dom.*; 
import javax.xml.transform.stream.*; 

import java.io.*; 

import java.util.Currency; 

public class Zillow 
{ 
    private static final DocumentBuilderFactory dbFac; 
    private static final DocumentBuilder docBuilder; 
    static 
    { 
     try 
     { 
      dbFac = DocumentBuilderFactory.newInstance(); 
      docBuilder = dbFac.newDocumentBuilder(); 
     } 
     catch(ParserConfigurationException e) 
     { 
      throw new RuntimeException(e); 
     } 
    } 
    private static final String DEEP_URL = "http://www.zillow.com/webservice/GetDeepSearchResults.htm"; 
    private static final String ZESTIMATE_URL = "http://www.zillow.com/webservice/GetZestimate.htm"; 

    private static final String ZWSID = ...; 

    private static final NumberFormat nf = NumberFormat.getCurrencyInstance(); 

    // Returns Zestimate value for address. 
    public static String getValuation(String address, String cityStateZip) throws SAXException, IOException 
    { 
     Document deepDoc = docBuilder.parse(DEEP_URL + 
             "?zws-id=" + ZWSID + 
             "&address=" + address + 
             "&citystatezip=" + cityStateZip); 
     Element firstResult = (Element)deepDoc.getElementsByTagName("result").item(0); 
     String zpid = firstResult.getElementsByTagName("zpid").item(0).getTextContent(); 
     Document valueDoc = docBuilder.parse(ZESTIMATE_URL + 
              "?zws-id=" + ZWSID + 
              "&zpid=" + zpid); 
     Element zestimate = (Element)valueDoc.getElementsByTagName("zestimate").item(0); 
     Element amount = (Element)zestimate.getElementsByTagName("amount").item(0); 
     String currency = amount.getAttribute("currency"); 
     nf.setCurrency(Currency.getInstance(currency)); 
     return nf.format(Double.parseDouble(amount.getTextContent())); 
    } 

    public static void main(String[] args) throws Throwable 
    { 
     String address = args[0]; 
     String cityStateZip = args[1]; 
     System.out.println(getValuation(address, cityStateZip)); 
    } 
} 
+0

Hombre impresionante, muchas gracias. Terminé usando PHP para hacer esto como lo sé mejor. – thatryan

+3

Cool. Es posible que desee publicar su código PHP para el beneficio de futuros buscadores. –

+1

Muchas gracias Matthew Flaschen. Usted ha dado el código completo de Java. Lo mismo que he usado sin modificar funciona bien. Increíble.! Estoy votando ... –

0

Nahhh ... de esta manera es mucho más fácil :-)

construir dos funciones y utilizarlos como esto para Zillow. La respuesta que regresa es muy clara.

string zWsid = "yourZwsid"; 
// sample API Call 
// http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=<ZWSID>&address=2114+Bigelow+Ave&citystatezip=Seattle%2C+WA 

string response = string.Empty; 
int iZpid = 0; 
int iLotSizeSqFoot = 0; 
int iHomeValue = 0; 
float estimate = 0; 

try { 
    response = web_url("http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=" + zWsid + "&address=" + addressTB.Text + "&citystatezip=" + CityStateZipTB.Text); 
} catch (Exception ex) { 
    MessageBox.Show("Exception occured! " + ex.ToString()); 
} 


// MessageBox.Show(response); 
try { 
    iZpid = Int32.Parse(parseTag(response, "zpid")); 
} 


/// you can make a lot of the calls and catch a lot of the values back just like this :-) 

///// Functions///// 

private string parseTag(string response, string tag) { 

    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(response); 
    XmlNodeList elemList = doc.GetElementsByTagName(tag); 
    string parsedTag = elemList[0].InnerXml; 
    return parsedTag; 

} 

private string web_url(string url) { 

    // Create a request for the URL. 
    WebRequest request = WebRequest.Create(url); 

    // If required by the server, set the credentials. 
    request.Credentials = CredentialCache.DefaultCredentials; 

    // Get the response. 
    WebResponse response = request.GetResponse(); 

    // Display the status. 
    // MessageBox.Show(((HttpWebResponse)response).StatusDescription); 
    // Get the stream containing content returned by the server. 
    Stream dataStream = response.GetResponseStream(); 

    // Open the stream using a StreamReader for easy access. 
    StreamReader reader = new StreamReader(dataStream); 

    // Read the content. 
    string responseFromServer = reader.ReadToEnd(); 

    // Display the content. 
    // MessageBox.Show(responseFromServer); 
    // Clean up the streams and the response. 
    reader.Close(); 
    response.Close(); 

    return responseFromServer; 
} 
Cuestiones relacionadas