首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TweetStream和SQLite3保存tweet

如何使用TweetStream和SQLite3保存tweet
EN

Stack Overflow用户
提问于 2013-06-06 18:59:11
回答 1查看 768关注 0票数 0

我对红宝石和RoR非常陌生。我想保存当前显示在我的终端上的推文。你能解释一下为什么推特没有被保存吗?

我在终端中运行“ruby mine_tweets.rb”,status.text的“but”就会出现,但是数据库中没有条目。

mine_tweets.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
class Tweet < ActiveRecord::Base
  attr_accessible :screen_name, :tweet_text, :user_id
end
EN

回答 1

Stack Overflow用户

发布于 2014-02-02 16:04:43

最近我自己也在努力解决这个问题。以下是我的发现:

为了保存到数据库,您需要:

  • 创建一个数据库。
  • 将应用程序连接到数据库。
  • 创建表和列
  • ..do什么的.保存、查询等
  • 关闭连接(退出应用程序之前)

下面是我如何将中的Tweet保存到一个sqlite本地数据库中。(我强烈建议直接切换到Postgres,因为Heroku不支持sqlite)。

tweetstream.rb

代码语言:javascript
复制
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
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16970072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档