Wygodne pobieranie audycji z tok fm

Na specjalną prośbę userscript który ułatwia pobieranie archiwalnych audycji z TOK FM

tokfm.user.js

Działa to tak, że pod każdą audycją pokazuje się polecenie (wget ...) jakie należy wydać aby zapisać plik na dysku.


Niestety przeglądarka nie pozwala na ustawianie dowolnych nagłówków zapytania z poziomu javascriptu więc nie dało rady dodać tam bezpośredniego linka, trzeba się posłużyć wget-em.

Po ostatnich zmianach na stronie aby dostać polecenie do pobrania audycji trzeba kliknąć na „więcej »”

Aktualizacja 22.01.2017 - poprawiona obsługa abonamentów/audycji premium

59 komentarzy:

  1. Przepraszam ale co dokładnie trzeba zrobić z:
    "wget ... .mp3"?

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie wiesz co to jest wget?
      Takie podstawy:
      http://pl.wikipedia.org/wiki/Wget
      http://osworld.pl/wget-nie-tylko-dla-poczatkujacych/

      A skrypt mówi przecież co dokładnie trzeba zrobić - wystarczy kopiuj wklej z przeglądarki do terminala.

      Usuń
  2. Już sobie poradziłem, najwyraźniej wget z pakietu GnuWin wymaga cudzysłowu podwójnego. Dzięki Marku!

    OdpowiedzUsuń
    Odpowiedzi
    1. To nie powinno mieć znaczenia dla wgeta bo cudzysłowy są tylko dla powłoki aby wiedziała, że dany ciąg znaków to jest jeden argument, ale jeśli ktokolwiek miał by mieć z tym problem to już zamieniłem cudzysłowy wypisywane przez skrypt na podwójne.

      Usuń
  3. jak to uruchomic pod windowsem

    OdpowiedzUsuń
    Odpowiedzi
    1. Musisz zainstalować wgeta, bo pod windowsem wget sam się nie zainstaluje.

      A jak już będziesz miał zainstalowanego wgeta to wystarczy skopiować to co napisał skrypt.

      Usuń
    2. zinastalowałem wgeta na windowsie, daje komendę programowi, pokazuje sie okienko, plik się pobiera. problem mam taki - że nie wiem gdzie wget zapisuje ten plik...

      Usuń
    3. Pobiera się tam gdzie wpisujesz polecenie.

      Zobacz co jest na początku linii przy wpisywaniu polecenia.

      Aby zapisać w innym miejscu zmień bieżący katalog za pomocą polecenia cd
      Na przykład:
      cd \
      spowoduje, że potem będzie zapisywał na samej górze w katalogu głównym.

      Usuń
  4. Podobnego na pewno nie. Strona polskiego radia korzysta z rtmp - do pobierania danych udostępnionych na tym protokole służy rtmpdump. Bez rtmpdump się nie pobierze a z drugiej strony samo rtmpdump ma już wszytko co potrzeba i nie widzę jak mógł bym pomóc jakimś skryptem. Opisywałem już na blogu jak to działa.

    Pod windowsem gdzie korzystanie z takich narzędzi było by bardzo utrudnione są programy (przynajmniej z 10 różnych) będące połączeniem przeglądarki internetowej i rtmpdumpa które przechwytują wszystkie odtwarzane w nim strumienie jak leci. Coś takiego można by zrobić tylko po co skoro jest już wiele gotowych programów?

    OdpowiedzUsuń
  5. W kodzie strony jest taki adres - chociaż używany jest tylko jako ID i odtwarzacz z niego nie korzysta. W sumie można by to wykorzystać i zrobić aby ten link był klikalny na playliście. Tylko czy tego zaraz nie wyłączą?

    OdpowiedzUsuń
  6. Wygląda na losowy ciąg znaków generowany w momencie wgrywania zdjęcia na serwer (stały - nie zmienia się, a odnośnik do zdjęcia statycznie zapisany w kodzie strony).

    OdpowiedzUsuń
  7. Czyli nic nie da się z tym zrobić? Jest jakiś inny sposób na rozpoznanie adresu do oryginalnego zdjęcia?

    OdpowiedzUsuń
  8. mam ściągnąć i odpalić skrypt gdy otwarta jest strona tok ft?Jeśli tak to nie działa.

    OdpowiedzUsuń
    Odpowiedzi
    1. W firefoksie trzeba dodać ten skrypt do greasemonkey
      W operze umieścić w katalogu ze skryptami użytkownika

      Po wejściu na stronę tok.fm wykona się automatycznie.

      Usuń
  9. Zacząłem korzystać z przeglądarki Vivaldi. Tam, jak i w innch chromach, jest dodatek Tempermonkey i za nic nie da się dodać tego skryptu. Coś sie da z tym zrobić?

    OdpowiedzUsuń
    Odpowiedzi
    1. Ponieważ już druga osoba pyta o chroma/vivaldi zainstalowałem aby sprawdzić.
      Aby coś tam dodać trzeba skrypt przykleić przez schowek bo bezpośrednio ze strony nie potrafi wczytać skryptu.

      Niestety okazało się, że ma własny format skryptów z niekompatybilny z userscriptami greasemonkey i operą.

      To dziwne bo kiedyś stare wersje chroma obsługiwały userscripty nawet bez żadnych dodatków (traktowały każdy userscript jako dodatek) i wtedy skrypty z greasemonkey i opery działały.

      Niezbyt mi się podoba pisanie 2 wersji każdego skryptu, dlatego pokombinuję czy nie da się czegoś zrobić aby w chromie przywrócić jego dawną funkcjonalność

      Usuń
    2. Już mam sposób. Nie należy korzystać z tampermonkey.
      Podaję instrukcję jest identyczna w chromie i vivaldi (sprawdziłem w obu przeglądarkach skrypt działa)

      1 Uruchom przeglądarkę z parametrami:
      --enable-easy-off-store-extension-install --enable-user-scripts
      2 Otwórz zakładkę z rozszerzeniami (extensions)
      3 Przeciągnij plik ze skryptem na zakładkę z rozszerzeniami.

      Każdy skrypt będzie traktowany jako osobny dodatek.

      Usuń
    3. Jak uruchomić przeglądarkę, tak jak to opisujesz w punkcie pierwszym?
      "1 Uruchom przeglądarkę z parametrami:
      --enable-easy-off-store-extension-install --enable-user-scripts"

      Usuń
    4. A jak uruchamiasz przeglądarkę?

      Jeśli poprzez wpisanie google-chrome w konsoli to napisz zamiast tego

      google-chrome --enable-easy-off-store-extension-install --enable-user-scripts

      Jeśli masz skrót na pulpicie to edytuj go i dopisz na końcu polecenia to
      --enable-easy-off-store-extension-install --enable-user-scripts

      Usuń
  10. Mamy wrzesień 2016 a ten skrypt wciąż działa jak złoto. Kudos dla @Marek!

    OdpowiedzUsuń
  11. Niestety przedmówca przechwalił.
    Skrypt od dzisiaj nie działa już tak jakby się chciało.
    Dostępna jest tylko ostatnia audycja do ściągnięcia za pomocą tego skryptu.
    W przypadku starszych autycji link (wget...) się nie generuje. :-(
    Bardzo proszę autora o naprawienie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Skrypt nadal działa z wszystkimi audycjami tylko wygląda to nieco inaczej.

      Teraz trzeba kliknąć na link "więcej" znajdujący się po prawej stronie nad odtwarzaczem każdej audycji.

      Otworzy to tą wybraną audycję w nowym oknie i tam będzie polecenie do wpisania.

      Usuń
  12. Zgadza się. Skrypt działa. Sprawdzałem czy nie ma czasem linku po kliknięciu "więcej", ale chyba za krótko czekałem na wygenerowanie linku.

    W każdym razie, po kliknięciu na "więcej", link odpowiedni się generuje.
    DZIAŁA!!!

    Dzięki wielkie za support.

    OdpowiedzUsuń
  13. Uruchomiłem skrypt, ale dla każdego linku kieruje do pliku 1.mp3 i dostaję błąd 404. Czy ja coś robię nie tak? Może korzystam z jakiejś nieaktualnej wersji skryptu?
    Adam

    OdpowiedzUsuń
    Odpowiedzi
    1. Daj adres jakiejś strony z audycją dla której coś się źle generuje.

      Usuń
    2. Skrypy nie działa na audycje, które są dostępne tylko jak ma się wykupiony abonament. (np http://audycje.tokfm.pl/podcast/Owsiak-jest-zbyt-wyrazisty-politycznie-Piotr-Gursztyn-w-dyskusji-publicystow/45390#)
      Z tym to chyba nie da się nic zrobić, prawda?

      Usuń
    3. O ile tylko da się wyciągnąć ID tego pliku to pewnie by się dało.

      Usuń
  14. A jednak działa, być może ten problem dotyczy tylko niektórych audycji.
    Adam

    OdpowiedzUsuń
  15. Pytanie do instalacji w Chromie -- skrypt instaluje się, działa bardzo ładnie ale tylko do momentu zamknięcia przeglądarki. Po ponownym uruchomieniu wyskakuje komunikat, że chrome zablokował nieznany dodatek. Na liście dodatków tokfm.user.js jest wyłączony i jedyne co można z nim zrobić to usunąć. Chrome uruchamiam ze wspomnianymi wcześniej flagami. Wersja przeglądarki to 54.0.2840.99 (jeśli to ma jakieś znaczenie). Help! :)

    OdpowiedzUsuń
  16. genialne narzędzie, dzięki za stworzenie. szczęście, że tu trafiłem. lubię słuchać EKG, a ostatnio wprowadzili abonament Premium na tę audycję.

    OdpowiedzUsuń
  17. Genialny skrypt. Dzięki. Naprawdę dobra robota. Miałem przez chwilę wersję płatną tok.fm, ale program do odsłuchiwania jest tak tandetny, że zrezygnowałem z niego i abonamentu. Teraz pobrałem sobie wszystkie odcinki homo science i zrobiłem z niego audiobooka o długości 5 dni, 19 godziń i 19 minut.

    OdpowiedzUsuń
    Odpowiedzi
    1. Hej Alex, podzielisz się audycją?

      Usuń
  18. Dzień dobry,

    niestety nie radzę sobię z wget'em w Windows.
    Po wpisaniu kodu np: wget --post-data="pre=load" --header="X-Tuba:00/00/04/60/38.mp3" --header="X-Tuba-Load:58AC32C2.C364.A921.890C.C663." --header="X-Tuba-Token:A0.47FA.5EEA.56B3.971D." http://storage.tuba.fm/load_podcast/46038.mp3
    dostaję komunikat o błędzie:Invoke-WebRequest : A positional parameter cannot be found that accepts argument '--header=X-Tuba:00/00/04/60/38.mp3'.
    At line:1 char:1
    + wget --post-data="pre=load" --header="X-Tuba:00/00/04/60/38.mp3" --he ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

    Z góry dziękuję za pomoc.

    OdpowiedzUsuń
    Odpowiedzi
    1. A gdzie próbujesz to wpisywać?

      Komunikaty wyglądają tak jak jakiś powershell, nie używaj tego to niepotrzebne do działania wgetowi a tylko próbuje jakoś interpretować parametry dla wgeta i głupieje przez to.

      Wklej polecenie w zwykłe cmd.

      A jak z jakiegoś powodu musisz używać powershella to weź całość w pojedynczy cudzysłów i dopisz na początku iex czyli aby zawołać wgeta z powershella trzeba napisać coś takiego:

      iex 'wget --post-data="pre=load" --header="X-Tuba:00/00/04/60/38.mp3" --header="X-Tuba-Load:58AC32C2.C364.A921.890C.C663." --header="X-Tuba-Token:A0.47FA.5EEA.56B3.971D." http://storage.tuba.fm/load_podcast/46038.mp3'

      Wydaje mi się, że z tym iex i dodatkowym cudzysłowem powinno pójść ale nie mam na czym przetestować.

      A i pamiętaj o ścieżkach, pod windowsem wget nie zawsze instaluje się tam gdzie path więc albo uruchamiasz to uruchamiasz z katalogu w którym jest wget albo ustawiasz path do miejsca gdzie znajduje się wget.exe albo przenieść wget.exe do miejsca gdzie już jest ustawiony path np do C:\Windows

      Usuń
    2. Bardzo dziękuję. Po tych poradach poradziłem sobie.
      Rzeczywiście próbowałem wpisywać to w Powershellu.
      Dziękuję również o radzie z dodaniem ścieżki.
      Dopiero zaczynam z tymi "archaicznymi" sposobami
      obsługiwania się komputerem jak cmd:).
      Teraz wszystko działa idealnie.

      Usuń
  19. Wszystko działało świetnie do wczoraj. Dziś po wklejeniu do WGET'a polecenia ze skryptu wychodzi :
    c:\wget>wget --post-data="pre=load" --header="X-Tuba:00/00/04/62/25.mp3" --header="X-Tuba-Load:58CAF82A.AC61.F9E4.33D3.DE2A." --header="X-Tuba-Token:7F.78A8.A141.C188.3778." http://storage.tuba.fm/load_podcast/46225.mp3
    --2017-03-16 21:40:45-- http://storage.tuba.fm/load_podcast/46225.mp3
    Resolving storage.tuba.fm (storage.tuba.fm)... 178.33.226.213, 178.33.227.18, 5.39.69.85, ...
    Connecting to storage.tuba.fm (storage.tuba.fm)|178.33.226.213|:80... connected.
    HTTP request sent, awaiting response... 404 Not Found
    2017-03-16 21:40:45 ERROR 404: Not Found.

    I to dla dowolnej audycji. Coś się zmieniło? Błąd?

    Pozdrawiam,
    Marcin

    OdpowiedzUsuń
    Odpowiedzi
    1. Podejrzewam, że to celowa zmiana na stronie aby skrypt przestał działać.

      Tydzień wcześniej dostałem maila z prośbą o usunięcie skryptu i komentarzy pod nim. Nie była to zbyt grzeczna prośba, a gdy zapytałem o co chodzi i dlaczego miał bym coś usuwać nie dostałem żadnej odpowiedzi.

      W sumie to teraz jest nawet prościej niż kiedyś - dało by się linkować do pliku bezpośrednio w przeglądarce bez konieczności wołania wgeta.

      Ale wiedząc, że oni wiedzą o blogu i najwyraźniej zmieniają stronę celowo to niezbyt mi się chce bawić w berka i zmieniać skrypt tylko po to aby za chwilę ktoś zmodyfikował stronę.

      Jeśli ktoś potrzebuje pobrać plik może skorzystać z Tamper data lub podobnego dodatku (trzeba tylko przechwycić żądanie przed jego wysłaniem bo linki jednorazowe), to działa zawsze.

      Usuń
    2. Może wkurzyło ich pobieraie treści premium? Czy nie chciałbyś spróbować na próbę zmodyfikować skrypt, by pobieral chociaż te nonpremium? Może to im wystarczy...

      Usuń
    3. A tak z ciekawości: tym Tamper Data da się zobaczyć każdy link, czy tylko nonpremium? Bo w sumie nonpremium, skoro da się odsłuchać, to i da się łatwo zapisać...

      Usuń
    4. To do czego masz dostęp do słuchania. Jeśli możesz słuchać premium (masz wykupiony abonament) to też zapiszesz. Jeśli nie masz gdzieś dostępu to się nie przyda.

      Usuń
    5. Cześć,
      A jak tego używać? Jakiś link z pomocą dla laików?

      Z góry dzięki..
      Marc

      Usuń
  20. Potwierdzam (baaardzo lubię ten skrypt):
    $ wget --post-data="pre=load" --header="X-Tuba:00/00/04/74/50.mp3" --header="X-Tuba-Load:58CB9DAE.A3D6.793C.CB5B.7F0B." --header="X-Tuba-Token:33.989F.5407.2A1C.CD35." http://storage.tuba.fm/load_podcast/47450.mp3
    --2017-03-17 09:32:47-- http://storage.tuba.fm/load_podcast/47450.mp3
    Resolving storage.tuba.fm (storage.tuba.fm)... 178.33.227.18, 5.39.69.85, 5.39.69.234, ...
    Connecting to storage.tuba.fm (storage.tuba.fm)|178.33.227.18|:80... connected.
    HTTP request sent, awaiting response... 404 Not Found
    2017-03-17 09:32:47 ERROR 404: Not Found.

    OdpowiedzUsuń
  21. Mogę potwierdzić:
    1. wyskakuje błąd identyczny jak powyżej (404 Not Found);
    2. działał do wczoraj świetnie, dziś nie działa nawet na audycji ściągniętej z sukcesem poprzednio;
    3. podobnie jak przedmówca, również uwielbiam ten skrypt.

    OdpowiedzUsuń
  22. To i ja pochwalę skrypt - jest genialny! I owszem, aktualnie nie działa.

    OdpowiedzUsuń
  23. Mam to samo :(

    OdpowiedzUsuń
  24. Takie spostrzeżenie:

    1. na stronie z ogólnym spisem podcastów można odsłuchać niektóre audycje (darmowe), czyli linki do plików mp3 są i działają. Problem z tym, że na tej stronie nie pojawiają się pod poszczególnymi podcastami komendy wgeta.

    2. aby te komendy zobaczyć, trzeba kliknąć 'więcej' przy konkretnym podcaście, wtedy wczytuje się następna strona z pojedynczym playerem i tam te komendy dla wgeta się już pojawiają. Niestety tam nie udało mi się odsłuchać już ani jednej darmowej audycji - zupełnie jakby linki do plików były rzeczywiście jakieś pomylone.


    Konkluzja: być może to nie skrypt przestał działać, tylko po kliknięciu 'więćej' przy konkretnym podcaście dostajemy stronę z pojedynczym playerem, ale ze złym linkiem, skoro nawet darmowej audycji nie można tam odsłuchać...


    Pomysł (nie wiem na ile realny): może da się powrócić do pierwotnej idei działania skryptu - to znaczy, żeby komendy wgeta pojawiały się pod każdym podcastem na stronie z ogólnym spisem audycji...

    OdpowiedzUsuń
  25. cześć Marku, możesz sprawdzić. do czwartku skrypt działał poprawnie.
    "HTTP request sent, awaiting response... 404 Not Found
    2017-03-20 15:09:22 ERROR 404: Not Found."

    OdpowiedzUsuń
  26. adres http://audycje.tokfm.pl/podcast/Historia-pewnej-ustawy-z-lapowka-w-tle-Goscmi-byli-Joanna-Solska-Michal-Broniatowski-i-Pawel-Soltys/47453

    OdpowiedzUsuń
  27. no dobrze, ale gdzie ten skrypt? Klikam w tokfm.user.js i wracam tutaj… to gdzie on?

    OdpowiedzUsuń
  28. jest jakieś rozwiązanie? Cały czas
    "HTTP request sent, awaiting response... 404 Not Found
    2017-03-20 15:09:22 ERROR 404: Not Found."

    OdpowiedzUsuń
  29. Not Found - u mnie też :/

    OdpowiedzUsuń
  30. Czy mógłbym prosić o jakiś kontakt na priv do Pana? (może mail)
    Może się jakos dogadamy w sprawie skryptu ?

    OdpowiedzUsuń
    Odpowiedzi
    1. Ten skrypt nie działa już od 4 lat.
      Tam nie było niczego ciekawego, adres pliku do pobrania to był numer audycji co 2 cyfry rozdzielony znakiem /, a żeby pobrać plik trzeba było w nagłówku podać sumę kontrolą md5 policzoną z nazwy pliku i daty.

      Tak wyglądała zasadnicza część tego skryptu:

      var linki=document.getElementsByTagName('li');
      for (i=0;i<linki.length;i+=1)
      if (linki[i].hasAttribute('class'))
      if (linki[i].getAttribute('class') == 'entry')
      if (linki[i].innerHTML.indexOf('data-id="') > 0)
      {
      file_id=linki[i].innerHTML.substr(linki[i].innerHTML.indexOf('data-id="')+9,10);
      file_id=file_id.substr(0,file_id.indexOf('"'));
      tmpid=parseInt(file_id);

      if (tmpid == 1)
      {
      urlid = document.location.href.split("/");
      file_id=urlid[urlid.length-1];
      tmpid=parseInt(file_id);
      }

      a=tmpid%100;
      tmpid = Math.floor(tmpid/100);
      b=tmpid%100;
      tmpid = Math.floor(tmpid/100);
      c=tmpid%100;
      tmpid = Math.floor(tmpid/100);
      d=tmpid%100;
      e = Math.floor(tmpid/100);
      file_name=e.pad()+'/'+d.pad()+'/'+c.pad()+'/'+b.pad()+'/'+a.pad()+'.mp3';
      d = new Date();
      var n = d.getTime();
      n=Math.floor(n/1000);
      n=n.toString(16).toUpperCase();
      mdp=MD5("MwbJdy3jUC2xChua/" + file_name + n);
      load=n + "." + sub4(mdp,3) + "." + sub4(mdp,2) + "." + sub4(mdp,4) + "." + sub4(mdp,5) + ".";
      token=Math.round(Math.random() * 255).toString(16).toUpperCase() + "." + sub4(mdp,0) + "." + sub4(mdp,1) + "." + sub4(mdp,7) + "." + sub4(mdp,6) + ".";
      linki[i].innerHTML = linki[i].innerHTML + 'wget --post-data="pre=load" --header="X-Tuba:' + file_name + '" --header="X-Tuba-Load:' + load + '" --header="X-Tuba-Token:' + token +'" http://storage.tuba.fm/load_podcast/' + file_id + '.mp3';
      linki[i].setAttribute('class', 'downloadable');



      Ale potem zmienił się serwer z którego pobierany były pliki a żeby mieć do niego dostęp trzeba było się normalnie autoryzować więc pisanie kolejnego skryptu nie miało już sensu.

      Usuń
  31. Teraz rozumiem.
    Serdecznie dziękuję za odpowiedź.
    Nie mniej jednak...szkoda.
    Ech, w dzisiejszym świecie nie ma nic za darmo. Takie czasy.....

    OdpowiedzUsuń
  32. witam, jest gdzies moze archiwum audycji z danego dnia tak jak dla RNS na simx?

    OdpowiedzUsuń
    Odpowiedzi
    1. Tutaj, ale nie ma wszystkich: https://myradioonline.pl/tok-fm/archiv#other-radios

      Usuń
  33. Kochani miałam bardzo stary skrypt na vod.tvp.pl do wczoraj działał.Strona na vod od dziś całkowicie się zmieniła i skrypt niestety nie działa.....Czy ma ktoś jakiś nowy ? proszę o info i pomoc pozdrawiam

    OdpowiedzUsuń