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