custom

package
v0.14.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 3, 2026 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterFeedScraper

func RegisterFeedScraper(hostname string, fn model.FeedScraper)

func RegisterScraper

func RegisterScraper(hostname string, fn model.Scraper)

func Scrape

func Scrape(data *model.DataInput, r *model.Recipe) error

func ScrapeFeed

func ScrapeFeed(data *model.DataInput, feed *model.Feed) error

func ScrapeFitMenCook

func ScrapeFitMenCook(data *model.DataInput, r *model.Recipe) error

func ScrapeGousto

func ScrapeGousto(data *model.DataInput, r *model.Recipe) error

func ScrapeHelloFreshFeed

func ScrapeHelloFreshFeed(data *model.DataInput, feed *model.Feed) error

func ScrapeKitchenStories

func ScrapeKitchenStories(data *model.DataInput, r *model.Recipe) error

func ScrapeKptnCook

func ScrapeKptnCook(data *model.DataInput, r *model.Recipe) error

func ScrapeMarleySpoon

func ScrapeMarleySpoon(data *model.DataInput, r *model.Recipe) error

func ScrapeMarleySpoonFeed

func ScrapeMarleySpoonFeed(data *model.DataInput, feed *model.Feed) error

Types

type GoustoData

type GoustoData struct {
	Status string `json:"status"`
	Data   struct {
		Entry struct {
			URL        string `json:"url"`
			Title      string `json:"title"`
			Categories []struct {
				Title string `json:"title"`
				URL   string `json:"url"`
				UID   string `json:"uid"`
			} `json:"categories"`
			GoustoID  string `json:"gousto_id"`
			GoustoUID string `json:"gousto_uid"`
			Media     struct {
				Images []struct {
					Image string `json:"image"`
					Width int    `json:"width"`
				} `json:"images"`
			} `json:"media"`
			Rating struct {
				Average float64 `json:"average"`
				Count   int     `json:"count"`
			} `json:"rating"`
			Description string `json:"description"`
			PrepTimes   struct {
				For2 int `json:"for_2"`
				For4 int `json:"for_4"`
			} `json:"prep_times"`
			Cuisine struct {
				Slug  string `json:"slug"`
				Title string `json:"title"`
			} `json:"cuisine"`
			Ingredients []struct {
				Label string `json:"label"`
				Title string `json:"title"`
				UID   string `json:"uid"`
				Name  string `json:"name"`
				Media struct {
					Images []struct {
						Image string `json:"image"`
						Width int    `json:"width"`
					} `json:"images"`
				} `json:"media"`
				Allergens struct {
					Allergen []any `json:"allergen"`
				} `json:"allergens"`
			} `json:"ingredients"`
			Basics []struct {
				Title string `json:"title"`
				Slug  string `json:"slug"`
			} `json:"basics"`
			CookingInstructions []struct {
				Instruction string `json:"instruction"`
				Order       int    `json:"order"`
				Media       struct {
					Images []struct {
						Image string `json:"image"`
						Width int    `json:"width"`
					} `json:"images"`
				} `json:"media"`
			} `json:"cooking_instructions"`
			Allergens []struct {
				Title string `json:"title"`
				Slug  string `json:"slug"`
			} `json:"allergens"`
			Seo struct {
				Title          string `json:"title"`
				Description    string `json:"description"`
				Robots         []any  `json:"robots"`
				Canonical      string `json:"canonical"`
				OpenGraphImage string `json:"open_graph_image"`
			} `json:"seo"`
			Tags                   []any  `json:"tags"`
			UID                    string `json:"uid"`
			Version                int    `json:"_version"`
			NutritionalInformation struct {
				PerHundredGrams struct {
					EnergyKcal     int `json:"energy_kcal"`
					EnergyKj       int `json:"energy_kj"`
					FatMg          int `json:"fat_mg"`
					FatSaturatesMg int `json:"fat_saturates_mg"`
					CarbsMg        int `json:"carbs_mg"`
					CarbsSugarsMg  int `json:"carbs_sugars_mg"`
					FibreMg        int `json:"fibre_mg"`
					ProteinMg      int `json:"protein_mg"`
					SaltMg         int `json:"salt_mg"`
					NetWeightMg    int `json:"net_weight_mg"`
				} `json:"per_hundred_grams"`
				PerPortion struct {
					EnergyKcal     int `json:"energy_kcal"`
					EnergyKj       int `json:"energy_kj"`
					FatMg          int `json:"fat_mg"`
					FatSaturatesMg int `json:"fat_saturates_mg"`
					CarbsMg        int `json:"carbs_mg"`
					CarbsSugarsMg  int `json:"carbs_sugars_mg"`
					FibreMg        int `json:"fibre_mg"`
					ProteinMg      int `json:"protein_mg"`
					SaltMg         int `json:"salt_mg"`
					NetWeightMg    int `json:"net_weight_mg"`
				} `json:"per_portion"`
			} `json:"nutritional_information"`
		} `json:"entry"`
	} `json:"data"`
}

type KitchenStoriesRecipe

type KitchenStoriesRecipe struct {
	ID         string `json:"id,omitempty"`
	Title      string `json:"title,omitempty"`
	Slug       string `json:"slug,omitempty"`
	Type       string `json:"type,omitempty"`
	ContentID  string `json:"content_id,omitempty"`
	Difficulty string `json:"difficulty,omitempty"`
	Duration   struct {
		Preparation int `json:"preparation,omitempty"`
		Baking      int `json:"baking,omitempty"`
		Resting     int `json:"resting,omitempty"`
	} `json:"duration,omitempty"`
	Image struct {
		ID     string `json:"id,omitempty"`
		Width  int    `json:"width,omitempty"`
		Height int    `json:"height,omitempty"`
		URL    string `json:"url,omitempty"`
	} `json:"image,omitempty"`
	Author struct {
		ID          string `json:"id,omitempty"`
		Name        string `json:"name,omitempty"`
		Type        string `json:"type,omitempty"`
		NewType     string `json:"new_type,omitempty"`
		Slug        string `json:"slug,omitempty"`
		Occupation  string `json:"occupation,omitempty"`
		Description string `json:"description,omitempty"`
		Image       struct {
			URL string `json:"url,omitempty"`
		} `json:"image,omitempty"`
		Website     string `json:"website,omitempty"`
		BannerImage struct {
			URL string `json:"url,omitempty"`
		} `json:"banner_image,omitempty"`
		IsPremium bool `json:"is_premium,omitempty"`
	} `json:"author,omitempty"`
	Publishing struct {
		Created   string `json:"created,omitempty"`
		Updated   string `json:"updated,omitempty"`
		Published string `json:"published,omitempty"`
		State     string `json:"state,omitempty"`
	} `json:"publishing,omitempty"`
	URL           string `json:"url,omitempty"`
	UserReactions struct {
		Rating        float64 `json:"rating,omitempty"`
		RatingCount   int     `json:"rating_count,omitempty"`
		ImagesCount   int     `json:"images_count,omitempty"`
		CommentsCount int     `json:"comments_count,omitempty"`
		LikeCount     int     `json:"like_count,omitempty"`
		Quality       float64 `json:"quality,omitempty"`
	} `json:"user_reactions,omitempty"`
	Servings struct {
		Amount int    `json:"amount,omitempty"`
		Type   string `json:"type,omitempty"`
	} `json:"servings,omitempty"`
	ChefsNote string `json:"chefs_note,omitempty"`
	Nutrition struct {
		Calories     float64 `json:"calories,omitempty"`
		Fat          float64 `json:"fat,omitempty"`
		Protein      float64 `json:"protein,omitempty"`
		Carbohydrate float64 `json:"carbohydrate,omitempty"`
	} `json:"nutrition,omitempty"`
	Meta struct {
		Title       string `json:"title,omitempty"`
		Description string `json:"description,omitempty"`
		Hreflang    struct {
			En string `json:"en,omitempty"`
			De string `json:"de,omitempty"`
		} `json:"hreflang,omitempty"`
	} `json:"meta,omitempty"`
	Tags []struct {
		ID       string `json:"id,omitempty"`
		Slug     string `json:"slug,omitempty"`
		Title    string `json:"title,omitempty"`
		Type     string `json:"type,omitempty"`
		IsHidden bool   `json:"is_hidden,omitempty"`
	} `json:"tags,omitempty"`
	Categories struct {
		Main struct {
			ID    string `json:"id,omitempty"`
			Title string `json:"title,omitempty"`
			Slug  string `json:"slug,omitempty"`
			Path  []struct {
				ID    string `json:"id,omitempty"`
				Title string `json:"title,omitempty"`
				Slug  string `json:"slug,omitempty"`
			} `json:"path,omitempty"`
		} `json:"main,omitempty"`
		Additional []struct {
			ID    string `json:"id,omitempty"`
			Title string `json:"title,omitempty"`
			Slug  string `json:"slug,omitempty"`
			Path  []struct {
				ID    string `json:"id,omitempty"`
				Title string `json:"title,omitempty"`
				Slug  string `json:"slug,omitempty"`
			} `json:"path,omitempty"`
		} `json:"additional,omitempty"`
	} `json:"categories,omitempty"`
	HowtoVideos []struct {
		ID        string `json:"id,omitempty"`
		Title     string `json:"title,omitempty"`
		Slug      string `json:"slug,omitempty"`
		Type      string `json:"type,omitempty"`
		ContentID string `json:"content_id,omitempty"`
		RemoteID  string `json:"remote_id,omitempty"`
		URL       string `json:"url,omitempty"`
		Width     int    `json:"width,omitempty"`
		Height    int    `json:"height,omitempty"`
		Duration  int    `json:"duration,omitempty"`
		Image     struct {
			ID     string `json:"id,omitempty"`
			Width  int    `json:"width,omitempty"`
			Height int    `json:"height,omitempty"`
			URL    string `json:"url,omitempty"`
		} `json:"image,omitempty"`
		Publishing struct {
			Created       string `json:"created,omitempty"`
			Updated       string `json:"updated,omitempty"`
			Published     string `json:"published,omitempty"`
			State         string `json:"state,omitempty"`
			PlaybackState string `json:"playback-state,omitempty"`
		} `json:"publishing,omitempty"`
		Meta struct {
			Hreflang struct {
				En string `json:"en,omitempty"`
				De string `json:"de,omitempty"`
				Zh string `json:"zh,omitempty"`
			} `json:"hreflang,omitempty"`
		} `json:"meta,omitempty"`
		UserReactions struct {
			ViewCount int `json:"view_count,omitempty"`
		} `json:"user_reactions,omitempty"`
	} `json:"howto_videos,omitempty"`
	Ingredients []struct {
		List []struct {
			ID   string `json:"id,omitempty"`
			Name struct {
				Rendered string `json:"rendered,omitempty"`
				One      string `json:"one,omitempty"`
				Many     string `json:"many,omitempty"`
			} `json:"name,omitempty"`
			Measurement struct {
				Imperial struct {
					Amount float64 `json:"amount,omitempty"`
					Unit   struct {
						ID   string `json:"id,omitempty"`
						Name struct {
							One      string `json:"one,omitempty"`
							Many     string `json:"many,omitempty"`
							Rendered string `json:"rendered,omitempty"`
						} `json:"name,omitempty"`
						Type                   string `json:"type,omitempty"`
						IngredientPluralizable bool   `json:"ingredient_pluralizable,omitempty"`
					} `json:"unit,omitempty"`
				} `json:"imperial,omitempty"`
				Metric struct {
					Amount int `json:"amount,omitempty"`
					Unit   struct {
						ID   string `json:"id,omitempty"`
						Name struct {
							One      string `json:"one,omitempty"`
							Many     string `json:"many,omitempty"`
							Rendered string `json:"rendered,omitempty"`
						} `json:"name,omitempty"`
						Type                   string `json:"type,omitempty"`
						FeaturedOrder          int    `json:"featured_order,omitempty"`
						IngredientPluralizable bool   `json:"ingredient_pluralizable,omitempty"`
					} `json:"unit,omitempty"`
				} `json:"metric,omitempty"`
			} `json:"measurement,omitempty"`
			IsDivided bool `json:"is_divided,omitempty"`
			IsPartner bool `json:"is_partner,omitempty"`
		} `json:"list,omitempty"`
	} `json:"ingredients,omitempty"`
	Steps []struct {
		Text  string `json:"text,omitempty"`
		Image struct {
			URL string `json:"url,omitempty"`
		} `json:"image,omitempty"`
		Ingredients []struct {
			ID   string `json:"id,omitempty"`
			Name struct {
				Rendered string `json:"rendered,omitempty"`
				One      string `json:"one,omitempty"`
				Many     string `json:"many,omitempty"`
			} `json:"name,omitempty"`
			Measurement struct {
				Imperial struct {
					Amount float64 `json:"amount,omitempty"`
					Unit   struct {
						ID   string `json:"id,omitempty"`
						Name struct {
							One      string `json:"one,omitempty"`
							Many     string `json:"many,omitempty"`
							Rendered string `json:"rendered,omitempty"`
						} `json:"name,omitempty"`
						Type                   string `json:"type,omitempty"`
						IngredientPluralizable bool   `json:"ingredient_pluralizable,omitempty"`
					} `json:"unit,omitempty"`
				} `json:"imperial,omitempty"`
				Metric struct {
					Amount int `json:"amount,omitempty"`
					Unit   struct {
						ID   string `json:"id,omitempty"`
						Name struct {
							One      string `json:"one,omitempty"`
							Many     string `json:"many,omitempty"`
							Rendered string `json:"rendered,omitempty"`
						} `json:"name,omitempty"`
						Type                   string `json:"type,omitempty"`
						FeaturedOrder          int    `json:"featured_order,omitempty"`
						IngredientPluralizable bool   `json:"ingredient_pluralizable,omitempty"`
					} `json:"unit,omitempty"`
				} `json:"metric,omitempty"`
			} `json:"measurement,omitempty"`
			IsDivided bool `json:"is_divided,omitempty"`
			IsPartner bool `json:"is_partner,omitempty"`
		} `json:"ingredients,omitempty"`
		Utensils []struct {
			ID   string `json:"id,omitempty"`
			Name struct {
				Rendered string `json:"rendered,omitempty"`
				One      string `json:"one,omitempty"`
				Many     string `json:"many,omitempty"`
			} `json:"name,omitempty"`
			Size struct {
				ID   string `json:"id,omitempty"`
				Name string `json:"name,omitempty"`
			} `json:"size,omitempty"`
		} `json:"utensils,omitempty"`
	} `json:"steps,omitempty"`
	Utensils []struct {
		ID   string `json:"id,omitempty"`
		Name struct {
			Rendered string `json:"rendered,omitempty"`
			One      string `json:"one,omitempty"`
			Many     string `json:"many,omitempty"`
		} `json:"name,omitempty"`
		Size struct {
			ID   string `json:"id,omitempty"`
			Name string `json:"name,omitempty"`
		} `json:"size,omitempty"`
		Amount int `json:"amount,omitempty"`
	} `json:"utensils,omitempty"`
}

type KitchenStoriesScript

type KitchenStoriesScript struct {
	Props struct {
		PageProps struct {
			DehydratedState struct {
				Queries []struct {
					State struct {
						Data KitchenStoriesRecipe `json:"data,omitempty"`
					} `json:"state,omitempty"`
				} `json:"queries,omitempty"`
			} `json:"dehydratedState,omitempty"`
		} `json:"pageProps,omitempty"`
	} `json:"props,omitempty"`
}

type KptnCookRecipe

type KptnCookRecipe struct {
	Title           string `json:"title"`
	Rtype           string `json:"rtype"`
	Gdocs           string `json:"gdocs"`
	AuthorComment   string `json:"authorComment"`
	UID             string `json:"uid"`
	Country         string `json:"country"`
	OtherIngred     string `json:"otherIngred"`
	PreparationTime int    `json:"preparationTime"`
	CookingTime     int    `json:"cookingTime"`
	RecipeNutrition struct {
		Calories     float64 `json:"calories"`
		Protein      float64 `json:"protein"`
		Fat          float64 `json:"fat"`
		Carbohydrate float64 `json:"carbohydrate"`
	} `json:"recipeNutrition"`
	ActiveTags []string `json:"activeTags"`
	Steps      []struct {
		Title string `json:"title"`
		Image struct {
			Name string `json:"name"`
			URL  string `json:"url"`
		} `json:"image"`
		Ingredients []struct {
			IngredientID string `json:"ingredientId"`
			Title        string `json:"title"`
			NumberTitle  struct {
				Singular string `json:"singular"`
				Plural   string `json:"plural"`
			} `json:"numberTitle"`
			Unit struct {
				Quantity float64 `json:"quantity"`
				Measure  string  `json:"measure"`
			} `json:"unit,omitempty"`
		} `json:"ingredients,omitempty"`
	} `json:"steps"`
	Authors []struct {
		ID struct {
			Oid string `json:"$oid"`
		} `json:"_id"`
		Name        string `json:"name"`
		Link        string `json:"link"`
		Title       string `json:"title"`
		Description string `json:"description"`
		Facebook    string `json:"facebook"`
		Instagram   string `json:"instagram"`
		Twitter     string `json:"twitter"`
		Sponsor     string `json:"sponsor"`
		AuthorImage struct {
			Name string `json:"name"`
			URL  string `json:"url"`
		} `json:"authorImage"`
		CreationDate struct {
			Date int64 `json:"$date"`
		} `json:"creationDate"`
		UpdateDate struct {
			Date int64 `json:"$date"`
		} `json:"updateDate"`
	} `json:"authors"`
	Ingredients []struct {
		Quantity                float64 `json:"quantity,omitempty"`
		Measure                 string  `json:"measure,omitempty"`
		MetricQuantity          float64 `json:"metricQuantity,omitempty"`
		MetricMeasure           string  `json:"metricMeasure,omitempty"`
		QuantityUS              float64 `json:"quantityUS,omitempty"`
		MeasureUS               string  `json:"measureUS,omitempty"`
		ImperialQuantity        float64 `json:"imperialQuantity,omitempty"`
		ImperialMeasure         string  `json:"imperialMeasure,omitempty"`
		QuantityUSProd          float64 `json:"quantityUSProd,omitempty"`
		MeasureUSProd           string  `json:"measureUSProd,omitempty"`
		ImperialProductQuantity float64 `json:"imperialProductQuantity,omitempty"`
		ImperialProductMeasure  string  `json:"imperialProductMeasure,omitempty"`
		Ingredient              struct {
			ID struct {
				Oid string `json:"$oid"`
			} `json:"_id"`
			Typ         string `json:"typ"`
			Title       string `json:"title"`
			NumberTitle struct {
				Singular string `json:"singular"`
				Plural   string `json:"plural"`
			} `json:"numberTitle"`
			UncountableTitle string `json:"uncountableTitle"`
			Category         string `json:"category"`
			Key              string `json:"key"`
			Desc             string `json:"desc"`
			Image            struct {
				Name string `json:"name"`
				URL  string `json:"url"`
			} `json:"image"`
			IsSponsored bool `json:"isSponsored"`
			Measures    struct {
				De []string `json:"de"`
				Us []string `json:"us"`
			} `json:"measures"`
			Synonym string `json:"synonym"`
			Brands  []struct {
				ID              string   `json:"id"`
				Name            string   `json:"name"`
				Countries       []string `json:"countries"`
				IngredientTitle struct {
					Singular string `json:"singular"`
					Plural   string `json:"plural"`
				} `json:"ingredientTitle"`
				UncountableTitle string `json:"uncountableTitle"`
				IngredientImage  struct {
					Name string `json:"name"`
					URL  string `json:"url"`
				} `json:"ingredientImage"`
			} `json:"brands"`
			CreationDate struct {
				Date int64 `json:"$date"`
			} `json:"creationDate"`
			UpdateDate struct {
				Date int64 `json:"$date"`
			} `json:"updateDate"`
		} `json:"ingredient,omitempty"`
	} `json:"ingredients"`
	ImageList []struct {
		Name string `json:"name"`
		URL  string `json:"url"`
		Type string `json:"type"`
	} `json:"imageList"`
	LocalizedPublishDate struct {
		En struct {
			Date int64 `json:"$date"`
		} `json:"en"`
		De struct {
			Date int64 `json:"$date"`
		} `json:"de"`
	} `json:"localizedPublishDate"`
	TrackingMode    string `json:"trackingMode"`
	Feature         string `json:"feature"`
	PublishDuration struct {
		En int `json:"en"`
		De int `json:"de"`
	} `json:"publishDuration"`
	IngredientTags string `json:"ingredientTags"`
	FavoriteCount  int    `json:"favoriteCount"`
	PublishDates   struct {
		En []struct {
			Date int64 `json:"$date"`
		} `json:"en"`
		De []struct {
			Date int64 `json:"$date"`
		} `json:"de"`
	} `json:"publishDates"`
	CreationDate struct {
		Date int64 `json:"$date"`
	} `json:"creationDate"`
	UpdateDate struct {
		Date int64 `json:"$date"`
	} `json:"updateDate"`
}

type MarleySpoonData

type MarleySpoonData struct {
	ID               int      `json:"id,omitempty"`
	Name             string   `json:"name,omitempty"`
	Subtitle         string   `json:"subtitle,omitempty"`
	NameWithSubtitle string   `json:"name_with_subtitle,omitempty"`
	Classic          bool     `json:"classic,omitempty"`
	Slug             string   `json:"slug,omitempty"`
	VariantID        int      `json:"variant_id,omitempty"`
	Country          string   `json:"country,omitempty"`
	Brand            string   `json:"brand,omitempty"`
	Description      string   `json:"description,omitempty"`
	MealType         string   `json:"meal_type,omitempty"`
	Calories         int      `json:"calories,omitempty"`
	Difficulty       string   `json:"difficulty,omitempty"`
	PreparationTime  string   `json:"preparation_time,omitempty"`
	ProductType      string   `json:"product_type,omitempty"`
	MealAttributes   []string `json:"meal_attributes,omitempty"`
	Nutrition        struct {
		Calories string `json:"calories,omitempty"`
		Carbs    string `json:"carbs,omitempty"`
		Proteins string `json:"proteins,omitempty"`
		Fat      string `json:"fat,omitempty"`
	} `json:"nutrition,omitempty"`
	Sku           string `json:"sku,omitempty"`
	RecipeCardURL string `json:"recipe_card_url,omitempty"`
	Image         struct {
		Thumbnail string `json:"thumbnail,omitempty"`
		Small     string `json:"small,omitempty"`
		Medium    string `json:"medium,omitempty"`
		Large     string `json:"large,omitempty"`
	} `json:"image,omitempty"`
	AdditionalAllergens []string `json:"additional_allergens,omitempty"`
	Steps               []struct {
		Position    int    `json:"position,omitempty"`
		Title       string `json:"title,omitempty"`
		Description string `json:"description,omitempty"`
		Photo       string `json:"photo,omitempty"`
	} `json:"steps,omitempty"`
	Ingredients []struct {
		Name  string `json:"name,omitempty"`
		Image struct {
			Thumbnail string `json:"thumbnail,omitempty"`
			Medium    string `json:"medium,omitempty"`
		} `json:"image,omitempty"`
		Allergens        []string `json:"allergens,omitempty"`
		NameWithQuantity string   `json:"name_with_quantity,omitempty"`
	} `json:"ingredients,omitempty"`
	AssumedIngredients []struct {
		Name string `json:"name,omitempty"`
	} `json:"assumed_ingredients,omitempty"`
	AssumedCookingUtilities []struct {
		Name string `json:"name,omitempty"`
	} `json:"assumed_cooking_utilities,omitempty"`
	Chef struct {
		Name        string `json:"name,omitempty"`
		Description string `json:"description,omitempty"`
		Bio         string `json:"bio,omitempty"`
		Image       struct {
			Thumbnail string `json:"thumbnail,omitempty"`
			Medium    string `json:"medium,omitempty"`
		} `json:"image,omitempty"`
		Slug string `json:"slug,omitempty"`
	} `json:"chef,omitempty"`
	CookingTip interface{} `json:"cooking_tip,omitempty"`
}

MarleySpoonData struct is generated using https://mholt.github.io/json-to-go/

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL