55 lines
1.4 KiB
Plaintext
55 lines
1.4 KiB
Plaintext
|
#!/usr/bin/env ruby
|
||
|
|
||
|
ENV["RAILS_ENV"] ||= "production"
|
||
|
|
||
|
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
||
|
require File.expand_path('../../config/boot', __FILE__)
|
||
|
require APP_PATH
|
||
|
Rails.application.require_environment!
|
||
|
|
||
|
LAST_STORY_KEY = "twitter:last_story_id"
|
||
|
|
||
|
last_story_id = (Keystore.value_for(LAST_STORY_KEY) || Story.last.id).to_i
|
||
|
|
||
|
Story.where("id > ? AND is_expired = ?", last_story_id, false).
|
||
|
order(:id).each do |s|
|
||
|
if !s.tags.map(&:tag).include?("meta")
|
||
|
status = "\n" + (s.url.present?? s.url + "\n" : "") + s.short_id_url
|
||
|
|
||
|
tco_status = "\n" + (s.url.present?? ("X" * Twitter::TCO_LEN) + "\n" :
|
||
|
"") + ("X" * Twitter::TCO_LEN)
|
||
|
|
||
|
left_len = Twitter::MAX_TWEET_LEN - tco_status.length
|
||
|
|
||
|
title = s.title
|
||
|
|
||
|
if title.match(/^([dm] |@)/i)
|
||
|
# prevent these tweets from activating twitter shortcuts
|
||
|
# https://dev.twitter.com/docs/faq#tweeting
|
||
|
title = "- #{title}"
|
||
|
end
|
||
|
|
||
|
if title.bytesize > left_len
|
||
|
status = title[0, left_len - 3] + "..." + status
|
||
|
else
|
||
|
status = title + status
|
||
|
end
|
||
|
|
||
|
res = Twitter.oauth_request("/1.1/statuses/update.json", :post,
|
||
|
{ "status" => status })
|
||
|
|
||
|
begin
|
||
|
if !res["id_str"].match(/\d+/)
|
||
|
raise
|
||
|
end
|
||
|
rescue => e
|
||
|
puts "failed posting story #{s.id} (#{status.inspect}): #{e.inspect}\n" +
|
||
|
"#{res.inspect}"
|
||
|
exit
|
||
|
end
|
||
|
end
|
||
|
|
||
|
Keystore.put(LAST_STORY_KEY, s.id)
|
||
|
sleep 2
|
||
|
end
|