๐Ÿš€Java

YouTube ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ - YouTube Data Api ์—ฐ๋™

harry.93 2021. 2. 28. 16:42
๋ฐ˜์‘ํ˜•

์œ ํŠœ๋ธŒ ์ฑ„๋„ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
์•„๋ž˜ ์†Œ์Šค์—๋Š” [๊ฒ€์ƒ‰์–ด][๋”๋ณด๊ธฐ] ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ํ•ด๋‹น ๊ฐ’๋“ค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์• ์ดˆ์— ํ•ด๋‹น API์—์„œ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์กด์žฌํ•ด์•ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ , ๊ฒฐ๊ณผ์—๋Š” pageToken ์ด ํ•ญ์‹œ ๋„˜์–ด์˜ค๊ณ  ํ•ด๋‹น ํ† ํฐ์„ ๋‚ ๋ ค์„œ ํŽ˜์ด์ง• ์กฐํšŒ๋„ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŽ˜์ด์ง• ๋˜ํ•œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์ž์„ธํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ์•ˆ๋‚ด ์‚ฌํ•ญ์€ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

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

 

Search: list  |  YouTube Data API  |  Google Developers

API ์š”์ฒญ์— ์ง€์ •๋œ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒ€์ƒ‰๊ฒฐ๊ณผ์˜ ๋ชจ์Œ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ์˜ ์ง‘ํ•ฉ์€ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ผ์น˜ํ•˜๋Š” video, channel, playlist ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜์ง€๋งŒ, ํŠน์ • ์œ ํ˜•์˜ ๋ฆฌ

developers.google.com

 

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;
	}
	
}

* ํ•ด๋‹น ์†Œ์Šค์—์„œ MyMap ๊ณผ MyCamelMap์€ map ํ˜•์‹์˜ ๊ฐ์ฒด๋ฅผ ๋”ฐ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋ฐ”๊พธ์…”์„œ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•