Study/RPA | Uipath

[UiPath] 네이버API - 언론사 이름 추출하기

nam-willow 2025. 4. 25. 15:11

uipath에서 뉴스 스크레핑을 하려고 찾아보니까 네이버 검색 api가 있는걸 알게되었습니다.

 

검색 > 블로그 - Search API

 

검색 > 블로그 - Search API

검색 > 블로그 블로그 검색 개요 개요 검색 API와 블로그 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수 있는 API

developers.naver.com

 

 

네이버 api를 사용하기위한 설정과 코드를 공유하고자 합니다.

 

 

 

 

 

 

네이버 애플리케이션 등록


네이버 api를 사용하려면 우선 애플리케이션을 등록하여 client id, client secret를 발급 받아야 합니다.

 

Application > 애플리케이션 등록

 

애플리케이션 - NAVER Developers

 

 

애플리케이션 - NAVER Developers

 

developers.naver.com

 

 

 

 

 

 

 

Application > 내 애플리케이션 메뉴의 아래에 등록한 애플리케이션 이름으로 하위 메뉴가 생깁니다.

애플리케이션 이름을 클릭하면 개요 탭에서 애플리케이션에 부여된 클라이언트 아이디와 클라이언트 시크릿을 확인할 수 있습니다.

 

 

 

request


requestUrl

https://openapi.naver.com/v1/search/news.json?query={0}&display=50&start=1&sort=date

 

 

invoke code - request

' request 설정
Dim request As System.Net.HttpWebRequest = CType(System.Net.WebRequest.Create(requestUrl), System.Net.HttpWebRequest)
request.Method = "GET"
request.ContentType = "application/json"
request.Headers.Add("Accept-Charset", "utf-8")
request.Headers.Add("X-Naver-Client-Id", "클라이언트 아이디")
request.Headers.Add("X-Naver-Client-Secret", "클라이언트 시크릿")

'request response
Try
	Dim response As System.Net.HttpWebResponse = CType(request.GetResponse(), System.Net.HttpWebResponse)
	Dim reader As New System.IO.StreamReader(response.GetResponseStream())
	responseData = reader.ReadToEnd()
	
	' 리소스 해제
	response.Close()
	reader.Close()

' error 
Catch e As Exception
	responseData = "Error - "& e.Message & " | source - " & e.Source
End Try

 

 

 

response

{
	"lastBuildDate":"Fri, 25 Apr 2025 13:11:29 +0900",
	"total":298148,
	"start":1,
	"display":100,
	"items":[
		{
			"title":"충주시, 읍·면 도시가스 공급 10개년 계획 수립",
			"originallink":"https:\/\/www.ccreview.co.kr\/news\/articleView.html?idxno=329314",
			"link":"https:\/\/www.ccreview.co.kr\/news\/articleView.html?idxno=329314",
			"description":"소규모 <b>LPG<\/b> 배관망 구축사업으로 대체해 별도로 예산을 편성, 불균형을 해소할 예정이다. 시는 지난 2015년부터 2024년까지 동량면 용대문화 마을 외 7개 마을 575세대에 42억원을 투입해 마을 단위 소규모 <b>LPG<\/b> 배관망... ",
			"pubDate":"Fri, 25 Apr 2025 12:42:00 +0900"
		},
		{
			"title":"[더벨][조선 기자재 키플레이어]세진重, 매출 감소에도 이익 확대…'국...",
			"originallink":"https:\/\/www.thebell.co.kr\/free\/content\/ArticleView.asp?key=202504211948273040104736",
			"link":"https:\/\/www.thebell.co.kr\/free\/content\/ArticleView.asp?key=202504211948273040104736",
			"description":"세진중공업은 국내 조선 기자재 기업 중 유일하게 <b>LPG<\/b> 탱크를 제조한다. 또 다른 고수익성 제품으로 꼽히는... 주력 제품인 <b>LPG<\/b> 탱크와 데크하우스가 시장 상황과 잘 맞물렸다. 세진중공업의 포트폴리오는 크게... ",
			"pubDate":"Fri, 25 Apr 2025 12:42:00 +0900"
		},
        	...
	]
}

 

 

 

언론사 추출


추가로 언론사 정보는 제공해주지 않기 때문에 originallink로 확인해서 치환하는 방식으로 추출 합니다.

 

참고 블로그

네이버 API 검색 결과에서 언론사 이름 추출하기

 

네이버 API 검색 결과에서 언론사 이름 추출하기

네이버 API로 뉴스를 검색할 때, 각 뉴스 항목에는 originallink라는 링크만 포함되어 있어 어느 언론사에서 제공한 뉴스인지 식별하기 어렵습니다. 언론사별로 고유한 originallink의 도메인명을 통해

nickdeveloper.co.kr

 

 

 

json_site

[
  {
    "site": "insight",
    "kor": "인사이트"
  },
  {
    "site": "topstarnews",
    "kor": "톱스타뉴스"
  },
  {
    "site": "yna",
    "kor": "연합뉴스"
  },
  {
    "site": "hankookilbo",
    "kor": "한국일보"
  },
  {
    "site": "mbn",
    "kor": "mbn뉴스"
  },
  ...
]

 

 

 

invoke code - 언론사 치환

'json 목록에 치환할 언론사가 있다면 치환
Dim matchedKor As String = Nothing
Dim originalLink As String = json_item("originallink").ToString

' 언론사 list 확인후 치환
For Each entry As JObject In json_site
    Dim site As String = entry("site").ToString()
	
    If originalLink.Contains(site) Then
        matchedKor = entry("kor").ToString()
        Exit For
    End If
Next


' 목록에 없다면 링크에서 호스트 이름 추출
If String.IsNullOrEmpty(matchedKor) Then

    Dim uri As New System.Uri(originalLink)
    Dim hostname As String = uri.Host.ToLower()

    ' www. 또는 news. 제거
    hostname = System.Text.RegularExpressions.Regex.Replace(hostname, "^(www|news)\.", "")
    ' 우선 .co.kr, .or.kr 등 복합 도메인 제거
    hostname = System.Text.RegularExpressions.Regex.Replace(hostname, "\.(co|or|go)\.kr$", "")
	' 최상위 도메인 제거 (co.kr, com, net 등)
    hostname = System.Text.RegularExpressions.Regex.Replace(hostname, "\.(co|kr|com|net|org|jp)$", "")

    matchedKor = hostname
End If

 

 

 

output


언론사 목록에 없다면 도메인 이름을 표시하고, 목록에 있다면 kor로 치환하게 설정하였습니다! 

{
    "title":"[더벨][조선 기자재 키플레이어]세진重, 매출 감소에도 이익 확대…'국...",
    "link":"https:\/\/www.thebell.co.kr\/free\/content\/ArticleView.asp?key=202504211948273040104736",
    "writer": "thebell"
}

{
    "title":"[더벨][조선 기자재 키플레이어]세진重, 매출 감소에도 이익 확대…'국...",
    "link":"https:\/\/www.thebell.co.kr\/free\/content\/ArticleView.asp?key=202504211948273040104736",
    "writer": "더벨"
}