如何通过Jquery获取页面打开图元数据

如何通过Jquery获取页面打开图元数据,jquery,ajax,facebook-opengraph,Jquery,Ajax,Facebook Opengraph,用户可以在我的网站的文本框中粘贴URL。 当他们这样做时,我希望通过jQueryAjax获取URL并从中读取opengraph元数据。 我该怎么做 我读过这篇文章,但其中的链接已断开,它比我需要的更高级,而不是在jQuery中:) 除了opengraph元数据,我不需要其他任何东西,因此不需要解析结构等 下面是一个页面示例: 所以我想提取的字段之一是,确切地说是值http://i.ebayimg.com/images/i/281656969697-0-1/s-l1000.jpg 我现在拥有的是从

用户可以在我的网站的文本框中粘贴URL。 当他们这样做时,我希望通过jQueryAjax获取URL并从中读取opengraph元数据。 我该怎么做

我读过这篇文章,但其中的链接已断开,它比我需要的更高级,而不是在jQuery中:)

除了opengraph元数据,我不需要其他任何东西,因此不需要解析结构等

下面是一个页面示例:

所以我想提取的字段之一是
,确切地说是值
http://i.ebayimg.com/images/i/281656969697-0-1/s-l1000.jpg

我现在拥有的是从这里复制过来的:

请参阅我标记为@Flo的注释,我想在其中提取开放图数据,但我不知道如何解析JSON响应

<a href="www.ebay.com/itm/Microsoft-Surface-Pro-3-12-Tablet-256GB-SSD-Intel-Core-i7-Haswell-8GB-RAM-/281656969697" class="ajaxtrigger">Load Ajax Content</a>
<div id="target"></div>

    <script language="javascript" type="text/javascript">
    $(function () {

        $('.ajaxtrigger').click(function () {
            var container = $('#target');
            container.attr('tabIndex', '-1');
            var trigger = $(this);
            var url = trigger.attr('href');
            if (!trigger.hasClass('loaded')) {
                trigger.append('<span></span>');
                trigger.addClass('loaded');
                var msg = trigger.find('span').last();
            } else {
                var msg = trigger.find('span').last();
            }
            doAjax(url, msg, container);
            return false;
        });
    });


    function doAjax(url, msg, container) {
        // if the URL starts with http
        if (url.match('^http')) {
            // assemble the YQL call
            msg.removeClass('error');
            msg.html(' (loading...)');
            $.getJSON("//query.yahooapis.com/v1/public/yql?" +
                      "q=SELECT%20*%20FROM%20html%20WHERE%20url=%27" +
                      encodeURIComponent(url) +
                      "%27%20AND%20xpath=%27descendant-or-self::meta%27&format=json&callback=?",
              function (data) {
                  if (data.results[0]) {
                      var data = filterData(data.results[0]);

                      //@Flo: get metadata from result, but now???

                      msg.html(' (ready.)');
                      container.
                        html(data).
                          focus().
                            effect("highlight", {}, 1000);
                  } else {
                      msg.html(' (error!)');
                      msg.addClass('error');
                      var errormsg = '<p>Error: could not load the page.</p>';
                      container.
                        html(errormsg).
                          focus().
                            effect('highlight', { color: '#c00' }, 1000);
                  }
              }
            );
        } else {
            $.ajax({
                url: url,
                timeout: 5000,
                success: function (data) {
                    msg.html(' (ready.)');
                    container.
                      html(data).
                        focus().
                          effect("highlight", {}, 1000);
                },
                error: function (req, error) {
                    msg.html(' (error!)');
                    msg.addClass('error');
                    if (error === 'error') { error = req.statusText; }
                    var errormsg = 'There was a communication error: ' + error;
                    container.
                      html(errormsg).
                        focus().
                          effect('highlight', { color: '#c00' }, 1000);
                },
                beforeSend: function (data) {
                    msg.removeClass('error');
                    msg.html(' (loading...)');
                }
            });
        }
    }
    function filterData(data) {
        // filter all the nasties out
        // no body tags
        data = data.replace(/<?\/body[^>]*>/g, '');
        // no linebreaks
        data = data.replace(/[\r|\n]+/g, '');
        // no comments
        data = data.replace(/<--[\S\s]*?-->/g, '');
        // no noscript blocks
        data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g, '');
        // no script blocks
        data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g, '');
        // no self closing scripts
        data = data.replace(/<script.*\/>/, '');
        // [... add as needed ...]
        return data;
    }


    </script>
如何过滤此响应以返回
og:image
值?

试试看

var url=”http://www.ebay.com/itm/Microsoft-Surface-Pro-3-12-"
+“Tablet-256GB-SSD-Intel-Core-i7-Haswell-8GB-RAM-/2816569697”;
$.getJSON(“//query.yahooapi.com/v1/public/yql?”
+“q=从%20html%20中选择%20*%20,其中%20url=%27”
+编码组件(url)
+%27%20和%20xpath=%27子代或自::元%27
+“&format=json&callback=?”
,函数(数据){
//`data`:`json`从请求返回
控制台日志(数据);
//筛选器为返回了`results.meta`数组
//具有属性'property`:`og:``meta`元素的对象;
//并且有'property``og:image`
var res=$.grep(data.query.results.meta,函数(图像,键){
返回image.hasOwnProperty(“property”)&&image.property==“og:image”
});
//如果返回了属性为`og:image`的对象,则执行以下操作
如果(分辨率长度>0){
console.log(res[0].property);
$(“body”).append(res[0].content);
}否则{
//否则,日志通知
console.log(“og:未找到映像”)
};
});


但我如何调用需要解析的URL?@Flo可以包括在Quesion尝试的
$.ajax()
js
?可以包括
$.ajax()
尝试过的问题?当尝试
$.ajax(url)
时,
url
的响应是什么?我没有尝试过任何东西,因为我不知道如何获取页面,应该分配给哪个变量,以及如何解析变量的值:)请参见
js
at-answer应该能够过滤
html
document
meta
具有
property
属性的元素,返回打开的图形元数据。
Object {query: Object}
query: Object
count: 33
created: "2015-05-02T04:36:46Z"
lang: "en-US"
results: Object
meta: Array[33]
0: Object
name: "viewport"
__proto__: Object
1: Object
content: "main"
name: "layout"
__proto__: Object