我对红宝石和RoR非常陌生。我想保存当前显示在我的终端上的推文。你能解释一下为什么推特没有被保存吗?
我在终端中运行“ruby mine_tweets.rb”,status.text的“but”就会出现,但是数据库中没有条目。
mine_tweets.rb
require 'rubygems'
require 'tweetstream'
puts "searching for turkey....should write to database"
TweetStream.configure do |config|
config.consumer_key = 'XXXXXXX'
config.consumer_secret = 'XXXXXXX'
config.oauth_token = 'XXXXXXX'
config.oauth_token_secret = 'XXXXXXX'
config.auth_method = :oauth
end
# search for "turkey" and will print text and screen name and should store other values in db
TweetStream::Client.new.track('turkey') do |status|
puts status.text + " FROM: @" + status.user.screen_name
Tweet.create(:user_id => status.user.id, :tweet_text => status.text, :screen_name =>status.user.screen_name)
Tweet.save!
end
@client = TweetStream::Client.new
@client.on_delete do |status_id, user_id|
Tweet.delete(status_id)
end型号/tweets.rb
class Tweet < ActiveRecord::Base
attr_accessible :screen_name, :tweet_text, :user_id
end发布于 2014-02-02 16:04:43
最近我自己也在努力解决这个问题。以下是我的发现:
为了保存到数据库,您需要:
下面是我如何将中的Tweet保存到一个sqlite本地数据库中。(我强烈建议直接切换到Postgres,因为Heroku不支持sqlite)。
tweetstream.rb
require 'sqlite3'
require 'tweetstream'
KEY = 'xxx'
SECRET = 'xxx'
TOKEN = 'xxx'
TOKEN_SECRET = 'xxx'
SEARCH_TERMS = "your search terms"
begin
db = SQLite3::Database.open "./db/tweets.db"
db.execute "CREATE TABLE IF NOT EXISTS store_tweets(
id, INTEGER PRIMARY KEY,
tweetid TEXT,
text TEXT,
screen_name TEXT,
userid TEXT,
user_name TEXT,
profile_image_url TEXT,
language,
created_at TEXT,
received_at TIMESTAMPS)"
TweetStream.configure do |config|
config.consumer_key = KEY
config.consumer_secret = SECRET
config.oauth_token = TOKEN
config.oauth_token_secret = TOKEN_SECRET
config.auth_method = :oauth
end
TweetStream::Client.new.track(SEARCH_TERMS) do |status|
puts "#{status.text}"
db.execute( "INSERT INTO store_tweets(
'tweetid',
'text',
'screen_name',
'userid',
'user_name',
'profile_image_url',
'language')
VALUES (?, ?, ?, ?, ?, ?, ?)",
[status[:id]],
[status.text],
[status.user.screen_name],
[status.user[:id]],
[status.user.name],
[status.user.profile_image_url],
[status.lang])
end
rescue SQLite3::Exception => e
puts "Exception occured"
puts e
ensure
db.close if db
endhttps://stackoverflow.com/questions/16970072
复制相似问题