RSSで取得したフィードのURLを短縮URLに変換する
TwitterBot作成のためにRSSパーサーを弄っていましたが、フィードのURLが長すぎてTwitterからPostできないことがありました。解決策として、安直ではありますが短縮URLへの変換を検討し、実装したのでご紹介します。
API利用のための前準備
短縮URLを処理させる先はbit.lyにしました。老舗、という理由と、実装例が豊富なのが選択の決め手です。
APIの利用にあたってはユーザの登録が必要になるので、以下のURLからユーザ登録を行いました。
オレンジ色のボタンをクリックして、次の画面に表示される2パラグラフ目の「here」リンクをクリックしてください。
If all you're looking to do is shorten links on behalf of a single user or site, you can call the bitly API's /v3/shorten method using your bitly login and API key, both of which you can find here.
ユーザーネームとメールアドレスを登録すれば、「bitly Username」「bitly API Key」が取得できます。
もちろん、この手順は変更される可能性が高いので、「shorten link」とか目的とする動作をサポートするようなニュアンスの言い回しを探しましょう。
APIを利用した実装
早速コードです。
class Mainichi def rss_get uri = URI.parse("http://hogehoge/flash.rss") rss = RSS::Parser.parse(uri.read) rss.items.each do |item| uri = item.link query ='version=2.0.1&' + "longUrl=#{uri}&"+'login=<取得したbitly Username>&apiKey=<取得したbitly API Key>' result = JSON.parse(Net::HTTP.get("api.bit.ly","/shorten?#{query}")) result['results'].each_pair do |long_url,value| short_url = value['shortUrl'] Tweet.new.tweet(item.title + " " + "#{short_url}")#TwitterBOTへのPost end end end end
Tweetクラスは過去の実装例をご参照ください。
今回は試しに毎日新聞の総合ニュースのRSSフィードを読み込みました。
RSSフィードのURLは「.rdf」だけでなく「.rss」でも処理できるんですね。今回の実装で気付きました。違いについてはちょっとよくわかってないので調べんとですが。
短いコードですが、問題点や課題点(Tweetクラスをループ内で毎回newしてるとか、多数のRSSフィードの読み込みに対応してないとか)がみえてきたので、リファクタリングをしながら機能を増強しつついろいろ学べるといいかなーと思っています。