■
と言う訳でプログラマ向けの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
- とりあえずUbuntu 8.04上で動作確認
- ホームディレクトリのDropbox/Publicにこのファイルを置く
- スクリプトのuserNameとuserID*2を適当に修正する
- pythonインタプリタにこのファイルを食わせて、makeIndexHtml()を実行する
- ディレクトリにindex.htmlが作成される*3
- index.htmlを右クリック→Dropbox→Copy public linkする
http://dl.getdropbox.com/u/228440/index.html
↑そうするとこんな感じになる
仕様
既知のバグとか、未実装部分とか
- ファイル名にスペースとか入ってるとおかしくなると思います。
- 面倒臭いから書いてないだけです。
- ファイル名に2byte文字*7が入っているとおかしくなると思います。
- 面倒臭いからry
- htmlが適当htmlです。
- 面倒ry
ToDo
- バグをとる
- どうにかして定期的に自動的に処理したいよね。cron?