Вступление
На прошлой неделе я написал введение в очистку веб-страниц для сбора метаданных , отметив, что очистить сайт New York Times невозможно. Платежная система Times блокирует ваши попытки собрать основные метаданные. Но есть способ обойти это, используя API New York Times .
Недавно я начал создавать сайт сообщества на платформе Yii, который я опубликую в следующем уроке. Я хотел, чтобы было легко добавлять ссылки, связанные с контентом на сайте. В то время как людям легко вставлять URL-адреса в формы, требуется также много времени для предоставления информации о заголовке и источнике.
Итак, в сегодняшнем уроке я собираюсь расширить код, написанный недавно, чтобы использовать API New York Times для сбора заголовков при добавлении ссылок Times.
Помните, я участвую в комментариях ниже, так что скажите мне, что вы думаете! Вы также можете связаться со мной в Твиттере @lookahead_io .
Начиная
Зарегистрируйтесь для получения ключа API
Во-первых, давайте зарегистрируемся, чтобы запросить ключ API :
После отправки формы вы получите свой ключ по электронной почте:
Изучение API New York Times
The Times предлагает API в следующих категориях:
- Архив
- Поиск статьи
- книги
- сообщество
- географический
- Самый популярный
- Обзоры фильмов
- семантический
- Times Newswire
- TimesTags
- Главные новости
Это много. И на странице галереи вы можете щелкнуть любую тему, чтобы просмотреть документацию по отдельным категориям API:
The Times использует LucyBot для поддержки своих документов API , и есть полезный FAQ :
Они даже показывают, как быстро получить ограничения на использование 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. По сути, мы расширим форму « Создать ссылку» из последнего урока:
Когда пользователь щелкнет по 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;
}
|
И это работает довольно легко — вот итоговый заголовок (кстати, изменение климата убивает белых медведей, и мы должны заботиться ):
Если вам нужна дополнительная информация из вашего запроса 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);
|
Вот результат:
Возможно, я напишу библиотеку 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» .