Fórum Ubuntu CZ/SK

Ostatní => Tipy a triky pro Linux => Téma založeno: Martin Šácha 09 Května 2011, 20:22:09

Název: Rip flashových videí z RAM na plochu
Přispěvatel: Martin Šácha 09 Května 2011, 20:22:09
Protože nové verze flash playeru neukládají videa do /tmp/FlashXXXXX a bashové scripty k nalezení na internetu mi nefungují, sbastlil jsem v C++ program, který to řeší pro více videí najednou (testováno na Firefoxu 4 a 5). :)

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
FILE* pipe=popen("pidof plugin-container","r");
char buff[6];
string pid="";//obsahuje PID procesu plugin-container
if(fgets(buff,6,pipe)!=NULL)
pid+=buff;
pclose(pipe);

//nacteni obsahu /proc/PID/fd/
FILE* pipe2=popen((char*)("cd /proc/"+pid+"/fd/ && ls -l").c_str(),"r");
char buff2[255];//buffer jednotlivych radek vypisu
string cislo="";//nazev pod kterym se video nachazi
string cislo_buf="";
int start=0;
int start_name=0;
while(fgets(buff2,255,pipe2)!=NULL)//prochazi vypis
{
start=0;
start_name=0;
cislo="";
cislo_buf="";
for(start=0;start<255;start++)
{
if(buff2[start]=='>')//zachytny bod
{
start_name=start+2;
start-=2;
while(buff2[start-1]!=' ')//ziskani nazvu souboru
{
start--;
cislo_buf=buff2[start];
cislo_buf+=cislo;
cislo=cislo_buf;
}
break;
}
}

if(buff2[start_name]=='/'&&buff2[start_name+1]=='t'&&buff2[start_name+2]=='m'&&buff2[start_name+3]=='p')
{
system(("cp /proc/"+pid+"/fd/"+cislo+" ~/Plocha/").c_str());
}
}
pclose(pipe2);

return 0;
}

Snad se to někomu bude hodit.
Omluvte prosím čistotu kódu, když někoho napadne zlepšení, budu rád  ;)

PS. Opraveny statické řetězce (jméno a skupina).
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: Martin Šácha 09 Května 2011, 20:29:39
Ha, zásadní chyba, počkejte chvíli na patch (statická délka řetězce).
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 09 Května 2011, 20:32:13
http://forum.ubuntu.cz/index.php?topic=53994.0 (http://forum.ubuntu.cz/index.php?topic=53994.0)
Sem jsi se koukal?
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: Martin Šácha 09 Května 2011, 20:58:04
http://forum.ubuntu.cz/index.php?topic=53994.0 (http://forum.ubuntu.cz/index.php?topic=53994.0)
Sem jsi se koukal?

Bohoušův script se zasekl u "grep bash" a nevypsal nic.
Daysleeperovo taky nešlo, jinak bych to použil :)

Oprava je na světě, už by to mělo šlapat všem :)

Kód: [Vybrat]
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
FILE* pipe=popen("pidof plugin-container","r");
char buff[6];
string pid="";//obsahuje PID procesu plugin-container
if(fgets(buff,6,pipe)!=NULL)
pid+=buff;
pclose(pipe);

//nacteni obsahu /proc/PID/fd/
FILE* pipe2=popen((char*)("cd /proc/"+pid+"/fd/ && ls -l").c_str(),"r");
char buff2[255];//buffer jednotlivych radek vypisu
string cislo="";//nazev pod kterym se video nachazi
string cislo_buf="";
int start=0;
int start_name=0;
while(fgets(buff2,255,pipe2)!=NULL)//prochazi vypis
{
start=0;
start_name=0;
cislo="";
cislo_buf="";
for(start=0;start<255;start++)
{
if(buff2[start]=='>')//zachytny bod
{
start_name=start+2;
start-=2;
while(buff2[start-1]!=' ')//ziskani nazvu souboru
{
start--;
cislo_buf=buff2[start];
cislo_buf+=cislo;
cislo=cislo_buf;
}
break;
}
}

if(buff2[start_name]=='/'&&buff2[start_name+1]=='t'&&buff2[start_name+2]=='m'&&buff2[start_name+3]=='p')
{
system(("cp /proc/"+pid+"/fd/"+cislo+" ~/Plocha/").c_str());
}
}
pclose(pipe2);

return 0;
}
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 09 Května 2011, 21:47:04
Myslím, že Bohouš chtěl napsat původně 'Flash', místo 'bash' :)
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: Šuohob 09 Května 2011, 23:10:46
Diky, opraveno, to jsem si opravdu nevsiml  ;D
jsem to z toho virtualboxu blbe pretukal do fora
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 09 Května 2011, 23:55:05
Co funguje mně:

Opera 11.10 Maverick 64bit:
Kód: [Vybrat]
pushd `pwd`;cd /proc/`pidof operapluginwrapper-ia32-linux`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Firefox 4.0 Natty 32bit
Kód: [Vybrat]
pushd `pwd`;cd /proc/`pidof plugin-container`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Firefox 4.0.1 Maverick 64bit
Kód: [Vybrat]
pushd `pwd`;cd /proc/`pidof npviewer.bin`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Všechno Flash Player 10,2,159,1
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: Martin Šácha 10 Května 2011, 11:27:05
Firefox 4.0 Natty
Kód: [Vybrat]
pushd `pwd`;cd /proc/`pidof plugin-container`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popdVšechno Flash Player 10,2,159,1

Konečně něco co funguje:) Takže potvrzuji funkčnost i pro FF5a v Lucidu.
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 10 Května 2011, 17:24:11
Napsal jsem ještě univerzální příkaz pro všechny prohlížeče, který kopíruje videa na Plochu. Předpokladem pro funkčnost je to, že nemáte těch prohlížečů (obecně aplikací využívajících libflashplugin.so) spuštěno více, to by se muselo dále ošetřit.

Kód: [Vybrat]
pushd `pwd`; cd /proc/`ps ax|grep libflashplayer.so|grep -v grep|awk '{print $1}'`/fd; cp `ls -l|grep Flash| awk '{print $8}'` `xdg-user-dir DESKTOP`; popd
pushd/popd je tam jen kvůli tomu, abyste se po provedení příkazu vrátili do původního adresáře.
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: samot65 12 Května 2011, 16:25:05
Asi něco dělám špatně:

Kód: [Vybrat]
bash: cd: /proc//fd/: Adresář nebo soubor neexistuje
cp: za „/home/stehno/Plocha“ chybí název cílového souboru
Více informací získáte příkazem „cp --help“.

co?
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 12 Května 2011, 16:40:40
Asi něco dělám špatně:

Kód: [Vybrat]
bash: cd: /proc//fd/: Adresář nebo soubor neexistuje
cp: za „/home/stehno/Plocha“ chybí název cílového souboru
Více informací získáte příkazem „cp --help“.

co?

Máš-li spuštěno více aplikací, které používají ten flajš plugin, tak se tohle stane. Zjistíš jednoduše:
Kód: [Vybrat]
ps ax|grep libflashplayer.so
Pokud to chceš trochu pochopit, můžeš kouknout sem (http://gdhnotes.blogspot.com/2011/05/jak-si-zkopirovat-flash-videa-z-cache.html).
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: samot65 12 Května 2011, 17:24:27
Funguje to v FF a v Chromiu v Chromu ne
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 12 Května 2011, 17:39:39
Funguje to v FF a v Chromiu v Chromu ne

Jo, už je mi to jasné. Je to tím, že Chromium spouští pro každý tab nový proces a pokud máš otevřeno více tabů s flajšem, je to špatně. Až budu mít čas napíšu skript, který je obslouží všechny.
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: samot65 12 Května 2011, 17:45:49
Já to původně zkoušel v Chromu, ale ten mi nevypsal nic.
Díky za odkaz a radu.
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: GdH 12 Května 2011, 20:53:05
Tak ani ten Chromajzlík nespouští víc flajšových pluginů, takže ten můj původní příkaz musí fungovat pokud není spuštěn ještě jiný prohlížeč. Nicméně tady je úprava, která vytahá flajše na Plochu ze všeho, co zrovna operuje:

Kód: [Vybrat]
pushd `pwd`;ps ax|grep libflashplayer.so|grep -v grep|awk '{print $1}'|while read pid;do cd /proc/$pid/fd;ls -l |grep Flash| awk '{print $8}'|while read file;do cp $file "`xdg-user-dir DESKTOP`/$pid$file";done;done;popd
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: jAster_BA 12 Května 2011, 21:09:42
Tak ani ten Chromajzlík nespouští víc flajšových pluginů, takže ten můj původní příkaz musí fungovat pokud není spuštěn ještě jiný prohlížeč. Nicméně tady je úprava, která vytahá flajše na Plochu ze všeho, co zrovna operuje:

Kód: [Vybrat]
pushd `pwd`;ps ax|grep libflashplayer.so|grep -v grep|awk '{print $1}'|while read line;do cd /proc/$line/fd;ls -l |grep Flash| awk '{print $8}'|while read file;do cp $file `xdg-user-dir DESKTOP`;done;done;popd
Respect K+
Název: problemi z wifi na netbuku asus eee 1001px
Přispěvatel: duso4 12 Května 2011, 21:23:18
od prechodu z 10.10 na 11.4 pri pokuse sa pripojit na net cez wifi zamrza pc co s tym ???
Název: Re: problemi z wifi na netbuku asus eee 1001px
Přispěvatel: GdH 12 Května 2011, 22:21:32
od prechodu z 10.10 na 11.4 pri pokuse sa pripojit na net cez wifi zamrza pc co s tym ???

Promiň, ale v tomto vlákně wifi neřešíme a řešit nebudem ;)
Název: Re: Rip flashových videí z RAM na plochu
Přispěvatel: karlitos 13 Května 2011, 01:02:27
To bude tim ze se po pouziti vyse uvedenych skriptu ukladaji pakety na plochu  ;D
Název: Re:Rip flashových videí z RAM na plochu
Přispěvatel: Milhouse 13 Října 2012, 16:08:13
Čus. Funguje tohle ještě někomu? Mě nějak neeee. :/
Název: Re:Rip flashových videí z RAM na plochu
Přispěvatel: GdH 14 Října 2012, 00:18:47
Čus. Funguje tohle ještě někomu? Mě nějak neeee. :/

Bohužel už dávno ne, ani jsem nezkoumal, jestli to má ještě rozumné řešení..
Název: Re:Rip flashových videí z RAM na plochu
Přispěvatel: Milhouse 14 Října 2012, 09:04:26
No, ale docela by se mi to hodilo. :) Je blbý, když nakešované video nemůžeš uložit. A znova to stahovat nějakým pluginem stojí za houby. Nechceš to ještě zkouknout? ;)
Název: Re:Rip flashových videí z RAM na plochu
Přispěvatel: Šuohob 15 Října 2012, 10:21:29
U gnashe si muzes nastavit, kam ti ty videa bude ukladat do cache. Bohuzel si ale nepustis flash jinde nez na youtube...
Název: Re:Rip flashových videí z RAM na plochu
Přispěvatel: Milhouse 15 Října 2012, 11:37:42
Hmm, to je docela blbé. :)
Název: Re:Rip flashových videí z RAM na plochu
Přispěvatel: GdH 30 Března 2013, 14:06:56
Takže to rozumné řešení má, dnes mi to nedalo:
Jak si zkopírovat flash videa z cache dnes (http://gdhnotes.blogspot.cz/2013/03/jak-si-zkopirovat-flash-videa-z-cache.html)