forki 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7edf04a9e64d21fa773c11ff10e0af20237061015195baac334e7de90750e7d8
4
- data.tar.gz: 0bfc1308c2e54cc36c7454f8dbdc9b1776493350fdabfc1e166f2d9214a7da71
3
+ metadata.gz: f1c8304ed1312aa0e5a7f2f8f5ad2de9a407c761fb7ab9212d66465f599caf6f
4
+ data.tar.gz: e35a13415b85b9bd57cd9028841c61a324e4011e1a449cd102fe470015ed670d
5
5
  SHA512:
6
- metadata.gz: 90582f953c5490a2d2f338ecd3463dca1ebb4cad726307202aab90a71019a16476b42c46704ce0df462d71062117e2ca27dbd95ad2db06627d3be984e5528bbe
7
- data.tar.gz: 671538d2aaeefa63fb4380252e3d167da7b65f05e1af3899f91de9ce1dd1ef53100d04dd72b868baf690e8b2187f55d2a092474a6140e3ddb35c17fe52766f66
6
+ metadata.gz: 4179d91435cdc9c82c39c92a15f3df4e7e437f250eccf01e79cf9cb631c326b76badaed3e5851cc26c91713c0cdc27feba56127e8d8c647525960286efd50412
7
+ data.tar.gz: b5f8ca4461440a785d544017fc1dbc72e9edfdc1d6924717813cf7cd1bfb67fa8695ecc072d00fd476d55eee3ecedca710c107a11bbfe89e8d4b067f443040ae
@@ -0,0 +1,78 @@
1
+ class VideoSieveReel < VideoSieve
2
+ # To check if it's valid for the inputted graphql objects
3
+ def self.check(graphql_objects)
4
+ video_object = self.extractor(graphql_objects)
5
+
6
+ return false unless video_object.has_key?("short_form_video_context")
7
+ true
8
+ rescue StandardError
9
+ return false
10
+ end
11
+
12
+ # output the expected format of:
13
+ #
14
+ # post_details = {
15
+ # id: video_object["id"],
16
+ # num_comments: num_comments,
17
+ # num_shares: share_count_object.fetch("count", nil),
18
+ # num_views: feedback_object["comet_ufi_summary_and_actions_renderer"]["feedback"]["video_view_count"],
19
+ # reshare_warning: feedback_object["comet_ufi_summary_and_actions_renderer"]["feedback"]["should_show_reshare_warning"],
20
+ # video_preview_image_url: video_object["preferred_thumbnail"]["image"]["uri"],
21
+ # video_url: video_object["browser_native_hd_url"] || video_object["browser_native_sd_url"],
22
+ # text: text,
23
+ # created_at: creation_date,
24
+ # profile_link: story_node_object["comet_sections"]["context_layout"]["story"]["comet_sections"]["actor_photo"]["story"]["actors"][0]["url"],
25
+ # has_video: true
26
+ # }
27
+ # post_details[:video_preview_image_file] = Forki.retrieve_media(post_details[:video_preview_image_url])
28
+ # post_details[:video_file] = Forki.retrieve_media(post_details[:video_url])
29
+ # post_details[:reactions] = reaction_counts
30
+
31
+ def self.sieve(graphql_objects)
32
+ video_object = self.extractor(graphql_objects)
33
+
34
+
35
+ feedback_object = graphql_objects.filter do |go|
36
+ go = go.first if go.kind_of?(Array) && !go.empty?
37
+ !go.dig("feedback", "top_level_comments").nil?
38
+ end.first
39
+
40
+ reels_feedback_renderer = graphql_objects.filter do |go|
41
+ go.dig("reels_feedback_renderer")
42
+ end.first
43
+
44
+ reels_feedback_renderer["reels_feedback_renderer"]["story"]
45
+ reshare_warning = video_object["short_form_video_context"]["playback_video"].dig("warning_screen_renderer", "cix_screen", "view_model", "__typename") == "OverlayWarningScreenViewModel"
46
+
47
+ video_preview_image_url = video_object["short_form_video_context"]["playback_video"]["preferred_thumbnail"]["image"]["uri"]
48
+ video_url = video_object["short_form_video_context"]["playback_video"]["browser_native_hd_url"] || video_object["short_form_video_context"]["playback_video"]["browser_native_sd_url"]
49
+
50
+ post_details = {
51
+ id: video_object["short_form_video_context"]["video"]["id"],
52
+ num_comments: feedback_object["feedback"]["top_level_comments"]["totalCountIncludingReplies"],
53
+ num_shared: Forki::Scraper.extract_int_from_num_element(feedback_object["feedback"]["share_count_reduced"]),
54
+ num_views: nil,
55
+ reshare_warning: reshare_warning,
56
+ video_preview_image_url: video_preview_image_url,
57
+ video_url: video_url,
58
+ text: nil, # Reels don't have text
59
+ created_at: JSON.parse(feedback_object["tracking"])["page_insights"].first[1]["post_context"]["publish_time"], # Yea, this is weird
60
+ profile_link: video_object["short_form_video_context"]["video_owner"]["url"],
61
+ has_video: true,
62
+ video_preview_image_file: Forki.retrieve_media(video_preview_image_url),
63
+ video_file: Forki.retrieve_media(video_url),
64
+ reactions: nil # Only available on comments it seems? Look into this again sometime
65
+ }
66
+ end
67
+
68
+ private
69
+
70
+ def self.extractor(graphql_objects)
71
+ video_objects = graphql_objects.filter do |go|
72
+ go = go.first if go.kind_of?(Array) && !go.empty?
73
+ go.has_key?("video")
74
+ end
75
+
76
+ video_objects.first.dig("video", "creation_story")
77
+ end
78
+ end
data/lib/forki/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Forki
4
- VERSION = "0.2.2"
4
+ VERSION = "0.2.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -126,6 +126,7 @@ files:
126
126
  - lib/forki/scrapers/scraper.rb
127
127
  - lib/forki/scrapers/sieves/image_sieves/image_sieve.rb.rb
128
128
  - lib/forki/scrapers/sieves/video_sieves/video_sieve.rb
129
+ - lib/forki/scrapers/sieves/video_sieves/video_sieve_reel.rb
129
130
  - lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page.rb
130
131
  - lib/forki/scrapers/sieves/video_sieves/video_sieve_watch_tab.rb
131
132
  - lib/forki/scrapers/user_scraper.rb