36 lines
1.1 KiB
Ruby
36 lines
1.1 KiB
Ruby
require 'instagram_basic_display_api'
|
|
require 'sinatra/activerecord'
|
|
require 'net/http'
|
|
|
|
current_token = File.open('/home/steve/.ig_token', &:readline)
|
|
refresh_uri = URI('https://graph.instagram.com/refresh_access_token')
|
|
refresh_params = { grant_type: 'ig_refresh_token', access_token: current_token}
|
|
refresh_uri.query = URI.encode_www_form(refresh_params)
|
|
response = Net::HTTP.get_response(refresh_uri)
|
|
token = JSON.parse(response.body)['access_token']
|
|
File.write('/home/steve/.ig_token', token)
|
|
|
|
client = InstagramBasicDisplayAPI.client(access_token: token)
|
|
|
|
media = client.user_recent_media[:data].reduce([]) do |media, media_item|
|
|
if media_item[:media_type] == 'CAROUSEL_ALBUM'
|
|
media.concat client.media_children(media_item[:id])[:data]
|
|
media
|
|
else
|
|
media.append media_item
|
|
end
|
|
end
|
|
|
|
media.each do |media_item|
|
|
model = IGMedia.find_or_create_by(id: media_item[:id])
|
|
|
|
model.update(
|
|
media_url: media_item[:media_url],
|
|
media_type: media_item[:media_type],
|
|
thumbnail_url: media_item[:thumbnail_url],
|
|
permalink: media_item[:permalink],
|
|
caption: media_item[:caption],
|
|
timestamp: DateTime.parse(media_item[:timestamp])
|
|
)
|
|
end
|