Sanırım linuxda olmanın bir handikapı, bazı şeyleri daha zor yollardan yapmanız gerekiyor. Eğer firefox eklentisi kullanmıyorsanız ya da yoksa böyle bir eklenti, izlediğiniz flash videoları bilgisayarınıza indirmeniz uğraşıtırıcı.
Gerçi önceden kolaydı (ubuntu 10.10 dan önce) , izelenen tüm flash videolar /tmp klasörü içerisine kopyalanıyordu. Videonun bulunduğu sayfayı kapadığınızda da, /tmp den siliniyordu. Flash videonun penceresini kapamadan, /tmp klasöründen alıp istediğiniz yere kopyalayabiliyordunuz.
Bu kolay adımlar bazılarının canını sıkmış sanırım, bu yüzden artık izlenen flash videolar tmp dizininde bulunmuyor. Bunun yerine /proc dizini altında, çalışan eklentinin process id si altındaki fd dizini içerisinde bulunan ilgili numaradaki dosya olarak bulunabiliyor
Şunun gibi yani (“lsof -n|grep Flash” komutunun çıktısı):
1 | plugin-co 2535 ersin 16u REG 8,1 5463336 12058865 /tmp/FlashXXcGtmnF (deleted) |
Bunu bir arkadaştan öğrendim, lsof (açık olan tüm uygulamaların kullandığı dosyaları listeliyormuş) ile bu bilgilere ulaştıktan sonra geriye bu dosyayı kopyalamak kalıyordu :
1 | cp /proc/2535/fd/16 ~/flash_dosyasi.flv |
Bu yöntemin dez avantajı hangi dosyanın hangi video olduğunu bilmemeniz. Bu yüzden birden fazla flash video izliyorsanız, bunun takibini ve ayrımını yapmak tamamen size kalıyor.
Uzun sözün kısası şu, burda izlediğim adımları otomatize etmek için küçük bir php scripti yazdım, konsoldan çalışan. Bunu da burdan paylaşmak istedim :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | #!/usr/bin/php <?php /** * Flas dosyalarını kopyalayabilmek için oluşturulacak Ui için ortak yapı * @author ersin * */ abstract class Ui { /** * * Fla listesini tutar * @var array */ protected $listArray; /** * * Komut çıktısını tutar * @var string */ protected $list; /** * * Sistemde olan açık fla dosyalarının listesini dödnüdür */ protected function listOpenFlas(){ $this->list =`lsof -n|grep Flash`; $this->listArray = explode("\n",$this->list); array_pop($this->listArray); } /** * * Komut çıktısını ayrıştırarak fla dosyasına erişebilmeyi * sağlayan değerleri döndürür * * @param string $data */ protected function parseFla($data){ $res = array(); $match = array(); preg_match_all('/\d{1,}/',$data, $match); if(count($match)==0) { return false; } $res['pid'] = $match[0][0]; $res['itm'] = (int)$match[0][1]; return $res; } /** * * Fla dosyasının kaydedilmesini sağlar * @param integer $index * @param string $savePath */ protected function saveFile($index,$savePath){ @$file = $this->listArray[$index]; if(!($fla = $this->parseFla($file))){ echo "\nFlash dosyası ayrıştırılamadı\n"; return false; } $source ='/proc/'.$fla['pid'].'/fd/'.$fla['itm']; $res =`cp $source $savePath>&1`; if(null === $res) { echo "\nDosya aktarım işlemi başarılı ile sonuçlandı\n"; }else { echo "\n\033[01;31mHata\t:\t\033[0m".$res."\n"; } } /** * * Ortak başlatıcı */ public function start(){} } /** * * Consoleda çalışan Ui * @author ersin * */ class ConsoleUi extends Ui { /** * * Conseole menü çıktısını verir */ private function print_menu(){ $msg= "\n\033[35;1m Seçenekler :\033[0m \n". "\033[01;31m(1)\t:\033[0m Flash Dosya Listesi\n". "\033[01;31m(2)\t:\033[0m Flashı farklı kaydet\n". "\033[01;31m(3)\t:\033[0m Çıkış\n". "\n\033[01;31mBir Seçenek Numarası Girin :\033[0m"; return $this->prompt($msg); } /** * * Fla dosyalarının liste çıktısını verir */ private function listMenu() { if(count($this->listArray)>0) { echo "\n\t\tŞu an açık olan flash dosyaları\n", $this->list; }else { echo "\nAçık flash dosyası bulunamadı\n"; return false; } } /** * (non-PHPdoc) * @see Ui::listOpenFlas() */ public function listOpenFlas(){ parent::listOpenFlas(); $this->listMenu(); } /** * * Console dan parametre almamızı sağlar * @param string $message * @return string */ private function prompt($message,$trim=true){ echo $message; $input = fopen('php://stdin','r'); $value = fgets($input); fclose($input); if($trim) { return trim($value); }else { return $value; } } /** * * Karar mekanizması * @param int $choice */ private function makeAction($choice){ switch($choice){ case 1: $this->listOpenFlas(); break; case 2: if(count($this->listArray)==0){ if($this->prompt("\nListe boş görünüyor, tekrar kontrol edilsin mi? [e/h]")=="e"){ if(!$this->listOpenFlas()) return false; }else { return false;} } $fileChoice = $this->prompt("\nDosya indeksini girin(0 dan başlayarak) :"); $savePath = $this->prompt("\nDosyanın kaydedileceği yolu girin :"); $this->saveFile($fileChoice,$savePath); break; case 3: exit(0); break; default : var_dump($choice);exit; } } /** * (non-PHPdoc) * @see Ui::start() */ public function start(){ while(true){ $choice = $this->print_menu(); $this->makeAction($choice); } } } $console = new ConsoleUi(); $console->start(); |
GTK destekli sürümünü de yapmak istediğimden, bunu yapabilecek şekilde düzenledim. Belki sizin de aklınıza farklı birşeyler gelir siz de ekleme yaparsınız,basit kullanışlı bir araç çıkar ortaya