반응형
유튜브 크롤링 할때 여러분들은 어떻게 하세요?
뭐 다 똑같겠죠 내용까지 가져오려면 클릭해서 안에 내용가져오고 다시 URL바꿔서 수집하고 .. 이러면 과부하도 걸리고
오래걸리고 그러자나여? 알아여 해봤으니깐
근데 유튜브도 API로 인해 쉽게 데이터를 가져올 수 있다는 사실을 알고 계셨나요?
알았다면 여기서 우리가 만날일은 없었겠죠
자 다시 소스 들어가여~
//동영상 카운트
private int cnt =1;
public void getYoutube(String nextToken) {
String apikey = "자신의 api key 값";
String channelId = "자신이 수집하고 싶은 채널 id값 UC로 시작하는거";
String UPplaylistid ="UCxxxxx 를 UU로 바꿔줘서 넣어주세염";
String apiUrl = "https://www.googleapis.com/youtube/v3/playlistItems?key="+ apikey
+ "&playlistId="+ UPplaylistid
+ "&part=snippet&fields=nextPageToken,pageInfo,items(id,snippet(publishedAt,title,description,thumbnails(high(url)),resourceId(videoId)))&order=date&maxResults=50";
//2번째 부터 다음 토큰값 있으면 파리미터 추가한다.
if (nextToken != null) {
apiUrl+= "&pageToken=" + nextToken ;
}
GetJson getJson = new GetJson();
JSONObject json = getJson.readJsonFromUrl(apiUrl);
if( json.has("nextPageToken")){
nextToken = json.getString("nextPageToken");
}else {
nextToken = null;
}
//페이지 관련 정보
//JSONObject page = json.getJSONObject("pageInfo");
JSONArray jArray = json.getJSONArray("items");
// System.out.println("next 토큰은 "+ nextToken +" 배열에는 " + jArray.length()+ "개의 정보 들어옴");
ArrayList<crawlingDTO> Ylist = new ArrayList<>();
for(int i =0 ; i< jArray.length(); i++) {
JSONObject item = jArray.getJSONObject(i);
//snippet
JSONObject snippet = item.getJSONObject("snippet");
String publishedAt = snippet.getString("publishedAt");
String description = snippet.getString("description");
if(description.equals("This video is unavailable.")) {continue;}
String title = snippet.getString("title");
JSONObject thumbnails = snippet.getJSONObject("thumbnails");
JSONObject high = thumbnails.getJSONObject("high");
//비디오 id
JSONObject resourceId = snippet.getJSONObject("resourceId");
String videoId = resourceId.getString("videoId");
String thumbUrl = "https://i.ytimg.com/vi/"+videoId+"/mqdefault.jpg";
//유튜브 동영상 정보 출력 여기값들 저장 필요;;;;
// System.out.println(cnt);
// System.out.println(title);
// System.out.println(publishedAt);
// System.out.println(description);
// System.out.println(thumbUrl);
// System.out.println(videoId);
String date = publishedAt.substring(0,publishedAt.indexOf("T"));
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy.MM.dd");
Date dates;
try {
dates = format.parse(date);
date = format2.format(dates);
} catch (ParseException e) {
System.out.println("date 파싱 에러");
}
title = Normalizer.normalize(title, Normalizer.Form.NFC);
//이게 내용
description = Normalizer.normalize(description, Normalizer.Form.NFC);
}
//토큰값이 있으면 계속해서 호출
if(nextToken != null) {
getYoutube(nextToken);
}else {
System.out.println("종료!!");
}
}
썸네일 출력하는 부분이랑 날짜 처리하는거 까지 다 넣어놨으니깐 편하게 이용만 해주시면 됩니다~ ㅎㅎㅎㅎ
그리고 이거는 메소드 자체가 돌기 때문에 안에서 리스트 처리하는 부분은 전역변수로 빼줘야 합니다
반응형
'빅데이터 > 크롤링' 카테고리의 다른 글
파이썬 크롤링 예시 소스 (0) | 2021.02.02 |
---|---|
자바 트위터 API를 이용한 데이터 수집 하기 (트위터 크롤링) (0) | 2020.12.23 |
서버에 Chrome 남아있는지 확인하고 일괄 삭제 (0) | 2020.12.22 |
자바 크롤링 Headless 적용 최신판!!!!(인스타 정책 변경) (0) | 2020.12.22 |
자바 셀레니움 크롤링할때 전체 텍스트가 안가져와질때 (1) | 2020.09.17 |
댓글