توضّح هذه الصفحة كيف يمكنك تنفيذ خدمة تتوافق مع بروتوكول مصدر البيانات لأدوات الرسوم البيانية لعرض البيانات في الرسوم البيانية باستخدام فئة طلب البحث.
المحتويات
الجمهور
هذه الصفحة مخصّصة في المقام الأول للمطوّرين الذين سينشئون مصدر بيانات خاصًا بهم بدون الاستعانة بمكتبة مصدر بيانات أدوات الرسوم البيانية. إذا كنت تستخدم مكتبات المساعدة هذه أو أي مكتبات مساعدة أخرى، اقرأ مستندات مكتبتك أولاً.
هذه الصفحة مخصّصة أيضًا للقرّاء المهتمين بفهم بروتوكول الأسلاك المستخدَم للتواصل بين العرض المرئي للعميل ومصدر البيانات.
إذا كنت تنشئ أو تستخدم تمثيلاً بيانيًا، لن تحتاج إلى قراءة هذه الصفحة.
لقراءة هذا المستند، يجب أن تفهم البنية الأساسية لطلبات JSON وHTTP. يجب عليك أيضًا أن تفهم كيفية عمل المخططات من منظور المستخدم.
نظرة عامة
يمكنك تنفيذ بروتوكول مصدر بيانات أدوات المخططات لتصبح موفر مصدر بيانات للمخططات الخاصة بك أو المخططات الأخرى. يعرض مصدر بيانات أدوات الرسوم البيانية عنوان URL يُسمّى عنوان URL لمصدر البيانات والذي يمكن للرسم البياني إرسال طلبات HTTP GET إليه. استجابةً لذلك، يعرض مصدر البيانات بيانات منسّقة بشكل صحيح يمكن أن يستخدمها الرسم البياني لعرض الرسم على الصفحة. ويُعرف بروتوكول استجابة الطلب هذا باسم البروتوكول السلكي لواجهة برمجة التطبيقات Google Visualization API.
يمكن استخراج البيانات التي يعرضها مصدر بيانات من مصادر مختلفة، مثل ملف أو قاعدة بيانات. الشرط الوحيد هو أنّه يمكنك تنسيق البيانات كجدول ثنائي الأبعاد يتضمّن أعمدة مكتوبة.
كمصدر بيانات لأدوات المخططات، يجب تحليل الطلب بتنسيق معين وعرض رد بتنسيق معين. يمكنك إجراء ذلك بإحدى الطريقتين العامتين:
-
استخدِم إحدى المكتبات المساعدة التالية للتعامل مع الطلب والاستجابة،
وأنشئ DataTable لعرضه. إذا كنت تستخدم إحدى هذه المكتبات، عليك كتابة الرمز المطلوب فقط لإتاحة بياناتك للمكتبة على شكل جدول.
- مكتبة مصدر بيانات Java: لمعالجة الطلب والاستجابة وإنشاء جدول الردود من البيانات التي تقدّمها وتنفيذ لغة طلب البحث بلغة الاستعلامات البنيوية (SQL) في أدوات الرسومات البيانية من Google.
-
مكتبة مصدر بيانات Python:
يؤدي هذا الخيار إلى إنشاء جدول ردود يؤدي إلى إنشاء بنية الاستجابة. لا يعالج تحليل الطلب أو تنفيذ لغة طلب بحث SQL لأدوات الرسوم البيانية من Google.
أو
- كتابة مصدر بياناتك الخاص من البداية من خلال معالجة الطلب وإنشاء جدول بيانات وإرسال الرد
طريقة عمل هذا المقياس:
- يعرض مصدر البيانات عنوان URL يُسمى عنوان URL لمصدر البيانات الذي ترسل إليه الرسوم البيانية طلب HTTP GET.
- يقدّم العميل طلب HTTP GET باستخدام مَعلمات تصف التنسيق الذي يجب استخدامه للبيانات المعروضة وسلسلة طلب بحث اختيارية ومَعلمات مخصَّصة اختيارية.
- يتلقّى مصدر البيانات الطلب ويحلّله، كما هو موضّح في تنسيق الطلب.
- ويحضّر مصدر البيانات البيانات بالتنسيق المطلوب، ويكون عادةً جدول JSON. يتم تناول تنسيقات الردود في القسم تنسيق الرد. يمكن أن يتيح مصدر البيانات اختياريًا استخدام لغة طلب البحث في واجهة برمجة التطبيقات Visualization API التي تحدد التصفية والترتيب وغير ذلك من أساليب معالجة البيانات.
- ينشئ مصدر البيانات استجابة HTTP تتضمن البيانات المتسلسلة ومَعلمات الاستجابة الأخرى، ويُعيد إرسالها إلى العميل كما هو موضّح في تنسيق الاستجابة.
ملاحظة: جميع المعلَمات والقيم الثابتة للسلاسل
المدرَجة في هذا المستند للطلبات والاستجابات (مثل responseHandler
و "OK") تكون صغيرة وحسّاسة لحالة الأحرف.
الحد الأدنى من المتطلبات
في ما يلي الحد الأدنى من المتطلبات لتكون مصدر بيانات أدوات الرسم البياني:
- يجب أن يقبل مصدر البيانات طلبات HTTP GET، ويجب أن يكون متاحًا لعملائك.
- يمكن أن يتغيّر البروتوكول وأن يتوافق مع مخطَّط الإصدار (الإصدار الحالي هو 0.6)، لذا يجب أن يتيح مصدر بياناتك الطلبات التي تستخدم الإصدارات السابقة بالإضافة إلى الإصدار الحالي. عليك محاولة إتاحة الإصدارات الجديدة فور طرحها لتجنُّب تعطُّل أي برامج تتم ترقيتها إلى أحدث إصدار بسرعة.
- ولا تفشل إذا تم إرسال خصائص غير معروفة كجزء من الطلب. ويرجع ذلك إلى أنّ الإصدارات الجديدة يمكن أن تقدّم سمات جديدة لست على عِلم بها.
- تحليل السمات التي تتوقّعها فقط: وعلمًا أنّ الإصدارات الجديدة قد تقدّم سمات جديدة، لا تتجاهل سلسلة الطلب بالكامل وتستخدم سلسلة الطلبات بأكملها. لحماية نفسك من الهجمات الضارّة، عليك تحليل واستخدام السمات التي تتوقعها فقط.
- وثِّق متطلبات مصدر البيانات بعناية إذا
كنت لا تُرمّز الرسوم البيانية الخاصة بالعميل بنفسك. ويشمل ذلك توثيق المعلومات التالية:
- وأي معلمات مخصصة تقبلها
- ما إذا كان بإمكانك تحليل لغة طلب البحث في Google Visualization API أم لا
- نوع البيانات التي تعرضها وبنية تلك البيانات (ما تمثّله الصفوف والأعمدة، وأي تصنيفات)
- اتّخاذ جميع احتياطات الأمان العادية للمواقع الإلكترونية التي تقبل الطلبات من العملاء غير المعروفين. يمكنك توفير خوارزمية MD5 والتجزئة وآليات أمان أخرى بشكل معقول في المَعلمات لمصادقة الطلبات أو المساعدة في الحماية من الهجمات الضارّة، وتوقّع أن يكون العملاء على عِلم بمتطلباتك وأن يردّوا عليها. مع ذلك، احرص على توثيق جميع متطلباتك جيدًا إذا كنت لا تعمل على ترميز الرسومات البيانية بنفسك. يُرجى الاطّلاع على اعتبارات الأمان أدناه.
- يجب أن تكون جميع سلاسل الطلبات والاستجابة بترميز UTF-8.
- تنسيق الردّ الأهم هو JSON. واحرص على تنفيذ تنسيق JSON أولاً، لأنّه التنسيق المستخدَم في معظم الرسومات البيانية. ويمكنك إضافة أنواع أخرى من الردود بعد ذلك.
- لست ملزمًا بتوفير لغة طلبات البحث في واجهة برمجة التطبيقات Visualization، ولكنها تجعل مصدر بياناتك أكثر فائدة للعملاء.
- أنت لست مطلوبًا لإتاحة الطلبات من أي نوع من أنواع الرسوم البيانية، ويمكنك إتاحة استخدام المعلَمات المخصّصة للرسومات البيانية المخصّصة. ولكن يجب عرض الردود بالتنسيق العادي الموضّح أدناه.
اعتبارات الأمان
عند تصميم مصدر بياناتك، ننصحك بالتفكير في مدى أمان بياناتك. يمكنك استخدام مجموعة متنوعة من حيل الأمان لموقعك الإلكتروني، بدءًا من الوصول البسيط إلى كلمة المرور ووصولاً إلى المصادقة الآمنة على ملفات تعريف الارتباط.
تشكّل هجمات XSSI (تضمين النصوص البرمجية على المواقع الإلكترونية) خطرًا بسبب الرسومات البيانية. قد ينتقل المستخدم إلى صفحة تتضمن نصًا برمجيًا ضارًا ويبدأ بعد ذلك في محاولة إجراء طلبات بحث حول عناوين URL لمصدر البيانات، وذلك باستخدام بيانات اعتماد المستخدم الحالي. إذا لم يسجّل المستخدم خروجه من موقع إلكتروني، ستتم المصادقة على النص البرمجي بصفته المستخدم الحالي وسيتم منحه أذونات على هذا الموقع الإلكتروني. يمكن أن يؤدي استخدام علامة <script src> إلى إمكانية تضمين مصدر البيانات، على غرار JSONP.
ولمزيد من الأمان، يمكنك حصر الطلبات الواردة من النطاق نفسه الذي يتم فيه مصدر بياناتك. سيؤدي ذلك إلى تقييد ظهور مصدر البيانات بشكل كبير، ولكن إذا كانت لديك بيانات حساسة جدًا لا يجب الوصول إليها من خارج نطاقك، ننصحك بأخذ ذلك في الاعتبار. يُعرَف مصدر البيانات الذي لا يسمح بالطلبات من النطاق نفسه فقط باسم مصدر بيانات محظور، بدلاً من مصدر بيانات غير محدود، الذي يقبل طلبات البحث من أي نطاق. في ما يلي بعض التفاصيل حول كيفية تطبيق مصدر بيانات محظور:
لضمان أنّ الطلب صادر من نطاقك وليس من نطاق خارجي (أو من متصفّح داخل النطاق خاضع لهجوم XSRF):
- تأكَّد من توفُّر عنوان X-DataSource-Auth في الطلب. يتم تحديد هذا العنوان من خلال Google Visualization API. لا تحتاج إلى فحص محتوى هذا العنوان، ولكن تأكد من وجوده فقط. إذا كنت تستخدم مكتبة مصادر بيانات أدوات الرسوم البيانية من Google، يمكنك أن تجعل المكتبة تتولى هذا الإجراء نيابةً عنك.
- استخدِم مصادقة ملفات تعريف الارتباط لمصادقة العميل. ما مِن طريقة معروفة لإدخال عناوين مخصّصة في طلب على مستوى عدة نطاقات مع الاحتفاظ بملفات تعريف ارتباط المصادقة في مكانها.
- تجنَّب تنفيذ JavaScript عند تضمينها مع علامة <script src>. ولإجراء ذلك، عليك إضافة البادئة )]}" متبوعة بسطر جديد في استجابة JSON. وفي برنامجك، أزِل البادئة من الردّ. وبالنسبة إلى XmlHttpRequest، لا يمكن تنفيذ ذلك إلا عندما ينشأ الطلب من النطاق نفسه.
تنسيق الطلب
يرسل العميل طلب HTTP GET مع عدة معلَمات، بما في ذلك العناصر المخصّصة وسلسلة طلب بحث اختيارية وتوقيع وعناصر أخرى. وتتحمل فقط مسؤولية تحليل المعلَمات الموضّحة في هذا القسم، ويجب الانتباه إلى عدم التعامل مع المعلَمات الأخرى لتجنُّب الهجمات الضارة.
تأكَّد من استخدام قيم تلقائية للمَعلمات الاختيارية (العادية والمخصَّصة)، ووثِّق جميع قيمك التلقائية في مستندات موقعك الإلكتروني.
في ما يلي بعض نماذج الطلبات (يمكنك الاطّلاع على المزيد من نماذج الطلبات والردّ في نهاية هذا المستند في أمثلة):
ملاحظة: يجب استخدام أحرف الإلغاء في عنوان URL قبل الإرسال، بالإضافة إلى سلاسل الطلبات التالية التي تظهر في قسم الأمثلة.
Basic request, no parameters: http://www.example.com/mydatasource Request with the tqx parameter that contains two properties: http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168 Request with a query string: http://www.example.com/mydatasource?tq=limit 1
في ما يلي قائمة بجميع المَعلمات العادية في سلسلة الطلب. يُرجى العِلم أنّ أسماء المَعلمات (مثل "version") وقيم السلسلة الثابتة (مثل "ok" و"تحذير" و "not_modified") تكون حسّاسة لحالة الأحرف. ويوضّح الجدول أيضًا ما إذا كان يجب إرسال المَعلمة وما إذا كان مطلوبًا منك التعامل معها أم لا في حال إرسالها.
المَعلمة | هل هو مطلوب في الطلب؟ |
هل يجب التعامل مع مصدر البيانات؟ |
الوصف |
---|---|---|---|
tq | لا |
لا |
طلب مكتوب لغة طلب البحث في Google Visualization API، ويحدد كيفية فلترة البيانات المعروضة أو ترتيبها أو معالجتها بأي شكل آخر. ولا يلزم وضع اقتباس للسلسلة. مثال: |
TQx | لا |
نعم |
مجموعة من أزواج المفتاح/القيمة مفصولة بنقطتين للمعلمات العادية أو المخصّصة. يتم فصل الأزواج بفواصل منقوطة. وفي ما يلي قائمة بالمعلَمات العادية المحدّدة في بروتوكول التمثيل البصري:
مثال: |
Tqrt | لا |
لا |
محجوزة: تجاهل هذه المعلمة تمثّل هذه السمة الطريقة المستخدمة لإرسال طلب البحث. |
تنسيق الردّ
يعتمد تنسيق الاستجابة على معلَمة out
الخاصة بالطلب، والتي تحدد نوع الاستجابة المتوقّعة. يمكنك الاطّلاع على الأقسام التالية لمعرفة كيفية الردّ على كل نوع من أنواع الطلبات:
- JSON: تعرض استجابة JSON تتضمّن البيانات المتوفّرة في كائن JavaScript والتي يمكن تمريرها مباشرةً إلى دالة إنشاء
DataTable
لتعبئتها. هذا النوع من الطلبات هو الأكثر شيوعًا إلى حدّ كبير، وهو الأكثر أهمية بالنسبة إلى عمليات التنفيذ الصحيحة. - CSV - يعرض قائمة قيم مسطحة مفصولة بفواصل ليعالجها المتصفّح.
- TSV: يعرض قائمة قيم مفصولة بعلامات جدولة ليعالجها المتصفّح.
- HTML - تعرض جدول HTML لعرضه من خلال المتصفح.
يمكنك استخدام مكتبة مصدر بيانات المرئيات من Google (Java) أو مكتبة Python المتعلقة بالمرئيات لإنشاء تنسيقات الإخراج هذه لك.
تنسيق استجابة JSON
تنسيق الاستجابة التلقائي هو JSON إذا كان الطلب يتضمّن عنوان X-DataSource-Auth، وJSONP في الحالات الأخرى. يُرجى العلم أنّ برنامج رسم بياني من Google متوافق مع نسخة معدَّلة من JSON وJSONP. وإذا كنت تستخدم مكتبات مساعد Java أو Python، ستضع الرموز المناسبة لك. أما إذا كنت تحلل الردود يدويًا، فيمكنك الاطّلاع على تعديلات JSON أدناه.
إذا كنت تفرض طلبات النطاق نفسه، عليك التأكّد من توفُّر العنوان "X-DataSource-Auth" في الطلب واستخدام ملفات تعريف ارتباط التفويض.
هذا هو تنسيق الاستجابة الوحيد المحدّد من خلال طريقة Google Visualization API
google.visualization.Query.send()
.
يمكنك الاطّلاع على بعض الأمثلة على طلبات JSON واستجاباتها في نهاية هذه الصفحة ضمن
الأمثلة.
يمكنك استخدام مكتبات المساعدة في Java أو Python لإنشاء سلسلة الاستجابة هذه نيابةً عنك.
تنسيق الاستجابة هذا هو كائن JSON
بالترميز UTF-8 (كائن ملفوف بالأقواس { } مع فصل كل سمة بفاصلة)
ويتضمّن السمات الواردة في الجدول أدناه (يتم تخصيص البيانات للسمة table
). ويجب أن يكون كائن JSON هذا داخل قيمة المعلَمة responseHandler
من الطلب. وبالتالي، إذا كانت قيمة responseHandler
للطلب هي
myHandler، عليك عرض سلسلة مثل هذه (تظهر سمة واحدة فقط للإيجاز):
"myHandler({status:ok, ...})"
إذا لم يتضمّن الطلب القيمة responseHandler
، تكون القيمة التلقائية هي "google.visualization.Query.setResponse"، وبالتالي عليك عرض سلسلة مثل هذه (تظهر سمة واحدة فقط للإيجاز):
"google.visualization.Query.setResponse({status:ok, ...})"
في ما يلي أعضاء كائن الاستجابة المتاح:
الموقع | مطلوبة؟ |
الوصف |
---|---|---|
إصدار | لا |
تمثّل هذه السمة رقم سلسلة يعرض رقم إصدار بروتوكول سلك التمثيل المرئي من Google. في حال عدم تحديد هذه السمة، يفترض العميل استخدام أحدث إصدار. مثال: |
reqId | نعم* |
رقم سلسلة يشير إلى رقم تعريف هذا الطلب لهذا العميل. وإذا كان الأمر كذلك، عليك عرض القيمة نفسها. يمكنك الاطّلاع على وصف reqId في قسم الطلبات للحصول على مزيد من التفاصيل. * إذا لم يتم تحديد هذه المعلمة في الطلب، لن تحتاج إلى ضبطها في الاستجابة. |
status | نعم |
سلسلة تصف مدى نجاح هذه العملية أو فشلها. ويجب أن تكون قيمة واحدة من القيم التالية فقط:
مثال: |
تحذيرات | فقط في حالة status=warning |
يشير ذلك المصطلح إلى مصفوفة مكوّنة من كائن واحد أو أكثر يصف كل منها مشكلة غير مميتة.
مطلوبة إذا كانت السمة
مثال: |
الأخطاء | مطلوبة إذا كانت status=error |
يشير ذلك المصطلح إلى مصفوفة مكوّنة من كائن واحد أو أكثر يصف كل منها خطأً. مطلوبة إذا
تضم المصفوفة أعضاء السلسلة التالية (تعرض قيمة واحدة فقط لكل عضو):
مثال:
|
sig | لا |
قيمة مجزّأة لعنصر الجدول. ويكون ذلك مفيدًا لتحسين نقل البيانات بين العميل ومصدر البيانات. يمكنك اختيار أي خوارزمية تجزئة تريدها. إذا كنت تتيح استخدام هذه السمة، عليك عرض القيمة التي أدخلها العميل في حال عدم عرض أي بيانات، أو عرض تجزئة جديدة في حال عرض بيانات جديدة. مثال: |
جدول | لا |
كائن {cols:[{id:'Col1',label:'',type:'number'}], rows:[{c:[{v:1.0,f:'1'}]}, {c:[{v:2.0,f:'2'}]}, {c:[{v:3.0,f:'3'}]}, {c:[{v:1.0,f:'1'}]} ] } يجب استخدام السمة مثال: راجِع أمثلة أدناه. |
تعرض مكتبات مساعد Google وجميع طلبات البحث المرسلة إلى Google تنسيق JSON/JSONP الصارم.
إذا كنت لا تحلِّل
الرمز الذي تم عرضه بنفسك، لن يكون لذلك أي تأثير من جانبك. إذا كان الأمر كذلك، يمكنك استخدام JSON.parse() لتحويل سلسلة JSON إلى كائن JavaScript. ويتمثل أحد الاختلافات في طريقة معالجة JSON
بواسطة واجهة برمجة التطبيقات في أنّ تنسيق JSON
لا يتيح استخدام قيم تاريخ JavaScript (على سبيل المثال،
"new Date(2008,1,28,0,31,26)"
إلا أنّ واجهة برمجة التطبيقات تتيح تمثيل JSON صالحًا للتواريخ كسلسلة بالتنسيق التالي: Date(year, month, day[,hour, minute, second[, millisecond]])
حيث تكون جميع القيم بعد اليوم اختيارية، والأشهر تعتمد على الصفر.
تحسين استجابات JSON
إذا قدَّم العميل طلبَين، ولم تتغير البيانات بين الطلبات، من المنطقي عدم إعادة إرسال البيانات لأنّ ذلك سيؤدي إلى إهدار معدل نقل البيانات. ولجعل الطلبات أكثر كفاءة، يتيح البروتوكول التخزين المؤقت للبيانات على الجهاز العميل، وإرسال إشارة في الاستجابة في حال لم تتغيّر البيانات منذ آخر طلب. وإليك كيفية العمل:
- يرسل العميل طلبًا إلى مصدر البيانات.
- ينشئ مصدر البيانات
DataTable
بالإضافة إلى تجزئة للعنصرDataTable
، ويعرض كلاهما في استجابته (يتم عرض التجزئة في المعلمةtqx.
sig
). يخزِّن برنامج Google Visualization API القيمةDataTable
وsig
مؤقتًا. - يرسل العميل طلبًا آخر للبيانات، بما في ذلك قيمة
tqx.sig
المخزّنة مؤقتًا. - يمكن أن يستجيب مصدر البيانات بإحدى الطريقتين التاليتين:
- في حال تغيير البيانات من الطلب السابق، يُرسِل مصدر البيانات مرة أخرى تجزئة قيمة
DataTable
الجديدة وقيمةsig
الجديدة. - إذا لم يتم تغيير البيانات من الطلب السابق، يرسل مصدر البيانات
status=error
أوreason=not_modified
أوsig=old_sig_value
مرة أخرى.
- في حال تغيير البيانات من الطلب السابق، يُرسِل مصدر البيانات مرة أخرى تجزئة قيمة
- في كلتا الحالتين، تحصل الصفحة التي تستضيف الرسم البياني على استجابة ناجحة،
ويمكنها استرداد
DataTable
من خلال استدعاءQueryResponse.getDataTable()
. إذا كانت البيانات متطابقة، فستكون ببساطة النسخة المخزنة مؤقتًا من الجدول.
يُرجى العلم أنّ هذه الطريقة لا تعمل إلا مع طلبات JSON من الرسوم البيانية التي تم إنشاؤها باستخدام Google Visualization API.
تنسيق الاستجابة بتنسيق CSV
إذا كان الطلب يحدّد out:csv
، لن تتضمّن الاستجابة أي بيانات وصفية، بل تتضمّن فقط تمثيلاً بتنسيق CSV للبيانات. يكون جدول CSV عادةً عبارة عن قائمة مفصولة بفواصل، يكون فيها كل صف من البيانات عبارة عن قائمة قيم مفصولة بفواصل، وتنتهي بحرف سطر جديد في نظام التشغيل UNIX (\n). ويجب أن يكون لقيم الخلايا النوع نفسه لكل عمود. الصف الأول هو تسميات الأعمدة. في ما يلي مثال على جدول مؤلف من ثلاثة صفوف
من ثلاثة أعمدة:
A, B, C 1.0, "yes", true 2.0, "no", false 3.0, "maybe", true
لم يتم تحديد تنسيق CSV بواسطة هذا البروتوكول، فمصدر البيانات هو المسؤول عن تحديد تنسيق CSV. ومع ذلك، التنسيق الشائع عبارة عن مجموعة من القيم مفصولة بفواصل (بدون مسافات متداخلة) وسطر جديد (\n) في نهاية كل صف. عندما يتلقّى المتصفّح ردًّا من سلسلة CSV، قد يسأل المستخدم عن التطبيق الذي يجب استخدامه لفتح السلسلة أو قد يعرضها على الشاشة. توفر المكتبات المفتوحة المصدر Java وPython طريقة لتحويل DataTable إلى سلسلة CSV.
إذا كان الطلب يتضمّن عضو outFileName
في المعلَمة tqx
، ننصحك بمحاولة تضمين اسم الملف المحدّد في عناوين الاستجابة.
لا يدعم كائن google.visualization.Query
طلب استجابة ملف CSV. إذا أراد العميل طلب ملف CSV، يمكنك تضمين أداة شريط أدوات العرض المرئي على صفحتك أو استخدام رمز مخصّص لإنشاء الطلب، أو يمكنك تقديم رابط يضبط السمة out:csv
في tqx
بشكل واضح، كما هو موضّح في عنوان URL للطلب التالي:
طلب
http://www.example.com/mydatasource?tqx=reqId:1;out:csv
الردّ
Label 1,Label2\n1,a\n2,b\n3,c\n4,d
تنسيق استجابة TSV
إذا كان الطلب يحدّد out:tsv-excel
، لن يتضمن الرد أي بيانات وصفية، بل يتضمن فقط تمثيلاً للبيانات، مفصولًا بعلامات جدولة، utf-16 بترميز. إذا كان الطلب يتضمّن عضو outFileName
في المعلَمة tqx
، ننصحك بمحاولة تضمين اسم الملف المحدّد في عناوين الاستجابة.
تنسيق استجابة HTML
إذا كان الطلب يحدّد out:html
، يجب أن تكون الاستجابة صفحة HTML
تحدّد جدول HTML بالبيانات. وتكمن أهمية ذلك في تصحيح أخطاء الرمز البرمجي لأنّ المتصفّح يمكنه عرض نتيجتك بتنسيق قابل للقراءة مباشرةً. ولا يمكنك
إرسال طلب بحث عن استجابة HTML باستخدام
الكائن google.visualization.Query
.
يجب إجراء طلب بحث عن استجابة HTML باستخدام رمز مخصّص أو من خلال كتابة عنوان URL مشابه لهذا في المتصفّح:
طلب
http://www.example.com/mydatasource?tqx=reqId:1;out:html
الردّ
<html><body><table border='1' cellpadding='2' cellspacing='0'><tr style='font-weight: bold; background-color: #aaa;'><td>label 1</td><td>label 2</td></tr><tr bgcolor='#f0f0f0'><td align='right'>1</td><td>a</td></tr><tr bgcolor='#ffffff'><td align='right'>2</td><td>b</td></tr><tr bgcolor='#f0f0f0'><td align='right'>3</td><td>c</td></tr><tr bgcolor='#ffffff'><td align='right'>4</td><td>d</td></tr></table></body></html>
أمثلة
إليك بعض الأمثلة على الطلبات والردود. يُرجى العِلم أنّ
الطلبات لم يتم تخطيها من خلال عنوان URL، ويتم ذلك عادةً من خلال المتصفّح أو الكائن google.visualization.Query
.
طلب بسيط: تعرض المعلومات الأساسية من خلال جدول من أربعة صفوف.
Request: http://www.example.com/mydatasource Response google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'5982206968295329967',table:{cols:[{id:'Col1',label:'',type:'number'},{id:'Col2',label:'',type:'number'},{id:'Col3',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]},{c:[{v:2.0,f:'2'},{v:3.0,f:'3'},{v:4.0,f:'4'}]},{c:[{v:3.0,f:'3'},{v:4.0,f:'4'},{v:5.0,f:'5'}]},{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]}]}});
طلب بسيط باستخدام معالج الاستجابة: تعرض جدولاً من ثلاثة أعمدة مؤلفًا من ثلاثة صفوف بأنواع بيانات مختلفة.
Request: http://www.example.com/mydatasource?tqx=responseHandler:myHandlerFunction Response myHandlerFunction({version:'0.6',reqId:'0',status:'ok',sig:'4641982796834063168',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]},{c:[{v:'b'},{v:2.0,f:'2'},{v:new Date(2008,2,30,0,31,26),f:'3/30/08 12:31 AM'}]},{c:[{v:'c'},{v:3.0,f:'3'},{v:new Date(2008,3,30,0,31,26),f:'4/30/08 12:31 AM'}]}]}});
طلب بحث باستخدام سلسلة طلب بحث بسيطة: يؤدي هذا الطلب إلى عرض عمود واحد، ويعرض عمودًا واحدًا يحتوي على أربعة صفوف.
Request: http://www.example.com/mydatasource?tq=select Col1 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'6099996038638149313',table:{cols:[{id:'Col1',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'}]},{c:[{v:2.0,f:'2'}]},{c:[{v:3.0,f:'3'}]},{c:[{v:1.0,f:'1'}]}]}});
خطأ لم يتم تعديل البيانات: مثال على خطأ not_modified
.
Request: http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});
تحذير بشأن اقتطاع البيانات: مثال على تحذير data_truncated
.
لاحظ أن الطلب لا يزال يعرض البيانات.
Request: http://www.example.com/mydatasource?tq=limit 1 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'warning',warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}],sig:'1928724788649668508',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]}]}});
خطأ تم رفض الوصول: مثال على خطأ access_denied
.
Request: http://www.example.com/mydatasource Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'access_denied',message:'Access denied',detailed_message:'Access Denied'}]});
سلسلة طلب بحث غير صالحة: مثال على طلب يحتوي على سلسلة طلب بحث غير صالحة. يُرجى العِلم أنّ الرسالة المفصَّلة هي رسالة عامة وليست رسالة الخطأ الفعلية.
Request: http://www.example.com/mydatasource?tq=select A Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'invalid_query',message:'Invalid query',detailed_message:'Bad query string.'}]});
أدوات تطوير
- Java Datasource Library (من Google) : لمعالجة الطلب والاستجابة وإنشاء جدول الاستجابة استنادًا إلى البيانات التي تقدِّمها، وتطبيق لغة طلب البحث بلغة الاستعلامات البنيوية (SQL) في أدوات الرسومات البيانية من Google.
- مكتبة مصادر البيانات في Python (من Google): تنشئ جدول الردود الذي ينشئ بنية الردود. لا يعالج تحليل الطلب أو تنفيذ لغة طلب بحث SQL لأدوات الرسوم البيانية من Google.
- MC-Google_Visualization (جهة خارجية): هذه مكتبة من جهة الخادم بلغة PHP يمكنك استخدامها لتنفيذ "مصدر بيانات أدوات الرسوم البيانية" لمحركات قاعدة بيانات MySQL وSQLite وPostgreSQL باستخدام PDO.
- bortosky-google-visualization (جهة خارجية) - هي مكتبة مساعدة لإنشاء جدول بيانات Google Visualization API لمستخدمي .NET.
- GV Streamer (جهة خارجية): GV Streamer هي أداة من جهة الخادم يمكنها تحويل البيانات من مصادر مختلفة إلى ردود صالحة لطلبات البحث في الرسوم البيانية في Google. يتوافق GV Streamer مع عدة لغات (على سبيل المثال، PHP وJava و .NET) والعديد من مصادر البيانات الأولية (على سبيل المثال، MySql).
- TracGViz (جهة خارجية) - TracGViz هي أداة مجانية ومفتوحة المصدر توفّر المكونات بحيث يكون بإمكان Trac استخدام أدوات الرسم البياني، بالإضافة إلى تنفيذ البيانات التي يديرها Trac كمصدر بيانات لـ "أدوات الرسوم البيانية في Google".
- vis-table (جهة خارجية) - مكتبة تنفِّذ مصدر بيانات لأدوات الرسوم البيانية من Google بلغة PHP. وهي تتكوّن من ثلاثة أجزاء رئيسية. عملية تنفيذ جدول البيانات نفسها والمحلل اللغوي للغة الاستعلام وأدوات التنسيق.
- تنفيذ مصدر بيانات Google في Oracle PL/SQL (جهة خارجية): يشير هذا المصطلح إلى حزمة Oracle PL/SQL التي تمكِّن Oracle من خادم Oracle لخادم "مصادر البيانات" مباشرةً من قاعدة البيانات. لذلك، يمكنك بشكل أساسي استخدام أي طلب بحث Oracle كمصدر بيانات لأدوات الرسم البياني من Google (ستعرض الحزمة ملف JSON بالبيانات). وهي متوافقة بالكامل تقريبًا مع لغة طلب البحث من Google.