5年ぶりくらいに Twitter API で遊んでみる。B4のときに遊んでた思い出。リアルタイムで Twitter 見てしまう依存症を治すためにログに保存しといてオフラインで見よう。 (ついでにリンクなども保存したい)
ググればやり方が出てくる。
gem install twitter
fav
という list に入っているアカウントの ID などをファイルに保存しておく。
#!/usr/bin/ruby
# coding: utf-8
require 'twitter'
client = Twitter::REST::Client.new do |config|
config.consumer_key = "hoge"
config.consumer_secret = "hoge"
config.access_token = "hoge"
config.access_token_secret = "hoge"
end
## fav という名前の list のメンバーをファイルに保存
client.owned_lists.each do |list|
if list.name == "fav"
members = client.list_members(list.id, count: 1000)
fout = File.open("member.list.txt", "w")
members.each do |user|
fout.puts "#{user.id} #{user.screen_name} #{user.name}"
end
fout.close
end
end
を参考にさせて頂く。
Time line から Tweet を取得してきて、上で作ったリストに入っているかどうか判定して、tweets/fav160616.md
, tweets/other160616.md
に保存していく。MacDown で読めるような Markdown にしてる。保存順は古い順。
#!/usr/bin/ruby
# coding: utf-8
require 'twitter'
client = Twitter::REST::Client.new do |config|
config.consumer_key = "hoge"
config.consumer_secret = "hoge"
config.access_token = "hoge"
config.access_token_secret = "hoge"
end
member = Hash.new ## member かどうか判定するための hash
File.open("member.list.txt").each_line do |line|
id = line.split[0].to_i
member[id] = true
end
last_tweet_id = 0
flastname = "last_tweet_id.txt"
if File.exists?(flastname)
File.open(flastname).each_line do |line|
last_tweet_id = line.to_i
end
end
tweet_new = [] ## array of Twitter::Tweet class. new tweets will be saved
itweet = 0
count = 200 ## 200
max_id = client.home_timeline.first.id
client.home_timeline(maxid: max_id, count: count).each do |tweet|
tweet_id = tweet.id.to_i
if tweet_id <= last_tweet_id
break
end
tweet_new[itweet] = tweet
itweet += 1
end
ntweet = itweet
datadir = "./tweets"
for itweet in 0..ntweet-1
tweet = tweet_new[ntweet-1 - itweet] ## start from oldest
time = tweet.created_at.getlocal
date = time.strftime("%y%m%d")
userurl = "https://twitter.com/#{tweet.user.screen_name}"
tweeturl = "https://twitter.com/#{tweet.user.id}/status/#{tweet.id}"
filename = ""
if member[tweet.user.id.to_i] == true
filename = "#{datadir}/fav#{date}.md"
else
filename = "#{datadir}/other#{date}.md"
end
fout = File.open(filename, "a")
fout.puts "--"
fout.puts ""
fout.puts "![](#{tweet.user.profile_image_url}) #{tweet.user.name} [@#{tweet.user.screen_name}](#{userurl}) "
fout.puts "#{tweet.full_text} "
fout.puts "at [#{time}](#{tweeturl}) "
fout.puts ""
tweet.urls.each do |url|
fout.puts "- [#{url.display_url}](#{url.expanded_url})"
end
fout.puts ""
fout.close
end
## save newest tweet id
flast = open(flastname, "w")
flast.puts max_id
flast.close