以前はFriendFeedを使って複数RSSのTwitterへの通知を行っていたのですが、ある時からFriendFeedが手動で更新してあげないとRSSを更新してくれなくなってしまったので、一度HootSuiteに移行しました。でもそうしたら今度はHootSuiteが多数のフィードを通知するには有料版に移行しなくてはいけなくなってしまったので、それっきりになってました。
無いならつくろう、ということで、思い立って、自宅のサーバー上のRubyスクリプトをCronで回してRSSの取得からTwitterへの投稿を行うスクリプトを書きました。
- 今回もTwbot2.rb(twbot2.rb – Twitter Bot Support Library in Ruby)を使わせていただいてます。本当に便利。
- 今回はじめてちょっと真面目にYAML(Rubyist Magazine – プログラマーのための YAML 入門 (初級編))を学びました。たしかにXMLよりもずっと簡単で好感が持てます。相当今更ですけど・・・。
- URLの短縮にはbit.lyを使いました。Rubyでbit.lyのAPI経由で短縮URLを取得する – 黒川仁の文具堂ブログ三昧を参考にさせてもらいました。
うまく動作している・・・かな?
コードも貼りつけておきます。ツッコミあれば是非…。
<<<
# -*- coding: utf-8 -*-
#rssの更新を確認して、twittする
require “cgi”
require “open-uri”
require “rss”
require “twbot2”
require “date”
require “yaml”
require “pp”
require “json”
require “uri”
class RSS_Twitt < TwBot
def load_data
result_array = Array.new()
filename = "feeds.yml"
feeds = YAML.load_file(filename)
feeds.each do |feed|
puts feed['url']
rss = open(feed['url']) { |file| RSS::Parser.parse(file.read)}
lastupdate = feed['lastupdate']
rss.items.each do |item|
date = Date.parse(item.date.to_s)
if lastupdate == nil || lastupdate < date
short_url = shorten(item.link)
result_array << "#{feed['comment']} / #{item.title} <#{short_url}>"
if feed['lastupdate'] == nil || feed['lastupdate'] < date
feed['lastupdate'] = date
end
end
end
end
#ymlへの書き出し
open(filename, 'w'){|f| f.puts feeds.to_yaml}
#Arrayを逆順にする
puts result_array.reverse
result_array.reverse
end
def shorten(long_url)
id = 'ebibibi'
api_key = 'R_aa86b1df9d6f611376c6c75bbab9cd63'
version = '2.0.1'
long_url = URI.encode(long_url)
query = "version=#{version}&longUrl=#{long_url}&login=#{id}&apiKey=#{api_key}"
result = JSON.parse(Net::HTTP.get("api.bit.ly", "/shorten?#{query}"))
result['results'].each_pair {|long_url, value|
return value['shortUrl']
}
end
end
SELFDIR = File.dirname(__FILE__)
ARGV.each do |mode|
RSS_Twitt.new mode, "#{SELFDIR}/config.yml", "#{SELFDIR}/error.log"
end
>>>
feeds.ymlに読み込むRSSを指定するようにしてあります。
<<< ruby
---
- lastupdate: 2011-01-17
comment: !binary |
5pel6KiY44KS5pu444GN44G+44GX44GfIQ==
url: http://ebi.dyndns.biz/diary/no_comments.rdf
- lastupdate: 2011-01-12
comment: !binary |
44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==
url: http://ebi.dyndns.biz/windowsadmin/feed/
- lastupdate: 2011-01-18
comment: !binary |
44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==
url: http://ebi.dyndns.biz/learning_english/feed/
- lastupdate: 2011-01-13
comment: !binary |
44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==
url: http://ebi.dyndns.biz/ipod_touch_iphone/feed/
- lastupdate: 2011-01-13
comment: !binary |
44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==
url: http://d.hatena.ne.jp/ebibibi/rss2
- lastupdate: 2011-01-18
comment: !binary |
44OW44Ot44Kw44KS5pu444GN44G+44GX44GfIQ==
url: http://ebi.dyndns.biz/dokuwiki/feed.php
- lastupdate: 2010-12-21
comment: !binary |
c21hcnQuZm3jgafml6XoqJjjgpLmm7jjgY3jgb7jgZfjgZ8h
url: http://smart.fm/assets/users/ebibibi/journal.rss
>>>
Twitterfeedが廃止になった為、IFTTT・Zapier・dlvr.it・Hootsuite・MAKEBOT・twittbot等々、RSSフィードをTwitterにツイートできる複数のサイトを使ってきました。無料版ばかりですので、全て合わせても20件にもなりません。ここのプログラムを利用して150件のRSSフィードをTwitterに投稿できればと思っています。ただ、プログラムには素人の為、当ページに記載されているスクリプトをどんなファイルに記入してサーバーにアップしたら良いのか分かりません。CRONの利用できるさくらサーバーのスタンダードは用意しました。サーバーにアップする手順までを分かり易く解説頂けないでしょうか?必要ファイルをZIPファイルでダウンロード出来るようにして頂けたら有り難いです。また、サーバーアップ後の個々のファイルの属性設定もお教え下さい。お手数をお掛けしますが、何卒宜しくお願い致します。