Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

31.03.2024

Організація рецептів з відкритими форматами даних

🌶️ NYT Cooking залишається моїм найнадійнішим джерелом рецептів. Так, New York Times за часи війни втратили мою довіру, проте розділ з рецептами це не стосується. Особливо подобається те, що кількість оцінок рецептів вимірюється тисячами, та коли рецепт на пʼять зірок — то можна бути впевненим, що вийде гарним. Мати надійні рецепти в одному місці, без прочісування інтернету — незрівнянно.

Але… є проблема. Всі інші рецепти я зберігаю в застосунок Paprika. На macOS та iOS це практично стандарт. Набридло мати (та шукати) одні рецепти в NYT Cooking, а інші — в Paprika. Захотілось перенести.

Крок перший. Як імпортувати рецепти в Paprika? Якби йшлося про один рецепт, то Paprika непогано імпортує з HTML. Але мені потрібний масовий імпорт. Спосіб є; з доступних форматів найпростіше підготувати YML. Тільки з чого?

Крок другий. Як отримати список збережених рецептів з NYT Cooking? Швидко помітив, що вебчастина це SPA. Гарна особливість SPA - можна знайти API, який його живить.Так і тут: є API recipe_box_search. От тільки як авторизуватися, щоб викликати його? Тут є хитрий спосіб: написати скрипт та виконати його в консолі браузера. В цьому та іншому випадках це простий шлях отримати дані з-під авторизації.

Крок третій. Як забрати дані рецепту? Авторизація для того не потрібна. Знайшов скрипт, який конвертує рецепти в простий HTML. Проте він розбирає сторінку з рецептом — цей метод поламається як тільки зміниться дизайн сторінки. Чи є надійніші джерела? Спроби завантажити сторінку з розширенням .json та іншими не допомогли. Тоді помітив, що в сторінці є блок <script type="application/ld+json>. Такий блок містить дані сторінки в форматі JSON-LD для машин — пошукових рушіїв та іншого. У випадку NYT Cooking, він містить всі дані рецепту! Залишилось тільки конвертувати їх у формат YML, який очікує Paprika.

Який тут висновок: при вебскрейпінгу варто звернути перевірити, чи є альтернатива у машинному форматі - RSS, JSON, і так далі. Тоді не доведеться робити ненадійний розбір сторінок.