유튜브 영상 모아 만들기 앱

유튜브의 영상을 주제별로 정리하여 제공할 수 있는 앱 만들기.

개인적으로 공부하면서 기록해 둔 것이라 모든 상황에 적용되지는 않습니다.



 안드로이드 자바 코딩

앱 만들기

build.gradle

종속성 추가

dependencies { implementation 'com.google.android.gms:play-services-youtube:17.3.0' implementation 'com.google.api-client:google-api-client:1.32.1' implementation 'com.google.oauth-client:google-oauth-client:1.32.1' implementation 'com.google.http-client:google-http-client-gson:1.39.1' }

AndroidManifest.xml

인터넷 권한 설정

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

MainActivity.java

import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import androidx.appcompat.app.AppCompatActivity; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import com.google.api.client.googleapis.services.CommonGoogleClientRequestInitializer; import com.google.api.client.googleapis.services.GoogleClientRequestInitializer; import com.google.api.services.youtube.YouTube; import com.google.api.services.youtube.YouTubeScopes; import com.google.api.services.youtube.model.SearchListResponse; import com.google.api.services.youtube.model.SearchResult; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private static final String TAG = "YouTubeSearch"; private static final String API_KEY = "YOUR_API_KEY_HERE"; // 본인의 API 키로 대체 //YouTube Data API v3, Google 개발자 콘솔에서 발급 private ListView videoListView; private ArrayAdapter<String> adapter; private List<String> videoTitles; private List<String> videoIds; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); videoListView = findViewById(R.id.videoListView); videoTitles = new ArrayList<>(); videoIds = new ArrayList<>(); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, videoTitles); videoListView.setAdapter(adapter); new SearchYouTubeTask().execute("k-pop"); } private class SearchYouTubeTask extends AsyncTask<String, Void, List<SearchResult>> { @Override protected List<SearchResult> doInBackground(String... params) { try { YouTube youtube = new YouTube.Builder( new com.google.api.client.http.javanet.NetHttpTransport(), new com.google.api.client.json.gson.GsonFactory(), null) .setGoogleClientRequestInitializer(new CommonGoogleClientRequestInitializer(API_KEY)) .build(); YouTube.Search.List search = youtube.search().list("id,snippet"); search.setQ(params[0]); search.setType("video"); search.setMaxResults(10L); // 가져올 영상 수를 조정 SearchListResponse searchResponse = search.execute(); return searchResponse.getItems(); } catch (GoogleJsonResponseException e) { Log.e(TAG, "GoogleJsonResponseException", e); } catch (IOException e) { Log.e(TAG, "IOException", e); } return null; } @Override protected void onPostExecute(List<SearchResult> searchResults) { if (searchResults != null) { for (SearchResult searchResult : searchResults) { videoTitles.add(searchResult.getSnippet().getTitle()); videoIds.add(searchResult.getId().getVideoId()); } adapter.notifyDataSetChanged(); } } } }

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp" tools:context=".MainActivity"> <ListView android:id="@+id/videoListView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>

이 블로그의 인기 게시물

뚜렷해진모공, 피부결 개선하는 5단계 홈케어 루틴

모공이 눈에 띄는 이유, 크기보다 결 흐름 때문입니다

흡수되지 않는 피부, 문제는 성분이 아닙니다