유튜브 영상 모아 만들기 앱
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
유튜브의 영상을 주제별로 정리하여 제공할 수 있는 앱 만들기.
개인적으로 공부하면서 기록해 둔 것이라 모든 상황에 적용되지는 않습니다.
안드로이드 자바 코딩
앱 만들기
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>
- 공유 링크 만들기
- X
- 이메일
- 기타 앱