Веб-трафик и вызов API:
Итак, если вы начнете, например, с
http://burkinafaso.opendataforafrica.org/data/#menu=topic
Вы можете увидетьсписок всех ссылок верхнего уровня вместе с количеством их наборов данных.Если бы мы нажали на Aide Publique (7)
, мы бы увидели 7 разделов, которые, если вы нажмете на любой из них, представят вам Select dataset
.
Если вы отслеживаете веб-трафик при первом кликеВы увидите запрос API POST для получения данных для Aide Publique (7)
:
![enter image description here](https://i.stack.imgur.com/ZqA5E.png)
Если мы дополнительно проверим запрос, мы сможем наблюдать строку запросапараметры в URL и полезной нагрузке запроса:
![enter image description here](https://i.stack.imgur.com/bspwX.png)
Параметры - это, в основном, некоторая информация о нас, которую мы, вероятно, можем удалить;и небольшие эксперименты с полезной нагрузкой показывают, что если исключить полезную нагрузку, мы фактически получим все темы, а не только Aide Publique (7)
.
Ответ API:
Теперь, ответом является json и массив, но в R это означает список.Рассмотрим в качестве примера часть одного элемента в списке:
![image](https://i.stack.imgur.com/V9FQK.png)
Сравнение этой информации с фактическими ссылками набора данных, например
![enter image description here](https://i.stack.imgur.com/LEKVW.png)
Нажатие на Select DataSet
приводит к конечному URL-адресу
http://burkinafaso.opendataforafrica.org/nthpfqd/aide-ext%C3%A9rieure-par-secteur-de-1995-%C3%A0-2006-en-millions-de-fcfa
Быстрое сравнение с элементом списка 1 (предыдущее изображение json) показываетчто это, если мы считаем, что этот новый URL декодирован:
http://burkinafaso.opendataforafrica.org/nthpfqd/aide-extérieure-par-secteur-de-1995-à-2006-en-millions-de-fcfa
имеет формат:
'http://burkinafaso.opendataforafrica.org/{item["id"]}/{item["title"]}'
значение, в циклеповерх объекта ответа json мы можем сгенерировать окончательные ссылки, объединяя базовую строку с текущим элементом id
и текущим элементом title
.Мы также можем извлечь заголовок из текущего элемента name
.Мы можем использовать purrr
и map_df
для обработки цикла и окончательной генерации информационного кадра и httr
для создания POST.
R:
library(httr)
library(purrr)
r <- content(POST("http://burkinafaso.opendataforafrica.org/api/1.0/meta/dataset"))
df <- map_df(r, function(item) {
data.frame(title = item$name,
url = paste0("http://burkinafaso.opendataforafrica.org/", item$id,'/',item$title),
stringsAsFactors=FALSE)
})
View(df)
Py:
import requests
import pandas as pd
r = requests.post('http://burkinafaso.opendataforafrica.org/api/1.0/meta/dataset').json()
df = pd.DataFrame([(item['name'], f'http://burkinafaso.opendataforafrica.org/{item["id"]}/{item["title"]}') for item in r]
,columns = ['Title','Url'])
print(df)