Android(Java) - Youtube API(2) - 앱의 인터넷 권한 설정, 유튜브 검색하기

반응형

 

이전 포스팅 보러가기

 

(각 모듈들의 사용 방법은 이전에 포스팅해두었으니 좀 더 자세히 확인하고 싶으시면 아래의 링크를 클릭해주세요.)

네트워크 통신을 위한 라이브러리 Volley 모듈 사용

Volley - 네트워크 통신 라이브러리 자세히 보러가기

  • build.gradle (Module)
dependencies {
    implementation 'com.android.volley:volley:1.2.1'
}

 

  • AndroidManifests.xml
<uses-permission android:name="android.permission.INTERNET" />

썸네일을 앱에 출력해줄 Glide 모듈 사용

Glide 라이브러리 - 인터넷의 이미지를 URL주소로 앱에 이미지 출력하기 자세히 보러가기

  • build.gradle (Module)
dependencies {
    implementation 'com.github.bumptech.glide:glide:4.13.2'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'
}

YouTube API 호출과 파라미터(매개변수)

  • API 요청 URL
GET https://www.googleapis.com/youtube/v3/search

  • 자주 쓰는 매개변수
    • part(id/snippet) : API 응답이 포함하는 검색 결과의 리소스 속성을 목록으로 지정
      • snippet 속성은 결과의 제목, 설명 등을 식별하는 다른 속성을 모두 포함
    • key : API를 사용할 사용자 지정, 자신의 API 키 입력
    • q : 검색할 검색어를 지정
    • maxResults : 결과로 보여줄 최대 항목 수 지정, 값은 0~50까지이며 기본값은 5로 설정
    • type : 특정 유형의 리소스만 검색하도록 검색 쿼리를 제한, 값은 channel, playlist, video
    • pageToken : 결과 집합의 특정 페이지를 식별
      • nextPageToken / prevPageToken 속성은 검색할 기타 페이지를 식별
    • order : API 응답에서 리소스를 지시하는데 사용하는 메소드 지정, 기본값은 relevance  
      • date : 최근 항목부터 시간 순서대로 정렬
      • rating : 높은 평가부터 낮은 평가순으로 정렬
      • relevance : 검색어에 대한 관련성을 기준으로 정렬, order의 기본 값
      • title : 제목에 따라 문자순으로 정렬
      • videoCount : 업로드한 동영상 수에 따라 채널을 내림차순 정렬
      • viewCount : 조회수가 높은 항목부터 정렬
    • 그 외 YouTube Data API 레퍼런스에서 자세한 매개변수 확인 가능
      • https://developers.google.com/youtube/v3/docs/search/list?hl=ko

검색어를 이용하여 유튜브 검색하기

GET API 호출 URL 설정 (유튜브 검색)

  • 구글 클라우드에서 생성한 YouTube Data API 키 확인
  • 파라미터들을 이용하여 검색 결과 설정 (URL)
  • Config.YOUTUBE_API_KEY : 보안을 위해 Config 클래스에 따로 API 키 값 저장
// 기본 검색 API URL
// 보안을 위해 API 키는 Config 클래스에 따로 저장하여 변수 호출, 자신의 API키를 입력
String searchURL = "https://www.googleapis.com/youtube/v3/search?part=snippet" + Config.YOUTUBE_API_KEY;

// 검색어 파라미터, 검색어 저장
String keyword = "&q=" + editSearch.getText().toString().trim();

// 최대 보여줄 데이터 갯수
String maxResultsParam = "&maxResults=20";

// 검색 URL, 전역 변수로 설정하는 것이 유용
URL = searchURL + keyword + maxResultsParam;

설정한 URL로 YouTube API 호출

  • POSTMAN을 통해 데이터 교환 한 결과

POSTMAN을 통해 데이터 교환 한 결과

  • POSTMAN을 통해 데이터 교환 한 결과

검색어를 통해 유튜브를 검색해보기 (Android Studio)

  • 이번 포스팅에서는 유튜브 API 사용 방법이 주가 된 관계로 viedoId 컬럼의 값만 가져와서 출력합니다.
  • 다음 포스팅에서는 유튜브의 검색된 데이터로 썸네일과 제목, 내용을 화면에 출력하고 해당 썸네일을 클릭하면 웹 브라우저로 유튜브가 켜지는 것을 구현합니다.

 

VideoId

  • 유튜브의 영상을 식별하는 영상의 ID

유튜브의 영상을 식별하는 영상의 ID 확인 예시 화면


기능 설계

앱 실행시 "노래" 라는 검색어로 유튜브를 검색하고 검색된 유튜브 영상의 videoId를 출력


레이아웃 UI 설계

  • 검색 된 결과를 뷰에 표시해줄 텍스트뷰 생성

레이아웃 UI 설계 예시 화면


소스 코드

public class MainActivity extends AppCompatActivity {

    ArrayList<String> ytTest = new ArrayList<>();
    String URL;
    TextView txtResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // API 호출 URL 설정
        String searchURL = "https://www.googleapis.com/youtube/v3/search?part=snippet" + Config.YOUTUBE_API_KEY;
        String keyword = "&q=노래";
        String maxResultsParam = "&maxResults=20";
        URL = searchURL + keyword + maxResultsParam;

        txtResult = findViewById(R.id.txtResult);

        // 네트워크 통신을 위한 객체 생성
        // 생성자 : http Method, API URL, 전달 할 데이터, 실행 코드(Listener)
        RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, URL, null,
                response -> {
                    // API 호출 결과 실행
                    try {
                        JSONArray jArr = response.getJSONArray("items");

                        for (int i = 0; i < jArr.length(); i++) {
                            JSONObject jData = jArr.optJSONObject(i);
                            // json Data = items - id, 유튜브 비디오 ID 값 저장
                            JSONObject jid = jData.optJSONObject("id");
                            String videoId = "\nvideoId " + i + ". = " + jid.optString("videoId");

                            // 검색 결과 videoId를 배열에 저장
                            ytTest.add(videoId);
                        }
                        txtResult.setText(ytTest+"");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }, error -> Log.i("onErrorResponse", "" + error));
        requestQueue.add((jsonObjectRequest));
    }
}

실행 화면

  • 앱 실행시 "노래" 를 유튜브에 검색하여 검색된 영상의 id를 화면에 출력

실행 화면 이미지

 

다음 포스팅 보러가기

반응형