La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Introduzione breve: voglio parlare del lettore online di YouTube per Android con playlist locali, canali e raccomandazioni.

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Introduzione dettagliata:
Qualche tempo fa ho affrontato proprio il problema descritto dall'autore della meravigliosa applicazione Whitelisting Canali, e ho stabilito per me stesso lo stesso atteggiamento nei suoi confronti: voglio avere la possibilità di dare occasionalmente a mio figlio un tablet o uno smartphone con cartoni animati, ma non mi soddisfa affatto dove le raccomandazioni degli applicativi standard di YouTube portano il bambino dopo 2-3 clic.

Sfortunatamente, dopo l'installazione dell'applicazione Whitelisting Canali, ho trovato un'altra mancanza più prosaica, ma comunque fatale — l'interfaccia non mi è sembrata molto comoda, soprattutto dopo essermi abitato all'uso del lettore YouTube Kids.

In generale, dopo qualche tempo, ho deciso di realizzare la mia implementazione. Dopo un po' di tempo è stato possibile impostare un tag per il primo rilascio.

Caratteristiche principali:

  • Aggiungi i tuoi canali e playlist preferiti: saranno salvati e indicizzati in un database locale
  • All'interno delle playlist aggiunte, disattiva i video non necessari, se non ti servono
  • La lista delle raccomandazioni viene generata casualmente solo dai canali e playlist aggiunti all'app

I sorgenti sono aperti, licenza GPLv3: https://github.com/sadr0b0t/yashlang/

Di seguito una panoramica delle principali funzionalità in dettaglio, più alcune informazioni tecniche su come riprodurre video da YouTube nella tua applicazione Android senza utilizzare l'API di Google e le web wrapper.

Nella schermata principale e nella schermata del lettore: raccomandazioni casuali da canali non casuali

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Ricerca istantanea nel database locale

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) => La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Aggiungi un nuovo canale o playlist

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Cerca per nome online o incolla un indirizzo noto. La lista dei video del canale o della playlist viene salvata nel database locale, le icone non vengono memorizzate nella cache.

Playlist dinamica — riproduci i risultati della ricerca

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) => La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Nelle raccomandazioni sotto il video ci saranno solo i video che soddisfano la query di ricerca.

In modo analogo, se apri un video dalle impostazioni della playlist, nella lista delle raccomandazioni ci saranno solo video di quella stessa playlist.

Le playlist e i canali possono essere disattivati temporaneamente e riattivati

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Si prega di notare che i video di una playlist disattivata scompariranno anche dai risultati di ricerca, dalla cronologia di visualizzazione e dall'elenco dei preferiti. Ma non preoccuparti, riappariranno immediatamente dopo che la playlist sarà riattivata.

Aggiungi video alla lista nera

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Il video bloccato non verrà visualizzato nelle raccomandazioni, nei risultati di ricerca, scomparirà dall'elenco dei preferiti e dalla cronologia di visualizzazione. Il video sarà ancora visibile nelle impostazioni della playlist.

Visualizza la lista nera e riattiva gli elementi bloccati per errore:
Impostazioni > menu in alto > Lista nera

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Video preferiti e cronologia di visualizzazione

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

I video preferiti sullo schermo del lettore sono contrassegnati da una stella nell'angolo in alto a destra.

Menu contestuali nell'intestazione dello schermo e con una lunga pressione nelle gallerie e negli elenchi

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

Copia il nome o l'indirizzo del video o della playlist dallo schermo di visualizzazione o da qualsiasi elenco.

Avvio rapido — aggiungi canali e playlist consigliati

La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?) => La morte di Koschei nella lista delle raccomandazioni (è possibile rendere YouTube accogliente e sicuro?)

L'applicazione apparirà immediatamente come negli screenshot sopra.

Puoi disattivare o rimuovere canali e playlist non desiderati nelle impostazioni.

Installazione

Pagina del progetto: https://github.com/sadr0b0t/yashlang/
in lingua inglese: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
rilasci: https://github.com/sadr0b0t/yashlang/releases

Tieni presente che non sarai in grado di passare tra diverse versioni provenienti da diverse fonti su un unico dispositivo a causa delle diverse firme del file apk; prima di installare una versione da una nuova fonte, dovrai prima disinstallare la versione già installata insieme ai dati — la cache delle playlist e della cronologia di visualizzazione (oppure pensare a come trasferire questi dati).

Dettagli tecnici

Non richiede un account Google/YouTube, è necessaria solo una connessione a Internet, utilizza le librerie:

Codice sorgente aperto, licenza libera GPLv3.

Domanda: È legale fare scraping di siti senza il permesso (o con esplicito divieto) degli autori? Google rimuove dal Google Play le applicazioni, che non utilizzano la loro API e fanno scraping dei loro siti, poiché violano il loro accordo con l'utente.
Risposta: certo, è legale, spetta a voi quale strumento utilizzare per leggere le informazioni pubbliche. Inoltre: La Corte degli Stati Uniti ha completamente legalizzato lo scraping dei siti web e ha vietato di ostacolarne tecnicamente l'attuazione., ma Gul potrebbe avere un'opinione diversa; personalmente, non ho ancora voglia di andare in tribunale americano a convincerli.

Un po' di codice

La libreria NewPipeExtractor — un progetto ausiliario per il lettore NewPipe, consente di scaricare l'elenco dei video per un determinato canale o playlist, scaricare informazioni dettagliate su un video noto (ciò che è visibile sulla pagina web del video), ottenere l'indirizzo dell'icona del video e anche ottenere l'indirizzo del flusso video.

Il codice per scaricare la playlist è un po' ingombrante, quindi qui non lo presenterò; chi è interessato può dare un'occhiata al sorgente, in gran parte è la classe ContentLoader.

Vediamo come ottenere l'indirizzo del flusso video dall'indirizzo della pagina pubblica del video e riprodurlo nel lettore.

Collegare la libreria in
app/build.gradle

dependencies {
...
    // NewPipe: youtube parser
    // https://github.com/TeamNewPipe/NewPipeExtractor
    implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}

Curiosamente, dopo di ciò, non sarà comunque possibile utilizzarla, poiché gli esempi daranno errore a causa della mancanza della classe Downloader. Può essere copiato nel progetto dalla cartella dei test automatici NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funziona per la versione 0.17.4 (sembra che in una versione più recente della libreria questa parte sia stata riadattata, ma è necessario controllare ulteriormente).

Ottenere l'indirizzo del flusso video dall'indirizzo della pagina video sul sito di YouTube:

app/src/main/java/su/sadrobot/yashlang/controller/ContentLoader.java

    public String extractYtStreamUrl(final String ytVidUrl) throws ExtractionException, IOException {
        // https://github.com/TeamNewPipe/NewPipeExtractor/blob/dev/extractor/src/test/java/org/schabi/newpipe/extractor/services/youtube/YoutubeStreamExtractorDefaultTest.java
        NewPipe.init(Downloader.getInstance(), new Localization("GB", "en"));
        final YoutubeStreamExtractor extractor = (YoutubeStreamExtractor) YouTube
                .getStreamExtractor(ytVidUrl);
        extractor.fetchPage();
        final String streamUrl = extractor.getVideoStreams().size() > 0 ? extractor.getVideoStreams().get(0).getUrl() : null;
//        for (final VideoStream stream : extractor.getVideoStreams()) {
//            stream.getUrl();
//        }
        return streamUrl;
    }

Come indirizzo video, ytVidUrl può essere l'indirizzo pubblico della pagina di qualsiasi video sul sito di YouTube, ad esempio https://www.youtube.com/watch?v=pd2RlatmNRk

Il lettore sarà ExoPlayer da Google. Non si tratta di una semplice interfaccia web di YouTube, ma di un vero e proprio lettore incorporato per riprodurre qualsiasi video, sufficientemente flessibile e personalizzabile. È in grado di riprodurre anche flussi video da YouTube, se gli viene fornito l'indirizzo corretto. Abbiamo appena ottenuto l'indirizzo del flusso, quindi vediamo come inviarlo al lettore.

Collega la libreria al progetto app/build.gradle:

dependencies {
...
    // google Exoplayer
    // https://github.com/google/ExoPlayer
    // https://exoplayer.dev/
    implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}

Non approfondiremo tutti i dettagli relativi al posizionamento del componente del lettore all'interno dell'applicazione (puoi consultare gli esempi sul sito del progetto o nel codice), ma vedremo solo come avviare la riproduzione di un video da YouTube nel lettore utilizzando l'indirizzo ottenuto sopra:

app/src/main/java/su/sadrobot/yashlang/WatchVideoActivity.java

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // interrompere la riproduzione del video corrente, se è stato caricato
        videoPlayerView.getPlayer().stop(true);
    } else {
        // https://exoplayer.dev/
        // https://github.com/google/ExoPlayer

        final Uri mp4VideoUri = Uri.parse(streamUrl);
        final MediaSource videoSource = new ProgressiveMediaSource.Factory(videoDataSourceFactory)
                .createMediaSource(mp4VideoUri);

        // Mettiamo in pausa il video vecchio, mentre prepariamo il nuovo
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // Se mettiamo in pausa qui dopo che il lettore si è messo in pausa da solo, finendo
            // di riprodurre il video, otterremo qui un secondo evento STATE_ENDED, quindi ci serve qui
            // un controllo speciale.
            // Il valore di getPlayWhenReady() rimarrà true, quindi controlliamo proprio lo stato.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Prepara il lettore con la sorgente.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Impostiamo subito la posizione corrente al caricamento del video
        // (nei commenti si parla di sorgenti che supportano o non supportano
        // il seek al caricamento, sembra che sia una sciocchezza - semplicemente facciamo seek subito dopo il caricamento)
        // Exoplayer riproduce la nuova Playlist dall'inizio invece che dalla posizione fornita
        // https://github.com/google/ExoPlayer/issues/4375
        // Come caricare lo stream nella posizione desiderata? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // in questo punto la durata normale non è ancora disponibile, quindi non la controlliamo
        //if(seekTo > 0 && seekTo  0) {
            // 5 secondi prima
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Problemi noti

  • Non riprodurrà video con restrizioni di età che richiedono la login a un account Google/YouTube

ad esempio: Ilya Muromets, Mosfilm, Ruslan e Lyudmila episodio 1 / Ruslan and Lyudmila film 1, Mosfilm

consiglio: aggiungere questi video alla lista nera o chiedere all'autore del video di rimuovere la restrizione impostata per errore.

  • Non riprodurrà alcuni video in streaming, per i quali il servizio restituisce una lunghezza zero (per questi video, la durata nelle liste e nelle gallerie è contrassegnata come «[dur undef]»)

ad esempio: Beh, Aspetta! Tutti gli Episodi Soyuzmultfilm HD (Cartoni per bambini), Cartoni della Soyuzmultfilm, Top cartoni animati Soyuzmultfilm, Cartoni della Soyuzmultfilm

consiglio: aggiungere tali video alla lista nera.

  • I video disponibili solo tramite link diretti potrebbero non essere inclusi nella playlist locale, anche se carichi tutti i video dell'utente.

ad esempio: Addomesticamento del fuoco Episodio 1, Cinematografica 'Mosfilm'

  • Se incontrate un video pubblico che non richiede login, si riproduce nel browser ma non nel lettore, inviate un report di bug (è possibile che il problema sia già stato risolto in una nuova versione NewPipeExtractor e sarà necessario solo aggiornare la build con questa versione, ad esempio).

  • L'interfaccia può rallentare con una connessione Internet lenta (ma non disattivata)

In definitiva

Mio figlio è passato da un tablet a una smart TV Samsung, che non è in grado di eseguire applicazioni Android. Pertanto, il miglior controllo parentale rimane comunque personale.

Ma l'app si è rivelata abbastanza comoda da farmi iniziare a usarla personalmente. La prima impressione delle versioni funzionanti iniziali è stata quella di entrare in un altro mondo. Tutto il contenuto viene caricato da YouTube, ma questo non è più YouTube, è qualcosa di diverso, sicuro e controllato, come se avessi estratto una scolopendra dall'occhio e l'avessi messa in un barattolo di vetro. E la questione è proprio nelle raccomandazioni.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster