معالجة عنوان URL المفتوح

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

عندما يختار مستخدم ملفًا وينقر على عنصر قائمة السياق "فتح باستخدام"، فإن Drive يعيد توجيه المستخدم إلى عنوان URL المفتوح لهذا التطبيق المحدد عند تهيئة دمج Drive.

في حال وضع علامة في المربّع "استيراد" عند إعداد دمج Drive، يمكن للمستخدم اختيار مجموعة من الملفات الخاصة بالتطبيقات وGoogle Workspace لفتحها. يتم تحديد الملفات الخاصة بالتطبيقات في الحقلين "أنواع MIME التلقائية" و"امتدادات الملفات التلقائية" عند إعداد دمج Drive. يتم تحديد ملفاتGoogle Workspace في الحقلين "أنواع MIME الثانوية" و"إضافات الملفات الثانوية" عند إعداد دمج Drive.

بالنسبة إلى كل ملف يريد المستخدم فتحه، يتحقّق Drive من أنواع MIME مقابل أنواع MIME التلقائية والثانوية التي حدَّدتها:

  • بالنسبة إلى أنواع MIME المحددة في حقل أنواع MIME الافتراضية، يتم تمرير معرف الملف إلى تطبيقك. للحصول على معلومات حول كيفية التعامل مع الملفات الخاصة بالتطبيق، يمكنك الرجوع إلى معالجة عنوان URL المفتوح لمستند خاص بالتطبيق

  • بالنسبة إلى أنواع MIME المحددة في الحقل أنواع Mime الثانوية ، تعرض واجهة مستخدم Drive مربع حوار يسأل المستخدم عن نوع الملف لتحويل الملفGoogle Workspace . على سبيل المثال، إذا اختَرت أحد "مستندات Google" في واجهة مستخدم Drive واقترح حقل "أنواع Mime الثانوية" أن تطبيقك يتيح استخدام نص/html أو نص/عادي أو تطبيق/pdf، ستسأل واجهة مستخدم Drive المستخدم ما إذا كان يريد التحويل إلى HTML أو نص عادي أو PDF. للحصول على معلومات عن طريقة معالجة Google Workspace الملفات، يُرجى الرجوع إلى التعامل مع عنوان URL مفتوح في Google Workspace مستند. للحصول على قائمة من Google Workspace المستندات، وتنسيقات الإحالات الناجحة، وأنواع mime المتوافقة، يُرجى الرجوع إلى Google Workspace أنواع تصدير MIME المقابلة.

معالجة عنوان URL المفتوح لمستند محدَّد للتطبيق

كما ورد في تهيئة دمج واجهة مستخدم Drive، يتلقى تطبيقك متغيرات نماذج تحتفظ بمعلومات حول تطبيقك لفتح الملف. يتلقّى تطبيقك مجموعة تلقائية من متغيّرات النموذج ضمن معلَمة state. معلومات state التلقائية لعنوان URL المفتوح الخاص بالتطبيق هي:

{
  "ids": ["0Bz0bd"],
  "resourceKeys":{"0Bz0bd":"AAshj23Ad1"},
  "action":"open",
  "userId":"103354693083460731603"
}

لمعالجة هذه المعلومات:

  1. يمكنك رصد القيمة open في المَعلمة state للتأكّد من أنّ هذا طلب لفتح ملف.

  2. يمكنك التحقق من الأذونات وجلب البيانات الوصفية للملف وتنزيل محتوى الملف باستخدام طريقة files.get.

المعلمة state بترميز URL، لذلك يجب أن يتعامل تطبيقك مع أحرف الإلغاء ويحللها كملف JSON.

التعامل مع عنوان URL مفتوح لأحد المستندات Google Workspace

كما ورد في إعداد دمج واجهة مستخدم Drive، يتلقى تطبيقك مجموعة تلقائية من متغيّرات النموذج ضمن معلَمة state. معلومات state التلقائية لعنوان URL المفتوح الخاص بالتطبيق هي:

{
  "exportIds": ["0Bz0bd"],
  "resourceKeys":{"0Bz0bd":"AAshj23Ad1"},
  "action":"open",
  "userId":"103354693083460731603"
}

لمعالجة هذه المعلومات:

  1. يمكنك رصد القيمة open في المَعلمة state للتأكّد من أنّ هذا طلب لفتح ملف.

  2. يمكنك التحقّق من الأذونات وجلب البيانات الوصفية للملف وتحديد نوع MIME.

  3. تحويل محتوى الملف باستخدام طريقة files.export. يعرض المقتطف التالي كيفية تحويل ملف كنوع ملف جديد.

    لغة Java

    drive/snippets/drive_v3/src/main/java/ExportPdf.java
    import com.google.api.client.googleapis.json.GoogleJsonResponseException;
    import com.google.api.client.http.HttpRequestInitializer;
    import com.google.api.client.http.javanet.NetHttpTransport;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.services.drive.Drive;
    import com.google.api.services.drive.DriveScopes;
    import com.google.auth.http.HttpCredentialsAdapter;
    import com.google.auth.oauth2.GoogleCredentials;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Arrays;
    
    /* Class to demonstrate use-case of drive's export pdf. */
    public class ExportPdf {
    
      /**
       * Download a Document file in PDF format.
       *
       * @param realFileId file ID of any workspace document format file.
       * @return byte array stream if successful, {@code null} otherwise.
       * @throws IOException if service account credentials file not found.
       */
      public static ByteArrayOutputStream exportPdf(String realFileId) throws IOException {
        // Load pre-authorized user credentials from the environment.
        // TODO(developer) - See https://developers.google.com/identity for
        // guides on implementing OAuth2 for your application.
        GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
            .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
        HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
            credentials);
    
        // Build a new authorized API client service.
        Drive service = new Drive.Builder(new NetHttpTransport(),
            GsonFactory.getDefaultInstance(),
            requestInitializer)
            .setApplicationName("Drive samples")
            .build();
    
        OutputStream outputStream = new ByteArrayOutputStream();
        try {
          service.files().export(realFileId, "application/pdf")
              .executeMediaAndDownloadTo(outputStream);
    
          return (ByteArrayOutputStream) outputStream;
        } catch (GoogleJsonResponseException e) {
          // TODO(developer) - handle error appropriately
          System.err.println("Unable to export file: " + e.getDetails());
          throw e;
        }
      }
    }

    لغة Python

    drive/snippets/drive-v3/file_snippet/export_pdf.py
    from __future__ import print_function
    
    import io
    
    import google.auth
    from googleapiclient.discovery import build
    from googleapiclient.errors import HttpError
    from googleapiclient.http import MediaIoBaseDownload
    
    
    def export_pdf(real_file_id):
        """Download a Document file in PDF format.
        Args:
            real_file_id : file ID of any workspace document format file
        Returns : IO object with location
    
        Load pre-authorized user credentials from the environment.
        TODO(developer) - See https://developers.google.com/identity
        for guides on implementing OAuth2 for the application.
        """
        creds, _ = google.auth.default()
    
        try:
            # create drive api client
            service = build('drive', 'v3', credentials=creds)
    
            file_id = real_file_id
    
            # pylint: disable=maybe-no-member
            request = service.files().export_media(fileId=file_id,
                                                   mimeType='application/pdf')
            file = io.BytesIO()
            downloader = MediaIoBaseDownload(file, request)
            done = False
            while done is False:
                status, done = downloader.next_chunk()
                print(F'Download {int(status.progress() * 100)}.')
    
        except HttpError as error:
            print(F'An error occurred: {error}')
            file = None
    
        return file.getvalue()
    
    
    if __name__ == '__main__':
        export_pdf(real_file_id='1zbp8wAyuImX91Jt9mI-CAX_1TqkBLDEDcr2WeXBbKUY')

    Node.js

    drive/snippets/drive_v3/file_snippets/export_pdf.js
    /**
     * Download a Document file in PDF format
     * @param{string} fileId file ID
     * @return{obj} file status
     * */
    async function exportPdf(fileId) {
      const {GoogleAuth} = require('google-auth-library');
      const {google} = require('googleapis');
    
      // Get credentials and build service
      // TODO (developer) - Use appropriate auth mechanism for your app
      const auth = new GoogleAuth({
        scopes: 'https://www.googleapis.com/auth/drive',
      });
      const service = google.drive({version: 'v3', auth});
    
      try {
        const result = await service.files.export({
          fileId: fileId,
          mimeType: 'application/pdf',
        });
        console.log(result.status);
        return result;
      } catch (err) {
        // TODO(developer) - Handle error
        throw err;
      }
    }

    لغة PHP

    drive/snippets/drive_v3/src/DriveExportPdf.php
    use Google\Client;
    use Google\Service\Drive;
    function exportPdf()
    {
        try {
            $client = new Client();
            $client->useApplicationDefaultCredentials();
            $client->addScope(Drive::DRIVE);
            $driveService = new Drive($client);
            $realFileId = readline("Enter File Id: ");
            $fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
            $fileId = $realFileId;
            $response = $driveService->files->export($fileId, 'application/pdf', array(
                'alt' => 'media'));
            $content = $response->getBody()->getContents();
            return $content;
    
        }  catch(Exception $e) {
             echo "Error Message: ".$e;
        }
    
    }
  4. اعرض الملفات المحولة كملف للقراءة فقط أو قدّم مربع حوار يسمح للمستخدم بحفظ الملف كملف من النوع الجديد.

المعلمة state بترميز URL، لذلك يجب أن يتعامل تطبيقك مع أحرف الإلغاء ويحللها كملف JSON.

التعامل مع أحداث "فتح باستخدام"

يجب أن تتعامل تطبيقات Drive مع جميع أحداث "فتح باستخدام" باعتبارها عمليات تسجيل دخول محتملة. قد يكون لدى بعض المستخدمين حسابات متعددة، لذلك قد لا يتطابق رقم تعريف المستخدم في المعلمة state مع الجلسة الحالية. إذا لم يتطابق User ID في المعلمة state مع الجلسة الحالية، يمكنك إنهاء الجلسة الحالية لتطبيقك وتسجيل الدخول باسم المستخدم المطلوب.

الخطوة التالية

بالإضافة إلى تشغيل أحد التطبيقات من واجهة مستخدم Google Drive، يمكن للتطبيقات عرض منتقي الملفات لتحديد المحتوى من داخل التطبيق نفسه. راجع دليل منتقي الملفات للحصول على تفاصيل إضافية.

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