В Википедии есть огромный набор данных, таких как статистика просмотров страниц, таблицы и т. Д. И в этой статье я покажу вам, как получить доступ к данным статистики или статистике просмотров страниц с помощью Wikipedia API и NodeJS.
Замечание
Вы можете найти окончательный проект по этой ссылке на GitHub.
Я буду использовать Wikipedia API, чтобы получить даты и просмотры пользователей. Подробнее об API Википедии можно прочитать здесь. Меня интересуют данные просмотров страниц для Африки за 27.04.2017 - 17.05.2017. 2018. Запрос на получение данных выглядит следующим образом: https://wikimedia.org/api/rest_v1/metrics/ pageviews /per-article/en.wikipedia/all-access/user/ Африка / daily / 20170427 00 / 20180517 0 0
Примечание
Обратите внимание, как использовать API, добавив в запрос слова (выделенные жирным шрифтом) просмотры страниц, Африка и дату.
Давайте начнем :)
Перейдите на Wikipedia.com, найдите Africa, затем нажмите вкладку Просмотр истории, а затем Статистика просмотров страниц (см. Изображения ниже).
На картинке выше показана статистика просмотров Африки с 27.04.2018 по 17.05.2018, но я бы хотел получить данные от 27.04.2017. Итак, перейдите в поле дат в левой части диаграммы и напишите правильные даты:
Теперь пора написать код, чтобы получить данные в красивой таблице.
Код время
Как я уже упоминал выше, я буду использовать NodeJS для извлечения данных. Я также буду использовать пакет запрос-обещание, поскольку он упрощает HTTP-запрос или, другими словами, помогает мне легко получить доступ к любой веб-странице и получить ее.
Первое, что нужно сделать, это создать папку для сохранения всего кода. Затем откройте терминал, перейдите к папке, созданной ранее, и создайте файл package.json, запустив следующую командную строку:
npm init
Установите также пакет request-prom:
npm install --save request npm install --save request-promise
Теперь давайте создадим файл, например readPagesViews.js, и скопируем / вставим приведенный ниже код:
var rp= require('request-promise'); var options={ method: 'GET', uri:'https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia/all-access/user/Africa/daily/2017042700/2018051700', json:true }; rp(options) .then(function(parseBody){ var data=[]; for(i=0 ;i<parseBody.items.length;i++){ data.push([parseBody.items[i].timestamp,parseBody.items[i].views]); } console.log(data); }) .catch(function (err){ });
Пояснения
Первая строка требует пакет request-prom и передает его переменной rp. Объект options собирает параметры метода Get, такие как ссылка на API Википедии, и способ получения данных в формате JSON (json: true )
Затем объект options передается в качестве параметра в rp; после выполнения Get результат (данные из Википедии) сохраняется в объекте parseBody.
Обычно parseBody - это набор данных, полученных из Википедии:
... { project: 'en.wikipedia', article: 'Africa', granularity: 'daily', timestamp: '2018051100', access: 'all-access', agent: 'user', views: 6727 }, { project: 'en.wikipedia', article: 'Africa', granularity: 'daily', timestamp: '2018051200', access: 'all-access', agent: 'user', views: 5450 }, ...
Но не забывайте, что цель - получить даты и просмотры пользователей. Чтобы получить эти две переменные из объекта parseBody, я использую следующий цикл для сохранения метки времени (даты) и представлений (представлений пользователей) в данных объекта:
var data=[]; for(i=0 ;i<parseBody.items.length;i++){ data.push([parseBody.items[i].timestamp,parseBody.items[i].views]); }
Вернитесь в терминал и выполните код:
node readPagesViews.js
И вуаля! Данные из анализа просмотров страниц в Африке хранятся в данных объекта:
... [ '2017090300', 5433 ], [ '2017090400', 5767 ], [ '2017090500', 6016 ], [ '2017090600', 6025 ], [ '2017090700', 6164 ], [ '2017090800', 5468 ], [ '2017090900', 4710 ], [ '2017091000', 5314 ], ...
Не стесняйтесь поделиться своим опытом работы с этим кодом или, если у вас есть лучший способ получить данные :)