Pobieranie listy plików z DropBoxa
19 listopada 2008Tym razem mała odskocznia od Merba, ale nadal w klimatach Ruby.
Jeśli ktoś nie słyszał, Dropbox to usługa która pozwala trzymać pliki na serwerze poprzez utworzenie specjalnego folderu w systemie i używanie go jak każdego innego. Dropbox sam uaktualni pliki na serwerze. Ponadto umożliwia synchronizacje plików na kilku komputerach oraz współdzielenie folderów. Więcej na stronie programu.
Wszystko pięknie, ale Dropbox ma jedna wadę. Możemy podać komuś link do pliku (z folderu Public) ale do całego folderu już nie. Autorzy twierdzą, że to ze względów bezpieczeństwa - ich sprawa. Nie udostępnili też żadnego API (np. z wymaganym kluczem czy coś).
Z pomocą przychodzi dostępny ajaxowy "Web Interface" i Mechanize. Plan jest całkiem prosty: zalogować się i pobrać listę plików dla podanej ścieżki.
Dość gadania, kodzik:
require "rubygems" require "mechanize" class Dropbox def initialize(email, password) @agent = WWW::Mechanize.new page = @agent.get('https://www.getdropbox.com/') form = page.forms.first form.email = email form.password = password @agent.submit(form) end def get(path) links = [] @agent.post("https://getdropbox.com/browse2/#{path}?ajax=yes", "d=0&mini&t=6bf8f0d91d").links.each do |link| unless link.text.blank? or link.text == "Parent directory" links << if link.href =~ %r[/browse2/#{path}/.+] [link.text, get(link.href.sub('/browse2/', ''))] else link end end end links end end
A odpalamy to tak:
dbs = Dropbox.new("your@email.com", "yourpass") links = dbs.get "Public" pp links
Tablica links zawiera odnośniki do wszystkich plików z danego katalogu. Można teraz wygenerować sobie html`a z linkami, czy wrzucić skrypt na serwer aby lista plików była zawsze aktualna. Można by się jeszcze pobawić w pobranie wszystkich plików i spakowanie do archiwum :) .
Nie jestem tylko pewien parametru t. Można go łatwo podejrzeć za pomocą FireBuga po zalogowaniu się na stronie. Za każdym razem był taki sam, możliwe jednak, iż dla innego konta będzie inny.
P.S. Tak teraz patrze, to w sumie szału nie ma, ale jak już napisałem to puszcze może komuś się przyda.
5 komentarzy
DropBox wymaga zaproszeń, czy można się normalnie rejestrować?
Jak patrzę na ten kod w Rubim to dochodzę do wniosku, że w końcu muszę przebrnąć przez mojego "pickaxe" ;]
Chyba już bez. Ale jak nie to napisz, mogę podesłać.
"Więcej na" - brakuje linka. Czy Dropbox jest darmowy?
Dzięki. Jest darmowy (2GB), ale można też wykupić płatny pakiet.
Ciekawa sprawa ten cały Dropbox - maly backup dla plikow do tego oddzielnie mozna pliczki udostepniac dla ludzi - nie bawiac sie w rapidy itp
https://www.dropbox.com/referrals/NTYzNzI1NDg5
Przez linki ref dostajesz tak jak i ja 250 MB extra !