Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!28.10.2024
Обхід блокування Reddit API
В мене окрім гарної стрічки RSS для Hacker News також є стрічка для Reddit - вона наразі не така цікава, але я збирався розширити асортимент та, можливо, зібрати альтернативу для HN з Реддіту.
Ну точніше, вона б мала бути, але на жаль вона давно порожня, та нарешті вирішив зʼясувати, чому. Виявилось, що Reddit блокує запити до власного API з адрес AWS. Причому я спочатку й не думав про блокування, бо використовую Lambda, яка отримує нову адресу щоразу, але коли почав шукати причину, що з дому стрічка працює, а з лямбди — ні, то натрапив на пост, який вказав на це пояснення.
Сиджу думаю, що ж можна зробити, куди переїхати… Може, проксі якийсь… Та тут мене осяяло: ну коли вдома все працює, то нехай скрипт запускається вдома! Можна було б й тут намудрити, наприклад, замінити стрічку на якусь локальну версію, але я пішов найпрямішим шляхом, та просто запускаю той самий код, що в AWS Lambda, тільки в себе на ноутбуці.
Скрипт, як і з Лямбди, завантажує кеш з S3 та вивантажує результат роботи теж в S3. (Нагадаю, що він генерує щоденний дайджест, а не живу стрічку.) Таким чином, в споживанні стрічки нічого не змінилося. Щоб надати доступ, створив користувача з такими самими правами. А більше нічого й міняти не треба.
Для запуску скриптів щодня в macOS є сервіс launchd
- аналог systemd
в Linux. (Не тільки щодня, а й за купою різноманітних сценаріїв.) А для зручної роботи з ним є застосунок LaunchControl. Це прямо цілий IDE, в ньому все видно та дуже зручно. Особливо тому, що вивчати параметри, наприклад, для запуску за розкладом, не хочеться — а в LaunchControl за ними є довідка та графічний інтерфейс. Так само і для перегляду журналу все готово. Рекомендую.
З несподіваного: Ruby в launchd
вмикав кодування ASCII, а не UTF8. Бо він виконується поза оточення оболонки, де в мене виставлена локаль. Це можна рішити аргументом -E utf-8:utf-8
. А ще, оскільки сам Ruby в мене сидить в asdf, та тягнути його в сервіс не хотілося, можна дізнатися прямий шлях до виконуваного файлу командою asdf which ruby
.