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)
- Cloud Run (Python 2 عبر Docker)
- Cloud Run (Python 3 عبر Docker)
- Cloud Run (Python 3 عبر حِزم Cloud Buildpacks)
يركز هذا الدرس التطبيقي حول الترميز على نشر هذا التطبيق على المنصات المميّزة بخط عريض أعلاه.
ستتعرّف على كيفية
- استخدام واجهات برمجة تطبيقات Google Cloud، وتحديدًا Cloud Translation API (الإصدار المتقدّم/الإصدار 3)
- تشغيل تطبيق ويب أساسي على الجهاز أو نشره على منصّة حوسبة بدون خادم في السحابة الإلكترونية
المتطلبات
- مشروع على Google Cloud يتضمّن حساب فوترة نشطًا في Cloud
- يجب تثبيت Flask لتشغيله على الجهاز، أو تفعيل منصة الحوسبة السحابية بدون خادم لعمليات النشر المستندة إلى السحابة الإلكترونية.
- المهارات الأساسية في لغة Python
- معرفة جيدة بأوامر نظام التشغيل الأساسية
استطلاع
كيف ستستخدم هذا الدليل التعليمي؟
كيف تقيّم تجربتك مع Python؟
ما مدى رضاك عن تجربتك في استخدام خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد البيئة حسب السرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google، ويمكنك تعديلها في أي وقت.
- يجب أن يكون معرّف المشروع فريدًا في جميع مشاريع Google Cloud وأن يكون ثابتًا (لا يمكن تغييره بعد ضبطه). تُنشئ أداة Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً معرفة قيمتها. في معظم ورشات عمل الرموز البرمجية، ستحتاج إلى الإشارة إلى رقم تعريف المشروع (ويُعرَف عادةً باسم
PROJECT_ID
)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي أو تجربة رقمك الخاص لمعرفة ما إذا كان متاحًا. وبعد إنشاء المشروع، يتم "تجميد" النموذج. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات عن كلّ من هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. من المفترض ألا تتطلّب المشاركة في هذا الدليل التعليمي البرمجي أي تكلفة، أو تكلفة منخفضة جدًا. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد انتهاء هذا البرنامج التعليمي، اتّبِع أي تعليمات "للتنظيف" في نهاية ورشة رموز البرامج. المستخدمون الجدد في Google Cloud مؤهّلون للاستفادة من برنامج الفترة التجريبية المجانية التي تقدّم رصيدًا بقيمة 300 دولار أمريكي.
3- تفعيل واجهة برمجة التطبيقات Translation API
بالنسبة إلى نموذج التطبيق، عليك تفعيل Cloud Translation API وخدمة App Engine بدلاً من ذلك باستخدام التعليمات المشابهة الواردة أدناه.
تفعيل واجهات برمجة تطبيقات Cloud
مقدمة
بغض النظر عن واجهة برمجة التطبيقات من Google التي تريد استخدامها في تطبيقك، يجب تفعيلها. يوضّح المثال التالي طريقتَين لتفعيل 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، انتقِل إلى API Manager واختَر Library (المكتبة).
إذا أردت تفعيل واجهة برمجة التطبيقات Cloud Vision API، ابدأ بإدخال "vision" في شريط البحث، وسيظهر أي شيء يتطابق مع ما أدخلته حتى الآن:
اختَر واجهة برمجة التطبيقات التي تريد تفعيلها وانقر على تفعيل:
التكلفة
على الرغم من أنّه يمكن استخدام العديد من واجهات برمجة تطبيقات Google بدون أي رسوم، فإنّ استخدام منتجات Google Cloud وواجهات برمجة التطبيقات ليس مجانيًا. عند تفعيل واجهات برمجة التطبيقات في Cloud، قد يُطلب منك تقديم حساب فوترة نشط. تجدر الإشارة إلى أنّ بعض منتجات Google Cloud تتضمّن المستوى "مجاني دائمًا" (اليومي/الشهري)، والذي يجب تجاوزه لدفع رسوم الفوترة، وإلا لن يتم تحصيل رسوم من بطاقة الائتمان (أو أداة الفوترة المحدّدة).
على المستخدمين الرجوع إلى معلومات أسعار أي واجهة برمجة تطبيقات قبل تفعيلها، مع الانتباه بشكل خاص إلى ما إذا كانت تتضمّن خطة مجانية، وما هي إذا كانت كذلك. إذا كنت بصدد تفعيل Cloud Vision API، عليك الاطّلاع على صفحة معلومات التسعير. توفّر خدمة Cloud Vision حصة مجانية، ومادمت تلتزم بالحدود المسموح بها بشكل إجمالي (خلال كل شهر)، لن يتم تحصيل أي رسوم منك.
تختلف الأسعار والمستويات المجانية بين واجهات برمجة تطبيقات Google. أمثلة:
- Google Cloud/GCP: يتم فوترة كل منتج بشكل مختلف، ويتم الدفع بشكل عام لكل دورة وحدة معالجة مركزية افتراضية أو مستخدِم مساحة تخزين أو استخدام ذاكرة أو الدفع حسب الاستخدام. اطّلِع على معلومات المستوى المجاني أعلاه.
- خرائط Google: تتضمّن مجموعة من واجهات برمجة التطبيقات، وتوفّر للمستخدمين رصيدًا شهريًا مجانيًا بقيمة 200 دولار أمريكي.
- واجهات برمجة تطبيقات Google Workspace (المعروفة سابقًا باسم G Suite): تتيح الاستخدام المجاني (حتى حدود معيّنة) ضمن رسوم الاشتراك الشهري في Workspace، لذا لا يتمّ إصدار فواتير مباشرة مقابل استخدام واجهات برمجة التطبيقات Gmail وGoogle Drive و"تقويم Google" و"مستندات Google" و"جداول بيانات Google" و"العروض التقديمية من Google".
يتمّ تحصيل رسوم منتجات Google المختلفة بشكلٍ مختلف، لذا احرص على الرجوع إلى مستندات واجهة برمجة التطبيقات للحصول على هذه المعلومات.
ملخّص
بعد أن تعرّفت على كيفية تفعيل واجهات برمجة تطبيقات Google بشكل عام، يُرجى الانتقال إلى مدير واجهة برمجة التطبيقات وتفعيل كلّ من 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 لعرض تطبيقنا. يتوفّر هذا القسم أيضًا في الأدلة التعليمية حول نشر Cloud Run في حال عدم تجميع خادم الويب في الحاوية. سيُطلب منك تفعيل تجميع الخادم في الحاوية، ولكن في حال عدم الانتباه إلى ذلك، سيعود رمز التطبيق إلى استخدام خادم تطوير 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 Functions باستخدام المتغيّر
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 أيضًا حصة مجانية، وينطبق ذلك أيضًا على Cloud Functions وCloud Run. وسيتم تحصيل رسوم منك في حال تجاوز أي منهما. إذا كنت تنوي الانتقال إلى ورشة رموز البرمجة التالية، ليس عليك إغلاق تطبيقك.
إذا لم تكن مستعدًا للانتقال إلى الدليل التعليمي التالي بعد أو كنت قلقًا من أن يكتشف الإنترنت التطبيق الذي تم نشره للتو، يمكنك إيقاف تطبيقك على App Engine أو حذف Cloud Function أو إيقاف خدمة Cloud Run لتجنُّب تحمُّل أي رسوم. عندما تكون مستعدًا للانتقال إلى ورشة رموز البرمجة التالية، يمكنك إعادة تفعيلها. من ناحية أخرى، إذا كنت لن تستمر في استخدام هذا التطبيق أو غيرها من تطبيقات Codelab وأردت حذف كل شيء بالكامل، يمكنك إيقاف مشروعك.
ويؤدي نشر التطبيقات على منصة الحوسبة بدون خادم من Google Cloud إلى تحمُّل تكاليف طفيفة للإنشاء والتخزين. توفّر خدمة Cloud Build حصة مجانية خاصة بها، كما هو الحال مع Cloud Storage. لمزيد من الشفافية، تنشئ أداة Cloud Build صورة تطبيقك، ويتم تخزينها بعد ذلك في Cloud Container Registry أو Artifact Registry، وهو الإصدار اللاحق. ويستهلك تخزين هذه الصورة بعضًا من هذه الحصة، كما يستهلك نقل البيانات إلى الشبكة عند نقل هذه الصورة إلى الخدمة. ومع ذلك، قد تقيم في منطقة لا تتوفّر فيها هذه الفئة المجانية، لذا عليك الانتباه إلى مساحة التخزين المستخدَمة لتقليل التكاليف المحتملة.
9. مراجع إضافية
في الأقسام التالية، يمكنك العثور على مواد قراءة إضافية بالإضافة إلى تمارين مقترَحة لزيادة معرفتك المكتسَبة من إكمال هذا الدليل التعليمي.
دراسة إضافية
الآن بعد أن أصبحت لديك بعض الخبرة في استخدام Translation API، لنلِعِب بعض التمارين الإضافية لتحسين مهاراتك. لمواصلة مسار التعلّم، عليك تعديل نموذج التطبيق لتنفيذ ما يلي:
- أكمِل جميع الإصدارات الأخرى من هذا الدليل التعليمي لتشغيله على الجهاز أو نشره على منصّات Google Cloud لتكنولوجيات الحوسبة السحابية بدون خادم (اطّلِع على ملف 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 (الإصدار العادي)
- دليل نقل البيانات من Python 2 إلى 3 في App Engine (الإصدار العادي)
Google Cloud Functions
- الصفحة الرئيسية لخدمة Cloud Functions
- مستندات Cloud Functions
- البدء السريع لاستخدام Python Cloud Functions
- حسابات الخدمة التلقائية لخدمة Cloud Functions
Google Cloud Run
- الصفحة الرئيسية لخدمة Cloud Run
- مستندات Cloud Run
- البدء السريع لاستخدام Python Cloud Run
- حسابات الخدمة التلقائية لخدمة Cloud Run
Google Cloud Buildpacks وContainer Registry وArtifact Registry
- إشعار بشأن Cloud Buildpacks
- مستودع حِزم Cloud Buildpacks
- الصفحة الرئيسية في Cloud Artifact Registry
- مستندات Cloud Artifact Registry
- الصفحة الرئيسية لخدمة Cloud Container Registry
- مستندات Cloud Container Registry
Google Cloud Translation وGoogle ML Kit
- الصفحة الرئيسية لخدمة "ترجمة Google" في السحابة الإلكترونية
- مستندات "ترجمة Google" في السحابة الإلكترونية
- صفحة أسعار Translation API
- جميع واجهات برمجة التطبيقات "لبنات البناء" في الذكاء الاصطناعي/تعلُّم الآلة في السحابة الإلكترونية
- Google ML Kit (مجموعة فرعية من واجهات برمجة التطبيقات لتكنولوجيات الذكاء الاصطناعي/تعلُّم الآلة في السحابة الإلكترونية للأجهزة الجوّالة)
- Google ML Kit Translation API
منتجات/صفحات Google Cloud الأخرى
- دعم Google Cloud Python
- مكتبات عملاء Google Cloud
- المستوى "مجاني دائمًا" في Google Cloud
- جميع مستندات Google Cloud
Python وFlask
الترخيص
يخضع هذا الدليل التعليمي لترخيص عام من Creative Commons Attribution 2.0، في حين يخضع رمز المصدر في المستودع لترخيص Apache 2.