class FindRecipe::Scraper

Constants

ROOT_URL

Public Class Methods

get_individual_recipe_page(recipe_url) click to toggle source
# File lib/find_recipe/scraper.rb, line 53
def self.get_individual_recipe_page(recipe_url)
        open_url(recipe_url)
end
get_recipe_page_from_keyword(keyword) click to toggle source
# File lib/find_recipe/scraper.rb, line 48
def self.get_recipe_page_from_keyword(keyword)
        url = ROOT_URL + "/uk/search/#{keyword}"
        open_url(url)
end
open_url(url) click to toggle source
# File lib/find_recipe/scraper.rb, line 57
def self.open_url(url)
        Nokogiri::HTML(open(url))
end
scrape_individual_recipe_data(recipe_url) click to toggle source
# File lib/find_recipe/scraper.rb, line 28
def self.scrape_individual_recipe_data(recipe_url)
        recipe_data = {}

        recipe_page = self.get_individual_recipe_page(recipe_url)
        recipe_data[:description] = recipe_page.at("meta[itemprop='description']")['content']
        
        # Gets ingredients as an array of each ingredient
        recipe_data[:ingredients] = recipe_page.css(".ingredient__details").collect { |ingredient| ingredient.text.strip }
        
        # Gets steps as an array of each step
        recipe_data[:steps] = recipe_page.css(".step .prose").collect { |step| step.text.strip }

        recipe_data
end
scrape_search_page(keyword) click to toggle source
# File lib/find_recipe/scraper.rb, line 16
def self.scrape_search_page(keyword)
        recipe_page = self.get_recipe_page_from_keyword(keyword)
        
        recipe_cards = recipe_page.css("li.wide-card")
        recipe_cards.collect do |card|
                        recipe = {
                                name: card.css("h2.recipe-title span").text.strip,
                                url: ROOT_URL + card.css("a.media").attribute("href").value
                        }
        end
end