みんなのちからになりたい

コピペでブログラムつくっていきたい

rubyでいい感じにtumblrする

tumblr大好きなんだけど、平日は仕事やなんやかんやでみるひまほとんどないので、いい感じにreblogされてるquoteとphotoを取ってきてそれをhtmlにしてみるやつ作った。

ここを参考にやったんだけど、すごいわかりやすくて勉強になった。
RubyからTumblrへの投稿/データ取得ができるGem tumblr_client - 酒と泪とRubyとRailsと
API | Tumblr

require "bundler/setup"

require "tumblr_client"
require "erb"

Tumblr.configure do |config|
  config.consumer_key = "your consumer key"
  config.consumer_secret = "your consumer secret"
  config.oauth_token = "your oauth token"
  config.oauth_token_secret = "your oauto token secret"
end

client = Tumblr::Client.new

posts = []
client.dashboard({limit: 20})["posts"].each do |post|
  posts << post if (post["type"] == "quote" || post["type"] == "photo") && post["note_count"] > 100
end

def makefeed(posts)
  feeds = []
  posts.each do |post|
    feed = {}
    feed[:title] = "#{post["blog_name"]} -> type : #{post["type"]} -> note_count : #{post["note_count"]}"
    feed[:link] = post["post_url"]
    if post["type"] == "photo"
      img = ""
      post["photos"].each do |photo|
        f = photo["alt_sizes"][photo["alt_sizes"].size - 3]["url"]
#        f = photo["original_size"]["url"]
        img << "<img src='#{f}' /><br/>"
      end
      feed[:description] = img
    else
      feed[:description] = post["text"]
    end
    feed[:date] = post["date"]
    feeds << feed
  end
  feeds
end

@posts = makefeed posts
@title = "my tumblr"

template = File.open("mytumblr.html.erb", 'r').read
erb = ERB.new(template)
File.open("mytumblr.htm", 'w+') { |file| file.write(erb.result(binding)) }
puts "#{@posts.size}posts output done."
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title><%= @title %></title>
  <meta name="keywords" content="">
  <meta name="description" content="">
</head>

<body>

  <h1><%= @title %></h1>

  <% @posts.each do |post| %>
    <div>
      <h2>
        <%= post[:title] %>
      </h2>
      <p>
        <% url = post[:link]; %>
        <a href="<%= url %>"><%= url %></a>
      </p>
      <p>
        <%= post[:description]; %>
      </p>
      <p>
        <%= post[:date]; %>
      </p>
    </div>
  <% end %>

</body>

</html>

こんな感じでみれる。

f:id:ginzanomama:20130328163443p:plain

ほんとはrssで吐いてたんだけど、ローカルのrssgoogle readerで読む方法がわからなかったのであきらめた...
limitが20までしか指定できないのでcronとかタスクとかで回してdbとかにつっこんで、任意のタイミングでrssなりhtmlなりに吐き出せばいい感じになる気がする。
erbとか初めて使ったけど便利さを感じた。

勉強になる。