Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Një hyrje e shkurtër: dua të flas për një lojtar online YouTube për Android me lista lokale, kanale dhe rekomandime.

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Një hyrje e zgjeruar:
Disa kohĂ« mĂ« parĂ«, u ndesha me njĂ« problem tĂ« tillĂ« si autori i aplikacionit tĂ« mrekullueshĂ«m. Lista e Lejuar e Kanaleve, dhe pĂ«rcaktova pĂ«r veten time pikĂ«risht po atĂ« ndjenjĂ«: dua tĂ« kem mundĂ«sinĂ« nga hera nĂ« herĂ« t'i jap fĂ«mijĂ«s tabletin ose smartfonin me filma, por nuk mĂ« pĂ«lqen aspak se ku e çon fĂ«mijĂ«n lista e rekomandimeve nĂ« aplikacionet standarde — klientĂ«t YouTube, pas 2-3 klikimeve.

FatkeqĂ«sisht, pas instalimit tĂ« aplikacionit Channel Whitelist, ishte zbuluar njĂ« mangĂ«si tjetĂ«r mĂ« prozaike, por megjithatĂ« fatale — NIH mĂ« (dhe, mbi tĂ« gjitha, djalit tim) nuk i dukej shumĂ« i pĂ«rshtatshĂ«m nĂ« ndĂ«rfaqen e tij, veçanĂ«risht pasi m'u mĂ«sua pĂ«rdorimi i lojtarit YouTube Kids.

Pra, pas një kohe, unë u përgatita për të bërë realizimin tim. Pas një kohe tjetër, u bë e mundur të vendoset një etiketë në lëshimin e parë.

Karakteristikat kryesore:

  • Shtoni kanalet dhe listat e preferuara — ato do tĂ« ruhen dhe indeksohen nĂ« bazĂ«n lokale.
  • NĂ« brendĂ«si tĂ« listave tĂ« shtuar, fikni videot e panevojshme nĂ«se nuk ju duhen.
  • Lista e rekomandimeve gjenerohet rastĂ«sisht vetĂ«m nga kanalet dhe listat e shtuar nĂ« aplikacion.

Burimet janë të hapura, licenca GPLv3: https://github.com/sadr0b0t/yashlang/

Më tej, një përmbledhje më e detajuar e mundësive kryesore, plus disa detaje teknike se si të luani video nga YouTube në aplikacionin tuaj në Android pa përdorur API-në e Google dhe mbështjellësit e uebit.

Në ekranin kryesor dhe në ekranin e lojtarit: rekomandime rastësore nga kanale jo rastësore.

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Kërkesa e menjëhershme në bazën lokale.

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) => Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Shtoni një kanal ose listë të re.

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Kërkoni me emër online ose ngjitni një adresë të njohur. Lista e videove të kanalit ose listës ruhen në bazën lokale, ikonat nuk ruhen në cache.

Lista dinamike — luani rezultatet e kĂ«rkimit.

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) => Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Në rekomandimet poshtë videos do të jenë vetëm videot që i përmbahen kërkesës së kërkimit.

Po ashtu, nëse hapni një video nga cilësimet e listës, në listën e rekomandimeve do të jenë vetëm videot nga kjo listë.

Listat dhe kanalet mund të fikën përkohësisht dhe të rinisin.

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Kujdes: videot nga playlista e fikur do të zhduken gjithashtu nga rezultatet e kërkimit, historia e shikimeve dhe lista e preferuar. Por mos u shqetësoni, ato do të shfaqen përsëri menjëherë sapo playlista të rinisë.

Shto videon në listën e zezë

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Videot e bllokuara nuk do të shfaqen në rekomandime, në rezultatet e kërkimit, do të zhduken nga lista e preferuar dhe nga historia e shikimeve. Videoja do të jetë akoma e dukshme në cilësimet e playlists.

Shiko listën e zezë dhe riaktivizo elementet e bllokuara gabimisht:
Cilësimet > menuja në titull > Lista e zezë

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Videot e preferuara dhe historia e shikimeve

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Videot e preferuara në ekranin e luajtësit shënohen me një yll në këndin e sipërm të djathtë.

Menuja kontekstuale në titullin e ekranit dhe gjatë një klikimi të gjatë në galerive dhe lista

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Kopjoni emrin ose adresën e videos ose playlistas në ekranin e shikimit ose në çdo listë.

Fillim i shpejtë - shtoni kanalet dhe playlistat e rekomanduara

Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?) => Vdekja e Koshkevit në listën e rekomandimeve (a mund të bëhet YouTube rehatshëm dhe në siguri?)

Aplikacioni do të duket menjëherë si në skemat e mësipërme.

Kanalet dhe playlistat e panevojshme mund të fikeshin ose fshihen në cilësime.

Instalimi

Faqja e projektit: https://github.com/sadr0b0t/yashlang/
në anglisht: https://github.com/sadr0b0t/yashlang/blob/master/README.en.md
lëshime: https://github.com/sadr0b0t/yashlang/releases

Kujdes qĂ« tĂ« kalosh midis versione tĂ« ndryshme nga burime tĂ« ndryshme nĂ« njĂ« pajisje nuk do tĂ« funksionojĂ« pĂ«r shkak tĂ« nĂ«nshkrimeve tĂ« ndryshme tĂ« skedarit apk, para se tĂ« instalosh versionin nga njĂ« burim tĂ« ri duhet tĂ« fshish versionin e instaluar sĂ« pari, bashkĂ« me tĂ« dhĂ«nat — cache e playlists dhe historia e shikimeve (ose tĂ« gjejmĂ« njĂ« mĂ«nyrĂ« pĂ«r tĂ« transferuar kĂ«to tĂ« dhĂ«na).

Detajet teknike

Nuk kërkohet një llogari Google/YouTube, është e nevojshme vetëm interneti, përdor libraritë:

Kod i hapur, licencë e lirë GPLv3.

Pyetje: A është e ligjshme të parsohet faqet pa leje (ose me një ndalim të qartë) të autorëve? Google po fshin aplikacione nga Google Play, që nuk përdorin API-të e tyre, por i nxjerrin informacionet nga faqet e tyre, pasi shkelin marrëveshjen e përdorimit.
Përgjigja: sigurisht, është e ligjshme, është puna juaj se cilin mjet të përdorni për të lexuar informacionin e aksesueshëm publik. Më shumë se kaq: Gjykata e SHBA-së e legalizoi plotësisht scraping-un e faqeve dhe ndaloi çdo pengim teknik ndaj tij, por Gula mund të ketë një mendim tjetër; personalisht, nuk kam dëshirë të shkoj në gjykatën amerikane për t'i bindur ata.

Pak kod

Biblioteka NewPipeExtractor — njĂ« projekt ndihmĂ«s pĂ«r player-in NewPipe, lejon shkarkimin e listĂ«s sĂ« videove pĂ«r kanalin ose listĂ«n e luajtjes sĂ« dhĂ«nĂ«, tĂ« shkarkojĂ« informacion tĂ« detajuar rreth njĂ« videoje tĂ« njohur (ato qĂ« shihen nĂ« faqe), tĂ« marrĂ« adresĂ«n e ikonĂ«s sĂ« videos, si dhe tĂ« marrĂ« adresĂ«n e rrjedhĂ«s sĂ« videos.

Kodi pĂ«r shkarkimin e listĂ«s sĂ« luajtjes Ă«shtĂ« paksa i vĂ«shtirĂ«, prandaj nuk do ta sjell kĂ«tu; ata qĂ« janĂ« tĂ« interesuar — shihni burimet, kryesisht Ă«shtĂ« klasa ContentLoader.

Le të shohim si të marrim adresën e rrjedhës së videos nga adresa e faqes publike të videos dhe ta luajmë atë në player.

Shtoja bibliotekën në
app/build.gradle

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

ËshtĂ« interesante qĂ« pas kĂ«saj, ajo ende nuk mund tĂ« pĂ«rdoret, pasi shembujt do tĂ« kenĂ« njĂ« gabim pĂ«r klasĂ«n e munguar Downloader. Ajo mund tĂ« kopjohet nĂ« projekt nga katalogu i testeve automatike NewPipeExtractor/extractor/src/test/java/org/schabi/newpipe/Downloader.java — funksionon pĂ«r versionin 0.17.4 (duket se nĂ« versionin mĂ« tĂ« ri tĂ« bibliotekĂ«s kjo pjesĂ« Ă«shtĂ« ndryshuar, por duhet tĂ« kontrollohet mĂ« tej).

Merrni adresën e rrjedhës së videos nga adresa e faqes së videos në 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;
//        për (final VideoStream stream : extractor.getVideoStreams()) {
//            stream.getUrl();
//        }
        return streamUrl;
    }

Si adresë videosh, ytVidUrl mund të jetë adresa publike e faqes së çdo videoje në YouTube, për shembull https://www.youtube.com/watch?v=pd2RlatmNRk

Player-i do të jetë ExoPlayer nga nga Google. Kjo nuk është një mbështjellës web mbi YouTube, por një player i vërtetë i integruar për të luajtur çdo video, mjaft fleksibël dhe i konfigurueshëm. Ai gjithashtu mund të luajë rrjedha video nga YouTube nëse i jepni adresën e saktë. Ne sapo e morëm adresën e rrjedhës, kështu që do të shohim si ta dërgojmë në player.

Përfshini bibliotekën në projekt app/build.gradle:

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

Nuk do të merremi me të gjitha detajet e vendosjes së komponentit të player-it në ekranin e aplikacionit (mund të shihni shembujt në faqen e projektit ose në kod), do të shohim vetëm se si të fillojmë luajtjen e videos nga YouTube në player me adresën e siguruar më sipër:

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

private void playVideoStream(final String streamUrl, final long seekTo) {
    if (streamUrl == null) {
        // stop playing the current video if it was loaded
        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);

        // Pause the old video while preparing the new one
        if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
            // If we pause here after the player itself has paused, finishing
            // playing the video, we will get a second STATE_ENDED event here,
            // so we need special verification.
            // The getPlayWhenReady() value will still be true, so we check the state.
            // https://github.com/google/ExoPlayer/issues/2272
            videoPlayerView.getPlayer().setPlayWhenReady(false);
        }

        // Prepare the player with the source.
        ((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);

        // Indicate the current position immediately upon loading the video
        // (comments mention something about data sources supporting or not supporting
        // seek transitions upon loading, it seems this is nonsense - we just do seek right after loading)
        // Exoplayer plays new Playlist from the beginning instead of provided position
        // https://github.com/google/ExoPlayer/issues/4375
        // How to load stream in the desired position? #2197
        // https://github.com/google/ExoPlayer/issues/2197
        // at this point, normal duration is still not available, so we won't check it
        //if(seekTo > 0 && seekTo  0) {
            // 5 seconds earlier
            videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
        }
        videoPlayerView.getPlayer().setPlayWhenReady(true);
    }
}

Problemet e njohura

  • Nuk do tĂ« luajĂ« video qĂ« kanĂ« kufizime moshe, tĂ« cilat kĂ«rkojnĂ« login nĂ« llogarinĂ« Google/Youtube

p.sh.: Ilja Muromec, Kinokoncerni 'Mosfilm', Ruslan dhe Lyudmila seria 1 / Ruslan and Lyudmila film 1, Kinokoncerni 'Mosfilm'

këshillë: shtoni këto video në listën e zezë ose kërkoni nga autori i videos të heqë kufizimin, i vendosur gabimisht.

  • Nuk do tĂ« luajĂ« disa videorik televizive, pĂ«r tĂ« cilat shĂ«rbimi kthen njĂ« gjatĂ«si zero (pĂ«r kĂ«to video, gjatĂ«si nĂ« lista dhe galeri shĂ«nohet si '[dur undef]')

p.sh.: Eja Të Ndalojmë! Të gjitha Episodet Soyuzmultfilm HD (Për të Voglat), Animacione nga studiot Soyuzmultfilm, Top animacione nga Soyuzmultfilm, Animacione nga studiot Soyuzmultfilm

këshillë: shtoni këto video në listën e zezë.

  • Videot qĂ« janĂ« tĂ« qasshme vetĂ«m me lidhje tĂ« drejta, mund tĂ« mos shfaqen nĂ« listĂ«n lokale, edhe nĂ«se po ngarkoni tĂ« gjitha videot e pĂ«rdoruesit.

p.sh.: Shtrëngimi i flakës 1 serisë, Kinoshtëpia "Mosfilm"

  • NĂ«se ndeshni njĂ« video publike, qĂ« nuk kĂ«rkon login, luan nĂ« shfletues, por nuk luan nĂ« lojtar, dĂ«rgoni njĂ« raport problemi (Ă«shtĂ« e mundur qĂ« problemi tashmĂ« Ă«shtĂ« rregulluar nĂ« versionin e ri), NewPipeExtractor dhe do tĂ« duhet vetĂ«m tĂ« azhurnoni versionin me kĂ«tĂ« version. pĂ«r shembull).

  • Interfaci mund tĂ« vonojĂ« nĂ« internet tĂ« ngadaltĂ« (por jo tĂ« fikur).

NĂ« fund

Djali kaloi nga tableti në smart TV Samsung, i cili nuk di të nisë aplikacione Android. Prandaj, kontrolli më i mirë prindëror është gjithmonë personal.

Por aplikacioni doli mjaft i pĂ«rshtatshĂ«m sa unĂ« fillova ta pĂ«rdor vetĂ«. PĂ«rshtypja e parĂ« nga versionet e hershme tĂ« punĂ«s — ndihesha sikur isha nĂ« njĂ« botĂ« tjetĂ«r. TĂ« gjitha pĂ«rmbajtjet ngarkohen nga YouTube, por kjo nuk Ă«shtĂ« mĂ« YouTube, por diçka tjetĂ«r, tĂ« sigurt dhe tĂ« kontrolluar, si tĂ« kishe nxjerrĂ« njĂ« gjarpĂ«r nga syri dhe ta kishe vendosur nĂ« njĂ« bankĂ« tĂ« qelqtĂ«. Dyshimi Ă«shtĂ« te rekomandimet.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster