Sha256: 1557e7d34daae90d1bc0132db5b4394f99151eed07373fbf3801461f4c03374d

Contents?: true

Size: 1.39 KB

Versions: 10

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module Onebox
  module Engine
    class InstagramOnebox
      include Engine
      include StandardEmbed
      include LayoutSupport

      matches_regexp(/^https?:\/\/(?:www\.)?(?:instagram\.com|instagr\.am)\/?(?:.*)\/(?:p|tv)\/[a-zA-Z\d_-]+/)
      always_https

      def clean_url
        url.scan(/^https?:\/\/(?:www\.)?(?:instagram\.com|instagr\.am)\/?(?:.*)\/(?:p|tv)\/[a-zA-Z\d_-]+/).flatten.first
      end

      def data
        oembed = get_oembed
        raise "No oEmbed data found. Ensure 'facebook_app_access_token' is valid" if oembed.data.empty?

        permalink = clean_url.gsub("/#{oembed.author_name}/", "/")

        { link: permalink,
          title: "@#{oembed.author_name}",
          image: oembed.thumbnail_url,
          description: Onebox::Helpers.truncate(oembed.title, 250),
        }

      end

      protected

      def access_token
        (options[:facebook_app_access_token] || Onebox.options.facebook_app_access_token).to_s
      end

      def get_oembed_url
        if access_token != ''
          oembed_url = "https://graph.facebook.com/v9.0/instagram_oembed?url=#{clean_url}&access_token=#{access_token}"
        else
          # The following is officially deprecated by Instagram, but works in some limited circumstances.
          oembed_url = "https://api.instagram.com/oembed/?url=#{clean_url}"
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
onebox-2.2.12 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.11 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.10 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.9 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.8 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.6 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.5 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.4 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.2 lib/onebox/engine/instagram_onebox.rb
onebox-2.2.1 lib/onebox/engine/instagram_onebox.rb