我使用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;
};
答案 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
属性存储了包含在内的urls
,hashtags
和mentions
列表推文。它们包含文本内容以及每个实体的位置(开始/结束字符索引)。
示例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">