【问题标题】:Customize Instagram widget on a Dashing.io dashboard在 Dashing.io 仪表板上自定义 Instagram 小部件
【发布时间】:2015-09-29 19:15:17
【问题描述】:

我已经使用 dashing 和许多(大部分)现有小部件设置了一个仪表板。到目前为止有效 - see production dashboard here (正在进行中)

现在我想要一个 Instagram 小部件,它显示 username 拍摄的 n 最新图像。 我找到了一个小部件,它可以显示 longlat 的图像,并且能够配置我的令牌,因此我可以与 Instagram API 对话。

这是我当前小部件originally from @mjamieson's gist on github 的代码。

require 'instagram'
require 'rest-client'
require 'json'

# Instagram Client ID from http://instagram.com/developer
Instagram.configure do |config|
  config.client_id = ENV['INSTAGRAM_CLIENT_ID']
  config.client_secret = ENV['INSTAGRAM_CLIENT_SECRET']
end

# Latitude, Longitude for location
instadash_location_lat = '45.429522'
instadash_location_long = '-75.689613'


SCHEDULER.every '10m', :first_in => 0 do |job|
  photos = Instagram.media_search(instadash_location_lat,instadash_location_long)
  if photos
    photos.map do |photo|
      { photo: "#{photo.images.low_resolution.url}" }
    end
  end
  send_event('instadash', photos: photos)
end

我得到了这个工作,但想修改给定的 API 调用以仅显示我/我选择的用户拍摄的图像。不幸的是,我对 ruby​​ 或 json 的了解不够,无法弄清楚 Instagram API 文档要我做什么。

我找到了以下网址

https://api.instagram.com/v1/users/{user-id}/media/recent/?access_token={acces-token}

并尝试过(填写了我的凭据)。它正确返回了 json 数据,包括我的图像(以及其他数据)。

如何修改给定的代码以按用户名而不是位置显示图像?

非常感谢任何帮助。

【问题讨论】:

    标签: ruby json instagram-api dashing


    【解决方案1】:

    您需要access_token 才能从某些用户那里获取内容。查看 gem 页面上的 sample application。 看来你需要这样的东西:

    # here we take access token from session, assuming you already got it
    # sometime before and stored it there for future use
    client = Instagram.client(:access_token => session[:access_token])
    photos = client.user_recent_media
    

    以及这个例子如何使用 OAuth2 浏览器授权和 sinatra 应用获取这个 access_token:

    require "sinatra"
    require "instagram"
    
    enable :sessions
    
    CALLBACK_URL = "http://localhost:4567/oauth/callback"
    
    Instagram.configure do |config|
      config.client_id = "YOUR_CLIENT_ID"
      config.client_secret = "YOUR_CLIENT_SECRET"
      # For secured endpoints only
      #config.client_ips = '<Comma separated list of IPs>'
    end
    
    get "/" do
      '<a href="/oauth/connect">Connect with Instagram</a>'
    end
    
    get "/oauth/connect" do
      redirect Instagram.authorize_url(:redirect_uri => CALLBACK_URL)
    end
    
    get "/oauth/callback" do
      response = Instagram.get_access_token(params[:code], :redirect_uri => CALLBACK_URL)
      session[:access_token] = response.access_token
      redirect "/nav"
    end
    

    【讨论】:

    • 嘿。感谢您的回复!我会研究一下,看看我能不能让它工作。
    • 好的 @Alexey-Shein 我有一个 access_token 设置并存储在我的本地 .env 文件中 - 我已经检查了文档的给定部分,但发现它不是正确的解决方案 - 因为我的授权工作正常,我收到 json 格式的用户数据,但不知道如何从该 json 中选择正确的数据,以便从我的代码 sn-p 中放入 schedulersend_event。跨度>
    【解决方案2】:

    解决方案

    require 'sinatra'
    require 'instagram'
    
    # Instagram Client ID from http://instagram.com/developer
    Instagram.configure do |config|
      config.client_id = ENV['INSTAGRAM_CLIENT_ID']
      config.client_secret = ENV['INSTAGRAM_CLIENT_SECRET']
      config.access_token = ENV['INSTAGRAM_ACCESS_TOKEN']
    end
    
    user_id = ENV['INSTAGRAM_USER_ID']
    
    SCHEDULER.every '2m', :first_in => 0 do |job|
      photos = Instagram.user_recent_media("#{user_id}")
      if photos
        photos.map! do |photo|
          { photo: "#{photo.images.low_resolution.url}" }
        end
      end
      send_event('instadash', photos: photos)
    end
    

    说明

    1.) 除了我之前定义的client_idclient_secret,我只需要将我的access_token 添加到Instagram.configure 部分。

    2.) SCHEDULER 工作正常,但需要调用 Instagram.user_recent_media("#{user_id}") 而不是 Instagram.media_search(instadash_location_lat,instadash_location_long)

    3.) 为此,我必须为user_id 设置第二个缺失变量

    现在调用会获取按用户 ID 过滤的最近媒体并将其输出到 dashing 小部件中。

    感谢您的参与和提示!这为我指明了文档的正确方向并帮助我自己弄清楚。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2018-02-28
      • 2017-04-02
      • 1970-01-01
      • 2017-05-27
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多