TMDB APIへの情報のロード


ディズニープラスが提供するコンテンツデータをロードするために、TMDBが提供するオープンAPIを使用した.ローカル・データベースにデータを格納せずに直接データをロードして出力するのは初めてなので、ちょっと迷いました.

1.TMDB APIの使用方法


参加とAPI KEYリリースの説明はこの文章を参照してください.
加入とKEYリリースが終了したら、https://developers.themoviedb.org/3/<こちらへ移動してください.
TMDB APIはURLでデータを取得する方式で使用されているが、ユーザが取得したいデータに基づいてラベルを分けて詳細に説明するのが友好的である.

特定の会社が提供するコンテンツ(私たちのプロジェクトではディズニープラス)のリストを知りたい場合は、DISCOVERラベルを選択して行うことができます.

このページの下部に移動すると、このような画面が表示されます.必要なデータをロードすると、使用可能なパラメータを決定できます.

右側の入力ボックスに使用する条件の値を入力すると、TMDBはクエリー文字列に整理されurlを生成します.

適切なパラメータのvalue値が分からない場合は、タイトルのOASボタンをクリックします.

APIの仕様はjson形式で表記されている.CTRL+Fで検索して、必要な情報を見つければいいです.私が使う情報はディズニープラスのprovider idに相当するvalue値です!表示は337です.

2.javaを使用してjsonタイプデータをグループ化する


上記の方法でurlを完了し、任意のWebブラウザで実行します.
(例えば、ディズニープラスで提供されているコンテンツには、韓国で利用可能な映画のリストに入れるURLがあります.https://api.themoviedb.org/3/discover/movie?api_key=本人API KEY値&with watch provider=337&watch region=KR&言語=ko&page=)

上記urlを実行することで、上記のような一見ぼんやりした結果が得られる.
最初の行から説明すると、「page」:1は、総検索結果に最初のページを出力することを意味し、「results」:このページの検索結果は次のようになることを意味します.
また、カッコ内のテキストがコンテンツ情報を含むオブジェクトであると考えると、簡単です.

理解を助けるイメージ.これをメンバーに理解してもらうために、本当に大変でした.
もう1つのコンテンツオブジェクトから必要な情報を抽出するだけでいいです!
プロジェクト開始時にPythonを習っていなかったので、Javaを利用したパケット方式を利用しました.
この文章を参照してコードを記述します.皆さん、仕事を少なくしてお金を稼ぐことを望んでいます.
public List<ContentsVO> getInfoList(String type) {
		int pages = getPages(type);

		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		String date = "0001-01-01";

		List<ContentsVO> infoList = null;
		List<Integer> genreList = null;
        
		try {

			infoList = new ArrayList<ContentsVO>();

			// 페이지 마다 루프를 돌며 값 추출 및 저장
			for (int i = 1; i <= pages; i++) {
				String apiURL = "https://api.themoviedb.org/3/discover/" + type + "?api_key=" + KEY
						+ "&with_watch_providers=337&watch_region=KR&language=ko&page=" + i;
				URL url = new URL(apiURL);

				BufferedReader bf;

				bf = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

				result = bf.readLine();

				JSONParser jsonParser = new JSONParser();
				JSONObject jsonObject = (JSONObject) jsonParser.parse(result);
				JSONArray list = (JSONArray) jsonObject.get("results");

				for (int j = 0; j < list.size(); j++) {
					ContentsVO vo = new ContentsVO();
					JSONObject contents = (JSONObject) list.get(j);

					vo.setContents_num(Integer.parseInt(String.valueOf(contents.get("id"))));
					vo.setContents_type(type);
					vo.setOverview(contents.get("overview").toString());
					vo.setVote_average(Float.parseFloat(String.valueOf(contents.get("vote_average"))));
					vo.setPopularity(Float.parseFloat(String.valueOf(contents.get("popularity"))));
                    
					// 컨텐츠 타입(영화/시리즈)에 따라서 파싱 방법 다르게 설정
					if (type.equals("movie")) {
                    
						// 시리즈일 경우 release_date를 key로 데이터 파싱
						if (contents.get("release_date") == null || contents.get("release_date").equals("")) {
							vo.setRelease_date(dateFormat.parse(date));
						} else {
							Date release_date = dateFormat.parse((String) contents.get("release_date"));
							vo.setRelease_date(release_date);
						}
						vo.setTitle(contents.get("title").toString());
					} else if (type.equals("tv")) {
                    
						// 시리즈일 경우 first_air_date를 key로 데이터 파싱
						if (contents.get("first_air_date") == null || contents.get("first_air_date").equals("")) {
							vo.setRelease_date(dateFormat.parse(date));
						} else {
							Date first_air_date = dateFormat.parse((String) contents.get("first_air_date"));
							vo.setRelease_date(first_air_date);
						}
                        
						// 시리즈일 경우 title이 아닌 name을 key로 데이터 파싱
						vo.setTitle(contents.get("name").toString());
					}
					if (contents.get("poster_path") == null || contents.get("poster_path").toString().equals("")) {
						vo.setPoster_path("");
					} else {
						vo.setPoster_path(contents.get("poster_path").toString());
					}

					// 장르 id를 List<integer> 형태로 저장 → 장르 비교를 위한 작업
					JSONArray genre_list = (JSONArray) contents.get("genre_ids");
                    genreList = new ArrayList<Integer>();
					for (int k = 0; k < genre_list.size(); k++) {
						genreList.add(Integer.parseInt(String.valueOf(genre_list.get(k))));
					}
					vo.setGenres(genreList);
					infoList.add(vo);
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return infoList;
	}
配列で格納された各オブジェクトからキー値に対応する値を抽出し、VOに格納するのは簡単です.
...に続く