1

我正在使用以下代码来确定 Instagram 用户喜欢的帖子总数。此代码在少数喜欢(总共 66 个)上本地工作。它遍历每页 20 页,直到达到 66 页。

但是,我有一些用户的赞数超过了 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
4

2 回答 2

0

如果您喜欢的照片已被发布它的用户删除,通常会发生这种情况。

于 2013-12-24T16:29:38.907 回答
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 喜欢,并且我每天在预定的 rake 作业中运行一次此代码。

于 2015-03-22T01:48:01.757 回答