と言う訳でプログラマ向けのDropboxの紹介を書いてみます。

Dropboxでプロジェクト管理がしたい!(1)

いや、真面目なプロジェクト管理ではなくって、個人が自分のサンプルプログラムとか、オープンソースとか、小規模なプロジェクトとか、ツールとかを管理っていうか公開するのに使えたら便利だなあ、とか思ったんですよ>Dropbox

  • Publicの下に公開したいファイルを置く
  • 右クリック→Dropbox→Copy public link

すると、クリップボードに公開用のURLが保存されます。
↓こんな感じ。
http://dl.getdropbox.com/u/228440/makeIndexHtml.py
ただ、これはファイルにのみ可能で、ディレクトリにはリンクできないんですよ。
http://dl.getdropbox.com/u/228440/
↑こんな風にすると404 not foundで弾かれる*1
↓まあ、index.htmlみたいなのを置いて、そのディレクトリのリンクを書いてあげれば、ディレクトリへのリンクみたいな事は可能。
http://dl.getdropbox.com/u/228440/index.html

ここからが本題。

↓って言う訳で、Dropbox用の公開ディレクトリのindex.htmlを自動的に生成するスクリプトを書いてみた。
http://dl.getdropbox.com/u/228440/makeIndexHtml.py

import os
import os.path

import re

userName = 'veleno'
localPath = "/home/"+userName+"/Dropbox/Public"
userID = '228440'
serverPath = 'http://dl.getdropbox.com/u/'+userID


def makeIndexHtml(top=localPath):
        outputFile = open(top+'/index.html','w')
        outputFile.write('<html><body>')
        outputFile.write('<a href="'
                         +re.sub(localPath,serverPath,top)
                         +'/../index.html">..</a><br>\n')
        for root, dirs, files in os.walk(top):
                for f,org in [(re.sub(localPath,serverPath,os.path.join(root,x)),x)
                              for x
                              in files
                              if re.match('\.',x)==None and re.match('.*~$',x)==None]:
                        outputFile.write('<a href="'
                                         +reduce(lambda a,b:a+b,f)
                                         +'">'
                                         +org
                                         +'</a><br>\n')
                map(lambda x:outputFile.write('<a href="'
                                              +re.sub(localPath,serverPath,root)
                                              +'/'
                                              +x
                                              +'/index.html">'
                                              +x
                                              +'</a><br>\n'),
                    dirs)
                map(makeIndexHtml,map(lambda x:os.path.join(root,x),dirs))
                break
        outputFile.write('</body></html>')
        outputFile.close()
How to use

http://dl.getdropbox.com/u/228440/index.html
↑そうするとこんな感じになる

仕様
  • Public以下のディレクトリすべてにindex.htmlを作成します
    • 既存でindex.htmlがあれば上書きします。注意。
  • index.htmlには以下のリンクが含まれます
既知のバグとか、未実装部分とか
  • ファイル名にスペースとか入ってるとおかしくなると思います。
    • 面倒臭いから書いてないだけです。
  • ファイル名に2byte文字*7が入っているとおかしくなると思います。
    • 面倒臭いからry
  • htmlが適当htmlです。
    • 面倒ry
ToDo
  • バグをとる
  • どうにかして定期的に自動的に処理したいよね。cron?

次回以降

次回の「Dropboxでプロジェクト管理がしたい!」ではrssを配信してみたり、ChangeLogをブログ化したり、makeIndexHtmlのバグをとったり、そこら辺のスクリプトを自動化したりしたいです。


…また、ウケの悪そうなエントリを書いてしまった。

*1:404 not foundで弾とか書くと別のヒトが来そうだ

*2:もしかしたらlocalPathも修正するとWindowsでも動く…かも

*3:index.htmlを上書きします。多分。自分で同名のファイルを作ってるヒトは注意!

*4:Unix系?だと隠しファイル

*5:同様にバックアップファイル

*6:一つ上のディレクト

*7:日本語とかね