在线 JSONP 转换器/包装器

Posted

技术标签:

【中文标题】在线 JSONP 转换器/包装器【英文标题】:Online JSONP converter/wrapper 【发布时间】:2011-01-09 01:24:42 【问题描述】:

我想获取文件源并将其包装在 JSONP 中。

例如,我想从我不拥有的主机中检索 pets.txt 作为文本。我想通过只使用客户端 javascript 来做到这一点。

我正在寻找可以将任何内容转换为 JSONP 的在线服务。


YQL

Yahoo Query Language 就是其中之一。

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 有respect to 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

"forbidden":"robots.txt 域禁止抓取 url:http://userscripts.org/scripts/source/62706.user.js"


所以我正在寻找其他解决方案。

【问题讨论】:

“没有这样的jsonpwrapper.com”是什么意思? 我已经更新了问题。我希望现在听起来更合理。 这是我的问题的重复,威尔断言没有建设性:Is there a free JSON proxy server which supports CORS or JSONP? Is there a free JSON proxy server which supports CORS or JSONP?的可能重复 【参考方案1】:

我构建了 jsonpwrapper.com

它比YQL不稳定且慢,但它不关心robots.txt。

【讨论】:

一旦有足够多的用户使用您的包装器,您是否会发疯并入侵每个人的网站 ;) ? 我似乎无法让它与我需要这样一个代理的 JSON 资源一起工作:http://airportcode.riobard.com/airport/FRA?fmt=JSON 您的域是否过期并被停放??【参考方案2】:

这是另一个更快的,基于 DigitalOcean 和 CloudFlare,利用缓存等:http://json2jsonp.com

【讨论】:

【参考方案3】:

诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺诺。不,请;不。那不是 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");

看看那些分号和反斜杠!我从这种东西中得到噩梦。它就像一个写得很糟糕的 Lisp 宏,因为它比它需要(而且应该!)复杂得多。相反,请在您的代码中定义一个名为 grab 的函数:

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

然后使用 JSONP 让服务器返回:

grab(body: "Hello!");

不要让服务器决定如何运行您的网页 相反,让您的网页决定如何运行网页并让服务器填写空白。

至于这样的在线服务?我不知道,对不起

【讨论】:

哦,我的例子真的很糟糕。我已将 elv1s.ru/x/hello.js 替换为 elv1s.ru/x/hi.txt OHHHHHHHHHHHH 哦哦哦!你只是想包装一个文件,而不是更多的 javascript。对不起,那次卑鄙的小讲座,我现在看到了。【参考方案4】:

我不确定你想在这里做什么,但没有人会使用这样的东西。没有人会相信您的服务始终按应有的方式执行并输出预期的 JavaScript 代码。你看到雅虎这样做是因为人们信任雅虎,但他们不会信任你。

【讨论】:

获取源代码 (github.com/NV/jsonpwrapper.com) 并自行托管。

以上是关于在线 JSONP 转换器/包装器的主要内容,如果未能解决你的问题,请参考以下文章

如何将围绕 C++ 函数的 R 包装器转换为 Python/Numpy

将包含 POD 的包装器结构数组转换为它包含的 POD 类型数组是不是合法?

如何将 OpenCV 的 MatExpr 的 C 包装器的指针输出转换回 MatExpr

从Integer包装器类转换为int基本类

将 WCF 转换为 WEB API:在 WEB API 中使用包装器重用 WCF 服务是个好主意吗?

typescript Angular 2应用程序角色访问装饰器,包装内置CanAccess功能。当用户角色不是ap时,防止视图转换