bogus1226 / BogusPlus

보거스플러스 프로젝트
0 stars 0 forks source link

오픈 API (TMDB) #11

Open bogus1226 opened 1 year ago

bogus1226 commented 1 year ago
bogus1226 commented 1 year ago

메인화면 상단의 최신영화중 인기순위 1위부터 10위까지 가져오는 기능!

public List<TMDB> getMainPagePopularPosterList() {

    String result = "";

    String language = "ko-KR";

    String key = "b878289678c05cf71128b06a698cc177";

    List<TMDB> infoList = null;

    try {

        infoList = new ArrayList<TMDB>();

        String apiURL = "https://api.themoviedb.org/3/movie/popular?api_key=" + key
                + "&language=" + language;

        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 i = 0; i < 10; i++) {
            TMDB tmdb = new TMDB();
            JSONObject contents = (JSONObject) list.get(i);

            String backdrop_path = String.valueOf(contents.get("backdrop_path"));
            tmdb.setBackdrop_path("https://image.tmdb.org/t/p/w1280/" + backdrop_path);
            tmdb.setTitle(String.valueOf(contents.get("title")));   
            tmdb.setOverview(String.valueOf(contents.get("overview")));
            infoList.add(tmdb);
        }

    } catch (Exception e) {

        e.printStackTrace();
    }
    return infoList;
}
bogus1226 commented 1 year ago

https://api.themoviedb.org/3/movie/popular?api_key={key}&language=ko-KR 으로 검색하면 최신영화중에서 popularity(인기점수) 기준으로 1위부터 20위까지 가져오게되서 1위부터 10위까지만 화면에 나오게 설계하였다!! 뿌듯 ㅎㅎ

bogus1226 commented 1 year ago

메인화면 상단의 인기영화 스크롤의 이미지 사이즈를 크게 구성하여서

Image

Get API Configuration 에서 이미지 사이즈를 찾아보았다!! 여기에 들어가면 밑에 사진이 나온다! ↓

Image

사이즈 w1280이있는 bakckdrop(배경 이미지) 이 적당하여 상단 스크롤의 이미지를 포스터가아닌 배경이미지로하였다!!

배경이미지로 봤을때 이게 무슨영환지 구별하기 힘든것도있어서

이미지를 마우스 오버하였을때 영화의 제목과 간단설명이 나오게하였다!!!ㅎㅎ

bogus1226 commented 1 year ago

집에가서 메인화면의 장르별 영화 이어서 해야된다!!

장르 id
액션 28
모험 12
애니메이션 16
코미디 35
범죄 80
다큐멘터리 99
드라마 18
가족 10751
판타지 14
역사 36
공포 27
음악 10402
미스터리 9648
로맨스 10749
SF 878
TV 영화 10770
스릴러 53
전쟁 10752
서부 37

TMDB 이용해서 유튜브영상 재생하기

https://api.themoviedb.org/3/movie/849869/videos?api_key=b878289678c05cf71128b06a698cc177 
//영화의 아이디값을 여기서 가져온다
https://www.youtube.com/watch?v=6w2vM69JxpM
//6w2vM69JxpM 영화 아이디값
bogus1226 commented 1 year ago

커밋할때 태그를못해줘서 남긴다!!

[염근효]
-  TMDB 디즈니 플러스 값으로 디즈니플러스의 영화목록 기준으로 가져오게 수정!!
- 한국,장르...등등 조건마다 가져올수있는 영화의 갯수가 달라서 json의 total_page 와 total_results 값 가져오게하는중!! (고민중)
bogus1226 commented 1 year ago

total_page값과 total_results로 조건에맞는 영화갯수로 페이지 구성하려하는데 어떻게 가져올지 고민중이다ㅠㅡㅠ

bogus1226 commented 1 year ago

또 커밋할때 태그를 못했다..ㅠㅠ

[염근효]
- TMDB BO
  ㄴ total_results, total_pages 값 가져오기 완료
  ㄴ 일단 전체 데이터를 가져오게끔 설계
  ㄴ 데이터가 10개 이상이면 이동할때마다 5 개씩 추가되게 재설계 해야된다!!
bogus1226 commented 1 year ago

일단 전체 데이터 가져오게하는 코드 데이터가 10개 이상이면 이동할때마다 5 개씩 추가되게 재설계 할것이다! 데이터가 처음엔 8개 보이게하고 이동할때마다 7개씩 추가되게 재설계할것이다!!

public List<TMDB> getMainPageKoreaMovieList() {

    String result = "";

    List<TMDB> infoList = null;

    Integer totalPage = null;

    Integer totalResult = null;

    try {

        infoList = new ArrayList<TMDB>();

        String apiURL = "https://api.themoviedb.org/3/discover/movie?api_key=" + key
                + "&language=" + language + "&page=" + 1 + "&sort_by=popularity.desc&"
                + "with_watch_providers=" + provider + "&watch_region=KR&"
                + "with_original_language=ko";

        URL forCountUrl = new URL(apiURL);

        BufferedReader bf;

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

        result = bf.readLine();

        JSONParser jsonParser = new JSONParser();

        JSONObject jsonObject = (JSONObject) jsonParser.parse(result);

        totalResult = Integer.parseInt(String.valueOf(jsonObject.get("total_results")));

        totalPage = Integer.parseInt(String.valueOf(jsonObject.get("total_pages")));

        for(int i = 0; i < totalPage; i++) {

            String apiUpdateURL = "https://api.themoviedb.org/3/discover/movie?api_key=" + key
                    + "&language=" + language + "&page=" + (i + 1) + "&sort_by=popularity.desc&"
                    + "with_watch_providers=" + provider + "&watch_region=KR&"
                    + "with_original_language=ko";

            URL url = new URL(apiUpdateURL);

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

            result = bf.readLine();

            jsonParser = new JSONParser();

            jsonObject = (JSONObject) jsonParser.parse(result);

            JSONArray list = (JSONArray) jsonObject.get("results");

            if(totalResult > 20) {
                for(int j = 0; j < totalResult; j++) {
                    TMDB tmdb = new TMDB();
                    JSONObject contents = (JSONObject) list.get(j);

                    String poster_path = String.valueOf(contents.get("poster_path"));
                    tmdb.setPoster_path("https://image.tmdb.org/t/p/w342/" + poster_path);
                    infoList.add(tmdb);
                }       

                totalResult-=20;

            } else {
                for(int j = 0; j < totalResult; j++) {
                    TMDB tmdb = new TMDB();
                    JSONObject contents = (JSONObject) list.get(j);

                    String poster_path = String.valueOf(contents.get("poster_path"));
                    tmdb.setPoster_path("https://image.tmdb.org/t/p/w342/" + poster_path);
                    infoList.add(tmdb);
                }       
            }

        }

    } catch (Exception e) {

        e.printStackTrace();
    }
    return infoList;
}
bogus1226 commented 1 year ago

total_results, total_pages 값 가져오기위한 테스트 코드

public Object test() {

    String result = "";

    //JSONObject totalPage = null;

    JSONObject jsonObject = null;

    Integer countMap = null;    

    try {

        String apiURL = "https://api.themoviedb.org/3/discover/movie?api_key=" + key
                + "&language=" + language + "&page=" + 1 + "&sort_by=popularity.desc&"
                + "with_watch_providers=" + provider + "&watch_region=KR&"
                + "with_original_language=ko";

        URL forCountUrl = new URL(apiURL);

        BufferedReader bf;

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

        result = bf.readLine();

        JSONParser jsonParser = new JSONParser();

        jsonObject = (JSONObject) jsonParser.parse(result); 

        countMap = Integer.parseInt(String.valueOf(jsonObject.get("total_results")));

    } catch (Exception e) {

        e.printStackTrace();

    }

    return countMap;
}
bogus1226 commented 1 year ago

집가서 해야될것!!

버튼 기능 부여

기본상태 화면 8개의 데이터 (1부터 ~ 8)

버튼클릭

+7 8 ~ 15 +7 15 ~ 22

20넘으면 다음 페이지 이동
40넘으면 다음 페이지 이동

bogus1226 commented 1 year ago

장르별로 영화 데이터 가져오는 코드 완성 !!

public List<TMDB> getMainPageGenresMovieList(String genres) {

    String result = "";

    List<TMDB> infoList = null;

    int countList = 0;

    try {

        infoList = new ArrayList<TMDB>();
        String apiURL = "https://api.themoviedb.org/3/discover/movie?api_key=" + key
                + "&language=" + language + "&page=1&sort_by=popularity.desc&"
                + "with_watch_providers=" + provider + "&watch_region=KR&with_genres=" + genres;

        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");

        countList = list.size();

        if(countList > 8) {
            for(int i = 0; i < 8; i++) {
                TMDB tmdb = new TMDB();
                JSONObject contents = (JSONObject) list.get(i);

                String poster_path = String.valueOf(contents.get("poster_path"));
                tmdb.setPoster_path("https://image.tmdb.org/t/p/w342/" + poster_path);
                infoList.add(tmdb);
            }       

        } else {
            for(int i = 0; i < countList; i++) {
                TMDB tmdb = new TMDB();
                JSONObject contents = (JSONObject) list.get(i);

                String poster_path = String.valueOf(contents.get("poster_path"));
                tmdb.setPoster_path("https://image.tmdb.org/t/p/w342/" + poster_path);
                infoList.add(tmdb);
            }       
        }   

    } catch (Exception e) {

        e.printStackTrace();
    }
    return infoList;
}
bogus1226 commented 1 year ago

메인화면에 장르별로 모든 영화 데이터를 가져오기엔 한번에 너무 많은 데이터를 가져와서 처음엔 장르별로 8개씩 나오고 다음 버튼을누르면 7개씩 추가되게끔 만들려고 하고있는데 오픈 API 데이터가 한페이지당 20개씩 존재하고, 페이지를 주소에 직접 바뀌게끔 해야되서 click 이벤트를 줬을때 파라미터로 click=Integer 값을보내고 클릭이 존재했을때 ex) count = 8(기본값)에 7을더해서 15값을 가져와서 진행하고 그다음에 클릭했을때, ex) count = 15에 7을더해 22값을 가져오는데, 20이 넘기전에는 페이지 1에서 값을가져오다가 20이 넘어갈때 페이지 2에서 22까지 값을 가져와야되는데 공식으로 만드는중이다

int countList = 0;

int page = 1;

int count = 8;

int pageUpCount = 20;

if(click != null) {

    count+=7;

    if((count - pageUpCount) > 0) {

    } else if (count > pageUpCount) {   
        page++;
        pageUpCount+=20;
    }

}

아직 미완성이다ㅠㅠ 0~22 까지의 값을 가져올때, 0~20까지 1페이지에서 데이터 가져오고나서 12~22 는 2페이지에서 가져오게끔 해야되는데 머리가 상큼하게 터져버릴거같다 ㅠㅡㅠ 내가 너무 어렵게가는건아닌지 더 코드가 간결해지게 쉬운방법이 있는건아닌지 더 알아보고 더 생각해봐야겠다 ㅠㅠ 현재시간 새벽 3시 30분... 오늘 하루종일 이것만 고민했다 ㅠㅠㅠ 잠깐 자고 일어나서 새로운 마음으로 다시 고민해봐야겠다!!

bogus1226 commented 1 year ago

공식은

int lastList = 8 + (click * 7) , 
int startList = lastList - 6
int count = lastList - startList
ex) for(int i = startList, i <= lastList; i++)

이걸 이용해서 자동화 하려고한다

공식 아직 미완성이다

클릭했을때 데이터 추가로 가져오는기능도 아직 미완성이다ㅠㅠ

bogus1226 commented 1 year ago

계속 8부터 시작해서 7개씩 추가되야된다 생각하는 틀에갇혀서 고민했는데 생각해보니 오픈API에서 페이지당 20개씩 데이터가있으니, 시작값을 20개로 시작해서 버튼클릭후 20개씩 추가되면 되는데 너무 어렵게 생각했던거같다!!

20개씩 추가로 재구성 중이다!! 겹치는 코드도 하나로 묶는중!! 고민하는동안 머리 터질뻔했는데 머리가 맑아졌다

bogus1226 commented 1 year ago

시청중인 콘텐츠 0 / 0 오른쪽의 0은 내가 임의로 만든값 한국 1 / 1 오른쪽의 1 내가 임의로 만들값 오늘의 TOP 콘텐츠 2 / 2 오른쪽의 2 내가 임의로 만든값 애니메이션 영화 3 / 16 액션 4 / 28,53 코미디 5 / 35 로맨스 6 / 10749 SF 7 / 878 호러 8 / 27 가족 9 / 10751 모험 10 / 12 판타지 11 / 14 전쟁 12 / 10752 음악 13 / 10402 범죄 14 / 80 다큐멘터리 15 / 99 역사 16 / 36

장르별 내가만든 기준값, API 기준값

bogus1226 commented 1 year ago

https://api.themoviedb.org/3/movie/{id}/videos?api_key={key}&language=ko-KR 영화 영상 id 가져오는 url

bogus1226 commented 1 year ago

https://api.themoviedb.org/3/movie/{id}?api_key={key}&language=ko-KR&watch_region=KR&with_watch_providers=337 영화 상세 정보