YouTube 검색 데이터 가져오기 - YouTube Data Api 연동

YouTube Data API

유튜브 채널 검색에 대한 결과를 리스트로 가져오는 예제 코드입니다.
아래 소스에는 [검색어][더보기] 기능이 추가되어 해당 값들도 파라미터로 넘겨 받고 있습니다.

애초에 해당 API에서 검색어가 존재해야 데이터를 가져올 수 있고, 결과에는 pageToken 이 항시 넘어오고 해당 토큰을 날려서 페이징 조회도 가능하기 때문에, 페이징 또한 구현이 가능합니다.

자세한 파라미터 및 안내 사항은 다음 주소를 참고해주세요.

developers.google.com/youtube/v3/docs/search/list?hl=ko

Source Cocde

package src.lib.youtubeSearchApi;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import src.lib.myMap.MyCamelMap;
import src.lib.myMap.MyMap;
public class youtubeSearchApi {
	public static MyMap youtubeSearch(MyMap paramMap) {
		// 검색결과 list
		MyMap result = new MyMap();
		MyMap info = new MyMap();
		List<MyCamelMap> resultDataList = new ArrayList<MyCamelMap>();
		List<MyCamelMap> list = new ArrayList<MyCamelMap>();
		// key setting
		String apiKey = "{API 키값}";
		// oauth setting
		String oauthKey = "{Oauth 키값}"; // 미사용
		// request parameter setting
		// 참고 사이트 : https://developers.google.com/youtube/v3/docs/search/list?hl=ko
		// 검색어
		String q = paramMap.getStr("searchValue", "");
		// 다음 페이지 토큰
		String nextPageToken = paramMap.getStr("nextPageToken", "");
		// 검색 유형 타입
		String type = "video"; // 비디오만 검색, 허용 값 : [channel|playlist|video]
		// request
		String apiUrl = "https://www.googleapis.com/youtube/v3/search?key=" + apiKey + "&part=snippet" + "&q=" + q + "&type=" + type;
		if (!nextPageToken.equals("") && !nextPageToken.equals(null)) {
			// 다음 페이지 호출인 경우에만 다음 페이지 토큰 값 포함.
			apiUrl += "&pageToken=" + nextPageToken;
		}
		if (paramMap.getStr("searchValue", "").equals("") || paramMap.getStr("searchValue", "").equals(null)) {
			// searchValue 없으면 동작하지 않음.
		} else {
			try {
				// url += URLEncoder.encode(searchValue, "UTF-8");
				// Connect to the URL using Java's native library
				URL url = new URL(apiUrl);
				URLConnection request = url.openConnection();
				request.connect();
				// Convert to a JSON object to print data
				JsonParser jp = new JsonParser(); // from gson
				JsonReader jr = new JsonReader(new InputStreamReader((InputStream)request.getContent()));
				jr.setLenient(true);
				JsonElement root = jp.parse(jr); // Convert the input stream to a json element
				JsonObject rootobj = root.getAsJsonObject(); // May be an array, may be an object.
				// info parsing
				String getNextPageToken = "noMoreResult";
				// next page token 이 있는 경우 가져오고 없는 경우 없다고 표시.
				if (!rootobj.has("nextPageToken")) {
					getNextPageToken = "noMoreResult";
				} else {
					getNextPageToken = rootobj.get("nextPageToken").getAsString();
				}
				JsonObject pageInfo = rootobj.get("pageInfo").getAsJsonObject(); // May be an array, may be an object.
				String totalResult = pageInfo.get("totalResults").getAsString();
				String resultsPerPage = pageInfo.get("resultsPerPage").getAsString();
				info.put("nextPageToken", getNextPageToken);
				info.put("totalResult", totalResult);
				info.put("resultsPerPage", resultsPerPage);
				// items parsing
				JsonArray dataList = rootobj.get("items").getAsJsonArray();
				// map setting
				// 1. title 2. id 3. description 4. published date 5. thumburl
				Gson gson = new Gson();
				Type listType = new TypeToken<ArrayList<MyCamelMap>>() {}.getType();
				resultDataList = gson.fromJson(dataList.toString(), listType);
				for (int i = 0; i < resultDataList.size(); i++) {
					MyCamelMap data = new MyCamelMap();
					data.put("title", dataList.get(i).getAsJsonObject().get("snippet").getAsJsonObject().get("title").getAsString());
					data.put("videoId", dataList.get(i).getAsJsonObject().get("id").getAsJsonObject().get("videoId").getAsString());
					data.put("des", dataList.get(i).getAsJsonObject().get("snippet").getAsJsonObject().get("description").getAsString());
					data.put("date", dataList.get(i).getAsJsonObject().get("snippet").getAsJsonObject().get("publishedAt").getAsString());
					data.put("thumbUrl", dataList.get(i).getAsJsonObject().get("snippet").getAsJsonObject().get("thumbnails").getAsJsonObject().get("default").getAsJsonObject().get("url").getAsString());
					list.add(data);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			result.put("info", info);
			result.put("list", list);
			result.put("paramMap", paramMap);
		}
		return result;
	}

}


© 2024. Chiptune93 All rights reserved.