본문 바로가기

   
Programming/PHP

유튜브 API 조회수 많은 순위 뽑아보기 PHP 간단 샘플 코드

반응형

유튜브 API 조회수 많은 순위 뽑아보기 PHP 간단 샘플 코드

얼마 전 유튜브 조회수가 가장 많은 순위로 재미 삼아 테스트 사이트를 만들면 좋을 것 같다고 생각했습니다. PHP로 구현할 예정이었는데 Google Developers Console을 이용하면 YouTube DATA API V3를 이용해 데이터 조회가 가능하다고 하더군요. 먼저 Google Developers Console 사이트에 접속하시면 됩니다.

1. Google Developers Console 프로젝트 생성
2. YouTube DATA API V3 API 키 발급
3. 호스팅 받은 PHP 사이트에서 YouTube DATA API 매뉴얼을 보며 코딩 후 확인해 보기.

 

먼저 Google Developers Console 사이트에 접속하시면 됩니다. https://console.cloud.google.com/cloud-resource-manager

Google Developers Console 사이트 안내
Google Developers Console 사이트 안내


 

먼저 API를 사용하기 위해선 프로젝트 만들기 메뉴를 선택하셔서 프로젝트를 만드셔야 합니다.

Google Developers Console 프로젝트 만들기
Google Developers Console 프로젝트 만들기


 

프로젝트 이름을 정하시고 만들기 버튼을 눌러 주시면 됩니다.

Google Developers Console 프로젝트 만들기 과정
Google Developers Console 프로젝트 만들기 과정


 

그럼, 아래 이미지와 같이 프로젝트가 만들어진다고 표시됩니다. 조금 기다리시면 프로젝트가 만들어집니다.

Google Developers Console 프로젝트 생성 완료
Google Developers Console 프로젝트 생성 완료


 

프로젝트를 만드시고 검색창에 YouTube Data API로 검색하시면 아래 이미지와 같이 검색된 YouTube Data API v3를 선택해 주시면 됩니다.

YouTube Data API 찾기
YouTube Data API 찾기


 

이곳에서 사용 버튼을 눌러 주시면 됩니다.

YouTube Data API 사용 설정 하기
YouTube Data API 사용 설정 하기

 


 

사용 설정이 완료되시면 사용자 인증 정보 메뉴 선택해 주세요.

YouTube Data API 사용자 인증정보 메뉴
YouTube Data API 사용자 인증정보 메뉴


 

사용자 인증 정보 만들기 메뉴 선택 후 API 키 메뉴를 선택해 주세요.

YouTube Data API API키 생성
YouTube Data API API키 생성


 

그럼, 아래 이미지와 같이 YouTube Data API를 사용하기 위한 API 키 생성이 완료되게 됩니다.

YouTube Data API 키생성
YouTube Data API 키생성


 

이제 코딩이 필요한 순간입니다. 제가 이것저것 테스트 해봤지만 서버에 추가로 설치되어야 API 데이터를 자유롭게 받아올 수 있었습니다. 하지만 제가 쓰는 호스팅 서버에 설치할 권한도 없었으며 컨트롤도 할 수 없어 curl 라이브러리를 사용해 테스트해 봤습니다.

몇 가지 문제가 있으니 적어 둘게요.
1. $searchQuery 변수에 띄어쓰기 검색이 안되니 단순한 단어로 테스트 하면 좋을 것 같습니다.
2. 응답 데이터에 있어야 할 API 변수가 제대로 다 들어가 있지 않았습니다. 아무래도 서버에 Google API 클라이언트 라이브러리를 설치하지 않고 하다 보니 제대로 된 응답 데이터를 받을 수 없었던 것 같습니다.
3. 1000개를 요청했는데 결과를 50개밖에 주지 않더군요. 이건 API 설정에서 조정해야 하는 건지 Google API를 설치하면 되는 건지 테스트가 필요해 보입니다.

<?php

// API 키 설정
$apiKey = '사이트에서 받은 YOUTUBE API 키를 여기다 넣으시면 됩니다.';

// API 요청 URL 설정
$searchQuery = '오버워치';
$maxResults = 1000;
$url = "https://www.googleapis.com/youtube/v3/search?key={$apiKey}&q={$searchQuery}&type=video&order=viewCount&maxResults={$maxResults}";

// cURL 세션 초기화
$ch = curl_init();

// cURL 옵션 설정
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// API 요청 보내기
$response = curl_exec($ch);

// cURL 세션 닫기
curl_close($ch);

// API 응답 확인
if ($response) {
    // JSON 응답 파싱
    $data = json_decode($response, true);

    // 동영상 순위 출력
    $rank = 1;
    foreach ($data['items'] as $item) {
        $videoId = $item['id']['videoId'];
        
        // 썸네일 이미지 URL 설정
        $thumbnailUrl = "https://img.youtube.com/vi/{$videoId}/default.jpg";
        
        // 동영상 정보 출력
        echo "{$rank }위 ";
        echo "<a href=\"https://www.youtube.com/watch?v={$videoId}\" target=\"_blank\"><img src=\"{$thumbnailUrl}\"></a>";
        ++$rank;
    }

} else {
    echo "API 요청 실패\n";
}
?>

 

처음 시작하는 지금은 연결 테스트만 하는 용도로 여러 가지 문제점은 있지만 호스팅 받았던 웹사이트에서 테스트는 성공했습니다.

유튜브 조회수 많은 순위로 뽑아본 PHP 테스트 화면
유튜브 조회수 많은 순위로 뽑아본 PHP 테스트 화면


 

재밌네요. 유튜브 API 테스트를 통해 현재 조회수가 가장 많은 유튜브 동영상을 확인해 볼 수 있다는 게 흥미로운 것 같습니다. 문제점은 여러 가지 있지만 나중에 추가로 작업을 하게 된다면 머리를 써봐야 할 듯합니다. API 응답 데이터를 자주 주고받으면 막히게 되어 있을 겁니다. 4일을 주기로 한 번씩만 호출하고 한번 호출한 응답 데이터를 DB에 저장하는 방식으로 사이트를 만들면 API 호출 데이터 한계를 넘지 않고 재밌는 사이트를 만들어 볼 수 있을 듯합니다.

반응형