|
| 1 | +# GET CAROUSEL_ALBUM children for an InstaPost. |
| 2 | +# API reference: |
| 3 | +# https://developers.facebook.com/docs/instagram-basic-display-api/reference/media/children#reading |
| 4 | + |
| 5 | +# insta_post = InstaPost.carousel_album.first |
| 6 | +# InstaCarouselJob.perform_now(insta_post) |
1 | 7 | class InstaCarouselJob < ApplicationJob
|
2 | 8 | queue_as :default
|
3 | 9 |
|
4 | 10 | def perform(insta_post)
|
5 |
| - InstaCarouselService.new(insta_post).call |
| 11 | + @insta_post = insta_post |
| 12 | + return unless @insta_post.carousel_album? |
| 13 | + |
| 14 | + @insta_access_token = @insta_post.insta_user.insta_access_tokens.active.last |
| 15 | + ask_media_children(@insta_post.remote_id, @insta_access_token.access_token) |
| 16 | + end |
| 17 | + |
| 18 | + private |
| 19 | + |
| 20 | + def ask_media_children(id, access_token) |
| 21 | + response = Faraday.get("https://graph.instagram.com/#{id}/children") do |request| |
| 22 | + request.headers = headers, |
| 23 | + request.params = { access_token: } |
| 24 | + end |
| 25 | + |
| 26 | + page = JSON.parse(response.body) |
| 27 | + items = page['data'] |
| 28 | + items.each do |item| |
| 29 | + id = item['id'] |
| 30 | + ask_media_id(id, access_token) |
| 31 | + end |
| 32 | + end |
| 33 | + |
| 34 | + def ask_media_id(id, access_token) |
| 35 | + response = Faraday.get("https://graph.instagram.com/#{id}") do |request| |
| 36 | + request.headers = headers, |
| 37 | + request.params = carousel_item_params(access_token) |
| 38 | + end |
| 39 | + |
| 40 | + item = JSON.parse(response.body) |
| 41 | + insta_carousel_item = @insta_post.insta_carousel_items |
| 42 | + .find_or_create_by(remote_id: item['id'].to_i) |
| 43 | + insta_carousel_item.update( |
| 44 | + media_type: item['media_type'].downcase, |
| 45 | + media_url: item['media_url'], |
| 46 | + permalink: item['permalink'], |
| 47 | + thumbnail_url: item['thumbnail_url'], |
| 48 | + timestamp: item['timestamp'] |
| 49 | + ) |
| 50 | + end |
| 51 | + |
| 52 | + def headers |
| 53 | + { Accept: 'application/json' } |
| 54 | + end |
| 55 | + |
| 56 | + def carousel_item_params(access_token) |
| 57 | + { |
| 58 | + fields: 'id,media_type,media_url,permalink,thumbnail_url,timestamp', |
| 59 | + access_token: |
| 60 | + } |
6 | 61 | end
|
7 | 62 | end
|
0 commit comments