Skip to content

Commit d16d567

Browse files
authored
Move Insta carousel service into insta carousel job (#113)
* InstaCarouselService into InstaCarouselJob * test schedule job
1 parent 4b98e4e commit d16d567

File tree

3 files changed

+68
-73
lines changed

3 files changed

+68
-73
lines changed

app/jobs/insta_carousel_job.rb

+56-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,62 @@
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)
17
class InstaCarouselJob < ApplicationJob
28
queue_as :default
39

410
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+
}
661
end
762
end

app/services/insta_carousel_service.rb

-69
This file was deleted.

test/jobs/insta_carousel_job_test.rb

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
require 'test_helper'
22

33
class InstaCarouselJobTest < ActiveJob::TestCase
4-
# test "the truth" do
5-
# assert true
6-
# end
4+
def setup
5+
@insta_user = InstaUser.create(username: 'za.yuliia', remote_id: SecureRandom.random_number(9999))
6+
@insta_post = InstaPost.create(insta_user: @insta_user,
7+
media_type: :carousel_album,
8+
remote_id: SecureRandom.random_number(9999))
9+
end
10+
11+
test 'should perform job' do
12+
assert_enqueued_jobs 0
13+
InstaCarouselJob.perform_later(@insta_post)
14+
assert_enqueued_jobs 1
15+
end
716
end

0 commit comments

Comments
 (0)