2013-12-24 1 views
1

Я использую следующий код, чтобы определить общее количество сообщений, которые понравился пользователю instagram. Этот код работал локально на небольшом количестве понравившихся (всего 66). Он повторял страницы по 20 каждый, пока не достигло 66.Почему Instagram не подходит Count неправильно?

Однако у меня есть пользователи, которые имеют более 300 просмотров. По какой-то причине один день код возвращает 308 понравившихся пользователю, на следующий день он возвращает только 294. Я проверил с пользователем, и они не отказались от каких-либо сообщений на instagram. Почему счет будет снижаться ?:

instagram = Instagram.client(access_token: #######) 
total_likes_array = [] 
    liked1 = instagram.user_liked_media 
    #.user_liked_media is a method native to the Instagram-ruby-gem 
    total_likes_array.push(liked1.size) 
    liked_next_max_id = liked1.pagination.next_max_like_id 
    #.pagination.next_max_like_id is a method native to the Instagram-ruby-gem 
    while !liked_next_max_id.nil? 
     liked_next = instagram.user_liked_media(max_like_id: liked_next_max_id) 
     #max_like_id is a parameter in the Instagram-ruby-gem 
     total_likes_array.push(liked_next.size) 
     liked_next_max_id = liked_next.pagination.next_max_like_id 
    end 
total_likes = total_likes_array.sum 
+0

Поскольку у instagram есть асинхронная репликация, возможно, что некоторые серверы не имеют последнего количества следящих элементов и отстают. –

ответ

0

Это обычно происходит, если понравившаяся вам фотография была удалена пользователем, который разместил его.

+0

Это не тот ответ, который я хотел (я хочу, чтобы с моим кодом было что-то не так, по крайней мере, решение было под моим контролем), но я думаю, что вы правы. Спасибо за ввод. Мое лучшее решение теперь состоит в том, чтобы перекодировать это, чтобы я никогда не пересматривал старое (я должен был делать это с самого начала). Это серьезный облом, что instagram api не имеет параметра «since_photo_id:», который позволит мне проверять на наличие предпочтений с момента последней фотографии, которую я проверил. – BigRon

+0

Только что нашел этот ответ [здесь] (http://stackoverflow.com/questions/21896500/ruby-on-rails-instagram-gem-like-and-comment-count-not-working-properly?rq=1), который представляется более точным. – BigRon

0

То, что я в конечном итоге делаю это, который хорошо работает:

authorized = Authorization.find_by_user_id_and_provider(user, 'instagram') 
instagram = Instagram.client(access_token: authorized.oauth_token) 
user_id = authorized.user_id 
current_instagram_user = InstagramUser.find_by_uid(authorized.uid) 
user_data = instagram.user 
total_likes_array = Array.new 
current_max_liked_id = current_instagram_user.max_liked_id 
# current_max_liked_id is the max_liked_id from the last DB entry. 
if !current_max_liked_id.nil? 
    liked_recent = instagram.user_liked_media # needs to run until current_max_liked_id 
    if !liked_recent.empty? 
     if current_max_liked_id.to_i <= liked_recent.first.id.to_i 
      liked_first_max_id = liked_recent.first.id 
     else 
      liked_first_max_id = current_max_liked_id 
     end 
     liked_recent_max_id = liked_first_max_id # this is the highest like id available in the API request. 
     until current_max_liked_id.to_i >= liked_recent_max_id.to_i 
      liked_recent.each do |liked| 
       if current_max_liked_id.to_i < liked.id.to_i 
        total_likes_array.push(x.id) 
       elsif current_max_liked_id.to_i >= liked.id.to_i 
        break 
       end 
      end 
      liked_recent_max_id = liked_recent.pagination.next_max_like_id 
      liked_recent = instagram.user_liked_media(max_like_id: liked_recent_max_id) 
     end 
     num_likes_out = total_likes_array.size + current_instagram_user.int_likes_out   
     # use .size above because this is taking the total number of liked.id's in the array. 
    end 
else 
    liked_first = instagram.user_liked_media 
    if liked_first.empty? 
     num_likes_out = 0 
     liked_first_max_id = nil 
    else 
     total_likes_array.push(liked_first.size) 
     liked_first_max_id = liked_first.first.id 
     liked_next_max_id = liked_first.pagination.next_max_like_id 
     while !liked_next_max_id.nil? 
      liked_next = instagram.user_liked_media(max_like_id: liked_next_max_id) 
      total_likes_array.push(liked_next.size) 
      liked_next_max_id = liked_next.pagination.next_max_like_id 
     end 
     num_likes_out = total_likes_array.sum 
     # take .sum above because the array shows total number of likes. 
    end 
end 

В конечном счете, num_likes_out это выводимое количество подобных. Я использую current_max_liked_id, чтобы проверять только понравившиеся instagram, так как последний раз, и я запускаю этот код один раз в день в запланированном рейк-задании.

Смежные вопросы