The original universal static instagram
(back when it was still a jekyll plugin)
Linked to from http://lukecod.es/2011/11/27/instagram-liquid-tag-plugin-for-jekyll-and-octopress/
(back when it was still a jekyll plugin)
Linked to from http://lukecod.es/2011/11/27/instagram-liquid-tag-plugin-for-jekyll-and-octopress/
| # A Liquid tag for Jekyll sites that allows embedding Instagrams | |
| # by: Luke Karrys | |
| # | |
| # Example usage: {% instagram media_id %} | |
| require 'instagram' | |
| require 'json' | |
| module Jekyll | |
| class InstagramTag < Liquid::Tag | |
| def initialize(tag_name, markup, token) | |
| super | |
| access_token_file = File.expand_path "../.instagram_access_token", File.dirname(__FILE__) | |
| @access_token = File.open(access_token_file).gets | |
| @image_res = "standard_resolution" | |
| @markup = markup | |
| @cache_folder = File.expand_path "../.instagram-cache", File.dirname(__FILE__) | |
| FileUtils.mkdir_p @cache_folder | |
| end | |
| def render(context) | |
| id = @markup.strip | |
| media = get_cached_media(id) || get_media(id) | |
| gen_html_output JSON.parse(media) | |
| end | |
| def gen_html_output(media) | |
| loc_name, lat, lon = nil, nil, nil | |
| id = media["id"] | |
| link = media["link"] | |
| src = media["images"][@image_res]["url"] | |
| image_w = media["images"][@image_res]["width"] | |
| image_h = media["images"][@image_res]["height"] | |
| location = media["location"] | |
| filter = media["filter"] | |
| caption = media["caption"] | |
| created = Time.at(Integer(media["created_time"])).strftime("%I:%M%p %B %e, %Y") | |
| title = caption ? caption["text"] : "Untitled Instagram" | |
| output = "<p><a href='#{link}'><img src='#{src}' alt='#{title}' /></a>" | |
| output += "<br/>Filtered with #{filter} through <a href='http://instagram.com'>Instagram</a></p><!--more-->" | |
| if location | |
| loc_name = location["name"] | |
| lat = location["latitude"] | |
| lon = location["longitude"] | |
| coords = "#{lat},#{lon}" | |
| loc_alt = loc_name || coords | |
| output += "<p><a href='http://maps.google.com?q=#{coords}'>" | |
| output += "<img border='0' " | |
| output += "src='http://maps.googleapis.com/maps/api/staticmap?center=#{coords}&markers=#{coords}&zoom=14&size=#{image_w}x200&sensor=false' " | |
| output += "alt='#{loc_alt}' /></a>" | |
| if loc_name | |
| output += "<br/>Taken at #{loc_name}" | |
| end | |
| output += "</p>" | |
| end | |
| output += "<p><a href='http://web.stagram.com/p/#{id}#photo#{id}'>Leave a comment</a></p>" | |
| end | |
| def get_cache_file_for(id) | |
| File.join @cache_folder, "#{id}.cache" | |
| end | |
| def cache(id, data) | |
| cache_file = get_cache_file_for id | |
| File.open(cache_file, "w") do |io| | |
| io.write data | |
| end | |
| end | |
| def get_media(id) | |
| client = Instagram.client(:access_token => @access_token) | |
| data = client.media_item(id).to_json | |
| cache id, data unless @cache_disabled | |
| data | |
| end | |
| def get_cached_media(id) | |
| cache_file = get_cache_file_for id | |
| File.read cache_file if File.exist? cache_file | |
| end | |
| end | |
| end | |
| Liquid::Template.register_tag("instagram", Jekyll::InstagramTag) |