Twitter API - 过滤掉 @、# 和其他链接
Twitter API - filter out @, # and other links
我正在使用Twitter API为我的应用程序获取前5条推文。我需要以不同的方式突出显示或链接部分推文。例如,#
将是橙色的,@
的将是红色且可点击的,等等......
通过他们的 API,他们提供user_timeline
端点:
https://dev.twitter.com/rest/reference/get/statuses/user_timeline
但是tweets
对象的文本返回时嵌入了这些特殊字符。我没有看到从对象中提取这些@, # and href
的选项:
推文对象:
{
...
text: "This is some text @tagName that I'd like to #parse here https://t.co/m9Addr4IlS",
...
}
虽然我可以编写自己的字符串解析器来查找这些东西,但 Twitter API 是否提供了处理这个问题的东西?
编辑:<tweets>
是一个 Angular 指令,它ng-repeats
我从ModulesService
的推文。 replace
似乎没有附加 DOM 标签
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;
};
.HTML:
<div ng-repeat="tweet in tweets" class="post-body clearfix">
{{tweet.text}}
</div>
推荐的解决方案
图书馆推特文本为您完成工作。
根据他们的例子:
自动链接
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 终结点接收的推文对象中,entities
属性存储推文中包含的urls
、hashtags
和mentions
的列表。这些包含文本内容以及每个实体的位置(开始/结束字符索引)。
主题标签实体示例:
"entities": {
"hashtags": [
"text": "pleaseRT"
"indices": [
6,
13
]
]
有关详细信息,请参阅实体文档。
尝试:
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>
循环返回的推文并根据某些条件修改推文文本:
returnValues.forEach(function (tweet) {
if (tweet.text.search(/#|@/ig) > -1) {
var words = obj.text.split(' ');
var parsedTweetText = words.map(function (word) {
if (word.indexOf('#') === 0)
return '<span class="hashtag">' + word + '</span>';
else if (word.indexOf('@') === 0)
return '<span class="at-user">' + word + '</span>';
else
return word;
}).join(' ');
tweet.text = parsedTweetText;
}
});
相关文章:
- 在页面加载时创建/设置活动的默认链接,但在单击其他链接时删除活动链接
- 如何创建一个链接,该链接使用相应的参数打开到其他链接
- 如何获取链接内容(innerHTML)并将其作为标题添加到其他链接
- Twitter API - 过滤掉 @、# 和其他链接
- 将弹出窗口悬停在图像上带有其他链接
- 尝试执行 a:active 以保持打开状态,直到单击其他链接
- 单击一个链接将在 java 脚本中禁用其他链接
- 使用CSS和JavaScript点击,链接颜色在被点击和激活时会发生变化,直到我点击其他链接
- 将鼠标悬停在同一列表中的其他链接时移动水平背景线
- 在新选项卡中打开链接,但排除其他链接
- 如何在其他链接处于活动状态时取消其他链接的粗体显示
- 在iPhone网络应用程序内部打开一些链接,在外部打开其他链接
- 如果网页没有HTML/JavaScript格式,请转到其他链接
- 图片库w/灯箱-图片链接未正确与其他链接交换
- 如何使用javascript或jquery检查href路径是否包含图像或其他链接
- 在jquery中,我如何检测一个段落是否包含一个链接,并且只有一个链接而没有其他链接
- 图片链接替换为其他链接JS
- 在html链接标签中打开所有url,而不使用javascript转换任何其他链接
- 背景图像在链接上悬停时发生变化,希望图像保持不变,直到其他链接悬停
- 为什么我的jQuery函数只打开一个链接,而不是代码中列出的其他链接?