Twitter和jQuery,呈现Twitter链接。

| 我正在使用jquery ajax从twitter api中提取信息,我敢肯定有一种简单的方法,但是我找不到如何获取“ tweet”来呈现任何已发布的链接的方法。显示为链接。目前只有文字。
$.ajax({  
            type : \'GET\',  
            dataType : \'jsonp\',  
            url : \'http://search.twitter.com/search.json?q=nettuts&rpp=2\',  

            success : function(tweets) {  
               var twitter = $.map(tweets.results, function(obj, index) {  
                  return {  
                     username : obj.from_user,  
                     tweet : obj.text,  
                     imgSource : obj.profile_image_url,  
                     geo : obj.geo  
                  };  
               });  
更新: 以下功能(插件)可以正常工作。
(function($) {

    $.socialFader = function(options) {

        var settings = {
            tweetHolder : null,
            tweetCount  : 100,
            fadeSpeed   : 500,
            tweetName: \'jquery\'
        };  

        if (options) {
            $.extend(settings, options);
        };

        var URL = \"http://search.twitter.com/search.json?q=\"+settings.tweetName+\"&rpp=\" + settings.tweetCount + \"&callback=?\";

        function relative_time(time_value) {

            var values = time_value.split(\" \");
            time_value = values[1] + \" \" + values[2] + \", \" + values[5] + \" \" + values[3];
            var parsed_date = Date.parse(time_value);
            var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
            var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
            delta = delta + (relative_to.getTimezoneOffset() * 60);
            var r = \'\';
            if (delta < 60) {
                r = \'a minute ago\';
            } else if(delta < 120) {
                r = \'couple of minutes ago\';
            } else if(delta < (45*60)) {
                r = (parseInt(delta / 60)).toString() + \' minutes ago\';
            } else if(delta < (90*60)) {
                r = \'an hour ago\';
            } else if(delta < (24*60*60)) {
                r = \'\' + (parseInt(delta / 3600)).toString() + \' hours ago\';
            } else if(delta < (48*60*60)) {
                r = \'1 day ago\';
            } else {
                r = (parseInt(delta / 86400)).toString() + \' days ago\';
            }

         return r;

        };

        String.prototype.hashify = function() {
            return this.replace(/#([A-Za-z0-9\\/\\.]*)/g, function(m) {
                return \'<a target=\"_new\" href=\"http://twitter.com/search?q=\' + m.replace(\'#\',\'\') + \'\">\' + m + \"</a>\";
            });
        };

        String.prototype.linkify = function(){
            return this.replace(/[A-Za-z]+:\\/\\/[A-Za-z0-9-_]+\\.[A-Za-z0-9-_:%&\\?\\/.=]+/, function(m) {
                return m.link(m);
            });
        };

        String.prototype.atify = function() {
            return this.replace(/@[\\w]+/g, function(m) {
                return \'<a href=\"http://www.twitter.com/\' + m.replace(\'@\',\'\') + \'\">\' + m + \"</a>\";
            });
        }; 

        $.getJSON(URL, function(JSON) {

            $.each(JSON.results, function(i, tweet) {

                var profilePicture = tweet.profile_image_url;
                var userLink = tweet.from_user;
                var text = tweet.text;
                text = text.linkify().atify().hashify();
                var createdAt = new Date(tweet.created_at);
                var myTweet = \'<a href=\"http://www.twitter.com/\' + userLink + \'\" title=\"\' + userLink + \'\">\' + userLink + \'</a> \';
                myTweet += text;
                $(settings.tweetHolder).append(\'<li class=\"cycles\">\' + myTweet + \'</li>\');

            });

            var elements = $(settings.tweetHolder).children();
            var timeOutStart = 5000;

            function fader(elementId) {
                setTimeout(function() {
                    $(elements[elementId]).fadeOut(settings.fadeSpeed, function() {
                        $(elements[elementId + 1]).fadeIn(settings.fadeSpeed);
                    });
                }, timeOutStart * (elementId));
            };

            for (var j = 0; j < elements.length; j++) {
                           fader(j);
                       };

        });

    };

})(jQuery);
在我的准备声明中:
$.socialFader({ tweetHolder:\"#twitter\", tweetName:\"nettuts\", tweetCount:2 });
已邀请:
这是我写的一个插件,它确实简化了tweet / json聚合然后解析的过程。淡入和淡出推文。只需获取所需的代码。请享用。 (函数($){
    $.socialFader = function(options) {

        var settings = {
            tweetHolder : null,
            tweetCount  : 99,
            fadeSpeed   : 500,
        };  

        if (options) {
            $.extend(settings, options);
        };

        var URL = \"http://search.twitter.com/search.json?q=jquery&rpp=\" + settings.tweetCount + \"&callback=?\";

        function relative_time(time_value) {

            var values = time_value.split(\" \");
            time_value = values[1] + \" \" + values[2] + \", \" + values[5] + \" \" + values[3];
            var parsed_date = Date.parse(time_value);
            var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
            var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
            delta = delta + (relative_to.getTimezoneOffset() * 60);
            var r = \'\';
            if (delta < 60) {
                r = \'a minute ago\';
            } else if(delta < 120) {
                r = \'couple of minutes ago\';
            } else if(delta < (45*60)) {
                r = (parseInt(delta / 60)).toString() + \' minutes ago\';
            } else if(delta < (90*60)) {
                r = \'an hour ago\';
            } else if(delta < (24*60*60)) {
                r = \'\' + (parseInt(delta / 3600)).toString() + \' hours ago\';
            } else if(delta < (48*60*60)) {
                r = \'1 day ago\';
            } else {
                r = (parseInt(delta / 86400)).toString() + \' days ago\';
            }

         return r;

        };

        String.prototype.hashify = function() {
            return this.replace(/#([A-Za-z0-9\\/\\.]*)/g, function(m) {
                return \'<a target=\"_new\" href=\"http://twitter.com/search?q=\' + m.replace(\'#\',\'\') + \'\">\' + m + \"</a>\";
            });
        };

        String.prototype.linkify = function(){
            return this.replace(/[A-Za-z]+:\\/\\/[A-Za-z0-9-_]+\\.[A-Za-z0-9-_:%&\\?\\/.=]+/, function(m) {
                return m.link(m);
            });
        };

        String.prototype.atify = function() {
            return this.replace(/@[\\w]+/g, function(m) {
                return \'<a href=\"http://www.twitter.com/\' + m.replace(\'@\',\'\') + \'\">\' + m + \"</a>\";
            });
        }; 

        $.getJSON(URL, function(JSON) {

            $.each(JSON.results, function(i, tweet) {

                var profilePicture = tweet.profile_image_url;
                var userLink = tweet.from_user;
                var text = tweet.text;
                text = text.linkify().atify().hashify();
                var createdAt = new Date(tweet.created_at);
                var myTweet = \'<a href=\"http://www.twitter.com/\' + userLink + \'\" title=\"\' + userLink + \'\">\' + userLink + \'</a> \';
                myTweet += text;
                $(settings.tweetHolder).append(\'<li class=\"cycles\">\' + myTweet + \'</li>\');

            });

            var elements = $(settings.tweetHolder).children();
            var timeOutStart = 5000;

            function fader(elementId) {
                setTimeout(function() {
                    $(elements[elementId]).fadeOut(settings.fadeSpeed, function() {
                        $(elements[elementId + 1]).fadeIn(settings.fadeSpeed);
                    });
                }, timeOutStart * (elementId));
            };

            for (var j = 0; j < elements.length; j++) {
                fader(j);
            };

        });

    };

})(jQuery);
您需要解析推文内容,找到URL,然后将它们放在自己之间。
不幸的是,目前,搜索API尚无法像某些REST API方法那样分解tweet实体(即链接,提及,主题标签)。因此,您可以自己解析实体(我使用正则表达式),也可以调用其余的API来获取实体。 如果您决定回调到REST API,并且一旦从搜索API结果中提取了状态ID,就可以像下面这样调用statuss / show: http://api.twitter.com/1/statuses/show/60183527282577408.json?include_entities=true 在生成的JSON中,注意实体对象。
\"entities\":{\"urls\":[{\"expanded_url\":null,\"indices\":[68,88],\"url\":\"http:\\/\\/bit.ly\\/gWZmaJ\"}],\"user_mentions\":[],\"hashtags\":[{\"text\":\"wordpress\",\"indices\":[89,99]}]}
您可以使用以上内容在tweet中定位特定实体(这些实体出现在indexs属性所指示的字符串位置之间),并进行适当的转换。 如果您喜欢自己解析实体,则可以使用以下(.NET Framework)正则表达式: 链接匹配模式
(?:<\\w+.*?>|[^=!:\'\"/]|^)((?:https?://|www\\.)[-\\w]+(?:\\.[-\\w]+)*(?::\\d+)?(?:/(?:(?:[~\\w\\+%-]|(?:[,.;@:][^\\s$]))+)?)*(?:\\?[\\w\\+%&=.;:-]+)?(?:\\#[\\w\\-\\.]*)?)(?:\\p{P}|\\s|<|$)
提及比赛模式
\\B@([\\w\\d_]+)
标签匹配模式
(?:(?:^#|[\\s\\(\\[]#(?!\\d\\s))(\\w+(?:[_\\-\\.\\+\\/]\\w+)*)+)
Twitter还提供了一个开放源代码库,可帮助捕获特定于Twitter的实体,例如链接,提及和主题标签。此java文件包含定义Twitter使用的正则表达式的代码,而此yml文件包含测试字符串和行使Twitter库中正则表达式的许多单元测试的预期结果。 您如何处理推文取决于您,但是我将处理原始推文的副本,并首先拉动所有链接,并用空格替换副本中的链接(以免修改字符串长度。)字符串中匹配项的末尾位置以及匹配的内容。然后我先提及,再加上主题标签-再次在推文副本中将其替换为空格。 这种方法可确保我在推文中的任何链接中都不会发现对提及和主题标签的误判。
我对上一个做了一些修改。所有推文一一消失后,一无所有。 现在,它检查是否有可见的推文,然后刷新推文。
(function($) {

$.socialFader = function(options) {

    var settings = {
        tweetHolder : null,
        tweetCount  : 99,
        fadeSpeed   : 500,
    };  

    if (options) {
        $.extend(settings, options);
    };

    var URL = \"http://search.twitter.com/search.json?q=istanbul&rpp=\" + settings.tweetCount + \"&callback=?\";

    function relative_time(time_value) {

        var values = time_value.split(\" \");
        time_value = values[1] + \" \" + values[2] + \", \" + values[5] + \" \" + values[3];
        var parsed_date = Date.parse(time_value);
        var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
        var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
        delta = delta + (relative_to.getTimezoneOffset() * 60);
        var r = \'\';
        if (delta < 60) {
            r = \'a minute ago\';
        } else if(delta < 120) {
            r = \'couple of minutes ago\';
        } else if(delta < (45*60)) {
            r = (parseInt(delta / 60)).toString() + \' minutes ago\';
        } else if(delta < (90*60)) {
            r = \'an hour ago\';
        } else if(delta < (24*60*60)) {
            r = \'\' + (parseInt(delta / 3600)).toString() + \' hours ago\';
        } else if(delta < (48*60*60)) {
            r = \'1 day ago\';
        } else {
            r = (parseInt(delta / 86400)).toString() + \' days ago\';
        }

     return r;

    };

    String.prototype.hashify = function() {
        return this.replace(/#([A-Za-z0-9\\/\\.]*)/g, function(m) {
            return \'<a target=\"_new\" href=\"http://twitter.com/search?q=\' + m.replace(\'#\',\'\') + \'\">\' + m + \"</a>\";
        });
    };

    String.prototype.linkify = function(){
        return this.replace(/[A-Za-z]+:\\/\\/[A-Za-z0-9-_]+\\.[A-Za-z0-9-_:%&\\?\\/.=]+/, function(m) {
            return m.link(m);
        });
    };

    String.prototype.atify = function() {
        return this.replace(/@[\\w]+/g, function(m) {
            return \'<a href=\"http://www.twitter.com/\' + m.replace(\'@\',\'\') + \'\">\' + m + \"</a>\";
        });
    };


    $.getJSON(URL, function(JSON) {

        $(settings.tweetHolder).find(\'li.cycles\').remove();

        $.each(JSON.results, function(i, tweet) {

            var profilePicture = tweet.profile_image_url;
            var userLink = tweet.from_user;
            var text = tweet.text;
            text = text.linkify().atify().hashify();
            var createdAt = new Date(tweet.created_at);
            var myTweet = \'<a href=\"http://www.twitter.com/\' + userLink + \'\" title=\"\' + userLink + \'\">\' + userLink + \'</a> \';
            myTweet += text;
            $(settings.tweetHolder).append(\'<li class=\"cycles\">\' + myTweet + \'</li>\');

        });

        var elements = $(settings.tweetHolder).children();
        var timeOutStart = 5000;

        function fader(elementId) {


            setTimeout(function() {
                $(elements[elementId]).fadeOut(settings.fadeSpeed, function() {
                    $(elements[elementId + 1]).fadeIn(settings.fadeSpeed);
                });
                if (jQuery(\'#twitter ul li.cycles:visible\').length==1) {
                    jQuery.socialFader({ tweetHolder:\"#twitter ul\", tweetCount:5 });
                }
            }, timeOutStart * (elementId));


        };

        for (var j = 0; j < elements.length; j++) {
            fader(j);
        };

    });

};

})(jQuery);
jQuery(document).ready(function(){
jQuery.socialFader({ tweetHolder:\"#twitter ul\", tweetCount:5 }); 
});

要回复问题请先登录注册