Преобразователь/обертка JSONP онлайн

Я хотел бы выбрать источник файла и перенести его в JSONP.

Например, я хочу получить pets.txt как текст от хоста, которым я не владею. Я хочу сделать это при помощи только клиентского JavaScript.

Я ищу онлайн-сервис, который может преобразовать что-либо в JSONP.


YQL

Язык запросов Yahoo является одним из них.

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://elv1s.ru/x/pets.txt"&format=json&callback=grab

Это работает, если URL не заблокирован robots.txt. YQL испытывают уважение к robots.txt. Я не могу выбрать http://userscripts.org/scripts/source/62706.user.js, потому что это заблокировалось с помощью robots.txt.

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://userscripts.org/scripts/source/62706.user.js"&format=json&callback=grab

"запрещенный": "robots.txt для домена запрещает проверку для URL: http://userscripts.org/scripts/source/62706.user.js"


Таким образом, я ищу другого решения.

6
задан NVI 30 June 2015 в 07:43
поделиться

3 ответа

Я построен jsonpwrapper.com .

Это нестабильно и медленнее, чем YQL, но он не заботится о ROBOTS.TXT.

5
ответ дан 17 December 2019 в 04:47
поделиться

Nononono. Это не JSONP, это javascript, который выполняет функцию с объектом в качестве параметра, который содержит больше javascript. Ааа!

Это JSON, потому что это только один объект:

{
    'one': 1,
    'two': 2,
    'three':3
}

Это JSONP, потому что это только один объект, переданный через функцию; если вы перейдете на http://somesite/get_some_object?jsonp=grab, сервер вернет:

grab({
    'one': 1,
    'two': 2,
    'three':3
});

Это вовсе не JSON. Это просто Javascript:

alert("hello");

А это? Javascript-код, хранящийся внутри строки (ouch!) внутри объекта, переданного в функцию, которая должна оценить строку (но может быть, а может и нет):

grab({"body": "alert(\"Hello!\");\n"});

Посмотрите на все эти точки с запятой и обратные слеши! Мне снятся кошмары от таких вещей. Это как плохо написанный макрос Lisp, потому что он намного сложнее, чем должен (и должен!) быть. Вместо этого определите функцию grab в вашем коде:

function grab(message) {
    alert(message.body);
}

и затем используйте JSONP, чтобы сервер вернул:

grab({body: "Hello!"});

Не позволяйте серверу решать, как запускать вашу веб-страницу Вместо этого, позвольте вашей веб-странице решить, как запускать веб-страницу и просто попросите сервер заполнить пустые строки.

Что касается онлайн-службы, которая делает это? Я не знаю ни о какой, извините

.
0
ответ дан 17 December 2019 в 04:47
поделиться
-

Я не уверен, что вы пытаетесь здесь сделать, но никто не будет использовать что-то подобное. Никто не собирается доверять вашим услугам, чтобы всегда выполнять, как следует и вывод ожидается, ожидаемый код JavaScript. Вы видите, что Yahoo делает это, потому что люди доверяют Yahoo, но они не доверяют вам.

-2
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: