Don't forget to lycansubscribe
1require 'time' 2 3require_relative '../at_uri' 4require_relative 'base_importer' 5 6class LikesImporter < BaseImporter 7 def import_items 8 params = { repo: @did, collection: 'app.bsky.feed.like', limit: 100 } 9 params[:cursor] = @import.cursor if @import.cursor 10 11 loop do 12 response = @minisky.get_request('com.atproto.repo.listRecords', params) 13 14 records = response['records'] 15 cursor = response['cursor'] 16 17 @imported_count += records.length 18 @report&.update(importers: { importer_name => { :imported_items => @imported_count }}) 19 @report&.update(importers: { importer_name => { :oldest_date => Time.parse(records.last['value']['createdAt']) }}) unless records.empty? 20 21 records.each do |record| 22 begin 23 like_rkey = AT_URI(record['uri']).rkey 24 next if @user.likes.where(rkey: like_rkey).exists? 25 26 like_time = Time.parse(record['value']['createdAt']) 27 post_uri = record['value']['subject']['uri'] 28 29 create_item_for_post(post_uri) do |args| 30 @user.likes.create!(args.merge(rkey: like_rkey, time: like_time)) 31 end 32 rescue StandardError => e 33 puts "Error in LikesImporter: #{record['uri']}: #{e}" 34 end 35 end 36 37 params[:cursor] = cursor 38 @import.update!(cursor: cursor) 39 40 break if !cursor 41 break if @time_limit && records.any? { |x| Time.parse(x['value']['createdAt']) < @time_limit } 42 end 43 end 44end