Статьи

Использование API New York Times для очистки метаданных

Конечный продукт
Что вы будете создавать

На прошлой неделе я написал введение в очистку веб-страниц для сбора метаданных , отметив, что очистить сайт New York Times невозможно. Платежная система Times блокирует ваши попытки собрать основные метаданные. Но есть способ обойти это, используя API New York Times .

Недавно я начал создавать сайт сообщества на платформе Yii, который я опубликую в следующем уроке. Я хотел, чтобы было легко добавлять ссылки, связанные с контентом на сайте. В то время как людям легко вставлять URL-адреса в формы, требуется также много времени для предоставления информации о заголовке и источнике.

Итак, в сегодняшнем уроке я собираюсь расширить код, написанный недавно, чтобы использовать API New York Times для сбора заголовков при добавлении ссылок Times.

Помните, я участвую в комментариях ниже, так что скажите мне, что вы думаете! Вы также можете связаться со мной в Твиттере @lookahead_io .

New York Times API - Главная страница галереи API

Во-первых, давайте зарегистрируемся, чтобы запросить ключ API :

New York Times API - страница регистрации API

После отправки формы вы получите свой ключ по электронной почте:

New York Times API - электронная почта с ключом API
New York Times API - Категории

The Times предлагает API в следующих категориях:

  • Архив
  • Поиск статьи
  • книги
  • сообщество
  • географический
  • Самый популярный
  • Обзоры фильмов
  • семантический
  • Times Newswire
  • TimesTags
  • Главные новости

Это много. И на странице галереи вы можете щелкнуть любую тему, чтобы просмотреть документацию по отдельным категориям API:

Нью-Йорк Таймс API - Документация статьи поиска json

The Times использует LucyBot для поддержки своих документов API , и есть полезный FAQ :

API New York Times - часто задаваемые вопросы

Они даже показывают, как быстро получить ограничения на использование API (вам нужно подключить ключ):

1
2
3
4
5
6
7
curl —head
  https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key=<your-api-key>
   2>/dev/null |
   X-RateLimit-Limit-day: 1000
   X-RateLimit-Limit-second: 5
   X-RateLimit-Remaining-day: 180
   X-RateLimit-Remaining-second: 5

Сначала я пытался разобраться в документации — это спецификация на основе параметров, а не руководство по программированию. Тем не менее, я опубликовал некоторые вопросы в качестве проблем на странице GitHub API New York Times , и они быстро и полезно ответили.

В сегодняшнем эпизоде ​​я собираюсь сосредоточиться на поиске статей в NY Times. По сути, мы расширим форму « Создать ссылку» из последнего урока:

New York Times API - создайте форму ссылки с URL-адресом истории Нью-Йорк Таймс о белых медведях

Когда пользователь щелкнет по Lookup , мы сделаем ajax-запрос через Link::grab($url) . Вот jQuery:

01
02
03
04
05
06
07
08
09
10
$(document).on(«click», ‘[id=lookup]’, function(event) {
  $.ajax({
     url: $(‘#url_prefix’).val()+’/link/grab’,
     data: {url: $(‘#url’).val()},
     success: function(data) {
       $(‘#title’).val(data);
       return true;
     }
  });
});

Вот метод контроллера и модели:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
// Controller call via AJAX Lookup request
public static function actionGrab($url) {
  Yii::$app->response->format = Response::FORMAT_JSON;
  return Link::grab($url);
}
// Link::grab() method
public static function grab($url) {
  //clean up url for hostname
  $source_url = parse_url($url);
  $source_url = $source_url[‘host’];
  $source_url=str_ireplace(‘www.’,»,$source_url);
  $source_url = trim($source_url,’ \\’);
  // use the NYT API when hostname == nytimes.com
  if ($source_url==’nytimes.com’) {
   …

Далее, давайте воспользуемся нашим ключом API, чтобы сделать запрос на поиск статьи:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
$nytKey=Yii::$app->params[‘nytapi’];
    $curl_dest = ‘http://api.nytimes.com
        /svc/search/v2/articlesearch.json?fl=headline&fq=web_url:%22′.
        $url.’%22&api-key=’.$nytKey;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL,$curl_dest);
    $result = json_decode(curl_exec($curl));
    $title = $result->response->docs[0]->headline->main;
  } else {
    // not NYT, use the standard metatag scraper from last episode
         …
    }
  }
  return $title;
}

И это работает довольно легко — вот итоговый заголовок (кстати, изменение климата убивает белых медведей, и мы должны заботиться ):

New York Times API - создайте форму ссылки с URL-адресом NYT Story и заголовком из API поиска статей

Если вам нужна дополнительная информация из вашего запроса API, просто добавьте дополнительные аргументы к запросу ?fl=headline такие как keywords и lead_paragraph :

1
2
3
4
5
6
7
8
9
Yii::$app->response->format = Response::FORMAT_JSON;
$nytKey=Yii::$app->params[‘nytapi’];
$curl_dest = ‘http://api.nytimes.com/svc/search/v2/articlesearch.json?’.
  ‘fl=headline,keywords,lead_paragraph&fq=web_url:%22′.$url.’%22&api-key=’.$nytKey;
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL,$curl_dest);
$result = json_decode(curl_exec($curl));
var_dump($result);

Вот результат:

Ответ на запрос API

Возможно, я напишу библиотеку PHP, чтобы лучше анализировать API NYT в следующих эпизодах, но этот код разбивает ключевые слова и главный абзац:

01
02
03
04
05
06
07
08
09
10
11
12
13
Yii::$app->response->format = Response::FORMAT_JSON;
$nytKey=Yii::$app->params[‘nytapi’];
$curl_dest = ‘http://api.nytimes.com/svc/search/v2/articlesearch.json?’.
  ‘fl=headline,keywords,lead_paragraph&fq=web_url:%22′.$url.’%22&api-key=’.$nytKey;
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL,$curl_dest);
$result = json_decode(curl_exec($curl));
echo $result->response->docs[0]->headline->main.'<br />’.'<br />’;
echo $result->response->docs[0]->lead_paragraph.'<br />’.'<br />’;
foreach ($result->response->docs[0]->keywords as $k) {
  echo $k->value.'<br/>’;
}

Вот что он показывает для этой статьи:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
Polar Bears’ Path to Decline Runs Through Alaskan Village
 
The bears that come here are climate refugees, on land because
the sea ice they rely on for hunting seals is receding.
 
Polar Bears
Greenhouse Gas Emissions
Alaska
Global Warming
Endangered and Extinct Species
International Union for Conservation of Nature
National Snow and Ice Data Center
Polar Bears International
United States Geological Survey

Надеемся, что это начинает расширять ваше воображение о том, как использовать эти API. Это довольно захватывающе, что теперь возможно.

API New York Times очень полезен, и я рад, что они предлагают его сообществу разработчиков. Также было приятно получить такую ​​быструю поддержку API через GitHub — я просто не ожидал этого. Имейте в виду, что он предназначен для некоммерческих проектов . Если у вас есть идея заработать деньги, отправьте им записку, чтобы посмотреть, будут ли они работать с вами. Издатели стремятся к новым источникам дохода.

Я надеюсь, что вы нашли эти эпизоды соскреба в Интернете полезными и применили их в своих проектах. Если вы хотите увидеть сегодняшнюю серию в действии, вы можете попробовать некоторые из веб-страниц на моем сайте, « Активно вместе» .

Пожалуйста, поделитесь своими мыслями и отзывами в комментариях. Вы также всегда можете связаться со мной через Twitter @lookahead_io напрямую. И не забудьте проверить мою страницу инструктора и другие серии, « Создание стартапа на PHP и программирование на Yii2» .