Онлайн конвертер JSONP / оболочка - PullRequest
6 голосов
/ 25 января 2010

Я хотел бы получить источник файла и обернуть его в 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"


Так что я ищу другие решения.

Ответы [ 4 ]

5 голосов
/ 26 января 2010

Я построил jsonpwrapper.com .

Он нестабилен и медленнее, чем YQL, но его не волнует robots.txt.

2 голосов
/ 02 июня 2013

Вот еще один, гораздо более быстрый, построенный на DigitalOcean & CloudFlare с использованием кэширования и др.: http://json2jsonp.com

0 голосов
/ 26 января 2010

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-код, хранящийся внутри строки (ой!) Внутри объекта, переданного функции, которая должна оценивать строку (но может или не может):

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

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

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

, а затем используйте JSONP для возврата сервера:

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

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

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

0 голосов
/ 26 января 2010

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

...