recipe_scrapers 0.1.0 → 0.2.0

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.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/README.md +28 -8
  4. data/lib/recipe_scrapers/parsers/vocabulary/de.yml +1 -0
  5. data/lib/recipe_scrapers/parsers/vocabulary/en.yml +1 -0
  6. data/lib/recipe_scrapers/parsers/vocabulary/es.yml +1 -0
  7. data/lib/recipe_scrapers/parsers/vocabulary/fr.yml +1 -0
  8. data/lib/recipe_scrapers/parsers/vocabulary/hu.yml +1 -0
  9. data/lib/recipe_scrapers/parsers/vocabulary/it.yml +1 -0
  10. data/lib/recipe_scrapers/parsers/vocabulary/nl.yml +1 -0
  11. data/lib/recipe_scrapers/parsers/vocabulary/pt.yml +1 -0
  12. data/lib/recipe_scrapers/parsers/vocabulary/ru.yml +1 -0
  13. data/lib/recipe_scrapers/parsers/vocabulary/scandinavian.yml +1 -0
  14. data/lib/recipe_scrapers/parsers/vocabulary/sk.yml +1 -0
  15. data/lib/recipe_scrapers/parsers/vocabulary/tr.yml +1 -0
  16. data/lib/recipe_scrapers/parsers/vocabulary.rb +20 -11
  17. data/lib/recipe_scrapers/scraper.rb +7 -3
  18. data/lib/recipe_scrapers/sites/at/hellofresh.rb +3 -0
  19. data/lib/recipe_scrapers/sites/at/hofer.rb +3 -0
  20. data/lib/recipe_scrapers/sites/au/aldi.rb +3 -0
  21. data/lib/recipe_scrapers/sites/au/donnahay.rb +7 -0
  22. data/lib/recipe_scrapers/sites/au/gourmettraveller.rb +3 -0
  23. data/lib/recipe_scrapers/sites/au/hellofresh.rb +3 -0
  24. data/lib/recipe_scrapers/sites/au/juliegoodwin.rb +7 -0
  25. data/lib/recipe_scrapers/sites/au/taste.rb +3 -0
  26. data/lib/recipe_scrapers/sites/au/womensweeklyfood.rb +3 -0
  27. data/lib/recipe_scrapers/sites/be/dagelijksekost.rb +3 -0
  28. data/lib/recipe_scrapers/sites/be/hellofresh.rb +3 -0
  29. data/lib/recipe_scrapers/sites/ca/eggs.rb +3 -0
  30. data/lib/recipe_scrapers/sites/ca/hellofresh.rb +3 -0
  31. data/lib/recipe_scrapers/sites/ch/aldi_suisse.rb +3 -0
  32. data/lib/recipe_scrapers/sites/ch/hellofresh.rb +3 -0
  33. data/lib/recipe_scrapers/sites/com/101cookbooks.rb +3 -0
  34. data/lib/recipe_scrapers/sites/com/177milkstreet.rb +3 -0
  35. data/lib/recipe_scrapers/sites/com/30seconds.rb +3 -0
  36. data/lib/recipe_scrapers/sites/com/aberlehome.rb +3 -0
  37. data/lib/recipe_scrapers/sites/com/acouplecooks.rb +3 -0
  38. data/lib/recipe_scrapers/sites/com/adrianasbestrecipes.rb +3 -0
  39. data/lib/recipe_scrapers/sites/com/afarmgirlsdabbles.rb +3 -0
  40. data/lib/recipe_scrapers/sites/com/africanbites.rb +3 -0
  41. data/lib/recipe_scrapers/sites/com/alisoneroman.rb +3 -0
  42. data/lib/recipe_scrapers/sites/com/allsavoryrecipes.rb +3 -0
  43. data/lib/recipe_scrapers/sites/com/amazingoriental.rb +8 -0
  44. data/lib/recipe_scrapers/sites/com/ambitiouskitchen.rb +3 -0
  45. data/lib/recipe_scrapers/sites/com/ameessavorydish.rb +3 -0
  46. data/lib/recipe_scrapers/sites/com/americastestkitchen.rb +3 -0
  47. data/lib/recipe_scrapers/sites/com/archanaskitchen.rb +3 -0
  48. data/lib/recipe_scrapers/sites/com/bakeitwithlove.rb +3 -0
  49. data/lib/recipe_scrapers/sites/com/barefootcontessa.rb +7 -0
  50. data/lib/recipe_scrapers/sites/com/bigoven.rb +6 -0
  51. data/lib/recipe_scrapers/sites/com/bongeats.rb +6 -0
  52. data/lib/recipe_scrapers/sites/com/brewersfriend.rb +3 -0
  53. data/lib/recipe_scrapers/sites/com/carriesexperimentalkitchen.rb +3 -0
  54. data/lib/recipe_scrapers/sites/com/cdkitchen.rb +3 -0
  55. data/lib/recipe_scrapers/sites/com/chefjeanpierre.rb +3 -0
  56. data/lib/recipe_scrapers/sites/com/chefnini.rb +3 -0
  57. data/lib/recipe_scrapers/sites/com/cleaneatingkitchen.rb +3 -0
  58. data/lib/recipe_scrapers/sites/com/colleenchristensennutrition.rb +3 -0
  59. data/lib/recipe_scrapers/sites/com/comidinhasdochef.rb +3 -0
  60. data/lib/recipe_scrapers/sites/com/cookomix.rb +3 -0
  61. data/lib/recipe_scrapers/sites/com/corriecooks.rb +3 -0
  62. data/lib/recipe_scrapers/sites/com/culinaryhill.rb +3 -0
  63. data/lib/recipe_scrapers/sites/com/dinnerthendessert.rb +3 -0
  64. data/lib/recipe_scrapers/sites/com/donalskehan.rb +7 -0
  65. data/lib/recipe_scrapers/sites/com/drizzleanddip.rb +3 -0
  66. data/lib/recipe_scrapers/sites/com/eatwell101.rb +3 -0
  67. data/lib/recipe_scrapers/sites/com/empirecipes.rb +3 -0
  68. data/lib/recipe_scrapers/sites/com/en.rb +3 -0
  69. data/lib/recipe_scrapers/sites/com/epicurious.rb +3 -0
  70. data/lib/recipe_scrapers/sites/com/ethanchlebowski.rb +3 -0
  71. data/lib/recipe_scrapers/sites/com/fitmencook.rb +3 -0
  72. data/lib/recipe_scrapers/sites/com/gesund_aktiv.rb +3 -0
  73. data/lib/recipe_scrapers/sites/com/goldnplump.rb +3 -0
  74. data/lib/recipe_scrapers/sites/com/gourmandize.rb +3 -0
  75. data/lib/recipe_scrapers/sites/com/grandfrais.rb +5 -0
  76. data/lib/recipe_scrapers/sites/com/handletheheat.rb +3 -0
  77. data/lib/recipe_scrapers/sites/com/hellofresh.rb +3 -0
  78. data/lib/recipe_scrapers/sites/com/howtofeedaloon.rb +3 -0
  79. data/lib/recipe_scrapers/sites/com/insanelygoodrecipes.rb +3 -0
  80. data/lib/recipe_scrapers/sites/com/iowagirleats.rb +3 -0
  81. data/lib/recipe_scrapers/sites/com/jamieoliver.rb +3 -0
  82. data/lib/recipe_scrapers/sites/com/joshuaweissman.rb +6 -0
  83. data/lib/recipe_scrapers/sites/com/joyfoodsunshine.rb +3 -0
  84. data/lib/recipe_scrapers/sites/com/justalittlebitofbacon.rb +3 -0
  85. data/lib/recipe_scrapers/sites/com/justapinch.rb +3 -0
  86. data/lib/recipe_scrapers/sites/com/justonecookbook.rb +3 -0
  87. data/lib/recipe_scrapers/sites/com/kalejunkie.rb +3 -0
  88. data/lib/recipe_scrapers/sites/com/kennymcgovern.rb +3 -0
  89. data/lib/recipe_scrapers/sites/com/kingarthurbaking.rb +3 -0
  90. data/lib/recipe_scrapers/sites/com/kitchendivas.rb +3 -0
  91. data/lib/recipe_scrapers/sites/com/lacucinaitaliana.rb +3 -0
  92. data/lib/recipe_scrapers/sites/com/latelierderoxane.rb +3 -0
  93. data/lib/recipe_scrapers/sites/com/lidiasitaly.rb +7 -0
  94. data/lib/recipe_scrapers/sites/com/loveandlemons.rb +3 -0
  95. data/lib/recipe_scrapers/sites/com/lovefood.rb +6 -0
  96. data/lib/recipe_scrapers/sites/com/magimix.rb +7 -0
  97. data/lib/recipe_scrapers/sites/com/mccormick.rb +3 -0
  98. data/lib/recipe_scrapers/sites/com/melloschourico.rb +7 -0
  99. data/lib/recipe_scrapers/sites/com/mykitchen101.rb +7 -0
  100. data/lib/recipe_scrapers/sites/com/mykitchen101en.rb +7 -0
  101. data/lib/recipe_scrapers/sites/com/netacooks.rb +3 -0
  102. data/lib/recipe_scrapers/sites/com/nibbledish.rb +3 -0
  103. data/lib/recipe_scrapers/sites/com/ohsheglows.rb +3 -0
  104. data/lib/recipe_scrapers/sites/com/ohsweetbasil.rb +3 -0
  105. data/lib/recipe_scrapers/sites/com/omnivorescookbook.rb +3 -0
  106. data/lib/recipe_scrapers/sites/com/paninihappy.rb +7 -0
  107. data/lib/recipe_scrapers/sites/com/pastificiosorrentino.rb +3 -0
  108. data/lib/recipe_scrapers/sites/com/pauladeen.rb +6 -0
  109. data/lib/recipe_scrapers/sites/com/pickuplimes.rb +3 -0
  110. data/lib/recipe_scrapers/sites/com/poppycooks.rb +3 -0
  111. data/lib/recipe_scrapers/sites/com/potatorolls.rb +3 -0
  112. data/lib/recipe_scrapers/sites/com/primaledgehealth.rb +3 -0
  113. data/lib/recipe_scrapers/sites/com/recipe.rb +6 -0
  114. data/lib/recipe_scrapers/sites/com/recipes.rb +5 -0
  115. data/lib/recipe_scrapers/sites/com/rosannapansino.rb +6 -0
  116. data/lib/recipe_scrapers/sites/com/scrambledandscrumptious.rb +6 -0
  117. data/lib/recipe_scrapers/sites/com/sharkninja.rb +3 -0
  118. data/lib/recipe_scrapers/sites/com/simplegreensmoothies.rb +3 -0
  119. data/lib/recipe_scrapers/sites/com/simplyscratch.rb +3 -0
  120. data/lib/recipe_scrapers/sites/com/sunbasket.rb +3 -0
  121. data/lib/recipe_scrapers/sites/com/sundaysuppermovement.rb +3 -0
  122. data/lib/recipe_scrapers/sites/com/tastefullygrace.rb +3 -0
  123. data/lib/recipe_scrapers/sites/com/tasteline.rb +3 -0
  124. data/lib/recipe_scrapers/sites/com/tastinghistory.rb +7 -0
  125. data/lib/recipe_scrapers/sites/com/thecookingguy.rb +6 -0
  126. data/lib/recipe_scrapers/sites/com/thefirstmess.rb +3 -0
  127. data/lib/recipe_scrapers/sites/com/theplantbasedschool.rb +3 -0
  128. data/lib/recipe_scrapers/sites/com/tudoreceitas.rb +3 -0
  129. data/lib/recipe_scrapers/sites/com/vegansociety.rb +6 -0
  130. data/lib/recipe_scrapers/sites/com/velocidadcuchara.rb +3 -0
  131. data/lib/recipe_scrapers/sites/com/veroniquecloutier.rb +6 -0
  132. data/lib/recipe_scrapers/sites/com/watchwhatueat.rb +3 -0
  133. data/lib/recipe_scrapers/sites/com/weightwatchers.rb +3 -0
  134. data/lib/recipe_scrapers/sites/com/whole30.rb +3 -0
  135. data/lib/recipe_scrapers/sites/com/xiachufang.rb +3 -0
  136. data/lib/recipe_scrapers/sites/cz/fresh.rb +3 -0
  137. data/lib/recipe_scrapers/sites/de/aldi_sued.rb +3 -0
  138. data/lib/recipe_scrapers/sites/de/eatsmarter.rb +3 -0
  139. data/lib/recipe_scrapers/sites/de/edeka.rb +3 -0
  140. data/lib/recipe_scrapers/sites/de/essen_und_trinken.rb +3 -0
  141. data/lib/recipe_scrapers/sites/de/franzoesischkochen.rb +3 -0
  142. data/lib/recipe_scrapers/sites/de/hellofresh.rb +3 -0
  143. data/lib/recipe_scrapers/sites/de/lecker.rb +3 -0
  144. data/lib/recipe_scrapers/sites/de/madamecuisine.rb +3 -0
  145. data/lib/recipe_scrapers/sites/de/ndr.rb +3 -0
  146. data/lib/recipe_scrapers/sites/de/rezeptwelt.rb +3 -0
  147. data/lib/recipe_scrapers/sites/de/sallys_blog.rb +3 -0
  148. data/lib/recipe_scrapers/sites/de/zaubertopf.rb +6 -0
  149. data/lib/recipe_scrapers/sites/dk/hellofresh.rb +3 -0
  150. data/lib/recipe_scrapers/sites/dk/valdemarsro.rb +3 -0
  151. data/lib/recipe_scrapers/sites/es/hellofresh.rb +3 -0
  152. data/lib/recipe_scrapers/sites/es/thermomix_albacete.rb +3 -0
  153. data/lib/recipe_scrapers/sites/es/thermomix_alcala.rb +3 -0
  154. data/lib/recipe_scrapers/sites/es/thermomix_algeciras.rb +3 -0
  155. data/lib/recipe_scrapers/sites/es/thermomix_alicante.rb +3 -0
  156. data/lib/recipe_scrapers/sites/es/thermomix_almeria.rb +3 -0
  157. data/lib/recipe_scrapers/sites/es/thermomix_alzira.rb +3 -0
  158. data/lib/recipe_scrapers/sites/es/thermomix_badajoz.rb +3 -0
  159. data/lib/recipe_scrapers/sites/es/thermomix_barcelona.rb +3 -0
  160. data/lib/recipe_scrapers/sites/es/thermomix_barcelona_centro.rb +3 -0
  161. data/lib/recipe_scrapers/sites/es/thermomix_bilbao.rb +3 -0
  162. data/lib/recipe_scrapers/sites/es/thermomix_burgos.rb +3 -0
  163. data/lib/recipe_scrapers/sites/es/thermomix_caceres.rb +3 -0
  164. data/lib/recipe_scrapers/sites/es/thermomix_cadiz.rb +3 -0
  165. data/lib/recipe_scrapers/sites/es/thermomix_cartagena.rb +3 -0
  166. data/lib/recipe_scrapers/sites/es/thermomix_castellon.rb +3 -0
  167. data/lib/recipe_scrapers/sites/es/thermomix_ciudadreal.rb +3 -0
  168. data/lib/recipe_scrapers/sites/es/thermomix_cordoba.rb +3 -0
  169. data/lib/recipe_scrapers/sites/es/thermomix_coruna.rb +3 -0
  170. data/lib/recipe_scrapers/sites/es/thermomix_doshermanas.rb +3 -0
  171. data/lib/recipe_scrapers/sites/es/thermomix_elche.rb +3 -0
  172. data/lib/recipe_scrapers/sites/es/thermomix_esplugues.rb +3 -0
  173. data/lib/recipe_scrapers/sites/es/thermomix_fuenlabrada.rb +3 -0
  174. data/lib/recipe_scrapers/sites/es/thermomix_gijon.rb +3 -0
  175. data/lib/recipe_scrapers/sites/es/thermomix_girona.rb +3 -0
  176. data/lib/recipe_scrapers/sites/es/thermomix_granada.rb +3 -0
  177. data/lib/recipe_scrapers/sites/es/thermomix_huelva.rb +3 -0
  178. data/lib/recipe_scrapers/sites/es/thermomix_jaen.rb +3 -0
  179. data/lib/recipe_scrapers/sites/es/thermomix_jerez.rb +3 -0
  180. data/lib/recipe_scrapers/sites/es/thermomix_lanzarote.rb +3 -0
  181. data/lib/recipe_scrapers/sites/es/thermomix_laspalmas.rb +3 -0
  182. data/lib/recipe_scrapers/sites/es/thermomix_leon.rb +3 -0
  183. data/lib/recipe_scrapers/sites/es/thermomix_lleida.rb +3 -0
  184. data/lib/recipe_scrapers/sites/es/thermomix_madrid_centro.rb +3 -0
  185. data/lib/recipe_scrapers/sites/es/thermomix_madrid_mendezalvaro.rb +3 -0
  186. data/lib/recipe_scrapers/sites/es/thermomix_majadahonda.rb +3 -0
  187. data/lib/recipe_scrapers/sites/es/thermomix_malaga.rb +3 -0
  188. data/lib/recipe_scrapers/sites/es/thermomix_malaga_centro.rb +3 -0
  189. data/lib/recipe_scrapers/sites/es/thermomix_mallorca.rb +3 -0
  190. data/lib/recipe_scrapers/sites/es/thermomix_manresa.rb +3 -0
  191. data/lib/recipe_scrapers/sites/es/thermomix_marbella.rb +3 -0
  192. data/lib/recipe_scrapers/sites/es/thermomix_mataro.rb +3 -0
  193. data/lib/recipe_scrapers/sites/es/thermomix_mostoles.rb +3 -0
  194. data/lib/recipe_scrapers/sites/es/thermomix_murcia.rb +3 -0
  195. data/lib/recipe_scrapers/sites/es/thermomix_orense.rb +3 -0
  196. data/lib/recipe_scrapers/sites/es/thermomix_pamplona.rb +3 -0
  197. data/lib/recipe_scrapers/sites/es/thermomix_plasencia.rb +3 -0
  198. data/lib/recipe_scrapers/sites/es/thermomix_pontevedra.rb +3 -0
  199. data/lib/recipe_scrapers/sites/es/thermomix_sabadell.rb +3 -0
  200. data/lib/recipe_scrapers/sites/es/thermomix_salamanca.rb +3 -0
  201. data/lib/recipe_scrapers/sites/es/thermomix_sansebastian.rb +3 -0
  202. data/lib/recipe_scrapers/sites/es/thermomix_santander.rb +3 -0
  203. data/lib/recipe_scrapers/sites/es/thermomix_sevilla.rb +3 -0
  204. data/lib/recipe_scrapers/sites/es/thermomix_ssreyes.rb +3 -0
  205. data/lib/recipe_scrapers/sites/es/thermomix_talavera.rb +3 -0
  206. data/lib/recipe_scrapers/sites/es/thermomix_tarragona.rb +3 -0
  207. data/lib/recipe_scrapers/sites/es/thermomix_tenerife.rb +3 -0
  208. data/lib/recipe_scrapers/sites/es/thermomix_tenerifesur.rb +3 -0
  209. data/lib/recipe_scrapers/sites/es/thermomix_toledo.rb +3 -0
  210. data/lib/recipe_scrapers/sites/es/thermomix_valencia.rb +3 -0
  211. data/lib/recipe_scrapers/sites/es/thermomix_valladolid.rb +3 -0
  212. data/lib/recipe_scrapers/sites/es/thermomix_vic.rb +3 -0
  213. data/lib/recipe_scrapers/sites/es/thermomix_vigo.rb +3 -0
  214. data/lib/recipe_scrapers/sites/es/thermomix_vitoria.rb +3 -0
  215. data/lib/recipe_scrapers/sites/es/thermomix_zaragoza.rb +3 -0
  216. data/lib/recipe_scrapers/sites/es/thermomixasturias.rb +3 -0
  217. data/lib/recipe_scrapers/sites/eu/ninjatestkitchen.rb +5 -0
  218. data/lib/recipe_scrapers/sites/fr/cuisine.rb +3 -0
  219. data/lib/recipe_scrapers/sites/fr/cuisinez_pour_bebe.rb +5 -0
  220. data/lib/recipe_scrapers/sites/fr/editions_larousse.rb +7 -0
  221. data/lib/recipe_scrapers/sites/fr/hellofresh.rb +3 -0
  222. data/lib/recipe_scrapers/sites/fr/marieclaire.rb +3 -0
  223. data/lib/recipe_scrapers/sites/fr/moulinex.rb +3 -0
  224. data/lib/recipe_scrapers/sites/fr/quitoque.rb +3 -0
  225. data/lib/recipe_scrapers/sites/gr/argiro.rb +3 -0
  226. data/lib/recipe_scrapers/sites/hr/recepti.rb +3 -0
  227. data/lib/recipe_scrapers/sites/hu/aldi.rb +3 -0
  228. data/lib/recipe_scrapers/sites/hu/mindmegette.rb +3 -0
  229. data/lib/recipe_scrapers/sites/ie/hellofresh.rb +3 -0
  230. data/lib/recipe_scrapers/sites/it/aldi.rb +7 -0
  231. data/lib/recipe_scrapers/sites/it/hellofresh.rb +3 -0
  232. data/lib/recipe_scrapers/sites/it/lacucinaitaliana.rb +3 -0
  233. data/lib/recipe_scrapers/sites/it/vegolosi.rb +3 -0
  234. data/lib/recipe_scrapers/sites/lu/hellofresh.rb +3 -0
  235. data/lib/recipe_scrapers/sites/nl/24kitchen.rb +3 -0
  236. data/lib/recipe_scrapers/sites/nl/culy.rb +3 -0
  237. data/lib/recipe_scrapers/sites/nl/hellofresh.rb +3 -0
  238. data/lib/recipe_scrapers/sites/nl/keukenliefde.rb +3 -0
  239. data/lib/recipe_scrapers/sites/nl/kookjij.rb +3 -0
  240. data/lib/recipe_scrapers/sites/nl/okokorecepten.rb +3 -0
  241. data/lib/recipe_scrapers/sites/nl/uitpaulineskeuken.rb +3 -0
  242. data/lib/recipe_scrapers/sites/no/hellofresh.rb +3 -0
  243. data/lib/recipe_scrapers/sites/nz/dish.rb +7 -0
  244. data/lib/recipe_scrapers/sites/nz/hellofresh.rb +3 -0
  245. data/lib/recipe_scrapers/sites/org/choosehomemade.rb +7 -0
  246. data/lib/recipe_scrapers/sites/org/usapears.rb +7 -0
  247. data/lib/recipe_scrapers/sites/pl/kuchnia_domowa.rb +3 -0
  248. data/lib/recipe_scrapers/sites/pt/mundodereceitasbimby.rb +3 -0
  249. data/lib/recipe_scrapers/sites/se/arla.rb +3 -0
  250. data/lib/recipe_scrapers/sites/se/drinkoteket.rb +3 -0
  251. data/lib/recipe_scrapers/sites/se/festligare.rb +6 -0
  252. data/lib/recipe_scrapers/sites/se/hellofresh.rb +3 -0
  253. data/lib/recipe_scrapers/sites/sk/dobruchut.rb +3 -0
  254. data/lib/recipe_scrapers/sites/sk/varecha.rb +3 -0
  255. data/lib/recipe_scrapers/sites/tv/delishkitchen.rb +3 -0
  256. data/lib/recipe_scrapers/sites/uk/bbc.rb +3 -0
  257. data/lib/recipe_scrapers/sites/uk/foodnetwork.rb +3 -0
  258. data/lib/recipe_scrapers/sites/uk/hellofresh.rb +3 -0
  259. data/lib/recipe_scrapers/sites/uk/nhs.rb +5 -0
  260. data/lib/recipe_scrapers/sites/uk/schoolofwok.rb +7 -0
  261. data/lib/recipe_scrapers/sites/uk/thehappyfoodie.rb +3 -0
  262. data/lib/recipe_scrapers/sites/uk/tofoo.rb +7 -0
  263. data/lib/recipe_scrapers/sources/declared.rb +21 -6
  264. data/lib/recipe_scrapers/sources/ingredient_groups.rb +4 -2
  265. data/lib/recipe_scrapers/sources/json_ld.rb +4 -2
  266. data/lib/recipe_scrapers/sources/microdata.rb +1 -1
  267. data/lib/recipe_scrapers/sources/schema_org/ingredient_list.rb +2 -1
  268. data/lib/recipe_scrapers/sources/schema_org/step_labels.rb +15 -0
  269. data/lib/recipe_scrapers/sources/schema_org.rb +6 -1
  270. data/lib/recipe_scrapers/text.rb +44 -2
  271. data/lib/recipe_scrapers/version.rb +1 -1
  272. data/lib/recipe_scrapers.rb +1 -0
  273. metadata +247 -2
  274. data/lib/recipe_scrapers/sites/com/hostthetoast.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7ef3e9e75436df3b37c84f48c98c7d09586560a9c1d90b567ee990b5ea9d288
4
- data.tar.gz: c1fab2685faf5fbb236a74b8c9b4b5130b3f0c0c351c9fedfec919768e6dc260
3
+ metadata.gz: aa41ed3d10b633dfa62092781980df9d856b24a573d015f52d5e359974614aeb
4
+ data.tar.gz: c085500687dc3ba6c64bcad9d0bc525349c7567a144ba0f1070646b0be2f34fb
5
5
  SHA512:
6
- metadata.gz: 06cf44e4b1e4bc58c93d4176bd9bb8140ddcc9db43e6593f8685eea72557f709e8488245e82b8fb6289547a39d91072e6ee17084bab3a3d65a6927644eb35200
7
- data.tar.gz: 11b3a22c61673e7232411f915e575aad8ef2f8f3b6ac838e54f63e03a21b023b2817c03aa4a415213530d6d8c7f515fae2befa0b31834ba79d2f742429f586ca
6
+ metadata.gz: 603b8bcf380f9926cda1629dad1a869b57b2c711984554c7ac0968b6a984413be85dfd484325ec3c9356ee3fd4016e91cdd83acbd9e61520936a03c17c2997d9
7
+ data.tar.gz: f7de34e7fb23d07749285d268c612f89eab8279732fabde8dcee386df196fea98c2e27548ccb777ff5daed907686281c4d6fbac3db48c67911480ce3896b3eef
data/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.0](https://github.com/davqasd/recipe_scrapers/compare/v0.1.0...v0.2.0) (2026-09-27)
4
+
5
+
6
+ ### Features
7
+
8
+ * declare rows split into lines or with parts skipped ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
9
+ * read recipes from 246 more sites ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * drop blank braille padding from text ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
15
+ * drop step names that only number the step ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
16
+ * find a microdata recipe nested inside another item ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
17
+ * read an image address glued behind the site host ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
18
+ * read declared rows the way the page renders them ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
19
+ * read JSON-LD that repeats a key or sits in a comment ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
20
+ * split ingredients and steps published as one string ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
21
+ * stop reading hostthetoast.com, which now blocks every request ([a8a1203](https://github.com/davqasd/recipe_scrapers/commit/a8a120363c6b2ba96afa0fcaba6b605a9d9dd408))
22
+
3
23
  ## 0.1.0
4
24
 
5
25
  The first release.
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # recipe_scrapers
2
2
 
3
+ [![GitHub](https://img.shields.io/github/stars/davqasd/recipe_scrapers?style=social)](https://github.com/davqasd/recipe_scrapers)
4
+ [![Gem Version](https://img.shields.io/gem/v/recipe_scrapers)](https://rubygems.org/gems/recipe_scrapers)
5
+ [![Ruby Version](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Frubygems.org%2Fapi%2Fv1%2Fversions%2Frecipe_scrapers.json&query=%24%5B0%5D.ruby_version&label=ruby)](https://rubygems.org/gems/recipe_scrapers)
6
+ [![CI](https://github.com/davqasd/recipe_scrapers/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/davqasd/recipe_scrapers/actions/workflows/ci.yml)
7
+ [![License](https://img.shields.io/github/license/davqasd/recipe_scrapers)](LICENSE)
8
+
3
9
  A Ruby gem that reads recipes from cooking websites: the title, ingredients, instructions, times,
4
10
  yields and nutrition. It uses the [schema.org](https://schema.org/Recipe) markup most recipe sites
5
11
  publish, falls back to [OpenGraph](https://ogp.me/), and reads the HTML directly for sites that
@@ -7,11 +13,24 @@ publish neither. It does not get around bot protection.
7
13
 
8
14
  ## Installation
9
15
 
16
+ Add it to your Gemfile:
17
+
18
+ <!-- x-release-please-start-version -->
19
+ ```ruby
20
+ gem "recipe_scrapers", "~> 0.2.0"
21
+ ```
22
+
23
+ Or install it manually:
24
+
10
25
  ```console
11
- bundle add recipe_scrapers
26
+ gem install recipe_scrapers --version "~> 0.2.0"
12
27
  ```
28
+ <!-- x-release-please-end -->
13
29
 
14
- The gem runs on every Ruby version that has not reached its end of life.
30
+ The gem follows [Semantic Versioning](https://semver.org/). Until 1.0, a minor release can change
31
+ the public API, so the constraint above takes only patch releases.
32
+ [GitHub releases](https://github.com/davqasd/recipe_scrapers/releases) list the changes of each
33
+ version. The gem runs on every Ruby version that has not reached its end of life.
15
34
 
16
35
  ## Usage
17
36
 
@@ -34,13 +53,14 @@ recipe = RecipeScrapers.parse(html, url: url)
34
53
 
35
54
  ## Documentation
36
55
 
37
- - [Usage](wiki/Usage.md): fetching, other HTTP clients, unsupported sites, errors
38
- - [Recipe Fields](wiki/Recipe-Fields.md): every field with its type and an example
39
- - [Configuration](wiki/Configuration.md): timeouts, size limits, your own connection
40
- - [Parsers](wiki/Parsers.md): your own ingredient and nutrient parsers
56
+ - [Supported Sites](https://github.com/davqasd/recipe_scrapers/wiki/Supported-Sites): every site the gem reads out of the box
57
+ - [Usage](https://github.com/davqasd/recipe_scrapers/wiki/Usage): fetching, other HTTP clients, unsupported sites, errors
58
+ - [Recipe Fields](https://github.com/davqasd/recipe_scrapers/wiki/Recipe-Fields): every field with its type and an example
59
+ - [Configuration](https://github.com/davqasd/recipe_scrapers/wiki/Configuration): timeouts, size limits, your own connection
60
+ - [Parsers](https://github.com/davqasd/recipe_scrapers/wiki/Parsers): your own ingredient and nutrient parsers
41
61
  - [API reference](https://rubydoc.info/gems/recipe_scrapers)
42
62
  - [Changelog](CHANGELOG.md)
43
- - [Copyright and Usage](wiki/Copyright-and-Usage.md): what you are responsible for
63
+ - [Copyright and Usage](https://github.com/davqasd/recipe_scrapers/wiki/Copyright-and-Usage): what you are responsible for
44
64
 
45
65
  ## Contributing
46
66
 
@@ -51,4 +71,4 @@ security problem privately, see [SECURITY](SECURITY.md).
51
71
  ## License
52
72
 
53
73
  MIT, see [LICENSE](LICENSE). The pages recorded for the tests are not covered by it, see
54
- [License](wiki/License.md).
74
+ [License](https://github.com/davqasd/recipe_scrapers/wiki/License).
@@ -3,3 +3,4 @@ units: [el, tl, msp, prise, stück, stk, st, bund, dose, dosen, päckchen, pck,
3
3
  scheiben, zehe, zehen, spritzer, tasse, tassen]
4
4
  pinches: [prise]
5
5
  sizes: [kleine, kleiner, kleines, kl., große, großer, großes]
6
+ steps: [schritt]
@@ -24,3 +24,4 @@ number_words:
24
24
  eleven: 11
25
25
  twelve: 12
26
26
  half: 0.5
27
+ steps: [step]
@@ -2,3 +2,4 @@ languages: [es]
2
2
  units: [cucharada, cucharadas, cucharadita, cucharaditas, cda, cdas, cdta, cdtas, taza, tazas, diente,
3
3
  dientes, pizca, pizcas, lata, latas, rama, ramas, ramita, ramitas, trozo, trozos, paquete, paquetes]
4
4
  pinches: [pizca]
5
+ steps: [paso]
@@ -3,3 +3,4 @@ units: [cs, cc, pincée, pincées, poignée, poignées, gousse, gousses, brin, b
3
3
  tranches, tran, sachet, sachets, cuillère, cuillères, c. à soupe, c. à café, cuillère à soupe,
4
4
  cuillères à soupe, cuillère à café, cuillères à café]
5
5
  pinches: [pincée, poignée]
6
+ steps: [étape, etape]
@@ -1,3 +1,4 @@
1
1
  languages: [hu]
2
2
  units: [ek, evőkanál, kk, kávéskanál, teáskanál, dkg, db, darab, gerezd, csipet, szál, fej, csomag, bögre]
3
3
  sizes: [nagy, kis]
4
+ steps: [lépés]
@@ -2,3 +2,4 @@ languages: [it]
2
2
  units: [cucchiaio, cucchiai, cucchiaino, cucchiaini, pizzico, spicchio, spicchi, bicchiere, bicchieri,
3
3
  bustina, bustine, fetta, fette, rametto, grappolo]
4
4
  pinches: [pizzico]
5
+ steps: [passo]
@@ -2,3 +2,4 @@ languages: [nl]
2
2
  units: [el, tl, eetlepel, eetlepels, theelepel, theelepels, teen, teentje, teentjes, takje, takjes, blik,
3
3
  zakje, snuf]
4
4
  pinches: [snuf]
5
+ steps: [stap]
@@ -6,3 +6,4 @@ units: [xícara, xícaras, colher, colheres, dente, dentes, pitada, pitadas, fat
6
6
  number_words:
7
7
  meia: 0.5
8
8
  meio: 0.5
9
+ steps: [passo]
@@ -5,3 +5,4 @@ units: [г, гр, грамм, грамма, граммов, кг, мл, л, ст
5
5
  дес. ложки, ложка, ложки, ложек, столовая ложка, столовые ложки, столовых ложки, столовых ложек,
6
6
  чайная ложка, чайные ложки, чайных ложки, чайных ложек]
7
7
  pinches: [щепотка]
8
+ steps: [шаг]
@@ -1,3 +1,4 @@
1
1
  languages: [sv, "no", nb, nn, da]
2
2
  units: [ss, ts, tsk, msk, spsk, burk, boks, pakke, kvist, kvister, skiva, skivor, skive, skiver, kruka, potte,
3
3
  näve, stykk, stykker, stang, båt, båter, tärning, tärningar, st, stk, pkt]
4
+ steps: [trin, steg]
@@ -1,3 +1,4 @@
1
1
  languages: [sk]
2
2
  units: [ks, pl, čl, štipka, lyžica, lyžice, lyžička, lyžičky]
3
3
  pinches: [štipka]
4
+ steps: [krok]
@@ -1,2 +1,3 @@
1
1
  languages: [tr]
2
2
  units: [adet, diş, tutam, paket, çay kaşığı, yemek kaşığı, tatlı kaşığı, su bardağı, çay bardağı]
3
+ steps: [adım]
@@ -4,12 +4,13 @@ require "yaml"
4
4
 
5
5
  module RecipeScrapers
6
6
  module Parsers
7
- # The words {Ingredients} reads: units, pinch words, size adjectives, qualifiers and number words.
7
+ # The words the gem reads recipes with: units, pinch words, size adjectives, qualifiers and number
8
+ # words for {Ingredients}, and the words that label a numbered step.
8
9
  # The gem bundles one vocabulary per language, plus a common one with the metric units.
9
10
  #
10
11
  # @api private
11
12
  class Vocabulary
12
- WORD_LISTS = %i[units pinches sizes qualifiers].freeze
13
+ WORD_LISTS = %i[units pinches sizes qualifiers steps].freeze
13
14
  BUNDLED = File.expand_path("vocabulary/*.yml", __dir__)
14
15
  NEVER = "(?!)"
15
16
  private_constant :WORD_LISTS, :BUNDLED, :NEVER
@@ -26,6 +27,9 @@ module RecipeScrapers
26
27
  # @return [Array<String>] words before an amount that are not part of it, such as "about"
27
28
  attr_reader :qualifiers
28
29
 
30
+ # @return [Array<String>] words that label a numbered step, such as "step" in "Step 2"
31
+ attr_reader :steps
32
+
29
33
  # @return [Hash{String => Numeric}] amounts written as words, such as "two" => 2
30
34
  attr_reader :number_words
31
35
 
@@ -57,6 +61,13 @@ module RecipeScrapers
57
61
  combine(names_for(language))
58
62
  end
59
63
 
64
+ # @return [Vocabulary] every vocabulary in the catalog added together
65
+ #
66
+ # @api private
67
+ def all
68
+ combine(catalog.keys)
69
+ end
70
+
60
71
  # @param names [Array<Symbol>]
61
72
  # @return [Vocabulary] the named vocabularies added together
62
73
  #
@@ -96,16 +107,14 @@ module RecipeScrapers
96
107
  end
97
108
  end
98
109
 
99
- # @param units [Array<String>]
100
- # @param pinches [Array<String>]
101
- # @param sizes [Array<String>]
102
- # @param qualifiers [Array<String>]
103
110
  # @param number_words [Hash{String => Numeric}]
104
- def initialize(units: [], pinches: [], sizes: [], qualifiers: [], number_words: {})
105
- @units = units.uniq.freeze
106
- @pinches = pinches.uniq.freeze
107
- @sizes = sizes.uniq.freeze
108
- @qualifiers = qualifiers.uniq.freeze
111
+ # @param lists [Hash{Symbol => Array<String>}] the word lists: units, pinches, sizes, qualifiers and steps
112
+ # @raise [ArgumentError] when a list is not one of those
113
+ def initialize(number_words: {}, **lists)
114
+ unknown = lists.keys - WORD_LISTS
115
+ raise ArgumentError, "unknown word lists: #{unknown.join(", ")}" unless unknown.empty?
116
+
117
+ WORD_LISTS.each { |list| instance_variable_set(:"@#{list}", Array(lists[list]).uniq.freeze) }
109
118
  @number_words = number_words.freeze
110
119
  end
111
120
 
@@ -27,6 +27,8 @@ module RecipeScrapers
27
27
 
28
28
  # Every field a scraper answers, in the order {#to_h} returns them.
29
29
  CONTRACT = (Models::Recipe.members - %i[url]).freeze
30
+ EMBEDDED_ADDRESS = %r{\Ahttps?://[^/?#]*?(?<address>https?://.+)\z}
31
+ private_constant :EMBEDDED_ADDRESS
30
32
 
31
33
  class << self
32
34
  # Names the host a subclass reads, or returns it.
@@ -145,7 +147,7 @@ module RecipeScrapers
145
147
  # (see Models::Recipe#image)
146
148
  def image
147
149
  address = @declared.text(:image) || @schema.image || @open_graph.image
148
- address && URI.join(url, address).to_s
150
+ address && URI.join(url, address[EMBEDDED_ADDRESS, :address] || address).to_s
149
151
  rescue URI::Error
150
152
  address
151
153
  end
@@ -181,8 +183,10 @@ module RecipeScrapers
181
183
  private
182
184
 
183
185
  def ingredient_sections
184
- @ingredient_sections ||=
185
- Sources::IngredientGroups.sections(@declared.rows(:ingredients) || @schema.ingredients || [])
186
+ @ingredient_sections ||= Sources::IngredientGroups.sections(
187
+ @declared.rows(:ingredients) || @schema.ingredients || [],
188
+ headings: @declared.headings_among_rows
189
+ )
186
190
  end
187
191
 
188
192
  def marked_groups(lines)
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hellofresh.at"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hofer.at"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "aldi.com.au"
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "donnahay.com.au" do
4
+ title "h1.recipe-title__mobile"
5
+ ingredients rows: "div#ingredients li"
6
+ instructions rows: "div#method li"
7
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "gourmettraveller.com.au"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hellofresh.com.au"
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "juliegoodwin.com.au" do
4
+ title "h1"
5
+ ingredients rows: "#ingredients-field p", split: true
6
+ instructions rows: "#methods-fields li"
7
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "taste.com.au"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "womensweeklyfood.com.au"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "dagelijksekost.vrt.be"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hellofresh.be"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "eggs.ca"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hellofresh.ca"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "aldi-suisse.ch"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hellofresh.ch"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "101cookbooks.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "177milkstreet.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "30seconds.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "aberlehome.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "acouplecooks.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "adrianasbestrecipes.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "afarmgirlsdabbles.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "africanbites.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "alisoneroman.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "allsavoryrecipes.com"
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "amazingoriental.com" do
4
+ title "h1"
5
+ ingredients rows: "div.ingredients-wrap li"
6
+ ingredient_groups heading: "div.ingredients-wrap h5", item: "div.ingredients-wrap li"
7
+ instructions rows: "div.text-wrap > h2 + ul > li", skip: "span.number"
8
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "ambitiouskitchen.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "ameessavorydish.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "americastestkitchen.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "archanaskitchen.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "bakeitwithlove.com"
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "barefootcontessa.com" do
4
+ title "h1.alt-persist-title"
5
+ ingredients rows: ":has(> div.EntryPost__text) > div > ul > li"
6
+ instructions rows: "div.EntryPost__text p"
7
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "bigoven.com" do
4
+ instructions rows: "div#instr p"
5
+ ingredient_groups heading: "span.ingHeading", item: "span.ingredient:not(.ingHeading)"
6
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "bongeats.com" do
4
+ ingredients rows: "div.recipe-ingredients li"
5
+ instructions rows: "div.recipe-process li"
6
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "brewersfriend.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "carriesexperimentalkitchen.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "cdkitchen.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "chefjeanpierre.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "chefnini.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "cleaneatingkitchen.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "colleenchristensennutrition.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "comidinhasdochef.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "cookomix.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "corriecooks.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "culinaryhill.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "dinnerthendessert.com"
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "donalskehan.com" do
4
+ title "h1"
5
+ ingredients rows: "div#us p"
6
+ instructions rows: "ol.list-group li"
7
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "drizzleanddip.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "eatwell101.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "empirecipes.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "en.petitchef.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "epicurious.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "ethanchlebowski.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "fitmencook.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "gesund-aktiv.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "goldnplump.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "gourmandize.com"
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "grandfrais.com" do
4
+ ingredients rows: "div.ingredients-texte p"
5
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "handletheheat.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "hellofresh.com"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ RecipeScrapers.register "howtofeedaloon.com"