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

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

02.01.2023

Прогрес з RSS-стрічкою для Reddit

Сьогодні в мене почалась відпустка, але мета відпустки — підігнати інші проєкти, на які з роботою не вистачає часу.

Погрався трохи з генерацією повнотекстової RSS-стрічки Reddit, такої як я зробив для Hacker News. Виявив ряд особливостей.

Ну, по-перше, Hacker News один, а сабреддітів безліч, тож одну стрічку на всіх не зробиш. Якщо відкривати власне рішення (щоб не марно його писати), бачу три варіанти. Або робити сервіс — напевно, платний, бо збирати стрічки та обходити обмеження без витрат не вийде. Або опен-сорсити, щоб кожний сам розгортав. Або ж ще можна зробити стрічки для декількох цікавих мультіреддітів — ну, наприклад, зібрати мультіреддіт для вебтехнологій. От з останнього спробую почати.

Далі, як взагалі забирати дані з Реддіту? Спочатку я хотів витягувати RSS-стрічку та скрейпати додаткові дані зі сторінок окремих постів. Але потім помітив, що адреса RSS - це та сама адреса сабреддіту, але з суфіксом .rss та спробував замість нього написати суфікс .json. Працює! Будь-яку сторінку — сабреддіт або окремий пост — можна легко отримати у форматі JSON. Та для цього не потрібно використання API та ніякої авторизації. На мою думку, чудове рішення.

Нарешті, Reddit зараз суворо ставиться до ботів, кілька запитів — і ви вже бачите блок-сторінку. Але я знайшов, як обійти, через два заходи. Включив cookie - для цього в Ruby є чудовий гем Mechanize. А також почав назначати user agent, згенерований бібліотекою Faker. Так, принаймні, 50 послідовних запитів в мене не блокуються. Також необхідно впровадити кеш, щоб не повторювати ті самі запити — в мене вже такий є.