LĂŒhike sissejuhatus: tahan rÀÀkida Androidi Youtube'i veebipleierist, mis toetab kohalikke esitusloendeid, kanaleid ja soovitusi.

Pikk sissejuhatus:
MÔni aeg tagasi puutusin kokku tÀpselt sama probleemiga nagu selle suurepÀrase rakenduse autor. , ja mÀÀratlesin endale selle suhtes tÀpselt sama suhtumise: ma tahan aeg-ajalt anda oma lapsele tahvelarvuti vÔi nutitelefoni multikatega, kuid mind ei rahulda, kuhu 2-3 kliki jÀrel viib lapsi soovituste nimekiri tavalistes Youtube'i rakendustes.
Kahjuks ilmnes pĂ€rast Channel Whitelist rakenduse installimist teine, proosalisem, kuid siiski saatuslik puudus â NIH tundus mulle (ja, mis veelgi olulisem, minu pojale) mitte vĂ€ga mugava liidese tĂ”ttu, eriti pĂ€rast YouTube Kidsi mĂ€ngija kasutamise harjumust.
ĂhesĂ”naga, mĂ”ne aja pĂ€rast olin valmis tegema oma rakenduse versiooni. Veel mĂ”ne aja pĂ€rast sai esialgse vĂ€ljaande jaoks sildi paigaldamine vĂ”imalikuks.
PÔhifunktsioonid:
- Lisage oma lemmikkanalid ja esitlusloendid â need salvestatakse ja indekseeritakse kohalikus andmebaasis.
- Lisatud esitlusloendite sees saate vĂ€lja lĂŒlitada liigsed videod, kui neid ei vajata.
- Soovituste nimekiri genereeritakse juhuslikult ainult rakendusse lisatud kanalitest ja esitlusloenditest.
Allikaid saab vaadata avatud, GPLv3 litsentsi all:
Edasi tutvustame peamisi funktsioone ĂŒksikasjalikumalt, lisaks mĂ”ned tehnilised ĂŒksikasjad sellest, kuidas mĂ€ngida YouTube'i videosid oma Androidi rakenduses ilma Google'i API ja veebikatteid kasutamata.
PeamenĂŒĂŒs ja mĂ€ngija ekraanil: juhuslikud soovitused mitte-juhuslikest kanalitest.
Momentne otsing kohalikes andmestikes.
=>
Lisa uus kanal vÔi esitlusloend.
Otsi nime jÀrgi veebis vÔi sisesta tuntud aadress. Kanali vÔi esitlusloendi videote nimekiri salvestatakse kohalikku andmebaasi, ikoonid ei salvestata vahemÀesse.
DĂŒnaamiline esitlusloend â mĂ€ngi otsingutulemeid.
=>
Videote soovitustes kuvatakse ainult need, mis vastavad otsingupÀringule.
Sarnaselt, kui avada video esitlusloendi seadetest, kuvatakse soovitustes ainult selle sama esitlusloendi videod.
Esitlusloendeid ja kanaleid saab ajutiselt vĂ€lja lĂŒlitada ja uuesti sisse lĂŒlitada.
Pange tĂ€hele: vĂ€lja lĂŒlitatud playlista videosid ei kuvatakse ka otsingutulemustes, vaatamishistoorias ja lemmikliste nimekirjas. Kuid pole pĂ”hjust muretseda, need ilmuvad seal tagasi kohe, kui playlist taas aktiveeritakse.
Lisa video musta nimekirja
Blokeeritud video ei ilmu soovitustes, otsingutulemustes, kaob lemmikute hulgast ja vaatamishistoriast. Video on endiselt nÀhtav playliste seadistustes.
Vaata musta nimekirja ja luba uuesti elemendid, mis on ekslikult blokeeritud:
Seaded > menĂŒĂŒ ĂŒlaosas > Must nimekiri
Lemmikvideod ja vaatamishistory
Lemmikvideod mĂ€ngija ekraanil on tĂ€histatud tĂ€hega paremas ĂŒlanurgas.
KontekstitemenĂŒĂŒd ekraani ĂŒlaosas ja pikka kliki galeriides ja nimekirjades
Kopeeri video vÔi playliste nimi vÔi aadress vaatamise ekraanilt vÔi igas nimekirjas.
Kiire algus â lisa soovitatud kanaleid ja playliste
=>
Rakendus nĂ€eb vĂ€lja nagu ĂŒlaltoodud ekraanipiltidel.
Ebavajalikud kanalid ja playliste saab seadistustes vĂ€lja lĂŒlitada vĂ”i kustutada.
Paigaldamine
Projekti leht:
ingliskeeles:
vÀljalasked:
- Google Play's ei ole ja ei tule lÀhiajal (Google keelab rakendused, mis vÀldivad API-d ja kraabivad nende saiti, sealhulgas mainitud Channel Whitelist vÔi mÀngija NewPipe)
- Koguge allikatest:
- Laadige apk alla vÀljalaskete sektsioonist:
- Loodan, et see ilmub varsti katalooge (, kuid see ei ole edasi liikunud juba peaaegu kuu aega), kuid hetkel pole
Arvestage, et erinevate versioonide vahetamine erinevatest allikatest ĂŒhes seadmes ei Ă”nnestu erinevate apk-failide allkirjade tĂ”ttu, enne uue allika versiooni installimist tuleb installitud versioon koos andmete - vahemĂ€lu ja vaatamishistoriaga (vĂ”i vĂ€lja mĂ”elda, kuidas neid andmeid edasi viia) esmalt eemaldada.
Tehnilised ĂŒksikasjad
Ei nÔua Google/Youtube'i kontot, on vajalik ainult internet, kasutab teeke:
- YouTube teenusest andmete saamiseks ja
- videote esitamiseks.
Avatud lÀhtekood, vabalaenar GPLv3.
kĂŒsimus: Kas veebisaitide kraapimine autorite loata (vĂ”i selgesĂ”nalise keelu korral) on seaduslik? , mis ei kasuta nende API-d ja kraabivad nende saite, kuna nad rikuvad nende kasutamislepingut.
vastus: loomulikult, seaduslik, teie valik, millist tööriista kasutada avaliku teabe lugemiseks. Veelgi enam: , kuid Gula vĂ”ib omada teistsugust arvamust, isiklikult pole mul veel soovi minna Ameerika kohtusse neid ĂŒmber veenma.
Veidi koodi
Raamatukogu â mĂ€ngija abiprojekt , vĂ”imaldab laadida alla loendi videodest mÀÀratud kanalist vĂ”i esitusloendist, laadida alla teavet tuntud video kohta (see, mis on nĂ€htav video veebilehelt), saada video ikooni aadress ja samuti voogedastuse aadressi.
Kood esitusloendi allalaadimiseks on veidi mahukas, seetĂ”ttu ei too ma seda siia, kellel on huvi â vaadake lĂ€htekoodi, peamiselt on see klass .
Vaadatakse, kuidas saada video voogedastuse aadress avaliku video lehe aadressist ja mÀngida seda mÀngijas.
Raamatukogu ĂŒhendamine failis
dependencies {
...
// NewPipe: youtube parser
// https://github.com/TeamNewPipe/NewPipeExtractor
implementation "com.github.TeamNewPipe:NewPipeExtractor:v0.17.4"
...
}Huvitav on see, et pĂ€rast seda ei Ă”nnestu seda ikkagi kasutada, kuna nĂ€ited viskavad vea puuduvast klassist Downloader. Selle saab kopeerida projekti automaattestide kataloogist â töötab versiooniga 0.17.4 (nĂ€ib, et raamatukogu uuemas versioonis on see osa ĂŒmber tehtud, kuid tuleb veel kontrollida).
Kuidas saada video voogedastuse aadressi videot lehe aadressist YouTube'is:
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;
}Video aadressina ytVidUrl vÔib olla avalik aadress mis tahes video lehele YouTube'is, nÀiteks
MĂ€ngija saab olema otsesama Google. See ei ole veebikate Youtubest, vaid tĂ”eline sisseehitatud mĂ€ngija, mis suudab mĂ€ngida ĂŒkskĂ”ik milliseid videoid ning on piisavalt paindlik ja kohandatav. Sealhulgas oskab see mĂ€ngida ka voogedastuse videoid Youtubest, kui anda Ă”ige aadress. Aadressi saime just Ă€sja, seega vaatame, kuidas edastada see mĂ€ngijasse.
Lisage raamatukogu projekti :
dependencies {
...
// google Exoplayer
// https://github.com/google/ExoPlayer
// https://exoplayer.dev/
implementation 'com.google.android.exoplayer:exoplayer:2.10.8'
...
}Me ei kĂ€sitle kĂ”iki detailide kĂŒsimusi mĂ€ngija komponentide paigutamisest rakenduse ekraanile (vĂ”ite vaadata projekti veebisaidil nĂ€iteid vĂ”i koodi), vaatame ainult seda, kuidas alustada video esitamise Youtubest mĂ€ngijas saadud aadressi pĂ”hjal:
private void playVideoStream(final String streamUrl, final long seekTo) {
if (streamUrl == null) {
// peatage praeguse video esitamine, kui see on laaditud
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);
// Paneme vana video pausile, samal ajal kui valmistame uut
if (videoPlayerView.getPlayer().getPlaybackState() != Player.STATE_ENDED) {
// Kui paneme pausile siin pÀrast seda, kui mÀngija on ise pausile jÀÀnud, lÔpetades
// video esitamise, saame siin teise sĂŒndmuse STATE_ENDED, seega on meil siin vaja
// spetsiifilist kontrolli.
// Samal ajal jÀÀb getPlayWhenReady() vÀÀrtus true, seega kontrollime just seisundit.
// https://github.com/google/ExoPlayer/issues/2272
videoPlayerView.getPlayer().setPlayWhenReady(false);
}
// Valmistame mÀngija allika abil ette.
((SimpleExoPlayer) videoPlayerView.getPlayer()).prepare(videoSource);
// Seame praeguse positsiooni kohe video laadimise ajal
// (kommentaarides rÀÀgitakse midagi andmeallikatest, mis toetavad vÔi ei toeta
// seeki laadimise ajal, tundub, et see on vale - teeme seeki kohe pÀrast laadimist)
// Exoplayer mÀngib uue mÀngu loendi algusest, mitte antud positsioonilt
// https://github.com/google/ExoPlayer/issues/4375
// Kuidas laadida voog antud positsioonist? #2197
// https://github.com/google/ExoPlayer/issues/2197
// selles kohas pole normaalne kestus veel saadaval, seega ei kontrolli me seda
//if(seekTo > 0 && seekTo 0) {
// 5 sekundit varem
videoPlayerView.getPlayer().seekTo(seekTo - 5000 > 0 ? seekTo - 5000 : 0);
}
videoPlayerView.getPlayer().setPlayWhenReady(true);
}
}Tuntud probleemid
- Ei mÀngi videoid, mille vanusepiirangud nÔuavad Google/Youtube'i kontole sisse logimist.
nÀiteks: ,
soovitus: lisada sellised videod musta nimekirja vÔi paluda video autori kÀest eemaldada vale piirang.
- Ei mĂ€ngi mĂ”ned otseĂŒlekanded, mille puhul teenus tagastab nullpikkuse (selliste videote kestus on nimekirjades ja galeriis mĂ€rgitud kui «[dur undef]»)
nÀiteks: ,
nÔuanne: lisada sellised videod musta nimekirja.
- Videod, mis on saadaval ainult otse linkide kaudu, vĂ”ivad mitte sattuda kohalikku mĂ€nguplaati, isegi kui laadite ĂŒles kĂ”ik kasutaja videod.
nÀiteks:
Kui kohtate avalikku videot, milleks ei ole vajalik sisselogimine, mis mÀngib brauseris, kuid ei mÀngi mÀngijana, saatke vearaport (on vÔimalik, et probleem on juba lahendatud uues versioonis. NewPipeExtractor ja tuleb lihtsalt uus versioon lasta alla. ).
Liides vĂ”ib aeglasel (kuid mitte vĂ€lja lĂŒlitatud) internetil pisut konutada.
KokkuvÔttes
Poeg on ĂŒle lĂ€inud tahvelarvutilt Samsungi nutitelesale, mis ei oska kĂ€ivitada Androidi rakendusi. Seega on parim vanemlik kontroll siiski isiklik.
Kuid rakendus osutus piisavalt mugavaks, et hakkasin seda ise kasutama. Esimene mulje varasematest tööversioonidest â tundus, et olen sattunud teise maailma. KĂ”ik sisu laaditakse YouTube'ist, kuid see ei ole enam YouTube, vaid midagi muud, ohutut ja kontrollitavat, nagu oleks ma vĂ€lja tĂ”mmanud skolopendrist silma ja pannud selle klaaspurki. Ja see on just soovitustes.
Allikas: habr.com
