Как получить исторические данные вопросов и ответов из обмена stackoverlfow без дросселирования?

Я пытаюсь прочитать все вопросы и ответы, связанные с AAD, из Stack Exchange API /2.2/search/advanced/pagesize=100&fromdate=2019-07-01&todate=2020-10-19&site=stackoverflow&filter=!BLIw93LDFyFBUjlepdSTkMo7r6Pkpx&q=listOfTags путем передачи набора тегов, поскольку мы пытаемся получить данные за 1 июля 2019 года.

Наш конвейер ADF продолжает замедляться, и даже если мы установим время ожидания на 1 минуту, а наш ETL будет очень медленным, он будет работать вечно.

Текущий подход (очень медленный)

  1. Я использую ADF, чтобы вытащить все вопросы (повторяя страницу за страницей, используя до активности), которые соответствуют тегам и загружают данные в SQL введите здесь описание изображения

  2. Передайте идентификатор вопроса в этот API https://api.stackexchange.com/docs/answers-on-questions#order=desc&sort=activity&ids=29433422&filter=!0U7YRMKgNJq(Exonzn(PdiZE5&site=stackoverflow&run=true), чтобы получить все ответы на соответствующий вопрос, а затем загрузить результат в SQL.

Вопросы:

  1. Есть ли прямой бэкенд (Kusto, SQL, Cosmos и т. д.), с помощью которого мы можем получить данные, а не вызывать API для получения вопросов и ответов? Если да, то как мы можем получить доступ к серверной части?

  2. Каков эффективный подход к извлечению исторических данных без регулирования из Stack Overflow?


person user3240560    schedule 21.10.2020    source источник


Ответы (2)


#1) Сомневаюсь, что есть что-то подобное. # 2) Дросселирование будет происходить на IP-адресе клиента, возможно, вы можете попробовать развернуть тот же конвейер ADF в другом регионе, это может помочь. если вы пойдете по этому пути, вам придется обновить API с помощью фильтра даты, чтобы никакие два региона не запрашивали один и тот же набор данных.

person HimanshuSinha-msft    schedule 23.10.2020

Вас блокируют, потому что вы, вероятно, сделали 300 запросов (максимум вызовов без ключа) или потому что URL-адрес недействителен. FWIW, регистрация вашего приложения в StackApps увеличивает вашу квоту API с 300 до 10 000! Затем вы можете передать его как параметр: &key=.... Теперь, что касается URL:

  • Вы используете .../advanced/pagesize=100.... Должно быть /advanced?pagesize=100&param=value....
  • Вы передаете даты как YYYY-MM-DD. Они должны быть в времени эпохи Unix!. В вашем случае fromdate должно быть 1561939200 и todate 1603065600 (Примечание: если вы хотите получить результаты до сегодняшнего дня, вы можете опустить этот параметр).

Я не уверен, что понимаю, что вы пытаетесь сделать. Впрочем, если API подходит для вашей задачи, то такая большая задержка вам не нужна. Вероятно, это должно быть ‹ 1сек. Что вам нужно сделать, так это проверить, существует ли поле backoff в ответе API. Если да, подождите столько же секунд, прежде чем продолжить.

Что касается вашего первого вопроса... как насчет SEDE? Вы можете запускать SQL-запросы для любого сайта и получать результаты в формате CSV. Здесь находится страница справки, и вы можете найти общедоступную схему в этот вопрос о Meta Stack Exchange. Если вы столкнулись с трудностями, не стесняйтесь задать новый вопрос.

Использованная литература:

person double-beep    schedule 24.10.2020