Twistedで作るローカルYoutubeサーバ その4
でsshというかmanhole。
Youtubeのファイルを定期的にローカルに落としてくるのはいいけどどうやってダウンロードするファイルを設定するの?
ということでmanholeを使います。
キモス!
Twistedにはmanholeというおもろい機能がついています。
こいつは動作しているサーバ内のobjectにアクセスできたりする代物でsshでログインするとpython shellが立ち上がります。
shell.py
from twisted.cred import portal, checkers from twisted.conch import manhole, manhole_ssh def getManholeFactory(namespace, **passwords): realm = manhole_ssh.TerminalRealm() def getManhole(_): return manhole.Manhole(namespace) realm.chainedProtocolFactory.protocolFactory = getManhole p = portal.Portal(realm) p.registerChecker(checkers.InMemoryUsernamePasswordDatabaseDontUse(**passwords)) f = manhole_ssh.ConchFactory(p) return f
manholeを返す関数を作ってtacで設定する。
server.tac(抜粋)
strports.service("2222", shell.getManholeFactory(globals(), admin='admin')).setServiceParent(application)
これだけ。すげー簡単。
Checkerは簡単にInMemoryなものを使います。
namespaceはpython shellが立ち上がった時のglobalの部分にあたります。
(copyできるものじゃないとだめ)
ユーザ名とパスワードはFactoryの第2引数でセット。
この例だとユーザ名:admin、パスワード:admin。
こいつにアクセスすると
$ssh -p 2222 localhost -l admin admin@localhost's password:
と聞かれるのでパスワードを入力するとpython shellが立ち上がります。
>>> >>> setting <module 'setting' from '/Users/matsu/Documents/pywork/youtube/setting.pyc'> >>> dir(setting) ['__builtins__', '__doc__', '__file__', '__name__', 'repo', 'video'] >>> setting.repo '/tmp' >>>
このようにsetting部にもアクセスできます。
downloader対象はvideoをキューとして動くのでここから追加してやります。
>>> setting.video.append('http://jp.youtube.com/watch?v=WOxd_qO8Qd0')
これで一定時間後downloderが拾ってダウンロードし、VideoItemを作成してWebの画面上にリンクができるようになります。
つーか普通にWebから入力させろ!って話なんだけどね。
次回は全ソース貼ります。
うくく。