2010-01-14 21:22:26
今日はファイルのアップロードを試みる。
昨日ダウンロードしたgdata-2.0.6に入っているsample.pyを睨みながら、自分に理解できるところを拾い上げてみる。
#!/usr/bin/python import gdata.docs.service, gdata.spreadsheet.service, hashlib import sys, os, re def _GetFileExtension(file_name): match = re.search('.*\.([a-zA-Z]{3,}$)', file_name) if match: return match.group(1).upper() return False client = gdata.docs.service.DocsService() client.ClientLogin('google@gmail.com', 'password') filepath = sys.argv[1] filename = filepath.split("/")[-1] ext = _GetFileExtension(filename) if not ext or ext not in gdata.docs.service.SUPPORTED_FILETYPES: print 'File type not supported. Check the file extension.' else: content_type = gdata.docs.service.SUPPORTED_FILETYPES[ext] try: ms = gdata.MediaSource(file_path=filepath, content_type=content_type) except IOError: print 'Problems reading file. Check permissions.' entry = client.Upload(ms, filename) if entry: print 'Upload successful!' print 'Document now accessible at:', entry.GetAlternateLink().href else: print 'Upload error.' documents_feed = client.GetDocumentListFeed() for document_entry in documents_feed.entry: print document_entry.title.textファイルタイプをチェックしてアップロードするという訳だ。これをgdoc_upload.pyという名前で保存して、testdoc.docというワードファイルで試してみると(python dgoc_upload.py testdoc.docとコマンドを打つ)、'Upload successful!'のあとに、「Document now accessible at: http://docs.google.com/leaf?id=xxxxxx&hl=en」とURLが表示され、それに続いて出てくるファイル一覧にtestdoc.docが載っていた。成功したようである(一行で書いているが、この間にいろいろ試行錯誤しているのだ)。
そのうちあらゆるファイルをアップロードできるようになるらしいが、今は何でもという訳にはいかない。少なくともpdfまでは扱えるようにしておこう。が、残念なことに、今のPythonを利用したAPIではpdfに対応できないらしいのだ。試しに、phthon gdoc_upload.py testpdf.pdfとやってみたら、「gdata.service.RequestError: {'status': 415, 'body': 'Content-Type application/pdf is not a valid input type.', 'reason': 'Unsupported Media Type'}」というエラーが返ってきた。
そこで、「Google Document にファイルをアップロードするバッチを作ってみた」を参考にして、Issue 591 - gdata-issues - Allow Upload of PDF Files to Google Docs - Project Hosting on Google Codeに書いてあるように、service.pyの127行目以降にある、
uri = '/feeds/default/private/full'と
extra_headers={'Slug': media_source.file_name,'GData-Version': 3},の二ヶ所を修正する。今度は成功した。ブラウザでファイル一覧を見ると、今回アップロードしたテスト用ファイルが二つ上に追加されていた。
今日はここまで。