논문/Code

Collect New york times news headlines using r

p-jiho 2023. 2. 1. 01:58

API를 이용하면 news data를 쉽게 얻을 수 있다.

New york times의 news는 API를 제공하므로 API를 이용해 headline과 그 외의 변수들을 수집하는 방법을 소개한다.

 

먼저, https://developer.nytimes.com 이 링크에 들어가 Get Started 부분을 클릭하면 데이터를 수집하는 방법을 소개하고 있다.

이해하기 어렵다면 이 블로그 내용을 따라오면 된다.

 

1. 회원가입

링크를 들어가보면 우측 상단에 sign in 이라는 부분을 찾아 클릭한다.

그 후, Create an account 를 클릭한 후 계정을 생성하면 된다.

 

2. 로그인

계정이 생성되었으면 계정을 생성한 emailpassword를 이용하여 로그인을 한다.

 

3. key 생성

로그인을 하면 우측 상단에 계정의 email이 떠있다. 클릭 후 APPs로 들어간다.

우측 상단을 보면 + NEW APP 부분을 클릭한다.

사용할 목적, 날짜 등등 사용자가 구분할 수 있는 이름을 자유롭게 App Name에 적는다.

하단에 사용하고 싶은 APIsEnable 한다.

news를 전부 수집할 목적이라면 Archive APIEnable한다.

키워드에 해당하는 news를 수집할 목적이라면 Article Search APIEnable한다.

필요한 API를 고른 후, 우측 하단의 SAVE 버튼을 누른다. 

 

다시 APPs로 돌아가서 사용할 APP의 이름을 클릭해 접속한다.

좌측 하단에 API Keys가 있고 key 부분을 복사한다.

이렇게 하면 이 Key를 이용해 API를 사용할 수 있게 된다.

 

나는 Archive API를 이용해 모든 news를 수집할 것이다.

 

4. API 구조 이해

처음 링크로 돌아가자. https://developer.nytimes.com 이 링크로 들어가서 우측에 있는 APIs에 들어간다.

좌측의 Archive API를 클릭해 접속한다.

Example Call 에 있는 부분이 데이터가 있는 url의 예시이다.

만약 생성한 key가 apple이라고 하자. 그리고 2022년 12월의 news를 가져오고 싶다면?

https://api.nytimes.com/svc/archive/v1/2022/12.json?api-key=apple

이 url에 2022년 12월의 new york times news data가 들어있는 것이다.

정확히는 metadata가 들어있어 육안으로는 news headline을 확인할 수 없을 것이다.

그러므로 구조를 이해해보도록 하자.

좌측의 목록을 보면 COMPONENTS Schemas 부분에 수집할 수 있는 부분들을 정리해두었다.

전체적인 구조를 보기위해서는 Article에 들어간다.

Article 안에 web_url, snippet, print_page 등등 Article을 구성하는 여러 정보들이 들어있다.

밑으로 내려보면 headline 부분을 볼 수 있다. headline 구성요소 중 main 부분에 headline data가 들어있다.

즉, Aricle > headline > main 순으로 좁히면 headline data를 볼 수 있다.

만약, news가 해당하는 카테고리를 보고싶다면?  Article > news_desk를 보면 된다.

 

5. API와 R을 이용해 데이터 수집

구조를 이해했으니 R을 이용하여 수집해보자.

생성한 key는 apple이라 가정하고 2022년 12월 news의 headline과 date를 수집해보자.

# install.pakages("jsonlite")
require("jsonlite")

key <- "apple"
year <- "2022"
month <- "12"

news_url <- paste("https://api.nytimes.com/svc/archive/v1/", year, "/", month, ".json?api-key=", key, sep = "")
news_json <- fromJSON(news_url)

headline <- news_json$response$docs$headline$main
date <- news_json$response$docs$pub_date

해당 url은 JSON 형 데이터로 구성이 되어있다. 그러므로 JSON 데이터를 다룰 수 있는 fromJSON 함수를 사용하여 결과를 가져온다.

구조를 보면 news_json은 리스트 형태로 response 안의 docs 안에 필요한 데이터들이 들어있다.

news의 headline은 headline$main에 있고, news의 date는 pub_date에 있다.

필요하다면 구조에 따라 다른 정보도 얻을 수 있다.

구한 headline과 date의 결과는 vector 구조로 얻을 수 있다.