2013-02-02 4 views
3

Dictionary.com не предоставляет абсолютно никакой документации о том, как захватывать данные из них. Я пытаюсь использовать jQuery-запросы ajax, но они не работают.Как сделать запрос AJAX API REST Dictionary.com с помощью jQuery?

Они предоставляют URL-адрес, через который я должен быть в состоянии использовать. Я приведу это ниже.

http://api-pub.dictionary.com/v001?vid=<VID>&type=random&site=dictionary 

Они также дают ключ, который я предполагаю, что я помещаю в <VID> месте.

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно с этим? Я предоставлю код, который я использую ниже:

$("#btnGetData").click(function() { 

    $.ajax({ 
    url: "http://api-pub.dictionary.com/", 
    type: "GET", 
    data: "v001?vid=<VID>&type=random&site=dictionary", 
    success: function() { alert("success") }, 
    }); 

}); 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

+0

Вы введете код "" в свой код? Является ли ваш VID действительным? Пробовали ли вы отправлять точный URL-адрес в параметре 'url' (вместо записи строки запроса в параметре' data')? – Marc

+0

Вы проверили сетевого инспектора, чтобы узнать, какой код ошибки HTTP вы получаете? Установить обратный вызов ошибки? Поскольку вы можете просто ввести его в поле URL. -1 для вопроса без сообщений об ошибках, я удалю его, когда вы добавите эту информацию, эй, вы, вероятно, ответите на свой вопрос после того, как посмотрите на эти вещи. –

+0

. Вы пытаетесь использовать инструмент «Слово дня»? , или это для чего-то еще? –

ответ

3

Возможность 1

У вас нет доступа к их API. Согласно их API page, они очень избирательно относятся к тому, кому они предоставляют доступ к их API.

Мы выбираем наши партнеры по API и одобряем использование, а также разрабатываем условия на индивидуальной основе. Если вы заинтересованы в использовании нашего API, свяжитесь с нами напрямую [...].

Возможность 2

Вы блокировано same origin policy. Браузеры, как правило, очень строгие в отношении запросов, сделанных JavaScript в разных доменах. Это можно обойти, используя Cross-origin resource sharing. Это требует настройки сервера, который вы запрашиваете, поэтому в этом случае он не является жизнеспособным.

Лучше всего создать серверный скрипт, который запрашивает URL-адрес, а затем с помощью AJAX запросить файл.

Пример в PHP, давайте назовем это request_dictionary.php:

<?php 

    $vid = "Your API key"; 
    $type = $_GET['type']; 
    $site = $_GET['dictionary']; 

    $request_url = "http://api-pub.dictionary.com/v001?vid=$vid&type=$type&site=$site"; 

    echo file_get_contents($request_url); 

?> 

Примечания: Вы, вероятно, нужно изменить в соответствии с вашими потребностями (обработка ошибок, ошибки 404, кэширование и т.д.). Этот код не проверен.

Затем измените свой jQuery так, чтобы он запрашивал ваш файл.

$("#btnGetData").click(function() { 

    $.ajax({ 
    url: "/request_dictionary.php", 
    type: "GET", 
    data: "type=random&site=dictionary", 
    success: function() { alert("success") }, 
    }); 

}); 

Предупреждение

Использование вызова AJAX без прокси-сервера (как описано в возможности 2) выставит свой ключ API. Это против Dictionary.com's API Terms of Service.

2.1 Dictionary.com назначит и предоставит вашему клиентскому приложению ключ приложения для доступа к API. Все вызовы должны содержать .Ключ приложения уникален , связанный с каждым клиентским приложением и всеми версиями, обновлениями и их обновлениями. Ключ приложения - это конфиденциальная информация , как определено в настоящих Условиях использования. Вы должны поддерживать и хранить Ключ приложения в надежном, встроенном виде, недоступном любому третьему лицу . Ключ приложения полностью может быть отменен Dictionary.com в любое время. Dictionary.com может блокировать попытки доступа к API с недействительным или отмененным Ключом приложения.

Я обновил код в возможность 2 скрыть ключ API, сохраняя его в файле PHP.


Update/Примечание: Просто проходя dataType: 'jsonp' для того, чтобы кросс-происхождения вызовов недостаточно. Ответному серверу необходимо ответить заголовком Access-Control-Allow-Origin, содержащим ваш домен (или правило, которое включает ваш домен). Любая конфигурация такого типа находится вне вашей руки в качестве реквестера.

Обновление/Примечание 2: Изучив возвращенные заголовки с вашего URL-адреса, я не вижу признаков Access-Control-Allow-Origin. Это означает, что даже если у вас есть доступ к их API, вы не сможете получить к нему доступ с помощью AJAX. Полные заголовки ниже:

GET /v001?vid=%3CVID%3E&type=random&site=dictionary HTTP/1.1[CRLF] 
Host:   api-pub.dictionary.com[CRLF] 
Connection:  close[CRLF] 
User-Agent:  Web-sniffer/1.0.44 (+http://web-sniffer.net/)[CRLF] 
Accept-Encoding: gzip[CRLF] 
Accept:   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF] 
Accept-Language: en-US,en;q=0.8[CRLF] 
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF] 
Cache-Control: no-cache[CRLF] 
Referer:   http://web-sniffer.net/[CRLF] 
4

Вы не передаёте данные правильно. Также URL-адрес запроса: http://api-pub.dictionary.com/v001. Попробуйте это:

$("#btnGetData").click(function() { 
    $.ajax({ 
    url: "http://api-pub.dictionary.com/v001", 
    type: "GET", 
    dataType: "jsonp", //For external apis 
    data: {"vid": <VID>, 
      "type":"random" 
      "site": "dictionary"}, 
    success: function() { 
     alert("success") }, 
    }); 
}); 

UPDATE: Может быть, вы блокировано same origin policy как @thordarson записка, в этом случае оный: dataType: "jsonp" к вашему АЯКСУ вызов.

+1

Полностью упущен, что –

+0

@TomSarduy Передача 'dataType: 'jsonp'' недостаточно. Конфигурация необходима на серверах _both_. См. Мое обновление. – thordarson

+0

@thordarson: Я думаю, что это не тот случай, API существует для людей, я сделал это с другими источниками;) –

Смежные вопросы