كيفية إرسال البيانات إلى مكالمة API واحصل عليها مرة أخرى، باستخدام API Zillow.com

StackOverflow https://stackoverflow.com/questions/1090659

  •  11-09-2019
  •  | 
  •  

سؤال

أحاول الحصول على API من موقع ويب يسمى Zillow العمل بالنسبة لي، لكنني بالطريقة الجديدة لأشياء الويب. يحاولون وشرح هنا كيفية استخدامه، لكنني فقدتني لذلك نظرت في منتدياتهم. قام شخص ما بنشر "مثال" هناك، لكنني لا أستطيع أن أرى أين يدعو التعليمات البرمجية إلى API. في الأساس أحتاج إلى أخذ حقل النموذج سيكون عنوانا وإرسال هذه المعلومات للحصول على البيانات مرة أخرى، إليك التعليمات البرمجية المصدرية التي تم التقاطها من مثال اللاعبين،

<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>

يمكنك أن ترى أنه مجرد نموذج بسيط ينشر بنفسه؟ ولكن عندما تضغط على الذهاب، يسحب البيانات من API ويعرضها، لكنني لا أرى كيف. أحب أي مساعدة يمكنك تقديمها، شكرا لك!

هل كانت مفيدة؟

المحلول

مرتكز على http://www.zillow.com/howto/api/apifaq.htm#devkit., ، لا يوجد جافا سكريبت API. بسبب هذه القيود المفروضة عبر المجال)، يجب عليك استخدام لغة جانب الخادم. سأضيف مثال جافا بسيط.

تحرير: حسنا، هنا يذهب. يأخذ فقط عنوان الشارع والمدينة / الدولة، ويعيد قيمة منسقة. التحقق من الأخطاء المتبقية:

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));
    }
}

نصائح أخرى

ناهح ... بهذه الطريقة أسهل بكثير :-)

بناء وظيفتين واستخدامها مثل هذا ل zillow. الرد الذي يعود هو سهل جدا.

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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top