我正在学习ruby,并使用twitter作为平台帮助我在Sinatra中构建我的第一个原型。我正在使用Twitter gem并设法获取我的私人列表并显示与该列表中的用户相关的所有推文。
但是我现在想在列表中搜索一组特定的关键字,如果找到则显示推文。
有没有人知道Twitter宝石中是否还有这样做?或者我将如何以有效的方式在rails中执行此操作。
我能弄清楚的唯一方法是迭代返回的每条推文,获取与该推文相关的文本并搜索关键字,如果找到则显示该推文。对我来说这是非常低效的,这不会消耗不必要的API请求吗?
如果这对任何人有任何帮助,我到目前为止都是这样。
require 'sinatra'
require 'rubygems'
require 'twitter'
client = Twitter::REST::Client.new do |config|
config.consumer_key = 'xxxx'
config.consumer_secret = 'xxx'
config.access_token = 'xx'
config.access_token_secret = 'xx'
end
get '/' do
@tweet = client.list_timeline(1231123123123,{:include_rts => 0})
erb :index
end
非常感谢提前
马特
答案 0 :(得分:1)
你这是正确的:迭代返回的每条推文,获取与该推文相关的文本并搜索关键字,如果找到则显示该推文。
你写道:“这对我来说是愚蠢无效的”。你是对的。这是低效的,因为您必须检索所有推文,而不仅仅是包含您想要的关键字的推文。
Twitter的宝石没有做你想要的,因为Twitter搜索有点不可预测。这是因为Twitter搜索正在针对相关性而非彻底性进行优化。
我认为,您正在寻找的是Twitter“Streams”。当您要求Twitter流时,您可以从用户(或网站或全球)获取所有推文。设置起来比较复杂。这为您提供了一切,并实时提供给您。
https://dev.twitter.com/streaming/overview
然后你在Rails中搜索推文。
如果您想进行简单搜索,可能需要查看使用Ruby的select
方法和Regexp
类。
如果您想要强大的搜索功能,您可能需要查看各种搜索宝石和搜索引擎,例如sunspot_solr
和Lucene。
如果您正在构建具有更高级扩展和搜索需求的实际业务应用程序,您可能需要阅读有关Twitter Firehose合作伙伴和文本引擎(如discovertext)的信息。这些合作伙伴和引擎提供实时搜索API,缓存和更多功能。
答案 1 :(得分:0)
考虑使用example here
中显示的搜索方法