Portál AbcLinuxu, 30. dubna 2025 23:58

down-facebook-video

8.2.2009 19:55 | Přečteno: 5048× | Stahovaci skripty

Takže máme tady další stahovací skriptík. Tentokrát videa z oblíbeného(?) facebook.com.

Tak jsem se stal obětí. Je to jako mor, někomu řekneš "ukaž mi ty fotky, kde je máš na Internetu?" a on ti řekne "mám je na facebooku". No co, tak si řeknu, "OK, mrknu tam". No jo, jenže ty fotky (a případně i videa) můžete vidět, jenom když jste registrovaní - to, že musíte být ještě označení jako "přítel" toho dotyčné, už je jenom "třešnička".

No, ale budiž, registrace je rychlá, nechtěji ověřovat moje jméno a údaje, takže samozřejmě fake, a email, kterej používam na spamy.

No, tak jsem si přidal toho člověka, od kterýho jsem to video chtěl, ale ouha, to video nejde jednoduše stáhnout (aspoň jsem žádný tlačítko nebo odkaz nenašel). Prostě zase podělanej flash player, kterej mi navíc řve, že si mám nainstalovat novej flash.

Tak jsem se naprdnul a zatímco jsem upravoval svůj disk na jednom kompu, tak jsem na notebooku na čerstvě nainstalovaným FreeBSD 7.1 (poprvý jsem v něm dělal na skutečnej mašině, dřív jsem zkoušel jenom ve Vmware) prohrabal ty stránky na facebook.com a udělal si tenhle skriptík na stahování videa. Snad to bude fungovat na všechny videa.

Skriptík se přihlásí na facebook.com a ze zadané stránky vytáhne URL a to pak stáhne do aktuálního adresáře.

Tak jsem teď zjistil, že se to dá najít i stáhnout bez tohohle skriptíku. Stačí ve zdrojáku stránky s videem najít text addVariable("video_src" a pak to URL jenom dekódovat (nahradit všechny %XX za znak s hexa kódem XX). Nechápu, že jsem si toho nevšimnul hned na začátku, ale holt skript už je hotovej, tak se hodí pro cmdline stahování třeba na vzdáleným serveru. Login email a heslo se dá zadavát na cmdline parametrama.

Snad to bude fungovat pro všechny videa, já tahal mp4 (uděláno na telefonu) a šlo to. Případný updaty budu dělat jako pro ostatní skripty, pokud bude čas a možnosti a pokud to bude řešitelné bez nějakých větších problémů.

#!/bin/bash

function tourl() {
  if [ $# -gt 0 ];then
    while [ $# -gt 0 ];do
      echo "$1" | perl -pe 'chomp;$_=unpack("H*",$_);s/(..)/%$1/g;'
      shift
    done
  else
    perl -pe 'chomp;$_=unpack("H*",$_);s/(..)/%$1/g;'
  fi
}

agent="Mozilla/5.0 (X11; U; Linux i686; cs; rv:1.9.0.5) Gecko/2009010219 Gentoo Minefield/3.0.5"
mail=""
pass=""

if [ $# -lt 1 ];then
  echo "$0 [ -m EMAIL ] [ -p PASSWORD ] URL ..."
else
  dir="$( mktemp -d /tmp/down-facebook-video.XXXXXX )"
  i=$#
  while [ $i -gt 0 ];do
    a="$1"
    shift
    case "$a" in
      "-m" ) if [ $# -eq 0 ];then echo "error: -m needs value" ; exit ; else mail="$1" ; shift ; fi ;;
      "-p" ) if [ $# -eq 0 ];then echo "error: -p needs value" ; exit ; else pass="$1" ; shift ; fi ;;
      * ) set -- "$@" "$a" ;;
    esac
    i=$(( $i - 1 ))
  done
  while [ -z "$mail" ];do
    read -p "Your login email address [enter '-' to stop]: " mail
  done
  if [ "$mail" != "-" ] ; then
    while [ -z "$pass" ];do
      stty -echo ; read -p "Your password [enter '-' to stop]: " pass ; stty echo ; echo 
    done
    if [ "$pass" != "-" ];then

      ### facebook access
      url1="http://www.facebook.com/"
      wget -nv -O "$dir"/p1 --save-cookies="$dir"/cookies --keep-session-cookies -U "$agent" "$url1"

      ### read login form
      data="$( perl -e '
        undef $/;
        $a=<STDIN>;
        if (($form)=($a=~m,(<form[^>]+name="menubar_login"[^>]*>.*?</form>),si)) {
          while (($el)=($form=~m,(<input[^>]+type="hidden"[^>]*>),si)) {
            $form=~s,(<input[^>]+type="hidden"[^>]*>),,si;
            ($elname)=($el=~/name="([^"]+)"/si);
            ($elval)=($el=~/value="([^"]*)"/si);
            $elval=unpack("H*",$elval);
            $elval=~s/(..)/%$1/g;
            push @postdata,sprintf("%s=%s",$elname,$elval);
          }
          ($url)=($form=~/action="([^"]+)"/si);
        };
        print sprintf("%s|%s",$url,join("&",@postdata));
      ' < "$dir"/p1
      )"

      ### login url and POST data
      url2="${data%%|*}"
      postdata="${data#*|}&email=$( tourl "$mail" )&pass=$( tourl "$pass" )"

      if [ -z "$url2" ] || [ -z "$data" ] ; then
        echo "error: url2 and/or data empty"
        echo "keep temporary directory $dir"
        exit 1
      else
        wget -nv --no-check-certificate -O "$dir"/p2 --save-cookies="$dir"/cookies --keep-session-cookies --load-cookies="$dir"/cookies -U "$agent" --referer "$url1" --post-data="$postdata" "$url2"

        url2="http://www.facebook.com/home.php"
        while [ $# -gt 0 ];do
          ### get video URL
          url3="$1"
          shift

          ### download video page
          wget -nv -O "$dir"/p3 --save-cookies="$dir"/cookies --keep-session-cookies --load-cookies="$dir"/cookies -U "$agent" --referer "$url2" "$url3"

          ### get video URL
          urlv="$( perl -e 'undef $/;$a=<STDIN>;print "$url" if (($url)=($a=~m/addVariable\s*\(\s*"video_src"\s*,\s*"([^"]+)"/si)) and $url=~s/%(..)/chr(hex($1))/ge;' < "$dir"/p3 )"
          if [ -z "$urlv" ];then
            echo "error: urlv empty"
            echo "keep temporary directory $dir"
            exit 1
          else
            ### download video
            wget -c "$urlv"
          fi
        done
      fi
    fi
  fi

  rm -rf "$dir"

fi
       

Hodnocení: 86 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Grunt avatar 8.2.2009 20:38 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: down-facebook-video
Odpovědět | Sbalit | Link | Blokovat | Admin

Na podobné "přehrávače" doporučuji program WireShark. Stačí jen odchytit začátek streamu, najít si pakety, které streamu náleží -> Follow TCP Stream a pomocí CTRL+C a CTRL+V si zkopčit adresu. A pokud je to náhodou nějaký chytrý stream, který neustále mění svou adresu a požaduje cookie(no prostě hnus zelený, který si nepřeje být stáhnut. z.B. IMEEM) tak to stačí ve WireSharku odchytit vše -> Uložit jako raw dump -> pomocí hexaeditoru odstřihnout HTTP hlavičky -> mplayerem dumpnout audio/video stopu.

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
8.2.2009 21:30 snajpa | skóre: 20 | blog: snajpuv_blocek | Brno
Rozbalit Rozbalit vše Re: down-facebook-video
Super postup, ale exituje tam nějaký video, u kterýho se to vyplatí?
--- vpsFree.cz --- Virtuální servery svobodně
Grunt avatar 8.2.2009 22:28 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: down-facebook-video
ale exituje tam nějaký video

Kde?

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
8.2.2009 22:47 snajpa | skóre: 20 | blog: snajpuv_blocek | Brno
Rozbalit Rozbalit vše Re: down-facebook-video
Na sajtách typu facebook, youtube, ...
--- vpsFree.cz --- Virtuální servery svobodně
Grunt avatar 9.2.2009 13:41 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: down-facebook-video

Těžko říct, ale každý si určitě najde svoje.

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
8.2.2009 21:53 RoboShim | skóre: 13 | blog: RoboShim
Rozbalit Rozbalit vše Re: down-facebook-video

Hehe, tak tohle byl muj prvni pokus, kdyz jsem prave nemohl najit to URL toho videa primo v HTML strankach:) Tak jsem zjistil, ze ty videa se daji tahat volne, aniz by clovek musel byt prihlasen (btw: hehe, neni tohle nahodou security/privacy bug?). Je sice hezky, ze na seznam videi se clovek bez prihlaseni a kamaradstvi nedostane, ale jakmile jednou nekdo zverejni URL primo na video, tak si ho muze stahnout kdokoliv:)

No a kdyz tam to URL je, tak je wireshark zbytecnej. Ale na jiny videa (a prehravace), ktery se nahrajou jenom s nejakym kodem a sami si pak stahnout prislusne URL videa to pomaha, ale opet jenom dokud ten prehravac netaha to video nejakym silenym zpusobem. Uz jsme se setkal s prehravacem, kterej to tahal pres nejakej real nebo wmf stream, proste nebylo to obyc HTTP.

Nastesti bastl ala IMEEM nepouzivam, takze me to tolik netrapi. Ale jinak pres wireshark je to asi jedinej zpusob, jak to z toho dostat.

Grunt avatar 9.2.2009 13:51 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: down-facebook-video
Ale na jiny videa (a prehravace), ktery se nahrajou jenom s nejakym kodem a sami si pak stahnout prislusne URL videa to pomaha, ale opet jenom dokud ten prehravac netaha to video nejakym silenym zpusobem. Uz jsme se setkal s prehravacem, kterej to tahal pres nejakej real nebo wmf stream, proste nebylo to obyc HTTP.

Pokud by to byl RTSP, tak to také není problém, protože protokol je plně zdokumentován a lze jej mplayerem nebo VLCčkem zachytit. Myslím, že se právě bavíme o Flash Video Streaming Service(z.B. streamy na nova.cz nebo Yahoo Videos) a s těmi už to tak jednoduché není. Prej už se to podařilo reverznout v projektu gnash nebo swfdec, ale nějaký způsob jak to dumpnout jsem ještě neviděl.

Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
9.2.2009 14:22 RoboShim | skóre: 13 | blog: RoboShim
Rozbalit Rozbalit vše Re: down-facebook-video

Jo, presne, nova.cz ma tyhle hnusny streamy. Ty jsem chtel, protoze ikdyz ma clovek 512kbps a prepne si video na nizsi kvalitu (ktera by mela byt prave tech 512kbps), tak se to stejne cuka (ikdyz jsem ve flashi dal, aby se ukladalo neomezene do cache).

kozzi avatar 9.2.2009 13:57 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: down-facebook-video
Tak security/privacy BUG to IMHO neni, jelikoz by ti musel nekdo dat to URL. Coz muze udelat zase jen a jen prihlasen uzivatel. Takze je v podstate to samy jako by byl prihlasen a zavolal te at se podivas na video ;-)
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
9.2.2009 14:26 RoboShim | skóre: 13 | blog: RoboShim
Rozbalit Rozbalit vše Re: down-facebook-video

No, ja to myslel tak, ze kdyz treba nekam do dizkuse vlozim odkaz na nejaky fotoalbum, tak se na to nedostane clovek, kterej neni na facebooku a neni pritel. Kdyz tam ale vlozim primy odkazy, tak to je volne pristupny pro kohokoliv (proste komu se to URL dostane do ruky, trebas i omylem nebo treba hacknutim email uctu, tak ma pristup, kdezto kdyz bude odkaz jenom na album, tak pristup automaticky neni). Ted uz zbyva jenom rozlousknout algoritmus tvoreni tech kodovych nazvych a muze se mirrorovat:)

mkoubik avatar 9.2.2009 16:38 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
Rozbalit Rozbalit vše Re: down-facebook-video
Ten algoritmus samozřejmě nebude deterministický (aspoň doufám).
xxx avatar 8.2.2009 23:19 xxx | skóre: 42 | blog: Na Kafíčko
Rozbalit Rozbalit vše Re: down-facebook-video
Odpovědět | Sbalit | Link | Blokovat | Admin
S tema fotkama je to podle me fama. Co si pamatuju, tak tam bylo mozne poslat direct link na galerii a clovek nemusel byt ani registrovan. Facebook jsem uz zrusil, takze nemam jak overit.
Please rise for the Futurama theme song.
8.2.2009 23:36 RoboShim | skóre: 13 | blog: RoboShim
Rozbalit Rozbalit vše Re: down-facebook-video

Tak je to zrejme stejny jako u videa. Kdyz chces videt album, tak musis byt prihlasenej (odkaz na album me v jinym firefox profilu presmeroval na login.php). Ale kdyz si zobrazim primo fotku a zkopiruju link a ten pak vlozim do druhyho firefoxu, tak ji v pohode zobrazim. Je to teda asi tak, ze pristup do chranenych oblasti na domene facebook.com je chranena loginem, ale fotky a videa (a kdo vi co jeste) jsou zrejme bez ochrany a primym linkem se na ne clovek dostane bez omezeni. A pak si dejte neco na facebook a verte tomu, ze se k tomu nikdo cizi nedostane.

19.2.2009 09:43 Jirka
Rozbalit Rozbalit vše Re: down-facebook-video
Odpovědět | Sbalit | Link | Blokovat | Admin

Dyt jsou jednodussi zpusoby. Staci pres napr interent explorer. Nejdrive si prehrajte video az do konce, pak si najedte na tools/internet options a settings v kolonce browsing history, pak na view files. Tam si jej najdete a zkopirujte nekam k sobe do slozky prejmenujte a muzete koukat. Ja to tak delam a jede to v poho.

19.2.2009 12:57 RoboShim | skóre: 13 | blog: RoboShim
Rozbalit Rozbalit vše Re: down-facebook-video

JO, pokud je to video, jako video, tak to neni problem:) Jenze spousta webu dneska pouziva ty flash prehravace, ktery prubezne video tahaji a prehravaji z cache, kterou samozrejme po prehrani ihned mazou, nektery (napr. Nova) dokonce pouzivaji normalni stream, takze nejde jednoduse vydolovat URL videa a stahnout treba pomoci wget.

Jinak by to bylo fakt hezky, kdybych si to video mohl pustit, ono to treba i trhane hralo, ale kdyz bych to spustil znovu, tak by to uz jelo z disku bez trhani, ale takhle to bohuzel uz nefunguje. Na druhou stranu musim uznat, ze aspon ty prehravace umi prehrat vic, nez media player z Win Vista. Manzelka se takhle chtela podivat na to video, co jsem z FB vydoloval a bohuzel ji to neslo (MP4 video), tak jsme to musel mplayerem prevest na nejakej DivX nebo Xvid nebo co v avi. Sice to AVI bylo vetsi, ale aspon to slo.

BTW: Nepouzivam Windows ani Internet Explorer:)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.