読者です 読者をやめる 読者になる 読者になる

facebookページにスクリプトのみで自動投稿する方法がわからなかった

photo by marcopako 

facebookページにスクリプトのみで自動投稿できなかった。

正確にはfacebookページのユーザーとして自分自身のfacebookページへスクリプトのみで自動投稿できなかったと言った方がいい。

例えば、「アイドルNews毎日更新!」というfacebookページがあって、このページへ「アイドルNews毎日更新!ユーザー」として1日1回自動投稿を行ないたい場合などを指す。

当初の案としては、facebookページへ投稿するスクリプトを書いてcronで定期実行させればよいと考えたのだけど、色々こねこね調べた結果、面倒なのでやめた。

理由としてはスクリプトのみでfacebookページへ自分自身で書き込むアクセストークンを取得する方法がわからなかったから。

facebookページにfacebookページ自身で書き込みを行なう方法としては以下のページにあるような実装を行なえばいいはずだった。

この通りにやれば本当はできるはずなんだけど、そのためにはmanage_pages,publich_streamの権限を持ったユーザートークンが必要。

で、このユーザーアクセストークンを取得すればいいじゃないかという話になるんだけど、これがfacebook側のポリシーで1,2時間しか有効じゃないユーザーアクセストークンしか取得できない(60日有効のユーザーアクセストークンもあるけど60日経つと使えなくなるので2ヶ月に1回運用が発生する気がする)。

なので、スクリプト実行時に毎度ユーザーのアクセストークンを取得する必要がある。

Graph API Explorerというツールを使うと1,2時間しか持たないユーザーアクセストークンは取得できるし、ちょっと調べればできるっしょwwwwとか思ったけど、結局全然わからなくて丸半日つぶれた。

そのときのつぶやき。

で、方針を変えることにした。

その方法というのが、自動投稿したい内容をRSSフィードとして配信して、それをIFTTTにfacebookページへ投稿させるというもの。

これならRSSフィードを作って、IFTTTにレシピを作ればおわる。

難点としてはfacebookページへの投稿ユーザーがIFTTTからの投稿と表示されてしまうこと。

本来ならfacebookページからの投稿と表示させたかったのだけども。仕方ない。

ということで、RSSフィードを作ることになるのだけど、Rails3,4なら5分で作成できる。

config/routes.rb

get '/rss' => 'news_controller#rss'

app/controllers/news_controller.rb

class NewsController
  def rss
    @feeds = News.order(:id).reverse_order.limit(10) # newsテーブルはすでに作ってあるとする
    respond_to do |format|
      format.html
      format.rss { render  :layout => false}
    end
  end
end

views/news/rss.rss.builder

# coding: utf-8
xml.instruct! :xml, :version => "1.0"
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "アイドルNews毎日更新!"
    xml.description "アイドルの情報を毎日お届け!"
    xml.link root_url

    for feed in @feeds
      xml.item do
        xml.title feed.title
        xml.description feed.description
        xml.pubDate feed.created_at.to_s(:rfc822)
        xml.link news_url(feed.id)
        xml.guid news_url(feed.id)
        xml.dc :creator, feed.author
      end
    end
  end
end

色々はぶいたけどrssの作り方としてはこれで必要十分。

こういうときRailsは楽。

で、あとはIFTTTでさきほど作ったRSSフィードをレシピのTHISに設定して、THATをfacebookページにすればいい。

設定方法とかはここがわかりやすいかも→作りながら覚える「IFTTT」レシピの使い方活用講座!(全5回)

ここまで30分。

あっさりやりたいことができた。

それで作成したのがこのページ。

無駄なgemとかいらないし、最初からこうしとけば良かったよ...。