Опишіть вимоги до джерела перед зміною коду
Мета цієї вправи — замінити один компонент наявного збирача. Опишіть потреби споживача даних: які відомості обов’язкові, чи прийнятний історичний матеріал і як діяти, коли придатного допису немає. Це правила приймання у вашому коді, а не властивості API-ключа. За ними можна перевірити результат переходу, не обмежуючись фактом успішної HTTP-відповіді.
Reddit Scraping запитує незалежний історичний архів. Він не обходить передану URL-адресу, не отримує поточні сторінки Reddit і не надає засобів обходу обмежень доступу. Сервіс не пов’язаний із Reddit, не підтримує публікації, голосування, приватні повідомлення чи Reddit OAuth. Перш ніж прибрати компонент спостереження за поточним сайтом, вирішіть, чи підходять доступні історичні дописи вашому застосунку та як ви позначатимете їхнє походження.
Отримайте сторінку й визначте результат звернення
Використовуйте GET https://api.redditscraping.com/v1/posts?subreddit=webscraping&limit=3 із X-API-Key: <key> або Authorization: Bearer <key>. Фільтр спільноти й невелика межа дають етап огляду, а не доказ релевантності чи рівного охоплення. Збережіть відповідь і параметри. Порівнюйте реальні поля з результатом старого парсера, не припускаючи незмінної схеми або обов’язкового попереднього очищення тексту. Записи webscraping можуть бути відсутні, тому успішну порожню відповідь також потрібно обробити.
Розрізняйте помилку запиту, успішну відповідь без записів і записи, які ще треба перевірити. Порожня відповідь не є підставою створювати вигаданий допис заради продовження обробки. Якщо обов’язкового значення бракує, залиште початкову відповідь і пояснення відхилення. Відмова вашого модуля прийняти запис та помилка API — різні події; це розрізнення потрібне і в діагностиці.
Нормалізуйте дані після перевірки запису
Збережіть етап початкової відповіді перед етапом зіставлення полів. Перевірте масив data й відрізняйте порожній успішний результат від неправильної структури чи HTTP-помилки. Для кожного запису зберігайте ідентифікатор за наявності та перевіряйте поля, потрібні вашому споживачеві даних. Розділяйте відсутній текст, порожній рядок і відхилений запис, щоб звіт про перехід пояснював долю кожного отриманого елемента, а не приховував втрати під час перетворення.
Для застосунку, що працює з текстом, залишайте отриманий текст поряд із локально нормалізованою версією. Застосовуйте лише потрібні перетворення, наприклад правила пробілів вашого споживача, та зазначайте їхню версію. Не підмінюйте відсутній текст порожнім спостереженням. Зберігайте наявний ідентифікатор для зіставлення. Якщо прибираєте повтори, фіксуйте причину власного рішення, не називаючи архів гарантовано унікальним набором.
Установіть межі роботи збирача
Кожен запит повертає до 100 записів; для одного набору фільтрів доступно до 100 сторінок, по одній сторінці на звернення. Читайте total разом із relation: eq — точний підсумок, gte — нижня межа, unknown — ненадійний підсумок або null. Не вважайте невідоме нулем, а точну кількість — доказом повного вивантаження. Поділ запитів і локальне вилучення повторів організовують матеріал, але не доводять повноту архіву.
Повторюйте перетворення зі збереженої відповіді
Перевіряючи нову версію перетворення, подайте на вхід уже збережену відповідь. Це допоможе відділити зміну коду від іншого результату нового запиту. Зіставте прийняті записи, відхилення й порожні відповіді з вимогами застосунку. Назви файлів, тривалість зберігання та права доступу визначаєте ви. Локальний файл не створює серверного знімка й не гарантує подальшої доступності тих самих записів.
Визначте, який старий код уже не потрібен
Що можна прибрати? Завантаження HTML і селектори, які використовувалися лише для історичного матеріалу, прийнятого новим компонентом. Що залишається? Розклад, перевірки полів, нормалізація, зберігання та пояснення прогалин. Якщо старий збирач також мав показувати поточний стан сторінки, ця потреба ще не розв’язана. Не оголошуйте архів повною заміною; опишіть межі переходу до наступного запуску за розкладом.
Кешуйте початкові відповіді за потреби та зберігайте версію правил перетворення, щоб повторювати локальну обробку своїх файлів. Новий віддалений запит не зобов’язаний повернути ті самі записи. Обробляйте 400, 401, 402 і 429 за документацією. Один успішний запит, включно з порожнім і повторним, коштує один кредит; втрата відповіді можлива після оплаченого успіху. Ціни та сторінка ключа описують облікові операції, тоді як /v1/status не показує баланс чи стан пошуку.