Don't forget to lycansubscribe
1require 'time' 2 3require_relative '../at_uri' 4require_relative 'base_importer' 5 6class PostsImporter < BaseImporter 7 def import_items 8 params = { repo: @did, collection: 'app.bsky.feed.post', 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 if record['value']['embed'] && record['value']['embed']['record'] 24 save_quote(record) 25 end 26 27 if record['value']['reply'] && record['value']['text'].include?('📌') 28 save_pin(record) 29 end 30 rescue StandardError => e 31 puts "Error in LikesImporter: #{record['uri']}: #{e}" 32 end 33 end 34 35 params[:cursor] = cursor 36 @import.update!(cursor: cursor) 37 38 break if !cursor 39 break if @time_limit && records.any? { |x| Time.parse(x['value']['createdAt']) < @time_limit } 40 end 41 end 42 43 def save_quote(record) 44 post_rkey = AT_URI(record['uri']).rkey 45 return if @user.quotes.where(rkey: post_rkey).exists? 46 47 post_time = Time.parse(record['value']['createdAt']) 48 49 quoted_post_uri = case record['value']['embed']['$type'] 50 when 'app.bsky.embed.record' 51 record['value']['embed']['record']['uri'] 52 when 'app.bsky.embed.recordWithMedia' 53 record['value']['embed']['record']['record']['uri'] 54 else 55 return 56 end 57 58 create_item_for_post(quoted_post_uri) do |args| 59 @user.quotes.create!(args.merge(rkey: post_rkey, time: post_time, quote_text: record['value']['text'])) 60 end 61 end 62 63 def save_pin(record) 64 post_rkey = AT_URI(record['uri']).rkey 65 return if @user.pins.where(rkey: post_rkey).exists? 66 67 post_time = Time.parse(record['value']['createdAt']) 68 parent_post_uri = record['value']['reply']['parent']['uri'] 69 70 create_item_for_post(parent_post_uri) do |args| 71 @user.pins.create!(args.merge(rkey: post_rkey, time: post_time, pin_text: record['value']['text'])) 72 end 73 end 74end