2016-11-27 8 views
0

Google Docをテキストとしてエクスポートしようとしています。私は2つのアプローチを試しましたが、どちらもうまくいきません内容をエクスポートGoogleドライブからtext/plainをエクスポートする

は、私は単純な文字列に変換することができていないバイトのオブジェクトとして内容を取得:

req = service.files().export_media(fileId=file_id,mimeType='text/plain') 
fh = io.BytesIO() 
download = MediaIoBaseDownload(fh, req) 
done = False 
while done is False: 
    status, done = download.next_chunk() 
return fh.getvalue() 

私はその後、コーデックのエラー

return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 0: character maps to < undefined >

の変異体を取得します

またはこれら:

TypeError: write() argument must be str, not bytes

だから、型変換の問題だ、私は推測する、と私はそれを解決することができた場合それはうまくいくだろう。

でも、ファイルをtext/plainとしてダウンロードするには、exportLinksプロパティを使用するだけです。問題は、それが簡単に欠けている、次のとおりです。

file = service.files().get(fileId=id).execute() 
pprint.pprint(file) 

{'id': 'xxxxxxxxxx',

'kind': 'drive#file',

'mimeType': 'application/vnd.google-apps.document',

'name': 'export'}

ファイル[ 'exportLinksを']、当然、KeyError例外を与える:

KeyError: 'exportLinks'

それは今 'https://www.googleapis.com/auth/drive' ですので、私はリラックスしたスコープをしました、そのことは問題ではないはずです。

私には何が欠けていますか?

+1

exportLinksドライブAPI v3では利用できません - [移行ガイド](https://developers.google.com/drive/v3/web/migration)を参照してください - 「exportLinksフィールドがファイルから削除されました"... – Bardy

+0

コードサンプルはドライブAPIのサンプルページと同じように見えますが、正しいはずです。エラーが発生している場所の完全なトレースを投稿できますか? – Bardy

+0

Ha、実際にv2 APIドキュメントを使用していたので、exportLinksの問題について説明しています.(私はfiles.export()を試していましたが、これもバイトオブジェクトを返します。 - 私はそのPCの前に戻ってきたときにその痕跡を投稿します。 あなたは正しいAPIサンプルです - 私はquickstart.pyサンプルから始めて、サンプルコードをプラグインしました。 !。これは本当にここに私の道を感じて前にドライブのAPI – zaump

答えて

0

Drive platformは、Googleスプレッドシート、プレゼンテーション、ドキュメント、図形などのネイティブGoogleドキュメントの種類を開いたり、読み込んだり、書き出したりすることができます。たとえば、アプリケーションがPDFファイルを開くように設定されている場合、GoogleドキュメントをPDFにエクスポートできるため、ユーザーはアプリケーションを使用してそれらのドキュメントを開くことができます。

files.exportメソッドで変換されたファイルのコンテンツをダウンロードできます。

file_id = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo' 
request = drive_service.files().export_media(fileId=file_id, 
              mimeType='application/pdf') 
fh = io.BytesIO() 
downloader = MediaIoBaseDownload(fh, request) 
done = False 
while done is False: 
    status, done = downloader.next_chunk() 
    print "Download %d%%." % int(status.progress() * 100) 
+0

問題は、文字列に変換できないバイトオブジェクトを返すということです。decode( 'ascii'、 '無視する ')の作品は、私が望むよりも破壊的です。 – zaump

関連する問題