Android Consommer YouTube Data API sur Android


Exemple

Cet exemple vous guidera pour obtenir des données de playlist en utilisant l'API YouTube Data sur Android.

Empreinte digitale SHA-1

Vous devez d'abord obtenir une empreinte SHA-1 pour votre machine. Il existe différentes méthodes pour le récupérer. Vous pouvez choisir n'importe quelle méthode fournie dans cette Q & R.

Console Google API et clé YouTube pour Android

Maintenant que vous avez une empreinte SHA-1, ouvrez la console Google API et créez un projet. Accédez à cette page et créez un projet à l'aide de cette clé SHA-1 et activez l'API YouTube Data. Maintenant, vous aurez une clé. Cette clé sera utilisée pour envoyer des requêtes à partir d'Android et récupérer des données.

Gradle part

Vous devrez ajouter les lignes suivantes à votre fichier Gradle pour l'API YouTube Data:

compile 'com.google.apis:google-api-services-youtube:v3-rev183-1.22.0'

Pour utiliser le client natif de YouTube pour envoyer des requêtes, nous devons ajouter les lignes suivantes dans Gradle:

compile 'com.google.http-client:google-http-client-android:+'
compile 'com.google.api-client:google-api-client-android:+'
compile 'com.google.api-client:google-api-client-gson:+'

La configuration suivante doit également être ajoutée dans Gradle pour éviter les conflits:

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.2'
} 

Ci-dessous, il est montré à quoi ressemblerait le gradle.build .

build.gradle

apply plugin: 'com.android.application'
android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.aam.skillschool"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.2'
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.google.apis:google-api-services-youtube:v3-rev183-1.22.0'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:support-v4:25.3.1'
    compile 'com.google.http-client:google-http-client-android:+'
    compile 'com.google.api-client:google-api-client-android:+'
    compile 'com.google.api-client:google-api-client-gson:+'
}

Maintenant vient la partie Java. Puisque nous utiliserons HttpTransport pour la mise en réseau et GsonFactory pour convertir JSON en POJO, nous n'avons besoin d'aucune autre bibliothèque pour envoyer des requêtes.

Maintenant, je veux montrer comment obtenir des listes de lecture via l'API YouTube en fournissant les ID de liste de lecture. Pour cette tâche, je vais utiliser AsyncTask . Pour comprendre comment nous demandons des paramètres et pour comprendre le flux, veuillez consulter l' API YouTube Data .

public class GetPlaylistDataAsyncTask extends AsyncTask<String[], Void, PlaylistListResponse> {
    private static final String YOUTUBE_PLAYLIST_PART = "snippet";
    private static final String YOUTUBE_PLAYLIST_FIELDS = "items(id,snippet(title))";

    private YouTube mYouTubeDataApi;

    public GetPlaylistDataAsyncTask(YouTube api) {
        mYouTubeDataApi = api;
    }

    @Override
    protected PlaylistListResponse doInBackground(String[]... params) {

        final String[] playlistIds = params[0];

        PlaylistListResponse playlistListResponse;
        try {
            playlistListResponse = mYouTubeDataApi.playlists()
                    .list(YOUTUBE_PLAYLIST_PART)
                    .setId(TextUtils.join(",", playlistIds))
                    .setFields(YOUTUBE_PLAYLIST_FIELDS)
                    .setKey(AppConstants.YOUTUBE_KEY) //Here you will have to provide the keys
                    .execute();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        return playlistListResponse;
    }
}

La tâche asynchrone ci-dessus renvoie une instance de PlaylistListResponse qui est une classe intégrée du SDK YouTube. Il a tous les champs obligatoires, donc nous n'avons pas à créer des POJO nous-mêmes.

Enfin, dans notre MainActivity nous devrons faire ce qui suit:

public class MainActivity extends AppCompatActivity {
    private YouTube mYoutubeDataApi;
    private final GsonFactory mJsonFactory = new GsonFactory();
    private final HttpTransport mTransport = AndroidHttp.newCompatibleTransport();
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_review);
        mYoutubeDataApi = new YouTube.Builder(mTransport, mJsonFactory, null)
                .setApplicationName(getResources().getString(R.string.app_name))
                .build();
        String[] ids = {"some playlists ids here seperated by "," };
        new GetPlaylistDataAsyncTask(mYoutubeDataApi) {
            ProgressDialog progressDialog = new ProgressDialog(getActivity());

            @Override
            protected void onPreExecute() {
                progressDialog.setTitle("Please wait.....");
                progressDialog.show();
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(PlaylistListResponse playlistListResponse) {
                super.onPostExecute(playlistListResponse);
                //Here we get the playlist data
                progressDialog.dismiss();
                Log.d(TAG, playlistListResponse.toString());
            }
        }.execute(ids);
    }
}