【问题标题】:Getting page source from remote location almost works - just need to get the result into a variable从远程位置获取页面源几乎可以工作 - 只需将结果放入变量中
【发布时间】:2015-01-16 23:24:09
【问题描述】:

通过以前的帖子和其他搜索的结果,我似乎能够得到我想要的,但它似乎是一个数据对象,而不是我可以分配给变量的文本。

我在我工作的环境中仅限于 javascript,我想做的是对返回的数据使用字符串函数,以便我可以搜索某些术语。

这是返回数据对象的 url 格式 - 结果是要求您打开或保存文本文件:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20%3D%20%22http://www.redrag.info/index.htm%22%20and%20xpath%3D%22*%22&format=xml&callback=cbfunc

(如果您愿意,您可以用您自己的网址替换我的网址 - http://www.redrag.info/index.htm - 在上面的示例中)

我可以使用一些 javascript 文档函数将此输出分配给变量,而不是打开文本文件吗?

谢谢。

【问题讨论】:

  • 欢迎来到 StackOverflow (SO)!您说获取页面源几乎有效,但问题中没有证据表明这一点。请附上您尝试使用的代码以及遇到的错误。
  • 嗨@Artjom B.-“几乎可以工作”我的意思是它几乎实现了我的目标-如果您打开它提供的URL来保存文本文件或打开记事本并在我什么时候显示它想要做的是将此文本分配给变量

标签: javascript


【解决方案1】:

删除callback=cbfunc 并定义你的回调函数。您可以将format=jsonformat=xml 更改,因为它易于处理。现在您可以获取数据并使用该数据做任何您想做的事情

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20%3D%20%22http://www.redrag.info/index.htm%22%20and%20xpath%3D%22*%22&format=json",
function(data) {
    alert(data);
}
);

http://jsfiddle.net/kriyeta/Lo3m4gb2/4/

【讨论】:

  • 完美运行 - 感谢您的贡献 - 非常感谢
  • 您好@kriyeta - 有没有一种方法可以在不使用 jquery 库的情况下获得相同的结果,因为我的一个目标 url 在它检测到 jquery.js 时因某种原因而失败
  • @RedRag 在this post已经有很好的解释了
  • 感谢@kriyeta,我检查了您建议的帖子并制作了几个 jsfiddles - 第一个使用 jquery 库工作 - jsfiddle.net/redrag/kxswvx8d 然后另一个使用来自的代码在没有 jquery 的情况下进行测试发布您建议设置“无库”的帖子 - jsfiddle.net/redrag/kxswvx8d/16 不会产生结果,所以也许我误解了如何应用该帖子中的代码?
【解决方案2】:

这需要JSONP(将响应解析为内联脚本),使用 jQuery 之类的库很简单:

$.ajax({
  url: the_url,
  jsonpCallback: 'cbfunc',
  dataType: 'jsonp'
})
.success(function(data) {
    alert(data.query.created);
});

http://jsfiddle.net/alexk/92erv4v5/

【讨论】:

  • 嗨@Alex,谢谢你,尽管我无法在 jsfiddle 中使用它。
  • 我明白了 - 我在你的 jsfiddle 中将 alert(data.query.created) 更改为 alert(JSON.stringify(data) 并看到它确实有效。谢谢
【解决方案3】:

除了上面来自@kriyeta 的第一个答案,我的代码运行良好,如下代码段所示:

    <html>
    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    </head>
    <body>
    <script>
    var inputxt="http://www.redrag.info/index.htm";
    var pagesrc;

    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%20%3D%20%22"+inputxt+"%22%20and%20xpath%3D%22*%22&format=json",
    function(data) {
    pagesrc=JSON.stringify(data);
    alert(pagesrc);
    }
    );
    </script>
    </body>
    </html>

但是当我用作目标 URL 时:https://ajax.googleapis.com/ajax/services/search/images?v=1.0%26q=DOG(如果您将其放入浏览器地址栏中以查看实际页面,则需要将 %26 更改回 &)我收到“疑似服务条款滥用” ' 消息,因为我认为 Google 可以确定它是自动请求而不是人工请求。

我想要实现的是一个脚本,我可以将它与我目前正在开发知识库的 AI 虚拟助手设施一起使用。如果 google url 没有失败,那么上面的代码就是我需要的。

这是为了回答访问者的请求,例如“给我看一张狗的照片”。另一个人工智能机器人——https://ask.pannous.com/ 的“Jeanie”正是这样做的——当被问到同样的问题时,它会从(我假设)谷歌图片中检索一张图片——所以我知道它可以做到,我很想有一个类似的设施。

我想如果我能找到一个不依赖 jQuery 库的解决方案,那么它可能会起作用。

感谢任何想法。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多