使用纽约时报API刮擦元数据

这篇教程介绍了如何注册并使用纽约时报API来获取文章的元数据,特别是在Yii平台上构建社区站点时如何方便地添加链接的标题和源信息。通过文章搜索API,结合jQuery和ajax请求,实现了对链接的查找功能,展示了获取标题、关键词和引言的示例。
摘要由CSDN通过智能技术生成
最终产品图片
您将要创造的

介绍

上周,我写了一篇有关抓取网页以收集元数据的介绍 ,并提到不可能抓取《纽约时报》的网站。 时报付费专区会阻止您尝试收集基本元数据。 但是,使用“纽约时报” API可以解决此问题。

最近,我开始在Yii平台之上构建一个社区站点,该站点将在以后的教程中发布。 我想使添加与网站内容相关的链接变得容易。 人们将URL粘贴到表单中很容易,但是同时提供标题和源信息也变得很耗时。

因此,在今天的教程中,我将扩展我最近编写的抓取代码,以在添加Times链接时利用New York Times API收集标题。

记住,我参与下面的评论主题,所以请告诉我您的想法! 您也可以通过Twitter @lookahead_io与联系

入门

注册API密钥

纽约时报API-API Gallery主页

首先,让我们注册以请求API密钥

纽约时报API-API注册页面

提交表单后,您将通过电子邮件收到密钥:

纽约时报API-带有API密钥的电子邮件

探索《纽约时报》 API

纽约时报API-类别

时报提供以下类别的API:

  • 封存
  • 文章搜索
  • 图书
  • 社区
  • 地域
  • 最受欢迎
  • 电影评论
  • 语义的
  • 时报通讯社
  • TimesTags
  • 热门故事

好多 而且,您可以从Gallery页面中单击任何主题以查看各个API类别文档:

纽约时报API-articlesearch json的文档

时报使用LucyBot 为其API文档提供支持 ,并且有一个有用的常见问题解答

纽约时报API-常见问题解答

他们甚至向您展示如何快速获得API使用限制(您需要插入密钥):

curl --head 
   https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key=<your-api-key>
    2>/dev/null | grep -i "X-RateLimit"
    X-RateLimit-Limit-day: 1000
    X-RateLimit-Limit-second: 5
    X-RateLimit-Remaining-day: 180
    X-RateLimit-Remaining-second: 5

最初,我很难理解文档-它是基于参数的规范,而不是编程指南。 但是,我在纽约时报API GitHub页面上发布了一些问题,这些问题很快得到了帮助。

使用文章搜索

对于今天的一集,我将重点介绍使用《纽约时报》的文章搜索。 基本上,我们将从上一教程扩展“ 创建链接”表单:

纽约时报API-使用有关北极熊的NYT故事URL创建链接表单

当用户单击Lookup时 ,我们将通过ajax请求发送到Link::grab($url) 。 这是jQuery:

$(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;
     }
  });
});

这是控制器和模型方法:

// 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密钥提出文章搜索请求:

$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-使用文章搜索API中的NYT故事URL和标题创建链接表单

如果您想从API请求中获取更多详细信息,只需将其他参数添加到?fl=headline请求中,例如keywordslead_paragraph

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库来更好地在接下来的情节中解析NYT API,但是此代码将关键字和引言部分进行了细分:

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/>';
}

这是本文显示的内容:

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非常有用,我很高兴看到他们将其提供给开发者社区。 通过GitHub获得如此快速的API支持也令人耳目一新-我只是没想到。 请记住, 它适用于非商业项目 。 如果您有赚钱的主意,请给他们发送便条,看他们是否会与您合作。 出版商渴望获得新的收入来源。

我希望您发现这些Web抓取集对您有所帮助,并将其用于您的项目中。 如果您想观看今天的节目,可以在我的网站Active Together中尝试一些网络抓取。

请在评论中分享任何想法和反馈。 您也可以随时直接通过Twitter @lookahead_io与联系 。 并确保查看我的讲师页面和其他系列文章,即使用PHP构建您的启动使用Yii2进行编程

相关链接

翻译自: https://code.tutsplus.com/tutorials/using-the-new-york-times-api-to-scrape-metadata--cms-27894

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值