В Википедии есть огромный набор данных, таких как статистика просмотров страниц, таблицы и т. Д. И в этой статье я покажу вам, как получить доступ к данным статистики или статистике просмотров страниц с помощью 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 ],
...

Не стесняйтесь поделиться своим опытом работы с этим кодом или, если у вас есть лучший способ получить данные :)