В настоящее время я работаю над веб-приложением, которое позволяет подписчикам API Zillow делать запросы к API Zillow на моем веб-сайте и иметь возможность загружать данные свойств в формате csv. Мое веб-приложение требует, чтобы пользователи независимо регистрировались в Zillow, чтобы получить свой ключ API (ZWSID), который требуется для каждого вызова API, и Zillow ограничивает подписчиков 1000 запросами в день. Поэтому мое веб-приложение отправляет запросы API от имени пользователя и форматирует данные для загрузки пользователем (это не является нарушением условий Zillow API).
Проблема, с которой я сталкиваюсь, состоит в том, что каждый запрос к Zillow API, скорее всего, будет включать мой URL в качестве источника запроса (и, возможно, агента пользователя или HTTP-хоста). Я обеспокоен тем, что это будет помечено и что Zillow будет блокировать все запросы с моего сайта, даже если они сделаны от имени моих пользователей. Есть ли способ связать запрос API с человеком, использующим мой сайт, и удалить мой сайт как источник? Другими словами, могу ли я предотвратить включение моего сайта в заголовок запроса? Детали смотрите ниже.
Поскольку запросы API выполняются от имени пользователей, запросы к API Zillow выполняются на внешнем интерфейсе (с использованием Ajax). Чтобы преодолеть ошибку запроса перекрестного источника при использовании Ajax, мне пришлось импортировать файл ./jquery-cross.js.
Функция, которую я должен сделать запрос к Zillow API, выглядит следующим образом:
import $ from 'jquery'
import './jquery-cross.js'
const getReqWithSuccess = function(street, city, state) {
return $.ajax({
crossOrigin: true,
url: `http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=X1-ZWz18mqy7m1ibv_ahuyo&address=${street}&citystatezip=${city}%2C+${state}&rentzestimate=true`,
dataType: 'xml',
method: 'GET'
});
};
JQuery-cross.js:
import jQuery from 'jquery'
var proxyJsonp = "https://script.google.com/macros/s/AKfycbwmqG55tt2d2FcT_WQ3WjCSKmtyFpkOcdprSITn45-4UgVJnzp9/exec";
jQuery.ajaxOrig = jQuery.ajax;
jQuery.ajax = function(a, b) {
function d(a) {
a = encodeURI(a).replace(/&/g, "%26");
return proxyJsonp + "?url=" + a + "&callback=?"}
var c = "object" === typeof a ? a : b || {};
c.url = c.url || ("string" === typeof a ? a : "");
var c = jQuery.ajaxSetup({}, c),
e = function(a, c) {
var b = document.createElement("a");
b.href = a;
return c.crossOrigin && "http" == a.substr(0, 4).toLowerCase() && "localhost" != b.hostname && "127.0.0.1" != b.hostname && b.hostname != window.location.hostname
}(c.url, c);
c.proxy && 0 < c.proxy.length && (proxyJsonp = c.proxy, "object" === typeof a ?
a.crossDomain = !0 : "object" === typeof b && (b.crossDomain = !0));
e && ("object" === typeof a ? a.url && (a.url = d(a.url), a.charset && (a.url += "&charset=" + a.charset), a.dataType = "json") : "string" === typeof a && "object" === typeof b && (a = d(a), b.charset && (a += "&charset=" + b.charset), b.dataType = "json"));
return jQuery.ajaxOrig.apply(this, arguments)
};
jQuery.ajax.prototype = new jQuery.ajaxOrig;
jQuery.ajax.prototype.constructor = jQuery.ajax;
API Call
У меня ограниченные знания PHP, но похоже, что запросы следуют этому формату.
Пример вызова API (на веб-сайте Zillow API) выглядит следующим образом (где ZWSID — это ключ подписчика Zillow):
http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=<ZWSID>&address=2114+Bigelow+Ave&citystatezip=Seattle%2C+WA
Ответ API
Вывод возвращается в XML:
<SearchResults:searchresults xsi:schemaLocation="http://www.zillow.com/static/xsd/SearchResults.xsd /vstatic/ae1bf8a790b67ef2e902d2bc04046f02/static/xsd/SearchResults.xsd">
...
</SearchResults:searchresults>
Я открыт для любых идей или обходного пути, чтобы удалить веб-сайт как связанный с запросом API. Спасибо за вашу помощь.
Задача ещё не решена.
Других решений пока нет …