JekyllにInstagramのembedコードを埋め込むプラグインを作成した

#ruby #jekyll

Instagramのembed機能をJekyll Tagとして実装しました。

以下のように利用可能です。

# {}と%の間の空白は削除
# URLが http://instagram.com/p/abcdefghij であれば、hashは abcdefghij です。
{ % instagram hash % }

instagram-ruby-gemが便利だった

以下のようにめっちゃ簡単に実装出来ました。

require 'instagram'

module Jekyll
  class InstagramEmbedTag < Liquid::Tag
    def initialize(tag_name, hash, token)
      super
      @hash             = hash.strip
      access_token_file = File.expand_path('.instagram/access_token', File.dirname(__FILE__))
      @access_token     = File.open(access_token_file).gets.strip
    end

    def render(context)
      embed_code
    end

    def embed_code
      oembed.html
    end

    def oembed
      client.oembed("instagram.com/p/#{@hash}")
    end

    def client
      Instagram.client(access_token: @access_token)
    end
  end
end

Liquid::Template.register_tag("instagram", Jekyll::InstagramEmbedTag)

Instagram APIのoembedに含まれるhtmlキーの中身が埋め込み用HTMLタグになっているみたいでした。便利。

Instagram-ruby-gemの使い方は以下をご参照ください。