i76 webdesign, Sittard

7 september 2010

Weblog Rubrieken

i76 webdesign, Sittard

Het downloaden van video’s via KeepVid met ruby

Geschreven door: Tom-Eric

Voor sites zoals gitaar.nu, is het handig als je een backup van de geëmbedde video’s die je toevoegt hebt. Het zou natuurlijk zomaar kunnen dat er door YouTube in één keer alle video’s van een gebruiker verwijderd worden, waar misschien net die paar video’s bij zaten die jij op je site had staan. Met je eigen backup kan je deze dan later weer toevoegen.

Om deze video’s te downloaden, moet je natuurlijk eerst weten waar de video staat. Elke provider doet dit weer anders, dus dit zelf programmeren zou veel tijd kosten. De site KeepVid, genereert download links van een heleboel video sites, waaronder YouTube, Google Video en Metacafe. Met behulp van Hpricot heb je zoiets redelijk snel gerealiseerd. Hieronder een voorbeeld:

def keepvid_uri(movie_url)
  # Eerst parsen we het formulier op keepvid om erachter te komen waar we
  # naar moeten posten
  uri = URI(Hpricot(URI('http://keepvid.com/').read).at('form')['action'])

  # Open een HTTP connectie
  Net::HTTP.start(uri.host, uri.port) do |http|
    # doe een POST request met de goede argumenten
    doc = Hpricot(http.post(uri.path, "url=#{movie_url}&site=aa").body)

    # Vind het anchor (a) element met de download link en return hem
    anchor = (doc/:a).find{ |a| a.to_s =~ /Download Link/ and
                                a.next_node.to_s =~ /flv/ }

    return URI(anchor['href']) if anchor
  end
end

Alhoewel bovenstaande oplossing prima werkt, is het natuurlijk afhankelijk van de HTML die KeepVid aanlevert. Aangezien dit bij bijvoorbeeld een redesign kan veranderen, zou ik dit soort dingen liever via een API doen. Helaas heb ik deze nog niet kunnen vinden op het web.

Laat een reactie achter




XHTML: Je mag deze elementen en attributen gebruiken: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>


i76 webdesign, Sittard
Tel 046 4007004
Fax 046 4009640
E-mail