Twitter API - 过滤掉@,#和其他链接

时间:2016-02-29 15:36:38

标签: javascript api twitter

我使用Twitter API为我的应用获取前5条推文。我需要以不同方式突出显示或链接部分推文。例如,_employeeRepository = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance<IEmployeeRepository>(); &#39;将为橙色,#将为红色和可点击等...

从他们的API,他们提供@端点:

https://dev.twitter.com/rest/reference/get/statuses/user_timeline

user_timeline对象的文本将返回嵌入其中的特殊字符。我没有看到从对象中提取tweets的选项:

推文对象:

@, # and href

虽然我可以编写自己的字符串解析器来查找这些内容,但Twitter API是否提供了处理此问题的内容?

编辑:{ ... text: "This is some text @tagName that I'd like to #parse here https://t.co/m9Addr4IlS", ... } 是一个Angular指令<tweets>来自ng-repeats的推文。 ModulesService似乎没有附加DOM标记

replace

HTML:

            scope.getTweets = function() {
                ModulesService.getTweets().success(function(res) {
                    if (res && Array.isArray(res)) {
                        scope.tweets = parseTweets(res);
                    }
                });
            };

            scope.getTweets();

            var parseTweets = function (tweets) {

                tweets.forEach(function (tweet) {

                    tweet.text.replace(/(@[^ ]+)/g, '<a class="user">$1</a>').
                        replace(/(#[^ ]+)/g, '<span class="hash">$1</span>').
                        replace(/(https?:\/\/[^ ]+)/g, '<a href="$1">$1</a>');

                    console.log('tweet!', tweet.text); //does not contain altered HTML
                });

                return tweets;
            };

3 个答案:

答案 0 :(得分:2)

推荐的解决方案

图书馆twitter-text为您完成工作。

根据他们的例子:

自动链接

var twitter = require('twitter-text')
twitter.autoLink(twitter.htmlEscape('#hello < @world >'))

提取实体

var usernames = twttr.txt.extractMentions("Mentioning @twitter and @jack")
// usernames == ["twitter", "jack"]

使用该解决方案可以避免重新发明轮子并为您提供稳定的工作代码:)

替代

在您从user_timeline API端点收到的tweet对象中,entities属性存储了包含在内的urlshashtagsmentions列表推文。它们包含文本内容以及每个实体的位置(开始/结束字符索引)。

示例hashtag实体:

"entities": {
  "hashtags": [
    "text": "pleaseRT"
    "indices": [
      6,
      13
    ]
  ]

参见Entities documentation了解更多信息。

答案 1 :(得分:1)

尝试:

var text = "This is some text @tagName that I'd like to #parse here https://t.co/m9Addr4IlS";
var div = document.getElementsByTagName('div')[0];
div.innerHTML = text.replace(/(@[^ ]+)/g, '<a class="user">$1</a>').
                     replace(/(#[^ ]+)/g, '<span class="hash">$1</span>').
                     replace(/(https?:\/\/[^ ]+)/g, '<a href="$1">$1</a>');
.hash { color: orange; }
.user { color: red; }
<div></div>

答案 2 :(得分:0)

循环返回的推文并根据某些条件修改推文文本:

<link href="bootstrap.css" rel="stylesheet" media="screen">