Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)



Tuần trước, tôi đã viết bài giới thiệu về thu thập thông tin từ trang web, đề cập đến việc không thể thu thập dữ liệu từ trang web New York Times. Dịch vụ của The Times ngăn chặn nỗ lực để thu thập dữ liệu cơ bản của bạn. Nhưng có một cách giải quyết điều này bằng cách sử dụng New York Times API.
Gần đây tôi đã bắt đầu xây dựng một trang web cộng đồng dựa trên nền tảng Yii, tôi đã viết về nó trong Lập trình với Yii2: Xây dựng trang cộng đồng với bình luận, chia sẻ và bình chọn (Envato Tuts+). Tôi muốn làm cho nó dễ dàng để thêm các liên kết liên quan đến nội dung trên trang web. Mặc dù rất dễ dàng để dán các URL vào form, nhưng nó trở nên mất thời gian để cung cấp thông tin tiêu đề và nguồn.
Vì vậy trong hướng dẫn ngày hôm nay, tôi sẽ mở rộng code thu thập dữ liệu tôi đã viết gần đây để tận dụng New York Times API để thu thập các đề mục khi các liên kết Times được thêm vào.
Hãy nhớ rằng, tôi tham gia vào các chủ đề thảo luận ở dưới đây, vì vậy hãy cho tôi biết những gì bạn nghĩ! Bạn cũng có thể liên hệ với tôi trên Twitter @lookahead_io.
Bắt đầu
Đăng ký một khoá API



Trước tiên, hãy đăng ký để yêu cầu một khóa API:



Sau khi bạn submit form, bạn sẽ nhận được khóa của bạn trong một email:



Khám phá New York Times API



The Times cung cấp các API trong các thể loại sau:
- Archive
- Article Search
- Books
- Community
- Geographic
- Most Popular
- Movie Reviews
- Semantic
- Times Newswire
- TimesTags
- Top Stories
Có rất nhiều. Và, từ trang Gallery, bạn có thể nhấp vào bất kỳ chủ đề nào để xem các tài liệu API cho từng thể loại:



The Times sử dụng LucyBot để cup cấp tài liệu API của họ, và có một FAQ hữu ích:



Chúng thậm chí còn giới thiệu với bạn cách làm thế nào để nhanh chóng có được các giới hạn sử dụng API của bạn (bạn cần phải gắn khóa của bạn):
1 |
curl --head |
2 |
https://api.nytimes.com/svc/books/v3/lists/overview.json?api-key=<your-api-key> |
3 |
2>/dev/null | grep -i "X-RateLimit" |
4 |
X-RateLimit-Limit-day: 1000 |
5 |
X-RateLimit-Limit-second: 5 |
6 |
X-RateLimit-Remaining-day: 180 |
7 |
X-RateLimit-Remaining-second: 5 |
Ban đầu tôi gặp vấn đề trong việc hiểu tài liệu hướng dẫn—nó là một mô tả dựa trên tham số, không phải là một hướng dẫn lập trình. Tuy nhiên, tôi đăng một số câu hỏi lên trang GitHub của New York Times API, và họ đã nhanh chóng trả lời.
Làm việc với Article Search
Đối với phần hướng dẫn của ngày hôm nay, tôi sẽ tập trung vào việc sử dụng Article Search của NY Times. Về cơ bản, chúng ta sẽ mở rộng form Create Link từ hướng dẫn trước:



Khi người dùng nhấp vào Lookup, chúng ta sẽ tạo một yêu cầu ajax thông qua Link::grab($url)
. Dưới đây là jQuery:
1 |
$(document).on("click", '[id=lookup]', function(event) { |
2 |
$.ajax({ |
3 |
url: $('#url_prefix').val()+'/link/grab', |
4 |
data: {url: $('#url').val()}, |
5 |
success: function(data) { |
6 |
$('#title').val(data); |
7 |
return true; |
8 |
}
|
9 |
});
|
10 |
});
|
Đây là phương thức controller và model:
1 |
// Controller call via AJAX Lookup request
|
2 |
public static function actionGrab($url) { |
3 |
Yii::$app->response->format = Response::FORMAT_JSON; |
4 |
return Link::grab($url); |
5 |
}
|
6 |
...
|
7 |
// Link::grab() method
|
8 |
public static function grab($url) { |
9 |
//clean up url for hostname
|
10 |
$source_url = parse_url($url); |
11 |
$source_url = $source_url['host']; |
12 |
$source_url=str_ireplace('www.','',$source_url); |
13 |
$source_url = trim($source_url,' \\'); |
14 |
// use the NYT API when hostname == nytimes.com
|
15 |
if ($source_url=='nytimes.com') { |
16 |
...
|
Tiếp theo, hãy sử dụng khóa API của chúng ta để tạo một yêu cầu article search:
1 |
$nytKey=Yii::$app->params['nytapi']; |
2 |
$curl_dest = 'http://api.nytimes.com |
3 |
/svc/search/v2/articlesearch.json?fl=headline&fq=web_url:%22'. |
4 |
$url.'%22&api-key='.$nytKey; |
5 |
$curl = curl_init(); |
6 |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
7 |
curl_setopt($curl, CURLOPT_URL,$curl_dest); |
8 |
$result = json_decode(curl_exec($curl)); |
9 |
$title = $result->response->docs[0]->headline->main; |
10 |
} else { |
11 |
// not NYT, use the standard metatag scraper from last episode
|
12 |
...
|
13 |
}
|
14 |
}
|
15 |
return $title; |
16 |
}
|
Và nó hoạt động khá trơn tru—đây là tiêu đề kết quả (bằng cách này, biến đổi khí hậu đang giết chết gấu Bắc cực và chúng ta nên quan tâm):



Nếu bạn muốn biết chi tiết hơn từ yêu cầu API của bạn, chỉ cần thêm các đối số bổ sung vào yêu cầu ?fl=headline
chẳng hạn như keywords
và lead_paragraph
:
1 |
Yii::$app->response->format = Response::FORMAT_JSON; |
2 |
$nytKey=Yii::$app->params['nytapi']; |
3 |
$curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. |
4 |
'fl=headline,keywords,lead_paragraph&fq=web_url:%22'.$url.'%22&api-key='.$nytKey; |
5 |
$curl = curl_init(); |
6 |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
7 |
curl_setopt($curl, CURLOPT_URL,$curl_dest); |
8 |
$result = json_decode(curl_exec($curl)); |
9 |
var_dump($result); |
Đây là kết quả:



Có lẽ tôi sẽ viết một thư viện PHP để phân tích tốt hơn NYT API trong phần sắp tới, nhưng code này sẵn dùng cho keywords và lead_paragraph:
1 |
Yii::$app->response->format = Response::FORMAT_JSON; |
2 |
$nytKey=Yii::$app->params['nytapi']; |
3 |
$curl_dest = 'http://api.nytimes.com/svc/search/v2/articlesearch.json?'. |
4 |
'fl=headline,keywords,lead_paragraph&fq=web_url:%22'.$url.'%22&api-key='.$nytKey; |
5 |
$curl = curl_init(); |
6 |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
7 |
curl_setopt($curl, CURLOPT_URL,$curl_dest); |
8 |
$result = json_decode(curl_exec($curl)); |
9 |
echo $result->response->docs[0]->headline->main.'<br />'.'<br />'; |
10 |
echo $result->response->docs[0]->lead_paragraph.'<br />'.'<br />'; |
11 |
foreach ($result->response->docs[0]->keywords as $k) { |
12 |
echo $k->value.'<br/>'; |
13 |
}
|
Dưới đây là những gì nó hiển thị cho bài viết này:
1 |
Polar Bears’ Path to Decline Runs Through Alaskan Village |
2 |
|
3 |
The bears that come here are climate refugees, on land because |
4 |
the sea ice they rely on for hunting seals is receding. |
5 |
|
6 |
Polar Bears |
7 |
Greenhouse Gas Emissions |
8 |
Alaska |
9 |
Global Warming |
10 |
Endangered and Extinct Species |
11 |
International Union for Conservation of Nature |
12 |
National Snow and Ice Data Center |
13 |
Polar Bears International |
14 |
United States Geological Survey |
Hy vọng rằng, điều đó bắt đầu mở rộng khả năng sáng tạo của bạn về cách làm thế nào để sử dụng các hàm API này. Thật thú vị với những gì mà bạn có thể làm lúc này.
Tóm lại
New York Times API là một API rất hữu ích, và tôi vui mừng khi thấy họ cung cấp nó cho cộng đồng các nhà phát triển. Nó cũng được làm mới để có được sự hỗ trợ API nhanh chóng thông qua GitHub—tôi chỉ không mong đợi điều này. Hãy nhớ rằng nó là dành cho các dự án phi thương mại. Nếu bạn có một số ý tưởng kiếm tiền, hãy gửi cho họ một bức thư ngắn để xem họ có làm việc với bạn hay không. Các nhà xuất bản đang háo hức với nguồn thu nhập mới.
Tôi hy vọng bạn thấy các bài về thu thập dữ liệu trang web là hữu ích và tận dụng chúng trong các dự án của bạn. Nếu bạn muốn học phần này một cách trực quan hơn, bạn có thể thử một số trang trên trang web của tôi, Active Together.
Xin vui lòng chia sẻ bất kỳ suy nghĩ và phản hồi của bạn trong phần bình luận. Bạn cũng luôn luôn có thể liên hệ trực tiếp với tôi trên Twitter @lookahead_io. Và hãy kiểm tra trang hướng dẫn của tôi và loạt bài khác, Xây dựng Startup của bạn với PHP và Lập trình với Yii2.