1. نظرة عامة
تهدف هذه السلسلة من الدروس التطبيقية حول الترميز (البرامج التعليمية العملية الذاتية) إلى مساعدة المطوّرين على فهم الخيارات المختلفة المتاحة لهم عند نشر تطبيقاتهم. في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام Google Cloud Translation API مع لغة Python وتنفيذ طريقة التشغيل محليًا أو النشر على منصة حوسبة بدون خادم على السحابة الإلكترونية (App Engine أو Cloud Functions أو Cloud Run). يمكن نشر نموذج التطبيق المتوفّر في مستودع هذا البرنامج التعليمي (على الأقل) ثماني طرق مختلفة مع إجراء تغييرات بسيطة على الإعدادات:
- خادم Flask المحلي (Python 2)
- خادم Flask المحلي (Python 3)
- App Engine (Python 2)
- App Engine (Python 3)
- دوال السحابة (Python 3)
- تشغيل السحابة الإلكترونية (Python 2 عبر Docker)
- تشغيل السحابة الإلكترونية (Python 3 عبر Docker)
- تشغيل السحابة الإلكترونية (Python 3 عبر Cloud Buildpacks)
يركّز هذا الدرس التطبيقي حول الترميز على نشر هذا التطبيق على الأنظمة الأساسية المكتوبة بالخط العريض أعلاه.
ستتعرَّف على كيفية
- استخدام Google Cloud APIs، وتحديدًا Cloud Translation API (متقدّم/الإصدار 3)
- تشغيل تطبيق ويب أساسي محليًا أو نشره على منصة حوسبة بدون خادم في السحابة الإلكترونية
المتطلبات
- أن يكون لديك مشروع على Google Cloud مع حساب فوترة نشط على Cloud
- Flask مثبَّت للعمل محليًا، أو منصة حوسبة بدون خادم على السحابة الإلكترونية مفعّلة لعمليات النشر المستندة إلى السحابة الإلكترونية
- المهارات الأساسية في لغة بايثون
- معرفة عملية بأوامر نظام التشغيل الأساسية
استطلاع
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع Python؟
ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه
PROJECT_ID
). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
3- تفعيل واجهة برمجة تطبيقات الترجمة
بالنسبة إلى نموذج التطبيق الذي نقدّمه، يجب تفعيل Cloud Translation API وخدمة App Engine بدلاً من ذلك باستخدام تعليمات مشابهة متوفّرة أدناه.
تفعيل Cloud APIs
مقدمة
بغض النظر عن واجهة Google API التي تريد استخدامها في تطبيقك، يجب تفعيلها. يوضّح المثال التالي طريقتَين لتفعيل Cloud Vision API. بعد التعرّف على كيفية تفعيل إحدى واجهات برمجة تطبيقات Cloud، ستتمكّن من تفعيل واجهات برمجة تطبيقات أخرى لأنّ العملية مشابهة.
الخيار 1: من Cloud Shell أو واجهة سطر الأوامر
على الرغم من أن تفعيل واجهات برمجة التطبيقات من Cloud Console هو الأكثر شيوعًا، إلا أنّ بعض المطوّرين يفضّلون تنفيذ كل شيء من سطر الأوامر. لإجراء ذلك، عليك البحث عن "اسم الخدمة" في واجهة برمجة التطبيقات. يبدو أنّ عنوان URL هو: SERVICE_NAME
.googleapis.com
. يمكنك العثور على هذه المنتجات في الرسم البياني للمنتجات المتوافقة، أو يمكنك طلبها آليًا باستخدام Google Discovery API.
من خلال هذه المعلومات، وباستخدام Cloud Shell (أو بيئة التطوير المحلية التي تم تثبيت أداة سطر الأوامر gcloud
فيها)، يمكنك تفعيل واجهة برمجة التطبيقات على النحو التالي:
gcloud services enable SERVICE_NAME.googleapis.com
على سبيل المثال، يعمل هذا الأمر على تفعيل Cloud Vision API:
gcloud services enable vision.googleapis.com
يعمل هذا الأمر على تفعيل App Engine:
gcloud services enable appengine.googleapis.com
يمكنك أيضًا تفعيل واجهات برمجة تطبيقات متعددة بطلب واحد. على سبيل المثال، يعمل سطر الأوامر هذا على تفعيل Cloud Run وCloud Artifact Registry وCloud Translation API:
gcloud services enable artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com
الخيار 2: من Cloud Console
يمكنك أيضًا تفعيل Vision API في "مدير واجهات برمجة التطبيقات". من Cloud Console، انتقِل إلى مدير واجهة برمجة التطبيقات واختَر المكتبة.
إذا أردت تفعيل Cloud Vision API، ابدأ بإدخال "رؤية". في شريط البحث، وسيظهر أي شيء يطابق ما أدخلته حتى الآن:
اختَر واجهة برمجة التطبيقات التي تريد تفعيلها وانقر على تفعيل:
التكلفة
يمكن استخدام العديد من واجهات Google APIs بدون رسوم، إلا أنّ استخدام منتجات Google Cloud و وليست واجهات برمجة التطبيقات مجانية. عند تفعيل Cloud APIs، قد يُطلَب منك حساب فوترة نشط. ومع ذلك، من المهم ملاحظة أنّ بعض منتجات Google Cloud تعرض الحالة "مجانية دائمًا" المستوى (يوميًا/شهريًا)، التي عليك تجاوزها لتحمل رسوم الفوترة. وإلا فلن يتم تحصيل الرسوم من بطاقتك الائتمانية (أو وسيلة الفوترة المحددة).
يجب أن يرجع المستخدمون إلى معلومات التسعير لأي واجهة برمجة تطبيقات قبل تفعيلها، مع ملاحظة ما إذا كانت تشتمل على فئة مجانية، وفي حال توفّرها، ما هي. إذا كنت تُفعِّل Cloud Vision API، عليك مراجعة صفحة معلومات الأسعار. تمتلك Cloud Vision حصة مجانية، وطالما أنك لا تتجاوز حدودها بشكل إجمالي (خلال كل شهر)، يجب ألا يتم تحصيل أي رسوم منك.
تختلف الأسعار والمستويات المجانية بين Google APIs. أمثلة:
- Google Cloud/GCP: يتم تحصيل رسوم كل منتج بشكل مختلف ويتم دفع رسومه بشكل عام لكل دورة وحدة معالجة مركزية افتراضية أو لمستهلك مساحة التخزين أو استخدام الذاكرة أو الدفع لكل استخدام. يمكنك الاطّلاع على معلومات الفئة المجانية أعلاه.
- خرائط Google — تتميز بمجموعة من واجهات برمجة التطبيقات وتقدم للمستخدمين رصيدًا شهريًا مجانيًا بقيمة 200 دولار أمريكي.
- واجهات برمجة التطبيقات Google Workspace (المعروفة سابقًا باسم G Suite): توفّر استخدامًا مجانيًا (يصل إلى حدود معيّنة) مشمولة في رسوم الاشتراك الشهري في Workspace، لذلك لا تتوفّر فوترة مباشرة لاستخدام واجهات برمجة التطبيقات في Gmail وGoogle Drive و"تقويم Google" و"مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google".
تتم فوترة منتجات Google المختلفة بشكل مختلف، لذا احرص على الرجوع إلى وثائق واجهة برمجة التطبيقات للحصول على هذه المعلومات.
ملخّص
والآن بعد أن تعرفت على كيفية تفعيل Google APIs بشكل عام، يُرجى الانتقال إلى مدير واجهة برمجة التطبيقات وتفعيل كل من خدمة Cloud Translation API وخدمة App Engine (إذا لم يسبق لك إجراء ذلك)، والخطوة الأولى لأنّ التطبيق سيستخدمها، والإجراء الثاني لأنك تنشر تطبيق App Engine. إذا كنت تفضّل تنفيذ ذلك من سطر الأوامر، عليك إصدار الأمر التالي بدلاً من ذلك:
gcloud services enable appengine.googleapis.com translate.googleapis.com
على الرغم من أن حصتها الشهرية غير مدرجة في الحساب "المجاني دائمًا" بشكل عام صفحة ملخّص المستوى، تشير صفحة أسعار Translation API إلى أنّ جميع المستخدمين يتلقّون عددًا ثابتًا من الأحرف المترجمة شهريًا. ويجب ألا يتم تحصيل أي رسوم من واجهة برمجة التطبيقات إذا بقيت أقل من هذا الحدّ. إذا كانت هناك أي رسوم أخرى ذات صلة بخدمة Google Cloud، ستتم مناقشتها في النهاية في قسم "إخلاء مساحة تخزين". .
4. الحصول على نموذج رمز التطبيق
استنسِخ الرمز في المستودع محليًا أو في Cloud Shell (باستخدام الأمر git clone
)، أو نزِّل ملف ZIP من زر الرمز الأخضر كما هو موضّح في لقطة الشاشة التالية:
والآن بعد أن أصبح لديك كل شيء، أنشئ نسخة كاملة من المجلد للقيام بهذا البرنامج التعليمي المحدد، لأنه من المحتمل أن يتضمن حذف الملفات أو تغييرها. إذا كنت تريد إجراء عملية نشر مختلفة، يمكنك البدء من جديد عن طريق نسخ النسخة الأصلية حتى لا تضطر إلى استنساخها أو تنزيلها مرة أخرى.
5- جولة حول نموذج التطبيق
نموذج التطبيق هو مشتق بسيط من ترجمة Google يطلب من المستخدمين إدخال نص باللغة الإنجليزية وتلقّي الترجمة المماثلة لهذا النص باللغة الإسبانية. يُرجى فتح ملف main.py
لنتمكّن من التعرّف على طريقة عمله. مع إغفال السطور التي تم التعليق عليها بشأن الترخيص، ستظهر لك هذه السطور في الأعلى والأسفل:
from flask import Flask, render_template, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
# . . . [translate() function definition] . . .
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
- تتضمّن عمليات الاستيراد وظائف Flask ووحدة
google.auth
ومكتبة برامج Cloud Translation API. - تمثّل المتغيّرات العمومية تطبيق Flask ورقم تعريف مشروع Cloud وعميل Translation API و"مسار الموقع الجغرافي" الرئيسي. لطلبات البيانات من واجهة برمجة التطبيقات Translation API واللغات المصدر والهدف. في هذه الحالة، ستكون اللغة الإنجليزية (
en
) والإسبانية (es
)، ولكن يمكنك تغيير هذه القيم إلى رموز لغات أخرى متوافقة مع Cloud Translation API. - تُستخدَم كتلة
if
الكبيرة في أسفل الدليل التوجيهي لتشغيل هذا التطبيق على الجهاز، وهي تستخدم خادم تطوير Flask لعرض تطبيقنا. يتوفّر هذا القسم أيضًا في البرامج التعليمية للنشر في السحابة الإلكترونية في حال عدم تضمين خادم الويب في الحاوية. يُطلب منك تفعيل تجميع الخادم في الحاوية، ولكن في حال تجاهلك هذا، يعود رمز التطبيق إلى استخدام خادم تطوير Flask. (ولا يعني ذلك حدوث مشكلة في App Engine أو Cloud Functions، لأنّ هذه الأنظمة تستند إلى مصادر، ما يعني أنّ Google Cloud توفّر خادم ويب تلقائيًا وتشغّله).
أخيرًا، في منتصف main.py
، توجد الدالة translate()
:
@app.route('/', methods=['GET', 'POST'])
def translate(gcf_request=None):
"""
main handler - show form and possibly previous translation
"""
# Flask Request object passed in for Cloud Functions
# (use gcf_request for GCF but flask.request otherwise)
local_request = gcf_request if gcf_request else request
# reset all variables (GET)
text = translated = None
# if there is data to process (POST)
if local_request.method == 'POST':
text = local_request.form['text']
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context & render template
context = {
'orig': {'text': text, 'lc': SOURCE},
'trans': {'text': translated, 'lc': TARGET},
}
return render_template('index.html', **context)
تؤدي الوظيفة الأساسية إلى أخذ البيانات التي أدخلها المستخدم واستدعاء واجهة برمجة التطبيقات Translation API لتنفيذ المهام الصعبة. لنحلل هذا الأمر:
- تحقَّق لمعرفة ما إذا كانت الطلبات واردة من دوال Cloud باستخدام المتغيّر
local_request
. ترسل Cloud Functions في عنصر "طلب Flask" الخاص بها، في حين سيحصل جميع المستخدمين الآخرين (الذين يتم تشغيلهم محليًا أو النشر على App Engine أو Cloud Run) على كائن الطلب مباشرةً من Flask. - أعِد ضبط المتغيّرات الأساسية للنموذج. هذا بشكل أساسي لطلبات GET حيث إن طلبات POST ستحتوي على بيانات تحل محلها.
- أما إذا كانت حالة طلب POST، فاحصل على النص لترجمته وأنشئ بنية JSON تمثّل متطلبات البيانات الوصفية لواجهة برمجة التطبيقات. بعد ذلك، يمكنك طلب واجهة برمجة التطبيقات، والعودة إلى إصدار سابق من واجهة برمجة التطبيقات إذا كان المستخدم يستخدِم مكتبة قديمة.
- بغض النظر عن ذلك، يجب تنسيق النتائج الفعلية (POST) أو عدم وجود بيانات (GET) في سياق النموذج وعرضها.
يوجد الجزء المرئي من التطبيق في ملف النموذج index.html
. يعرض هذا الزر أي نتائج مترجَمة سابقًا (تكون فارغة في الحالات الأخرى) متبوعة بالنموذج الذي يطلب ترجمة المحتوى:
<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<h2>My Google Translate (1990s edition)</h2>
{% if trans['text'] %}
<h4>Previous translation</h4>
<li><b>Original</b>: {{ orig['text'] }} (<i>{{ orig['lc'][0] }}</i>)</li>
<li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}
<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>
6- تثبيت الحزم/التبعيات المحلية (في lib)
كما ذكرنا سابقًا، يستخدم نموذج التطبيق إطار عمل الويب المصغَّر لـ Flask ومكتبة برامج واجهة برمجة التطبيقات Google Cloud Translation API للغة Python. تثبيت pip
بالإضافة إلى هذين الزوجَين من الحِزم وتحديثهما باستخدام الأمر pip
(أو pip3
):
pip install -t lib -r requirements.txt
بعد تشغيل التعليق أعلاه، سترى مخرجات التثبيت التي قد تبدو كما يلي:
$ pip install -t lib -r requirements.txt DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality. Collecting flask>=1.1.2 Using cached Flask-1.1.4-py2.py3-none-any.whl (94 kB) Collecting google-cloud-translate>=2.0.1 Using cached google_cloud_translate-2.0.2-py2.py3-none-any.whl (91 kB) Collecting click<8.0,>=5.1 Using cached click-7.1.2-py2.py3-none-any.whl (82 kB) Collecting Jinja2<3.0,>=2.10.1 Using cached Jinja2-2.11.3-py2.py3-none-any.whl (125 kB) Collecting Werkzeug<2.0,>=0.15 Using cached Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) Collecting itsdangerous<2.0,>=0.24 Using cached itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) Collecting google-api-core[grpc]<2.0.0dev,>=1.15.0 Downloading google_api_core-1.29.0-py2.py3-none-any.whl (93 kB) |████████████████████████████████| 93 kB 2.1 MB/s Collecting google-cloud-core<2.0dev,>=1.1.0 Using cached google_cloud_core-1.6.0-py2.py3-none-any.whl (28 kB) Collecting MarkupSafe>=0.23 Using cached MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl (17 kB) Collecting protobuf>=3.12.0 Downloading protobuf-3.17.2-cp27-cp27m-macosx_10_9_x86_64.whl (958 kB) |████████████████████████████████| 958 kB 21.6 MB/s Collecting futures>=3.2.0; python_version < "3.2" Using cached futures-3.3.0-py2-none-any.whl (16 kB) Collecting six>=1.13.0 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Collecting packaging>=14.3 Using cached packaging-20.9-py2.py3-none-any.whl (40 kB) Collecting googleapis-common-protos<2.0dev,>=1.6.0 Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB) Collecting requests<3.0.0dev,>=2.18.0 Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB) Collecting google-auth<2.0dev,>=1.25.0 Using cached google_auth-1.30.1-py2.py3-none-any.whl (146 kB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting setuptools>=40.3.0 Using cached setuptools-44.1.1-py2.py3-none-any.whl (583 kB) Collecting grpcio<2.0dev,>=1.29.0; extra == "grpc" Using cached grpcio-1.38.0-cp27-cp27m-macosx_10_10_x86_64.whl (3.8 MB) Collecting pyparsing>=2.0.2 Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB) Collecting chardet<5,>=3.0.2 Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB) Collecting urllib3<1.27,>=1.21.1 Using cached urllib3-1.26.5-py2.py3-none-any.whl (138 kB) Collecting idna<3,>=2.5 Using cached idna-2.10-py2.py3-none-any.whl (58 kB) Collecting certifi>=2017.4.17 Downloading certifi-2021.5.30-py2.py3-none-any.whl (145 kB) |████████████████████████████████| 145 kB 61.1 MB/s Collecting pyasn1-modules>=0.2.1 Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB) Collecting rsa<4.6; python_version < "3.6" Using cached rsa-4.5-py2.py3-none-any.whl (36 kB) Collecting cachetools<5.0,>=2.0.0 Using cached cachetools-3.1.1-py2.py3-none-any.whl (11 kB) Collecting enum34>=1.0.4; python_version < "3.4" Using cached enum34-1.1.10-py2-none-any.whl (11 kB) Collecting pyasn1<0.5.0,>=0.4.6 Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB) Installing collected packages: click, MarkupSafe, Jinja2, Werkzeug, itsdangerous, flask, six, protobuf, futures, pyparsing, packaging, googleapis-common-protos, chardet, urllib3, idna, certifi, requests, pyasn1, pyasn1-modules, rsa, cachetools, setuptools, google-auth, pytz, enum34, grpcio, google-api-core, google-cloud-core, google-cloud-translate ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts. matplotlib 1.3.1 requires nose, which is not installed. matplotlib 1.3.1 requires tornado, which is not installed. Successfully installed Jinja2-2.11.3 MarkupSafe-1.1.1 Werkzeug-1.0.1 cachetools-3.1.1 certifi-2021.5.30 chardet-4.0.0 click-7.1.2 enum34-1.1.10 flask-1.1.4 futures-3.3.0 google-api-core-1.29.0 google-auth-1.30.1 google-cloud-core-1.6.0 google-cloud-translate-2.0.2 googleapis-common-protos-1.52.0 grpcio-1.38.0 idna-2.10 itsdangerous-1.1.0 packaging-20.9 protobuf-3.17.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 requests-2.25.1 rsa-4.5 setuptools-44.1.1 six-1.16.0 urllib3-1.26.5
7. نشر الخدمة
لنشر خدمة الترجمة في Python 2 App Engine، شغِّل الأمر التالي:
gcloud app deploy
يجب أن تظهر النتيجة على النحو التالي وتقدم بعض المطالبات للخطوات التالية:
$ gcloud app deploy Services to deploy: descriptor: [/private/tmp/nebulous-serverless-python/app.yaml] source: [/private/tmp/nebulous-serverless-python] target project: [PROJECT_ID] target service: [default] target version: [20210422t161025] target url: [https://PROJECT_ID.appspot.com] Do you want to continue (Y/n)? Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 1290 files to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse
والآن بعد أن أصبح تطبيقك متاحًا على مستوى العالم في جميع أنحاء العالم، من المفترض أن تتمكّن من الوصول إليه على عنوان URL (الذي يحتوي على رقم تعريف المشروع) الوارد في ناتج النشر:
يجب ترجمة أي نص لإتمام عملية الإعداد.
8. الخاتمة
تهانينا! لقد تعلمت كيفية تفعيل Cloud Translation API والحصول على بيانات الاعتماد اللازمة ونشر تطبيق ويب بسيط على Python 2 App Engine. يمكنك معرفة المزيد من المعلومات عن عملية النشر هذه من هذا الجدول في المستودع.
تَنظيم
تتيح لك Cloud Translation API تنفيذ عدد ثابت من الأحرف المُترجَمة شهريًا مجانًا. يشمل App Engine أيضًا حصة مجانية، وينطبق الأمر نفسه على الوظائف السحابية وتشغيل السحابة الإلكترونية. ستتحمل رسومًا في حالة تجاوز أي منهما. إذا كنت تخطّط للمتابعة إلى الدرس التطبيقي التالي حول الترميز، لن تحتاج إلى إيقاف التطبيق.
ومع ذلك، إذا لم تكن مستعدًا للانتقال إلى البرنامج التعليمي التالي أو إذا كنت قلقًا بشأن اكتشاف الإنترنت للتطبيق الذي نشرته للتو، يمكنك إيقاف تطبيق App Engine أو حذف دالتك السحابية أو إيقاف خدمة تشغيل السحابة الإلكترونية لتجنب تحمُّل الرسوم. عندما تكون مستعدًا للانتقال إلى الدرس التطبيقي التالي حول الترميز، يمكنك إعادة تفعيله. من ناحية أخرى، إذا كنت لا تريد مواصلة استخدام هذا التطبيق أو الدروس التطبيقية الأخرى حول الترميز وأردت حذف جميع البيانات بالكامل، يمكنك إيقاف مشروعك.
بالإضافة إلى ذلك، إنّ النشر على منصة حوسبة بدون خادم في Google Cloud يؤدي إلى تحمُّل تكاليف بسيطة لإنشاء المحتوى وتخزينه. تمتلك خدمة Cloud Build حصتها المجانية الخاصة، كما هي الحال في Cloud Storage. لمزيد من الشفافية، تنشئ Cloud Build صورة تطبيقك، ويتم تخزينها في Cloud Container Registry أو Artifact Registry، الذي يليه. كما يستهلك تخزين تلك الصورة بعضًا من هذه الحصة كما هو الحال مع مخرجات الشبكة عند نقل تلك الصورة إلى الخدمة. ومع ذلك، قد تكون مقيمًا في منطقة لا يتوفر بها هذا المستوى المجاني، لذا عليك الانتباه إلى استخدام مساحة التخزين لتقليل التكاليف المحتملة.
9. مراجع إضافية
في الأقسام التالية، يمكنك العثور على مواد قراءة إضافية بالإضافة إلى تمارين موصى بها لزيادة معرفتك المكتسبة من إكمال هذا البرنامج التعليمي.
دراسة إضافية
الآن بعد أن أصبحت لديك بعض الخبرة في استخدام واجهة برمجة التطبيقات Translation API، حان وقت إجراء بعض التمارين الإضافية لتطوير مهاراتك بشكل أكبر. لمتابعة مسارك التعليمي، عدّل نموذج التطبيق للقيام بما يلي:
- أكمِل جميع الإصدارات الأخرى من هذا الدرس التطبيقي حول الترميز للتشغيل محليًا أو للنشر على أنظمة الحوسبة الأساسية بدون خوادم في Google Cloud (يمكنك الاطّلاع على repo README).
- أكمل هذا البرنامج التعليمي باستخدام لغة برمجة أخرى.
- قم بتغيير هذا التطبيق بحيث يدعم لغات مصدر أو هدف مختلفة.
- ترقية هذا التطبيق لترجمة النص إلى أكثر من لغة واحدة تغيير ملف القالب لتظهر قائمة منسدلة للغات الهدف المدعومة.
مزيد من المعلومات
Google App Engine
- صفحة App Engine الرئيسية
- مستندات App Engine
- البدء السريع لـ Python 3 App Engine
- حسابات الخدمة التلقائية لـ App Engine
- وقت تشغيل Python 2 App Engine (الإصدار العادي)
- وقت تشغيل Python 3 App Engine (الإصدار العادي)
- الاختلافات بين Python 2 3 بيئات تشغيل App Engine (عادية)
- دليل نقل البيانات من الإصدار 2 إلى 3 من App Engine (الإصدار العادي)
وظائف Google Cloud
- صفحة دوال Cloud الرئيسية
- مستندات دوال Cloud
- البدء السريع للدوال السحابية في Python
- حسابات الخدمة التلقائية لوظائف Cloud
تشغيل السحابة الإلكترونية من Google
- صفحة Cloud Run الرئيسية
- مستندات تشغيل Cloud
- التشغيل السريع في Python
- حسابات الخدمة التلقائية لتشغيل Cloud
Google Cloud Buildpacks وContainer Registry و Artifact Registry
- الإعلان عن حِزم Cloud Build
- مستودع Cloud Buildpacks
- صفحة Cloud Artifact Registry الرئيسية
- مستندات حول Cloud Artifact Registry
- الصفحة الرئيسية لـ Cloud Container Registry
- مستندات Cloud Container Registry
ترجمة Google Cloud وGoogle ML Kit
- الصفحة الرئيسية لـ Cloud Translation
- مستندات ترجمة Cloud
- صفحة أسعار Translation API
- جميع "الوحدات الأساسية" للذكاء الاصطناعي (AI) في السحابة الإلكترونية واجهات برمجة التطبيقات
- Google ML Kit (مجموعة فرعية لواجهات برمجة تطبيقات Cloud AI/ML API للأجهزة الجوّالة)
- واجهة برمجة تطبيقات Google ML Kit Translation
منتجات/صفحات Google Cloud الأخرى
- دعم Google Cloud Python
- مكتبات عميل Google Cloud
- "المجانية دائمًا" في Google Cloud الفئة
- جميع مستندات Google Cloud
بايثون وقارورة
الترخيص
هذا البرنامج التعليمي مرخّص بموجب ترخيص Creative Commons Attribution 2.0 عام، في حين أن رمز المصدر في المستودع مرخص بموجب Apache 2.