在 Dashing.io 仪表板上自定义 Instagram 小部件
Customize Instagram widget on a Dashing.io dashboard
我已经使用 dashing 和许多(大部分)现有小部件设置了一个仪表板。到目前为止工作正常 - see production dashboard here (进行中).
现在我想要一个 Instagram 小部件来显示 n
由 username
拍摄的最新图像。
我找到了一个小部件,可以显示 long
和 lat
的图像,并且还能够配置我的令牌,所以我可以与 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 文档要我做什么。
我找到了以下 url
https://api.instagram.com/v1/users/{user-id}/media/recent/?access_token={acces-token}
并尝试了(填写了我的凭据)。它正确返回 json 数据,包括我的图像(以及其他数据)。
如何修改给定代码以按用户名而不是位置显示图像?
非常感谢任何帮助。
您需要 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
解决方案
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_id
和client_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 小部件中。
感谢您的参与和指点!这为我指明了文档的正确方向,并帮助我自己弄明白了。
我已经使用 dashing 和许多(大部分)现有小部件设置了一个仪表板。到目前为止工作正常 - see production dashboard here (进行中).
现在我想要一个 Instagram 小部件来显示 n
由 username
拍摄的最新图像。
我找到了一个小部件,可以显示 long
和 lat
的图像,并且还能够配置我的令牌,所以我可以与 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 文档要我做什么。
我找到了以下 url
https://api.instagram.com/v1/users/{user-id}/media/recent/?access_token={acces-token}
并尝试了(填写了我的凭据)。它正确返回 json 数据,包括我的图像(以及其他数据)。
如何修改给定代码以按用户名而不是位置显示图像?
非常感谢任何帮助。
您需要 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
解决方案
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_id
和client_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 小部件中。
感谢您的参与和指点!这为我指明了文档的正确方向,并帮助我自己弄明白了。