Стендап Сьогодні 📢 Канал в 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, і так далі. Тоді не доведеться робити ненадійний розбір сторінок.