web-dev-qa-db-ja.com

共有Dropboxフォルダリンクからプログラムでコンテンツをダウンロードする

ユーザーと共有されているDropboxファイル(共有ファイル/フォルダーリンク)のダウンロードを自動的にトリガーするアプリケーションを構築しています。概説されているように、これはファイルへのDropboxリンクに実装するのは簡単でした ここ

残念ながら、これは共有フォルダでは機能しません。誰もが私ができる方法についての提案があります

  • そのすべてのコンテンツをダウンロードします(ダウンロードするためにその中のファイルリンクのリストを取得するかもしれませんか?)
  • または
  • フォルダのZipをダウンロードする

現在、URLにアクセスして画面スクレイピングを実行し、コンテンツリストを取得することができますが、ファイルのリンクされたDropboxブログエントリに記載されているソリューションの利点は、スクレイピングが不要なため、はるかに信頼性が高く効率的です。 。

21
Cian

Dropboxのサポートチームは、これを行うための最良の方法について私に記入しました:

共有リンクの最後に?dl=1を追加するだけです。これにより、zip形式の共有フォルダーが作成されます。

したがって、ユーザーと共有するリンクがhttps://www.dropbox.com/sh/xyz/xyz-YZ(または共有フォルダーにリンクする同様のもの)の場合、そのフォルダーのzipバージョンをダウンロードするには、https://www.dropbox.com/sh/xyz/xyz-YZ?dl=1にアクセスするだけです。

これが他の誰かにも役立つことを願っています。

20
Cian

python)を介してファイルへの直接共有リンクをダウンロードすると、実際のファイルコンテンツではなくhtmlページが表示されました。_?dl=1_を変更しても効果がありませんでした。その後、wgetが実際のファイルをダウンロードしていることに気付きました。 、_?dl=0_の場合でも。dropboxがwgetユーザーエージェントを検出してファイルで応答するように見えるため、ユーザーエージェントヘッダーをWget/1.16 (linux-gnu)に設定してpython 、ドロップボックス共有リンクが正しくダウンロードされています。

_headers = {'user-agent': 'Wget/1.16 (linux-gnu)'}
r = requests.get(url, stream=True, headers=headers)
with open(filepath, 'wb') as f:
    for chunk in r.iter_content(chunk_size=1024): 
        if chunk:
            f.write(chunk)
_
3
serg