سؤال

أحتاج إلى تحميل ملف/مستند إلى محرّر مستندات Google على تطبيق GAE.من المفترض أن يكون هذا بسيطًا بما فيه الكفاية، ولكني أواجه مشكلات كبيرة مع واجهة برمجة التطبيقات (API).

السياق:

import gdata.docs.service

client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'pass')

ms = gdata.MediaSource(#what goes in here?)
client.Upload(media_source=ms, title='title')

للتحميل أنا أستخدم client.Upload(), ، والذي يأخذ كائن MediaSource (المجمّع) كمعلمة.لكن، MediaSource() يبدو أنه يقبل فقط مسار الملف للمستند: 'C:/Docs/ex.doc'.

نظرًا لأنني في GAE بدون نظام ملفات، فلا يمكنني الوصول إلى الملف إلا من خلال Blobstore أو عنوان URL المباشر للملف.ولكن كيف يمكنني إدخال ذلك في MediaSource()?

يبدو أن هناك أ الطريقة في جافا لتحقيق ذلك باستخدام MediaByteArraySource(), ولكن لا شيء لبيثون.

هل كانت مفيدة؟

المحلول

إذا كان أي شخص مهتمًا، فإليك كيفية حل هذه المشكلة باستخدام Document List API.

لم أكن أرغب في استخدام محرك SDK لأنه يعقد الكثير من الأشياء.أصبح الأمر أسهل بكثير مع List API للمصادقة/تسجيل الدخول دون الحاجة إلى بعض حيل OAuth.هذا يستخدم الإصدار 2.0.14 من مكتبة gdata بايثون, ، وهو ليس الإصدار الحالي (2.0.17)، ولكن يبدو أن لديه آلية تحميل أبسط.

هناك أيضًا المزيد من الوثائق (التي لا تزال متفرقة) عبر الإنترنت للإصدار 2.0.14، على الرغم من أنني اضطررت إلى تجميعها معًا من مصادر مختلفة ومن التجربة والخطأ.الجانب السلبي هو أنه لا يمكنك تحميل ملفات pdf مع هذا الإصدار.هذا الرمز سوف لن العمل مع 2.0.17.

إليك الكود:

import gdata.docs.service
import gdata.docs.data
from google.appengine.api import urlfetch

# get file from url
result = urlfetch.fetch('http://example.com/test.docx')
headers = result.headers
data = result.content

# authenticate client object
client = gdata.docs.service.DocsService()
client.ClientLogin('gmail', 'password')

# create MediaSource file wrapper
ms = gdata.MediaSource(file_handle=result.content, 
content_type=headers['content-type'], 
content_length=int(headers['content-length']))

# upload specific folder, return URL of doc
google_doc_name = 'title'
folder_uri = '/feeds/folders/private/full/folder:j7XO8SJj...'
entry = client.Upload(ms, google_doc_name, folder_or_uri=secret.G_FOLDER_URI)
edit_url = entry.GetAlternateLink().href

نصائح أخرى

تتضمن مستندات Google Drive SDK تطبيق نموذج كامل مكتوب في Python الذي يعمل على محرك التطبيق:

https://developers.google.com/drive/examples/python / ص>

يمكنك استخدامها كمرجع لتنفيذك ومعرفة كيفية حفظ ملف من محرك التطبيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top