Падает парсинг сайта: дублируется изображение
Created by: ZzDmitry
При грабинге есть несколько ошибок вида:
2020-05-01T05:30:08.914Z [GrabFoodListJob] debug: Downloaded: {"uri":"https://www.mealty.ru/upload/e6/c8/e6c84bcd2adcc924.jpeg","fileName":"e6_c8_e6c84bcd2adcc924.jpeg","contentLength":"249808","contentType":"image/jpeg"}
2020-05-01T05:30:08.926Z [GrabFoodListJob] error: Error: Error while upserting food item "{"name":"Куриные крылья в соусе барбекю, 550 гр","chefName":"Александр Матюнькин","chefProfession":"Главный шеф-повар Милти","description":" ","weight":500,"weightUnit":"Вес, г","proteins":17.5,"fats":11.1,"carbohydrates":2.7,"calories":180,"products":"куриные крылышки, соус барбекю (вода, сахар, паста томатная, уксус натуральный, соль поваренная, загустители (крахмал кукурузный, камедь ксантановая), соус-маринад Терияки, (соевый соус (вода, соя, пшеница, соль), вино, сахар, вода, уксус натуральный, соль, экстракты специй, луковый порошок, чесночный порошок), красители (свекольный красный, карамельный), порошок чесночный, ароматизатор натуральный (содержит сельдерей), регулятор кислотности кислота молочная, ароматизатор, имбирь, гвоздика, паприка красная, перец черный), молотая паприка, соль.","imgUrl":"https://www.mealty.ru/upload/e6/c8/e6c84bcd2adcc924.jpeg","mediumImgUrl":"https://www.mealty.ru/upload/d7/f1/d7f1768a18b32838.jpeg","mediumNoExtensionFileName":"d7f1768a18b32838","grabbedPrice":150,"mealtyOfferId":110,"mealtyOfferTypeId":1,"expiresIn":5,"fileName":"e6_c8_e6c84bcd2adcc924.jpeg"}": UniqueViolationError: insert into "FoodDictEntries" ("calories", "carbohydrates", "chef_name", "chef_profession", "created_at", "description", "expires_in", "fats", "file_name", "grabbed_price", "img_url", "mealty_offer_id", "mealty_offer_type_id", "medium_img_url", "medium_no_extension_file_name", "name", "products", "proteins", "weight", "weight_unit") values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20) returning "id" - duplicate key value violates unique constraint "unique_FoodDictEntries_medium_no_extension_file_name"
Отформатируем:
2020-05-01T05:30:08.914Z [GrabFoodListJob] debug: Downloaded: {"uri":"https://www.mealty.ru/upload/e6/c8/e6c84bcd2adcc924.jpeg","fileName":"e6_c8_e6c84bcd2adcc924.jpeg","contentLength":"249808","contentType":"image/jpeg"}
2020-05-01T05:30:08.926Z [GrabFoodListJob] error: Error: Error while upserting food item
"{
"name":"Куриные крылья в соусе барбекю, 550 гр",
"chefName":"Александр Матюнькин",
"chefProfession":"Главный шеф-повар Милти",
"description":" ",
"weight":500,
"weightUnit":"Вес, г",
"proteins":17.5,
"fats":11.1,
"carbohydrates":2.7,
"calories":180,
"products":"куриные крылышки, соус барбекю (вода, сахар, паста томатная, уксус натуральный, соль поваренная, загустители (крахмал кукурузный, камедь ксантановая), соус-маринад Терияки, (соевый соус (вода, соя, пшеница, соль), вино, сахар, вода, уксус натуральный, соль, экстракты специй, луковый порошок, чесночный порошок), красители (свекольный красный, карамельный), порошок чесночный, ароматизатор натуральный (содержит сельдерей), регулятор кислотности кислота молочная, ароматизатор, имбирь, гвоздика, паприка красная, перец черный), молотая паприка, соль.",
"imgUrl":"https://www.mealty.ru/upload/e6/c8/e6c84bcd2adcc924.jpeg",
"mediumImgUrl":"https://www.mealty.ru/upload/d7/f1/d7f1768a18b32838.jpeg",
"mediumNoExtensionFileName":"d7f1768a18b32838",
"grabbedPrice":150,
"mealtyOfferId":110,
"mealtyOfferTypeId":1,
"expiresIn":5,
"fileName":"e6_c8_e6c84bcd2adcc924.jpeg"
}":
UniqueViolationError: insert into "FoodDictEntries"
("calories", "carbohydrates", "chef_name", "chef_profession", "created_at", "description", "expires_in", "fats", "file_name", "grabbed_price", "img_url", "mealty_offer_id", "mealty_offer_type_id", "medium_img_url", "medium_no_extension_file_name", "name", "products", "proteins", "weight", "weight_unit")
values
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20)
returning "id" - duplicate key value violates unique constraint "unique_FoodDictEntries_medium_no_extension_file_name"
Попытка вставки уже имеющейся по основным признакам еды, конечно же, изображение уже есть.
Явно должен быть апдейт. Но происходит вставка, потому что еда по имени не найдена. Имя имеющееся и новое отличаются:
было : Куриные крылья в соусе барбекю, 500 гр
стало: Куриные крылья в соусе барбекю, 550 гр
потому происходит вставка.