diff --git a/lib/forki/post.rb b/lib/forki/post.rb index a65a24a..bf011bf 100644 --- a/lib/forki/post.rb +++ b/lib/forki/post.rb @@ -19,11 +19,8 @@ def self.lookup(urls = []) :text, :created_at, :user, - :video_file, :video_files, - :video_preview_image_file, :video_preview_image_files, - :video_preview_image_url, :video_preview_image_urls, :screenshot_file @@ -44,11 +41,8 @@ def initialize(post_hash = {}) @text = post_hash[:text] @created_at = post_hash[:created_at] @user = post_hash[:user] - @video_file = post_hash[:video_file] @video_files = post_hash[:video_files] - @video_preview_image_file = post_hash[:video_preview_image_file] @video_preview_image_files = post_hash[:video_preview_image_files] - @video_preview_image_url = post_hash[:video_preview_image_url] @video_preview_image_urls = post_hash[:video_preview_image_urls] @screenshot_file = post_hash[:screenshot_file] end diff --git a/lib/forki/scrapers/post_scraper.rb b/lib/forki/scrapers/post_scraper.rb index 23cf801..61d9370 100644 --- a/lib/forki/scrapers/post_scraper.rb +++ b/lib/forki/scrapers/post_scraper.rb @@ -307,16 +307,16 @@ def extract_video_comment_post_data(graphql_objects) num_shares: feedback_object["share_count"]["count"], num_views: feedback_object["video_view_count"], reshare_warning: feedback_object["should_show_reshare_warning"], - video_preview_image_url: media["preferred_thumbnail"]["image"]["uri"], - video_url: media["playable_url_quality_hd"] || media["playable_url"], + video_preview_image_urls: [media["preferred_thumbnail"]["image"]["uri"]], + video_urls: [media["playable_url_quality_hd"] || media["playable_url"]], text: graphql_nodes.first["comet_sections"]["content"]["story"]["comet_sections"]["message"]["story"]["message"]["text"], created_at: media["publish_time"], profile_link: graphql_nodes.first["comet_sections"]["context_layout"]["story"]["comet_sections"]["actor_photo"]["story"]["actors"].first["url"], has_video: true } - post_details[:video_preview_image_file] = Forki.retrieve_media(post_details[:video_preview_image_url]) - post_details[:video_file] = Forki.retrieve_media(post_details[:video_url]) + post_details[:video_preview_image_files] = [Forki.retrieve_media(post_details[:video_preview_image_url])] + post_details[:video_files] = [Forki.retrieve_media(post_details[:video_url])] post_details[:reactions] = inital_feedback_object["comet_ufi_summary_and_actions_renderer"]["feedback"]["i18n_reaction_count"] post_details end @@ -421,20 +421,41 @@ def extract_video_post_data(graphql_strings) reshare_warning = feedback_object["comet_ufi_summary_and_actions_renderer"]["feedback"]["should_show_reshare_warning"] end + # This is a bit of a mess, mostly because of the different ways Facebook structures its video objects, especially + # the "legacy" which is being migrated, but not 100% of the way there yet if video_object.has_key?("videoDeliveryResponseFragment") && !video_object["videoDeliveryResponseFragment"].nil? progressive_urls_wrapper = video_object["videoDeliveryResponseFragment"]["videoDeliveryResponseResult"] - video_url = progressive_urls_wrapper["progressive_urls"].find_all { |object| !object["progressive_url"].nil? }.last["progressive_url"] + video_urls = progressive_urls_wrapper["progressive_urls"].find_all { |object| !object["progressive_url"].nil? }.last["progressive_url"] + video_urls = [video_urls] + video_preview_image_urls = [video_object["preferred_thumbnail"]["image"]["uri"]] elsif video_object_array.nil? video_object_url_subsearch = video_object video_object_url_subsearch = video_object["videoDeliveryLegacyFields"] if video_object_url_subsearch.has_key?("videoDeliveryLegacyFields") - video_url = video_object_url_subsearch["browser_native_hd_url"] || video_object_url_subsearch["browser_native_sd_url"] + video_urls = video_object_url_subsearch["browser_native_hd_url"] || video_object_url_subsearch["browser_native_sd_url"] + video_urls = [video_urls] + + video_preview_image_urls = [video_object["preferred_thumbnail"]["image"]["uri"]] + elsif video_object_array.count > 1 # Multiple videos + video_urls = [] + video_preview_image_urls = [] + video_object_array.each do |video_object| + possible_subsearch = video_object.dig("media", "video_grid_renderer", "video") + video_object = video_object.dig("media", "video_grid_renderer", "video") unless possible_subsearch.nil? + if video_object.has_key?("videoDeliveryResponseFragment") && !video_object["videoDeliveryResponseFragment"].nil? + progressive_urls_wrapper = video_object["videoDeliveryResponseFragment"]["videoDeliveryResponseResult"] + video_urls << progressive_urls_wrapper["progressive_urls"].find_all { |object| !object["progressive_url"].nil? }.last["progressive_url"] + else + video_object_url_subsearch = video_object["videoDeliveryLegacyFields"] if video_object.has_key?("videoDeliveryLegacyFields") + video_urls << video_object_url_subsearch["browser_native_hd_url"] || video_object_url_subsearch["browser_native_sd_url"] + end - video_preview_image_url = video_object["preferred_thumbnail"]["image"]["uri"] + video_preview_image_urls << video_object["preferred_thumbnail"]["image"]["uri"] + end else video_urls = video_object_array.map do |video_object| video_object_url_subsearch = video_object["media"]["video_grid_renderer"]["video"] video_object_url_subsearch = video_object_url_subsearch["videoDeliveryLegacyFields"] if video_object_url_subsearch.has_key?("videoDeliveryLegacyFields") - video_url = video_object_url_subsearch["browser_native_hd_url"] || video_object_url_subsearch["browser_native_sd_url"] + video_object_url_subsearch["browser_native_hd_url"] || video_object_url_subsearch["browser_native_sd_url"] end video_preview_image_urls = video_object_array.map do |video_object| @@ -442,7 +463,6 @@ def extract_video_post_data(graphql_strings) end end - video_url = "" if video_url.nil? video_urls = [] if video_urls.nil? post_details = { @@ -451,17 +471,15 @@ def extract_video_post_data(graphql_strings) num_shares: share_count_object.fetch("count", nil), num_views: view_count, reshare_warning: reshare_warning, - video_preview_image_url: video_preview_image_url, video_preview_image_urls: video_preview_image_urls, - video_url: video_url, video_urls: video_urls, text: text, created_at: creation_date, profile_link: story_node_object["comet_sections"]["context_layout"]["story"]["comet_sections"]["actor_photo"]["story"]["actors"][0]["url"], has_video: true } - post_details[:video_preview_image_file] = Forki.retrieve_media(post_details[:video_preview_image_url]) - post_details[:video_file] = Forki.retrieve_media(post_details[:video_url]) + post_details[:video_preview_image_files] = video_preview_image_urls.map { |url| Forki.retrieve_media(url) } + post_details[:video_files] = video_urls.map { |url| Forki.retrieve_media(url) } post_details[:reactions] = reaction_counts post_details @@ -500,22 +518,25 @@ def extract_video_post_data_alternative(graphql_object_array) video_url = progressive_urls_wrapper["progressive_urls"].find_all { |object| !object["progressive_url"].nil? }.last["progressive_url"] end + video_urls = [video_url] + video_preview_image_urls = [video_object["video"]["preferred_thumbnail"]["image"]["uri"]] + post_details = { id: video_object["id"], num_comments: num_comments, num_shares: share_count_object.fetch("count", nil), num_views: feedback_object["video_view_count"], reshare_warning: feedback_object["should_show_reshare_warning"], - video_preview_image_url: video_object["video"]["preferred_thumbnail"]["image"]["uri"], - video_url: video_url, + video_preview_image_urls: video_preview_image_urls, + video_urls: video_urls, text: text, created_at: video_object["video"]["publish_time"], profile_link: sidepane_object["tahoe_sidepane_renderer"]["video"]["creation_story"]["comet_sections"]["actor_photo"]["story"]["actors"][0]["url"], has_video: true } - post_details[:video_preview_image_file] = Forki.retrieve_media(post_details[:video_preview_image_url]) - post_details[:video_file] = Forki.retrieve_media(post_details[:video_url]) + post_details[:video_preview_image_files] = video_preview_image_urls.map { |url| Forki.retrieve_media(url) } + post_details[:video_files] = video_urls.map { |url| Forki.retrieve_media(url) } post_details[:reactions] = reaction_counts post_details end @@ -649,22 +670,27 @@ def extract_video_post_data_from_watch_page(graphql_strings) reaction_counts = extract_reaction_counts(creation_story_object["feedback"]["top_reactions"]) end + video_url = (media_object.fetch("playable_url_quality_hd", nil) || media_object.fetch("playable_url", nil)).delete("\\") + video_urls = [video_url] + + video_preview_image_urls = [media_object["preferred_thumbnail"]["image"]["uri"]] + post_details = { id: video_object["id"], num_comments: creation_story_object["feedback"]["total_comment_count"], num_shares: nil, # Not present for watch feed videos? num_views: creation_story_object["feedback"]["video_view_count_renderer"]["feedback"]["video_view_count"], reshare_warning: creation_story_object["feedback"]["should_show_reshare_warning"], - video_preview_image_url: video_object["video"]["story"]["attachments"][0]["media"]["preferred_thumbnail"]["image"]["uri"], - video_url: (media_object.fetch("playable_url_quality_hd", nil) || media_object.fetch("playable_url", nil)).delete("\\"), + video_preview_image_urls: video_preview_image_urls, + video_urls: video_urls, text: (creation_story_object["creation_story"]["message"] || {})["text"], created_at: video_object["video"]["story"]["attachments"][0]["media"]["publish_time"], profile_link: video_permalink[..video_permalink.index("/videos")], has_video: true } - post_details[:video_preview_image_file] = Forki.retrieve_media(post_details[:video_preview_image_url]) - post_details[:video_file] = Forki.retrieve_media(post_details[:video_url]) + post_details[:video_preview_image_files] = video_preview_image_files.map { |url| Forki.retrieve_media(url) } + post_details[:video_files] = video_files.map { |url| Forki.retrieve_media(url) } post_details[:reactions] = reaction_counts post_details end @@ -681,22 +707,25 @@ def extract_live_video_post_data_from_watch_page(graphql_strings) reaction_counts = extract_reaction_counts(creation_story_object["feedback_context"]["feedback_target_with_context"]["top_reactions"]) end + video_preview_image_urls = [creation_story_object["attachments"][0]["media"]["preferred_thumbnail"]["image"]["uri"]] + video_urls = [(media_object.fetch("playable_url_quality_hd", nil) || media_object.fetch("playable_url", nil)).delete("\\")] + post_details = { id: creation_story_object["shareable"]["id"], num_comments: creation_story_object["feedback_context"]["feedback_target_with_context"]["total_comment_count"], num_shares: nil, num_views: find_number_of_views, # as far as I can tell, this is never present for live videos reshare_warning: creation_story_object["feedback_context"]["feedback_target_with_context"]["should_show_reshare_warning"], - video_preview_image_url: creation_story_object["attachments"][0]["media"]["preferred_thumbnail"]["image"]["uri"], - video_url: (media_object.fetch("playable_url_quality_hd", nil) || media_object.fetch("playable_url", nil)).delete("\\"), + video_preview_image_urls: video_preview_image_urls, + video_urls: video_urls, text: creation_story_object["attachments"][0]["media"]["savable_description"]["text"], created_at: creation_story_object["attachments"][0]["media"]["publish_time"], profile_link: video_permalink[..video_permalink.index("/videos")], has_video: true } - post_details[:video_preview_image_file] = Forki.retrieve_media(post_details[:video_preview_image_url]) - post_details[:video_file] = Forki.retrieve_media(post_details[:video_url]) + post_details[:video_preview_image_files] = video_preview_image_files.map { |url| Forki.retrieve_media(url) } + post_details[:video_files] = video_files.map { |url| Forki.retrieve_media(url) } post_details[:reactions] = reaction_counts post_details end diff --git a/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel.rb b/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel.rb index 40e7950..116d3b0 100644 --- a/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel.rb +++ b/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel.rb @@ -53,7 +53,7 @@ def self.sieve(graphql_objects) reels_feedback_renderer["reels_feedback_renderer"]["story"] reshare_warning = video_object["short_form_video_context"]["playback_video"].dig("warning_screen_renderer", "cix_screen", "view_model", "__typename") == "OverlayWarningScreenViewModel" - video_preview_image_url = video_object["short_form_video_context"]["playback_video"]["preferred_thumbnail"]["image"]["uri"] + video_preview_image_urls = [video_object["short_form_video_context"]["playback_video"]["preferred_thumbnail"]["image"]["uri"]] 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"] { @@ -62,14 +62,14 @@ def self.sieve(graphql_objects) num_shared: Forki::Scraper.extract_int_from_num_element(feedback_object["feedback"]["share_count_reduced"]), num_views: nil, reshare_warning: reshare_warning, - video_preview_image_url: video_preview_image_url, + video_preview_image_urls: video_preview_image_urls, video_url: video_url, text: nil, # Reels don't have text created_at: JSON.parse(feedback_object["tracking"])["page_insights"].first[1]["post_context"]["publish_time"], # Yea, this is weird profile_link: video_object["short_form_video_context"]["video_owner"]["url"], has_video: true, - video_preview_image_file: Forki.retrieve_media(video_preview_image_url), - video_file: Forki.retrieve_media(video_url), + video_preview_image_files: video_preview_image_url.map { |url| Forki.retrieve_media(url) }, + video_files: [Forki.retrieve_media(video_url)], reactions: nil # Only available on comments it seems? Look into this again sometime } end diff --git a/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel_2.rb b/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel_2.rb index 155c9e1..50c4479 100644 --- a/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel_2.rb +++ b/lib/forki/scrapers/sieves/video_sieves/video_sieve_reel_2.rb @@ -51,7 +51,7 @@ def self.sieve(graphql_objects) reels_feedback_renderer["reels_feedback_renderer"]["story"] reshare_warning = video_object["short_form_video_context"]["playback_video"].dig("warning_screen_renderer", "cix_screen", "view_model", "__typename") == "OverlayWarningScreenViewModel" - video_preview_image_url = video_object["short_form_video_context"]["playback_video"]["preferred_thumbnail"]["image"]["uri"] + video_preview_image_urls = [video_object["short_form_video_context"]["playback_video"]["preferred_thumbnail"]["image"]["uri"]] 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"] if !video_object.dig("short_form_video_context", "playback_video", "videoDeliveryResponseFragment", "videoDeliveryResponseResult").nil? @@ -71,14 +71,14 @@ def self.sieve(graphql_objects) num_shared: Forki::Scraper.extract_int_from_num_element(feedback_object["feedback"]["share_count_reduced"]), num_views: nil, reshare_warning: reshare_warning, - video_preview_image_url: video_preview_image_url, + video_preview_image_urls: video_preview_image_urls, video_url: video_url, text: nil, # Reels don't have text created_at: video_object["creation_time"], profile_link: video_object["short_form_video_context"]["video_owner"]["url"], has_video: true, - video_preview_image_file: Forki.retrieve_media(video_preview_image_url), - video_file: Forki.retrieve_media(video_url), + video_preview_image_files: video_preview_image_urls.map { |url| Forki.retrieve_media(url) }, + video_files: [Forki.retrieve_media(video_url)], reactions: nil # Only available on comments it seems? Look into this again sometime } end diff --git a/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page.rb b/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page.rb index d00e676..a4b7c09 100644 --- a/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page.rb +++ b/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page.rb @@ -39,7 +39,7 @@ def self.sieve(graphql_objects) video_object = extracted_text["content"]["story"]["attachments"].first["styles"]["attachment"]["media"] feedback_object = extracted_text["feedback"]["story"]["feedback_context"]["feedback_target_with_context"]["ufi_renderer"]["feedback"]["comet_ufi_summary_and_actions_renderer"]["feedback"] - video_preview_image_url = video_object["preferred_thumbnail"]["image"]["uri"] + video_preview_image_urls = [video_object["preferred_thumbnail"]["image"]["uri"]] video_url = video_object["browser_native_hd_url"] video_url = video_object["browser_native_sd_url"] if video_url.nil? @@ -49,14 +49,14 @@ def self.sieve(graphql_objects) num_shared: feedback_object["share_count"]["count"], num_views: nil, reshare_warning: feedback_object["should_show_reshare_warning"], - video_preview_image_url: video_preview_image_url, + video_preview_image_urls: video_preview_image_urls, video_url: video_url, text: story_object["message"]["text"], created_at: video_object["publish_time"], profile_link: story_object["actors"].first["url"], has_video: true, - video_preview_image_file: Forki.retrieve_media(video_preview_image_url), - video_file: Forki.retrieve_media(video_url), + video_preview_image_files: video_preview_image_url.map { |url| Forki.retrieve_media(url) }, + video_files: [Forki.retrieve_media(video_url)], reactions: feedback_object["cannot_see_top_custom_reactions"]["top_reactions"]["edges"] } end diff --git a/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page_2.rb b/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page_2.rb index f315430..5850a4a 100644 --- a/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page_2.rb +++ b/lib/forki/scrapers/sieves/video_sieves/video_sieve_video_page_2.rb @@ -39,7 +39,7 @@ def self.sieve(graphql_objects) video_object = extracted_text["content"]["story"]["attachments"].first["styles"]["attachment"]["media"] feedback_object = extracted_text["feedback"]["story"]["feedback_context"]["feedback_target_with_context"]["ufi_renderer"]["feedback"]["comet_ufi_summary_and_actions_renderer"]["feedback"] - video_preview_image_url = video_object["preferred_thumbnail"]["image"]["uri"] + video_preview_image_urls = [video_object["preferred_thumbnail"]["image"]["uri"]] video_url = video_object["browser_native_hd_url"] video_url = video_object["browser_native_sd_url"] if video_url.nil? @@ -49,14 +49,14 @@ def self.sieve(graphql_objects) num_shared: feedback_object["share_count"]["count"], num_views: nil, reshare_warning: feedback_object["should_show_reshare_warning"], - video_preview_image_url: video_preview_image_url, + video_preview_image_urls: video_preview_image_urls.map { |url| Forki.retrieve_media(url) }, video_url: video_url, text: story_object["message"]["text"], created_at: video_object["publish_time"], profile_link: story_object["actors"].first["url"], has_video: true, - video_preview_image_file: Forki.retrieve_media(video_preview_image_url), - video_file: Forki.retrieve_media(video_url), + video_preview_image_files: video_preview_image_urls.map { |url| Forki.retrieve_media(url) }, + video_files: [Forki.retrieve_media(video_url)], reactions: feedback_object["top_reactions"]["edges"] } end diff --git a/lib/forki/scrapers/sieves/video_sieves/video_sieve_watch_tab.rb b/lib/forki/scrapers/sieves/video_sieves/video_sieve_watch_tab.rb index 8acc610..f44d9fe 100644 --- a/lib/forki/scrapers/sieves/video_sieves/video_sieve_watch_tab.rb +++ b/lib/forki/scrapers/sieves/video_sieves/video_sieve_watch_tab.rb @@ -66,6 +66,7 @@ def self.sieve(graphql_objects) video_preview_image_url = video_object["short_form_video_context"]["video"]["first_frame_thumbnail"] if video_preview_image_url.nil? raise Forki::VideoSieveFailedError.new(sieve_class: "VideoSieveWatchTab") if video_preview_image_url.nil? + video_preview_image_urls = [video_preview_image_url] if !video_object["feedback_context"].nil? feedback_object = video_object["feedback_context"]["feedback_target_with_context"] @@ -101,14 +102,14 @@ def self.sieve(graphql_objects) num_shared: nil, # This is not associated with these videos in this format num_views: feedback_object.dig("video_view_count_renderer", "feedback", "video_view_count"), # This is not associated with these videos in this format reshare_warning: feedback_object["should_show_reshare_warning"], - video_preview_image_url: video_preview_image_url, + video_preview_image_urls: video_preview_image_urls, video_url: video_url, text: nil, # There is no text associated with these videos created_at: video_object["attachments"].first["media"]["publish_time"], profile_link: profile_link, has_video: true, - video_preview_image_file: Forki.retrieve_media(video_preview_image_url), - video_file: Forki.retrieve_media(video_url), + video_preview_image_files: video_preview_image_urls.map { |url| Forki.retrieve_media(url) }, + video_files: [Forki.retrieve_media(video_url)], reactions: reactions } end diff --git a/lib/forki/version.rb b/lib/forki/version.rb index 6cea7e5..e0718de 100644 --- a/lib/forki/version.rb +++ b/lib/forki/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Forki - VERSION = "0.2.30" + VERSION = "0.2.31" end diff --git a/test/post_test.rb b/test/post_test.rb index eff315a..ec5319c 100644 --- a/test/post_test.rb +++ b/test/post_test.rb @@ -25,7 +25,7 @@ def test_an_image_post_by_a_page_returns_properly_when_scraped assert File.size(post.image_file) > 1000 assert_not_nil post.screenshot_file - assert_nil post.video_file + assert_nil post.video_files assert_not_nil post.user assert_not_nil post.created_at @@ -53,11 +53,15 @@ def test_that_a_video_post_in_a_comment_thread_is_detected_correctly assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_not_nil post.video_file - assert File.size(post.video_file) > 1000 + assert_not_nil post.video_files + post.video_files.each do |video| + assert File.size(video) > 1000 + end - assert_not_nil post.video_preview_image_file - assert File.size(post.video_preview_image_file) > 1000 + assert_not_nil post.video_preview_image_files + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end assert_not_nil post.screenshot_file assert_nil post.image_file @@ -99,11 +103,15 @@ def test_a_video_post_by_a_user_returns_properly_when_scraped assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_not_nil post.video_file - assert File.size(post.video_file) > 1000 + assert_not_nil post.video_files + post.video_files.each do |video| + assert File.size(video) > 1000 + end - assert_not_nil post.video_preview_image_file - assert File.size(post.video_preview_image_file) > 1000 + assert_not_nil post.video_preview_image_files + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end assert_not_nil post.screenshot_file assert_nil post.image_file @@ -124,11 +132,15 @@ def test_a_video_post_by_a_page_retuns_properly_when_scraped # 777777777777777 assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_not_nil post.video_file - assert File.size(post.video_file) > 1000 + assert_not_nil post.video_files + post.video_files.each do |video| + assert File.size(video) > 1000 + end - assert_not_nil post.video_preview_image_file - assert File.size(post.video_preview_image_file) > 1000 + assert_not_nil post.video_preview_image_files + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end assert_not_nil post.screenshot_file assert_nil post.image_file @@ -149,11 +161,15 @@ def test_a_video_in_the_watch_tab_returns_properly_when_scraped # 77777777777777 assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_not_nil post.video_file - assert File.size(post.video_file) > 1000 + assert_not_nil post.video_files + post.video_files.each do |video| + assert File.size(video) > 1000 + end - assert_not_nil post.video_preview_image_file - assert File.size(post.video_preview_image_file) > 1000 + assert_not_nil post.video_preview_image_files + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end assert_not_nil post.screenshot_file assert_nil post.image_file @@ -192,12 +208,16 @@ def test_a_video_works assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_not_nil post.video_file - assert File.size(post.video_file) > 1000 + assert_not_nil post.video_files + post.video_files.each do |video| + assert File.size(video) > 1000 + end assert_not_nil post.screenshot_file - assert_not_nil post.video_preview_image_file - assert File.size(post.video_preview_image_file) > 1000 + assert_not_nil post.video_preview_image_files + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end assert_nil post.image_file @@ -232,9 +252,9 @@ def test_various_domain_types assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_nil post.video_file + assert_nil post.video_files assert_not_nil post.screenshot_file - assert_nil post.video_preview_image_file + assert_nil post.video_preview_image_files assert_not_nil post.image_file assert File.size(post.image_file) > 1000 @@ -248,16 +268,25 @@ def test_reel post = Forki::Post.lookup("https://www.facebook.com/reel/809749953859034").first assert_not_nil(post) - assert File.size(post.video_file) > 1000 - assert File.size(post.video_preview_image_file) > 1000 + post.video_files.each do |image| + assert File.size(image) > 1000 + end + + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end end def test_reel_other_format post = Forki::Post.lookup("https://www.facebook.com/share/r/jh5LX4CNhPXxn83F/").first assert_not_nil(post) - assert File.size(post.video_file) > 1000 - assert File.size(post.video_preview_image_file) > 1000 + post.video_files.each do |image| + assert File.size(image) > 1000 + end + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end end # Not sure why this is here, it's not a link that works @@ -273,12 +302,17 @@ def test_another_link_2 assert_predicate post.num_comments, :positive? assert_predicate post.reactions.length, :positive? - assert_not_nil post.video_file - assert File.size(post.video_file) > 1000 + assert_not_nil post.video_files + post.video_files.each do |video| + assert File.size(video) > 1000 + end assert_not_nil post.screenshot_file - assert_not_nil post.video_preview_image_file - assert File.size(post.video_preview_image_file) > 1000 + assert_not_nil post.video_preview_image_files + + post.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end assert_nil post.image_file @@ -301,16 +335,25 @@ def test_an_alternative_reel post = Forki::Post.lookup("https://www.facebook.com/reel/2841887882618164") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 - assert File.size(post.first.video_preview_image_file) > 1000 + post.first.video_files.each do |image| + assert File.size(image) > 1000 + end + + post.first.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end end def test_a_url_that_seems_to_fail post = Forki::Post.lookup("https://www.facebook.com/mydefiguru/posts/2857725071050020/") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 - assert File.size(post.first.video_preview_image_file) > 1000 + post.first.video_files.each do |image| + assert File.size(image) > 1000 + end + post.first.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end end def test_a_url_that_seems_to_fail_2 @@ -332,8 +375,12 @@ def test_a_video_without_text_works post = Forki::Post.lookup("https://www.facebook.com/watch/live/?ref=watch_permalink&v=535737772684504") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 - assert File.size(post.first.video_preview_image_file) > 1000 + post.first.video_files.each do |image| + assert File.size(image) > 1000 + end + post.first.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end end def test_a_removed_error_for_a_profile_page @@ -346,8 +393,12 @@ def test_a_video_isnt_blank post = Forki::Post.lookup("https://www.facebook.com/share/v/g1uQJ98rQp9pSEjw/") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 - assert File.size(post.first.video_preview_image_file) > 1000 + post.first.video_files.each do |image| + assert File.size(image) > 1000 + end + post.first.video_preview_image_files.each do |image| + assert File.size(image) > 1000 + end end def test_a_new_link @@ -368,7 +419,10 @@ def test_a_share_link_works post = Forki::Post.lookup("https://www.facebook.com/share/v/13NPBYGEFF/") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 + post.first.video_files.each do |video| + assert File.size(video) > 1000 + end + assert_not_nil(post.first.user) end @@ -396,18 +450,13 @@ def test_a_post_user_isnt_a_hash assert_kind_of(Forki::User, post.first.user) end - def test_yet_another_link_1 - post = Forki::Post.lookup("https://www.facebook.com/TrucsMaman/posts/1232930621331239") - assert_not_nil(post) - - assert File.size(post.first.image_file) > 1000 - end - def test_yet_another_link_2 post = Forki::Post.lookup("https://www.facebook.com/permalink.php?story_fbid=pfbid02E26psygjdZJ7YEeEhXJkgTpbDdjYZZHNZyezK9iA65PGPwQKT35pHb4GjoVVexGcl&id=100079991325065") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 + post.first.video_files.each do |image| + assert File.size(image) > 1000 + end assert File.size(post.first.user.profile_image_file) > 1000 end @@ -421,7 +470,9 @@ def test_a_video_is_actually_downloaded post = Forki::Post.lookup("https://www.facebook.com/100089812680688/videos/2360570097610510/") assert_not_nil(post) - assert File.size(post.first.video_file) > 1000 + post.first.video_files.each do |image| + assert File.size(image) > 1000 + end assert File.size(post.first.user.profile_image_file) > 1000 end @@ -430,7 +481,9 @@ def test_multiple_videos_work assert_not_nil(posts) posts.each do |post| - assert File.size(post.video_file) > 1000 + post.video_files.each do |image| + assert File.size(image) > 1000 + end assert File.size(post.user.profile_image_file) > 1000 assert_not_nil(post.created_at) end diff --git a/test/sieves/video_sieves/video_sieve_reel_2_test.rb b/test/sieves/video_sieves/video_sieve_reel_2_test.rb index 5ab3dcf..8facdfb 100644 --- a/test/sieves/video_sieves/video_sieve_reel_2_test.rb +++ b/test/sieves/video_sieves/video_sieve_reel_2_test.rb @@ -26,14 +26,15 @@ def test_sieve_can_sieve_properly assert_equal 8100, result[:num_shared] assert_nil result[:num_views] assert_equal true, result[:reshare_warning] - assert_not_nil result[:video_preview_image_url] + assert_not_nil result[:video_preview_image_urls] + assert_not result[:video_preview_image_urls].empty? assert_not_nil result[:video_url] assert_nil result[:text] assert_equal 1689646427, result[:created_at] assert_equal "https://www.facebook.com/cathy.christian.9889", result[:profile_link] assert_equal true, result[:has_video] - assert_not_nil result[:video_preview_image_file] - assert_not_nil result[:video_file] + assert_not_nil result[:video_preview_image_files] + assert_not_nil result[:video_files] assert_nil result[:reactions] end end diff --git a/test/sieves/video_sieves/video_sieve_reel_test.rb b/test/sieves/video_sieves/video_sieve_reel_test.rb index 4e2c619..b760de7 100644 --- a/test/sieves/video_sieves/video_sieve_reel_test.rb +++ b/test/sieves/video_sieves/video_sieve_reel_test.rb @@ -26,14 +26,15 @@ def test_sieve_can_sieve_properly assert_equal 8100, result[:num_shared] assert_nil result[:num_views] assert_equal true, result[:reshare_warning] - assert_not_nil result[:video_preview_image_url] + assert_not_nil result[:video_preview_image_urls] + assert_not result[:video_preview_image_urls].empty? assert_not_nil result[:video_url] assert_nil result[:text] assert_equal 1689646427, result[:created_at] assert_equal "https://www.facebook.com/cathy.christian.9889", result[:profile_link] assert_equal true, result[:has_video] - assert_not_nil result[:video_preview_image_file] - assert_not_nil result[:video_file] + assert_not_nil result[:video_preview_image_files] + assert_not_nil result[:video_files] assert_nil result[:reactions] end end diff --git a/test/sieves/video_sieves/video_sieve_video_page_2_test.rb b/test/sieves/video_sieves/video_sieve_video_page_2_test.rb index 805aa30..b6c6bcc 100644 --- a/test/sieves/video_sieves/video_sieve_video_page_2_test.rb +++ b/test/sieves/video_sieves/video_sieve_video_page_2_test.rb @@ -26,14 +26,15 @@ def test_sieve_can_sieve_properly assert_equal 485, result[:num_shared] assert_nil result[:num_views] assert_equal true, result[:reshare_warning] - assert_not_nil result[:video_preview_image_url] + assert_not_nil result[:video_preview_image_urls] + assert_not result[:video_preview_image_urls].empty? assert_not_nil result[:video_url] assert_equal "Infectious disease expert Dr. Anthony Fauci tells 60 Minutes: \"There's no reason to be walking around with a mask.\"\n\n🎥 60 Minutes", result[:text] assert_equal 1588777850, result[:created_at] assert_equal "https://www.facebook.com/PlandemicMovie", result[:profile_link] assert_equal true, result[:has_video] - assert_not_nil result[:video_preview_image_file] - assert_not_nil result[:video_file] + assert_not_nil result[:video_preview_image_files] + assert_not_nil result[:video_files] assert_not_nil result[:reactions] assert result[:reactions].kind_of?(Array) diff --git a/test/sieves/video_sieves/video_sieve_video_page_test.rb b/test/sieves/video_sieves/video_sieve_video_page_test.rb index 69462b5..0a393d5 100644 --- a/test/sieves/video_sieves/video_sieve_video_page_test.rb +++ b/test/sieves/video_sieves/video_sieve_video_page_test.rb @@ -26,14 +26,15 @@ def test_sieve_can_sieve_properly assert_equal 485, result[:num_shared] assert_nil result[:num_views] assert_equal true, result[:reshare_warning] - assert_not_nil result[:video_preview_image_url] + assert_not_nil result[:video_preview_image_urls] + assert_not result[:video_preview_image_urls].empty? assert_not_nil result[:video_url] assert_equal "Infectious disease expert Dr. Anthony Fauci tells 60 Minutes: \"There's no reason to be walking around with a mask.\"\n\n🎥 60 Minutes", result[:text] assert_equal 1588777850, result[:created_at] assert_equal "https://www.facebook.com/PlandemicMovie", result[:profile_link] assert_equal true, result[:has_video] - assert_not_nil result[:video_preview_image_file] - assert_not_nil result[:video_file] + assert_not_nil result[:video_preview_image_files] + assert_not_nil result[:video_files] assert_not_nil result[:reactions] assert result[:reactions].kind_of?(Array) diff --git a/test/sieves/video_sieves/video_sieve_watch_tab_test.rb b/test/sieves/video_sieves/video_sieve_watch_tab_test.rb index a35e8d2..20b0d83 100644 --- a/test/sieves/video_sieves/video_sieve_watch_tab_test.rb +++ b/test/sieves/video_sieves/video_sieve_watch_tab_test.rb @@ -25,14 +25,16 @@ def test_sieve_can_sieve_properly assert_nil result[:num_shared] assert_nil result[:num_views] assert_equal false, result[:reshare_warning] - assert_not_nil result[:video_preview_image_url] + assert_not_nil result[:video_preview_image_urls] + assert_not result[:video_preview_image_urls].empty? assert_not_nil result[:video_url] assert_nil result[:text] assert_equal 1654989063, result[:created_at] assert_equal "https://www.facebook.com/cookingwithgreens", result[:profile_link] assert_equal true, result[:has_video] - assert_not_nil result[:video_preview_image_file] - assert_not_nil result[:video_file] + assert_not_nil result[:video_preview_image_files] + assert_not result[:video_preview_image_files].empty? + assert_not_nil result[:video_files] assert_not_nil result[:reactions] assert result[:reactions].kind_of?(Array)