Skip to content

Commit

Permalink
Merge pull request #206 from true-runes/development
Browse files Browse the repository at this point in the history
v3.1.0
  • Loading branch information
nikukyugamer authored Jun 28, 2022
2 parents f3441d4 + cebd574 commit 64d9e82
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 1 deletion.
7 changes: 7 additions & 0 deletions app/models/sub_gensosenkyo_fav.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class SubGensosenkyoFav < ApplicationRecord
belongs_to :tweet, optional: true

def url_as_screen_name_is_twitter
"https://twitter.com/twitter/status/#{id_number}"
end
end
89 changes: 89 additions & 0 deletions app/services/tweets/retrieve_favorites.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# rubocop:disable Rails/Output
module Tweets
class RetrieveFavorites
MAX_LOOP_COUNT = 20
INIT_NEXT_MAX_ID = 1

def self.all(client = nil)
client = TwitterRestApi.client(account_key: :sub_gensosenkyo) if client.nil?

all_favorite_tweets = []
api_request_base_options = { count: 200 }
next_max_id = INIT_NEXT_MAX_ID

# max_id は「その数以下」を示す(その数自身を含む)
MAX_LOOP_COUNT.times do |i|
options = api_request_base_options
options.merge!({ max_id: next_max_id }) if next_max_id != INIT_NEXT_MAX_ID

# API が消費される
fav_tweets = client.favorites(options) # ツイートID 降順 の Array
all_favorite_tweets << fav_tweets
all_favorite_tweets.flatten!

puts "[LOG] #{i + 1}回目 のループでの fav_tweets を取得しました。"
puts "[LOG] #{fav_tweets.count}件 の fav_tweets を取得しました。"

break if fav_tweets.empty?

next_max_id = fav_tweets.last.id - 1
puts "[LOG] next_max_id は #{next_max_id} です。"

sleep 5
end

save_fav_tweets(all_favorite_tweets)
end

def self.continuous(client = nil)
return 'SubGensosenkyoFav にレコードが存在しません' if SubGensosenkyoFav.first.nil?

client = TwitterRestApi.client(account_key: :sub_gensosenkyo) if client.nil?

all_favorite_tweets = []
api_request_base_options = { count: 200 }
next_since_id = SubGensosenkyoFav.order(id_number: :desc).first.id_number

# since_id は「その数より大きい」を示す(その数自身は含まない)
MAX_LOOP_COUNT.times do |i|
options = api_request_base_options
options.merge!({ since_id: next_since_id })

# API が消費される
fav_tweets = client.favorites(options) # ツイートID 降順 の Array
all_favorite_tweets << fav_tweets
all_favorite_tweets.flatten!

puts "[LOG] #{i + 1}回目 のループでの fav_tweets を取得しました。"
puts "[LOG] #{fav_tweets.count}件 の fav_tweets を取得しました。"

break if fav_tweets.empty?

next_since_id = fav_tweets.first.id
puts "[LOG] next_since_id は #{next_since_id} です。"

sleep 5
end

save_fav_tweets(all_favorite_tweets)
end

def self.save_fav_tweets(fav_tweets, model_name: 'SubGensosenkyoFav')
return if model_name != 'SubGensosenkyoFav'

ActiveRecord::Base.transaction do
fav_tweets.each do |fav_tweet|
next if SubGensosenkyoFav.exists?(id_number: fav_tweet.id)

sub_gensosenkyo_fav = SubGensosenkyoFav.new(
id_number: fav_tweet.id,
tweet: Tweet.find_by(id_number: fav_tweet.id)
)

sub_gensosenkyo_fav.save!
end
end
end
end
end
# rubocop:enable Rails/Output
10 changes: 10 additions & 0 deletions db/migrate/20220628131500_create_sub_gensosenkyo_favs.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
class CreateSubGensosenkyoFavs < ActiveRecord::Migration[7.0]
def change
create_table :sub_gensosenkyo_favs do |t|
t.bigint :id_number, null: false
t.references :tweet

t.timestamps
end
end
end
10 changes: 9 additions & 1 deletion db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions lib/tasks/save_favorites.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace :save_favorites do
desc 'リアルタイムレポートのデータベースのデータを更新する'
task continuous: :environment do
Tweets::RetrieveFavorites.continuous

'[DONE] ふぁぼ の継続保存が完了しました'
end
end

0 comments on commit 64d9e82

Please sign in to comment.