ملاحظات مهمّة: سنوقف نهائيًا الإصدار 2.0 من Google Data API في 30 أيلول (سبتمبر) 2024. لضمان استمرار استخدام الوظائف، عليك تحديث تطبيقاتك التي تعتمد على الإصدار 2.0 من Google. Data API على أحدث إصدار لواجهة برمجة التطبيقات للحصول على أحدث إصدار، استخدِم الروابط في شريط القوائم العلوي على يمين الصفحة. ملاحظة: على الرغم من أنّه سيستمر السماح ببعض طلبات GET (مثل إدراج المشاركات) كعناوين URL لخلاصة ، هناك اختلافات طفيفة في سلوكها. للحصول على معلومات مفصّلة، يُرجى الرجوع إلى مستندات مساعدة Blogger.
تسمح واجهة برمجة التطبيقات لبيانات Blogger لتطبيقات العميل بعرض Blogger وتحديثه. في شكل خلاصات Google Data API.
يمكن لتطبيق العميل استخدام Blogger Data API لإنشاء مشاركات مدونٍ جديدة وتعديل مشاركات المدونين الحالية أو حذفها والبحث عن مشاركات المدونين التي تتطابق مع معايير معيّنة.
بالإضافة إلى تقديم بعض المعلومات الأساسية حول إمكانات Blogger للبيانات، يقدم هذا المستند أمثلة على تفاعلات Data API الأساسية باستخدام فإن برنامج Java المكتبة. إذا كنت مهتمًا بمعرفة المزيد عن الprotocolly الأساسي الذي تستخدمه المكتبة، اطّلِع على قسم البروتوكول في دليل المطوّر هذا.
المحتويات
الجمهور
هذا المستند مخصص للمبرمجين الذين يريدون كتابة برنامج Java التطبيقات التي يمكنها التفاعل مع Blogger.
يفترض هذا المستند أنك تفهم الأفكار العامة التي تستند إليها Google Data APIs والبروتوكول.
للحصول على معلومات مرجعية حول الفئات والطرق التي يوفّرها مكتبة البرامج، راجع نافذة Java مرجع واجهة برمجة التطبيقات لمكتبة العميل. للحصول على معلومات عامة حول مرجع Blogger Data API، يُرجى الاطّلاع على دليل مرجع البروتوكول .
الخطوات الأولى
للحصول على مساعدة في إعداد مكتبة العميل، يُرجى الاطّلاع على دليل البدء .
تتطلّب مكتبة برامج Java استخدام الإصدار 1.5 من Java. بعد تنزيل
مكتبة العملاء، فستعثر على الصفوف التي تحتاج إليها للبدء في
ملف java/lib/gdataclient-1.0.jar
.
إنشاء حساب على Blogger
قد ترغب في الاشتراك في حساب Blogger لأغراض الاختبار. يستخدم Blogger حسابات Google، لذا إذا كان لديك حساب على Google، لن تحتاج إلى إجراء أي إعدادات.
تشغيل نموذج التعليمة البرمجية
يتوفّر نموذج عميل كامل يعمل بشكل صحيح، يحتوي على جميع نماذج الرموز البرمجية المعروضة في هذا
المستند، في توزيع مكتبة عملاء Java، ضمن
الدليل gdata/java/sample/blogger/BloggerClient.java
. يتم تضمين تعليمات الإنشاء
والتنفيذ في الدليل نفسه في ملف
README.txt
.
يقوم العميل النموذجي بتنفيذ عدة عمليات على المدونة المقدمة توضيح استخدام واجهة برمجة تطبيقات Blogger Data API.
لتجميع الأمثلة الموجودة في هذا المستند في التعليمات البرمجية الخاصة بك، ستحتاج إلى
عبارات import
التالية:
import com.google.gdata.client.*; import com.google.gdata.data.*; import com.google.gdata.util.*; import java.io.IOException; import java.net.URL;
المصادقة على خدمة Blogger
يمكنك الوصول إلى الخلاصات العامة والخاصة باستخدام Blogger Data API. لا تتطلّب الخلاصات العامة أيّ مصادقة، ولكنّها للقراءة فقط. إذا أردت تعديل المدونات، يجب أن يُثبِت العميل هويته قبل طلب ملفّات الاطّلاع الخاصة. ويمكنه إجراء المصادقة باستخدام أيّ من الطرق الثلاث التالية: مصادقة OAuth أو مصادقة وكيل AuthSub أو مصادقة اسم المستخدم/كلمة المرور في ClientLogin.
لمزيد من المعلومات حول المصادقة باستخدام Google Data APIs بشكل عام، عرض المصادقة ذات الصلة.
تستند معظم العيّنات في الأقسام اللاحقة من هذا المستند إلى أنّ لديك
عنصر GoogleService
تمّت مصادقته.
مصادقة OAuth
للحصول على مستندات حول مصادقة OAuth باستخدام مكتبة Java GData، يُرجى الاطّلاع على OAuth في مكتبات برمجة تطبيقات Google Data Protocol.
مصادقة الخادم الوكيل لبروتوكول AuthSub
تستخدِم تطبيقات الويب المصادقة الوكيلة عبر AuthSub التي تحتاج إلى مصادقة المستخدمين على حسابات Google. عامل تشغيل الموقع الإلكتروني والعميل الرمز الخاص بمستخدم Blogger إلى اسم المستخدم وكلمة المرور الخاصَّين به بدلاً من ذلك، يحصل العميل على رموز AuthSub مميزة خاصة تتيح له اتخاذ إجراءات نيابةً عن مستخدم معين. للحصول على معلومات أكثر تفصيلاً، يُرجى الاطّلاع على مستندات AuthSub.
عندما يزور المستخدم تطبيقك لأول مرة، فإنه لم يكن قد زاره بعد تمت مصادقته. في هذه الحالة، عليك عرض بعض المعلومات ورابط يؤدي إلى توجيه المستخدم إلى صفحة على Google لمصادقة طلبك للوصول إلى مدوّناته. توفر مكتبة برامج Java وظيفة لإنشاء جدول بيانات Google عنوان URL الخاص بالصفحة. يسترد الرمز أدناه عنوان URL لصفحة AuthSubRequest:
String next = "http://www.example.com/welcome.html"; String scope = "http://www.blogger.com/feeds/"; boolean secure = false; boolean session = true; String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);
تستخدم الطريقة getRequestUrl
المعلمات التالية
(يتجاوب مع معاملات طلب البحث التي يستخدمها AuthSubRequest
):
- التالي
- عنوان URL للصفحة التي من المفترض أن تعيد Google توجيه المستخدم إليها بعد المصادقة
- نطاق
- يشير إلى أن التطبيق يطلب رمزًا مميزًا للوصول إلى خلاصات Blogger. سلسلة النطاق المطلوب استخدامها هي
http://www.blogger.com/feeds/
(بالطبع ترميز عنوان URL). - آمن
- يشير إلى ما إذا كان العميل يطلب رمزًا مميّزًا آمنًا.
- جلسة
- يشير إلى ما إذا كان يمكن استبدال الرمز المميّز الذي تم إرجاعه برمز مميّز متعدّد الاستخدام (للجلسة).
يوضّح المثال أعلاه مكالمة لا تطلب رمزًا مميّزًا آمنًا (قيمة السمة secure
هي false
). قد يظهر عنوان URL الناتج للطلب كما يلي:
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.html
يتّبع المستخدم الرابط المؤدي إلى موقع Google الإلكتروني ويصادق على خدمات Google الخاصة به الحساب.
بعد مصادقة المستخدم، يعيد نظام AuthSub توجيهه إلى عنوان URL
الذي حدّدته في مَعلمة طلب البحث next
لعنوان URL
AuthSubRequest. يُلحق نظام AuthSub رمزًا مميّزًا للمصادقة بهذا العنوان، وذلك بصفته
قيمة مَعلمة طلب البحث token
. على سبيل المثال:
http://www.example.com/welcome.html?token=yourAuthToken
تمثّل قيمة الرمز المميّز هذه رمزًا مميّزًا لـ AuthSub يُستخدم لمرة واحدة. في هذا المثال،
بما أنّه تم تحديد session = true
، يمكن استبدال هذا الرمز المميّز
رمز مميّز لجلسة AuthSub من خلال استدعاء AuthSubSessionToken
على النحو التالي، حيث يشير urlFromAuthSub
إلى عنوان URL الذي يستخدم AuthSub
ألحق الرمز المميز بـ:
String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub); String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);
وهذا يعني أنك تقوم بتمرير الرمز المميز الذي يُستخدم لمرة واحدة إلى
طريقة exchangeForSessionToken
مع أي من null
(للوضع غير المسجَّل) أو مفتاح خاص (للوضع المسجَّل)، وAuthSub
رمزًا مميزًا للجلسة. لمزيد من المعلومات حول التطبيقات
المسجّلة والمفاتيح الخاصة، اطّلِع على قسم توقيع الطلبات
في مستندات AuthSub.
يمكن لتطبيقك بعد ذلك استخدام الرمز المميز للجلسة في التفاعلات اللاحقة
باستخدام Blogger. لتوجيه مكتبة برامج Java إلى إرسال الجلسة تلقائيًا
مع كل طلب، فيمكنك استدعاء دالة GoogleService
طريقة setAuthSubToken
:
GoogleService.setAuthSubToken(sessionToken, null);
بعد ذلك، تُرسِل مكتبة العميل الرمز المميّز تلقائيًا مع كل طلب.
مصادقة اسم المستخدم/كلمة المرور لـ ClientLogin
استخدِم مصادقة ClientLogin إذا كان برنامجك هو برنامج مستقل ومُثبَّت
لمستخدم واحد (مثل تطبيق مخصّص لأجهزة الكمبيوتر المكتبي). ما عليك سوى طلب
طريقة setUserCredentials
في الكائن GoogleService
وستتم مصادقة جميع التفاعلات اللاحقة مع Blogger:
GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1"); myService.setUserCredentials("user@example.com", "secretPassword");
في المقتطف أعلاه، نمرر مَعلمتَين إلى الدالة الإنشائية
GoogleService
. المعلمة الأولى هي اسم
الخدمة التي نريد التفاعل معها. المعلمة الثانية هي اسم
الطلب الوارد في النموذج
companyName-applicationName-versionID.
لمزيد من المعلومات عن مصادقة ClientLogin، بما في ذلك نماذج طلبات واستجابات، يُرجى الاطّلاع على مستندات المصادقة للتطبيقات المثبّتة .
ملاحظة: استخدِم الرمز المميّز نفسه لجميع الطلبات في جلسة معيّنة، ولا تحصل على رمز مميّز جديد لكل طلب في Blogger.
ملاحظة: كما هو موضّح في ClientLogin
المستندات، فقد يفشل طلب المصادقة ويطلب اختبار CAPTCHA
معين. إذا كنت تريد من Google إصدار تحدي CAPTCHA والتعامل معه،
إرسال المستخدِم إلى
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(بدلاً من عنوان URL المخصص لمعالجة اختبار CAPTCHA الموضح في صفحة ClientLogin
الوثائق).
استرداد قائمة بالمدونات
توفّر Blogger Data API خلاصة تسرد المدونات الخاصة بمستخدم معيّن، وتُعرف هذه الخلاصة باسم "الخلاصة الوصفية".
يستخدم نموذج الرمز البرمجي التالي GoogleService
كائنًا تمّت مصادقته لاسترداد الخلاصة الوصفية ثم يطبع عنوان كل مدوّنة.
public static void printUserBlogs(GoogleService myService) throws ServiceException, IOException { // Request the feed final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs"); Feed resultFeed = myService.getFeed(feedUrl, Feed.class); // Print the results System.out.println(resultFeed.getTitle().getPlainText()); for (int i = 0; i < resultFeed.getEntries().size(); i++) { Entry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } }
سجِّل عنوان URL الذي تستخدمه الطريقة getFeed
. هذا هو عنوان URL التلقائي
للخلاصة الوصفية، وهو يعرض قائمة بالمدوّنات للمستخدم الذي تمّت المصادقة عليه حاليًا.
للوصول إلى خلاصة لمستخدم آخر، يمكنك وضع رقم تعريف المستخدم بدلاً من
default
في عنوان URL للخلاصة الوصفية. معرف المستخدم هو سلسلة من الأرقام
في نهاية عنوان URL للملف الشخصي للمستخدم.
جارٍ إنشاء المشاركات
تسمح لك واجهة برمجة تطبيقات Blogger Data API بإنشاء إدخالات جديدة للمدوّنة ونشرها، بالإضافة إلى إنشاء مسودات للإدخالات.
ملاحظة: لا يمكن حاليًا تحديد مؤلف مخصّص للمشاركة. ستظهر جميع المشاركات الجديدة كما لو تم إنشاؤها بواسطة المستخدم الذي تمت مصادقته حاليًا.
نشر مشاركة مدونة
يمكنك استخدام مكتبة برامج Java لنشر إدخالات مدوّنة جديدة.
أولاً، أنشئ عنصرًا من النوع Entry
لتمثيل مشاركة المدونة. بَعْدَ ذَلِكْ
يمكنك تعيين العنوان والمحتوى والسمات الأخرى لمنشور المدونة. أخيرًا،
استخدِم العنصر GoogleService
لإدراج المشاركة. إليك مثالاً
حول كيفية نشر مشاركة مدونة جديدة:
public static Entry createPost( GoogleService myService, String blogID, String title, String content, String userName) throws ServiceException, IOException { // Create the entry to insert Entry myEntry = new Entry(); myEntry.setTitle(new PlainTextConstruct(title)); myEntry.setContent(new PlainTextConstruct(content)); // Ask the service to insert the new entry URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default"); return myService.insert(postUrl, myEntry); }
تأخذ الطريقة insert
عنوان URL لنشر الخدمة كمَعلمة.
بعد ذلك، تُعيد الطريقة الإدخال كما تخزّنه خدمة Blogger. الإدخال
الذي تم إرجاعه هو نفس العنصر الذي أرسلته، ولكنه يحتوي أيضًا على عناصر مختلفة تمت إضافتها
بواسطة Blogger، مثل معرّف المشاركة.
إذا تعذّر إكمال طلبك لسبب ما، قد يعرض Blogger رمز حالة مختلفًا. للحصول على معلومات عن رموز الحالة، يُرجى الاطّلاع على مستند مرجعي لبروتوكول Google Data API.
إنشاء مسودة لمشاركة مدونة
يتم إنشاء مسودّات المشاركات بالطريقة نفسها التي يتم بها إنشاء المشاركات العلنية، ولكن عليك ضبطسمة draft
لكائن Entry
. يمكنك
إنشاء مشاركة مدوّنة مثل المشاركة أعلاه كمسودة من خلال إضافة السطر المميّز
:
public static Entry createPost(GoogleService myService, String blogId, String title, String content, String userName, Boolean isDraft) throws ServiceException, IOException { // Create the entry to insert Entry myEntry = new Entry(); myEntry.setTitle(new PlainTextConstruct(title)); myEntry.setContent(new PlainTextConstruct(content)); myEntry.setDraft(isDraft); // Ask the service to insert the new entry URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default"); return myService.insert(postUrl, myEntry); }
يمكنك تحويل مسودة حالية لمشاركة مدونة إلى مشاركة منشورة من خلال استرداد مسودة المشاركة وضبط سمة المسودة على "خطأ"، ثم تعديل المشاركة. سنتناول عملية استرداد المشاركات وتحديثها في القسمين التاليين.
جارٍ استرداد المشاركات
توضح الأقسام التالية كيفية استرداد قائمة بمشاركات المدونة، باستخدام وبدون معلمات طلب بحث.
يمكنك طلب البحث في خلاصة عامة على Blogger بدون مصادقة. لذلك،
لست بحاجة إلى استدعاء طريقة setUserCredentials
أو إجراء AuthSub
قبل استرداد المشاركات من مدونة عامة.
استرداد جميع مشاركات المدونة
لاسترداد مشاركات المستخدم، يمكنك استدعاء طريقة getFeed
نفسها المستخدمة
لاسترداد الخلاصة الوصفية للمدونات، ولكن هذه المرة أرسل عنوان URL لخلاصة مشاركة المدونة:
public static void printAllPosts( GoogleService myService, String blogId) throws ServiceException, IOException { // Request the feed URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default"); Feed resultFeed = myService.getFeed(feedUrl, Feed.class); // Print the results System.out.println(resultFeed.getTitle().getPlainText()); for (int i = 0; i < resultFeed.getEntries().size(); i++) { Entry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } System.out.println(); }
استرداد المشاركات باستخدام معلَمات طلب البحث
تتيح لك Blogger Data API طلب مجموعة من الإدخالات التي تتطابق مع البيانات المحددة
كالمعايير، مثل طلب نشر مشاركات المدونات أو تحديثها في تاريخ معين
النطاق. لإجراء ذلك، عليك إنشاء عنصر Query
ونقله إلى الطريقة
GoogleService.getQuery
.
على سبيل المثال، لإرسال طلب بحث ضمن نطاق زمني، استخدِم السمة setPublishedMin
وsetPublishedMax
للكائن Query
. تشير رسالة الأشكال البيانية
يطبع مقتطف الرمز التالي عنوان كل مشاركة مدونة تم نشرها بين
وقت البدء ووقت الانتهاء:
public static void printDateRangeQueryResults( GoogleService myService, String blogId, DateTime startTime, DateTime endTime) throws ServiceException, IOException { // Create query and submit a request URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default"); Query myQuery = new Query(feedUrl); myQuery.setPublishedMin(startTime); myQuery.setPublishedMax(endTime); Feed resultFeed = myService.query(myQuery, Feed.class); // Print the results System.out.println(resultFeed.getTitle().getPlainText() + " posts between " + startTime + " and " + endTime); for (int i = 0; i < resultFeed.getEntries().size(); i++) { Entry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); System.out.println("\t" + entry.getUpdated().toStringRfc822()); } System.out.println(); }
يُرجى ملاحظة أنّه تمّ إنشاء عنصر Query
باستخدام عنوان URL نفسه لخلاصة المشاركات المستخدَم لاسترداد المشاركات.
تتيح واجهة برمجة التطبيقات لبيانات Blogger استخدام طرق Query
التالية:
- addCategoryFilter
- حدِّد الفئات (المعروفة أيضًا باسم التصنيفات) لفلترة نتائج الخلاصة. على سبيل المثال، تعرض الدالة
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
إدخالات بكل من التصنيفينFritz
وLaurie
. - setMaxResults
- حدِّد الحد الأقصى لعدد الإدخالات التي سيتم عرضها.
- setPublishedMin وsetPublishedMax
- حدِّد الحدود القصوى لتواريخ نشر الإدخالات.
- setStartIndex
- إعداد الفهرس المستند إلى 1 لأول نتيجة تريد استردادها (لترقيم الصفحات)
- setUpdatedMin وsetUpdatedMax
- حدِّد الحدود القصوى لتواريخ تعديل الإدخالات. ويتم تجاهل مَعلمات طلب البحث هذه ما لم يتم ضبط المَعلمة
orderby
علىupdated
.
ملاحظة: لا توجد حاليًا محددات
معلَمة طلب البحث orderby
ومع ذلك، سيظل بإمكانك استخدام الطريقة
Query.addCustomParameter()
إذا كنت بحاجة إلى ضبط هذا الإعداد.
لمزيد من المعلومات حول معلَمات طلب البحث، يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات لبيانات Blogger. الدليل وGoogle الدليل المرجعي لواجهات برمجة التطبيقات للبيانات
جارٍ تحديث المشاركات
لتعديل مشاركة مدوّنة حالية، عليك أولاً استرداد الإدخال الذي تريد
تعديله، ثم تعديله، ثم إرساله إلى Blogger باستخدام update
. يعدّل المقتطف التالي من الرمز عنوان تدوينة، بافتراض أنّك سبق لك استرداد التدوينة من السيرفر.
public static Entry updatePostTitle( GoogleService myService, Entry entryToUpdate, String newTitle) throws ServiceException, IOException { entryToUpdate.setTitle(new PlainTextConstruct(newTitle)); URL editUrl = new URL(entryToUpdate.getEditLink().getHref()); return myService.update(editUrl, entryToUpdate); }
يعرض الرمز أعلاه رمز Entry
يحتوي على كامل
مشاركة تم تعديلها حديثًا. لتعديل أيّ سمات أخرى، ما عليك سوى ضبطها في كائن
Entry
قبل استدعاء update
.
ملاحظة: تعديل بيانات المؤلف المرتبطة المشاركات غير متاحة حاليًا.
جارٍ حذف المشاركات
لحذف مشاركة، مرِّر عنوان URL لتعديل المشاركة إلى الطريقة delete
.
في الكائن GoogleService
، كما يلي:
public static void deletePost( GoogleService myService, String editLinkHref) throws ServiceException, IOException { URL deleteUrl = new URL(editLinkHref); myService.delete(deleteUrl); }
التعليقات
تسمح واجهة برمجة التطبيقات لبيانات Blogger بإنشاء التعليقات واستردادها وحذفها. لا تتوفّر إمكانية تعديل التعليقات (ولا تتوفّر على الويب). ).
إنشاء التعليقات
لنشر تعليق، أنشئ كائن Entry
وأدرِجه على النحو التالي:
public static Entry createComment( GoogleService myService, String blogID, String postId, String commentText) throws ServiceException, IOException { // Build the comment feed URI String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default"; URL feedUrl = new URL(commentsFeedUri); // Create a new entry for the comment and submit it to the GoogleService Entry myEntry = new Entry(); myEntry.setContent(new PlainTextConstruct(commentText)); return myService.insert(feedUrl, myEntry); }
ملاحظة: يمكنك حاليًا نشر التعليقات فقط على مدونة يملكها المستخدم الذي تمت مصادقته.
ملاحظة: إنّ ضبط مؤلف مخصّص للتعليقات هو غير متاح حاليًا. ستظهر جميع التعليقات الجديدة كما لو أنّها من إنشاء المستخدم الذي تمّت مصادقة هويته حاليًا.
جارٍ استرداد التعليقات
يمكنك استرداد التعليقات على مشاركة معينة من عنوان URL لخلاصة تعليقات المشاركة:
public static void printAllComments( GoogleService myService, String blogID, String postId) throws ServiceException, IOException { // Build comment feed URI and request comments on the specified post String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default"; URL feedUrl = new URL(commentsFeedUri); Feed resultFeed = myService.getFeed(feedUrl, Feed.class); // Display the results System.out.println(resultFeed.getTitle().getPlainText()); for (int i = 0; i < resultFeed.getEntries().size(); i++) { Entry entry = resultFeed.getEntries().get(i); System.out.println("\t" + ((TextContent) entry.getContent()).getContent().getPlainText()); System.out.println("\t" + entry.getUpdated().toStringRfc822()); } System.out.println(); }
يمكنك أيضًا الحصول على التعليقات من جميع المشاركات باستخدام عنوان URL لخلاصة التعليقات في المدونة:
http://www.blogger.com/feeds/blogID/comments/default
حذف التعليقات
لحذف تعليق، عليك تمرير عنوان URL لتعديل التعليق إلى delete
طريقة على عنصر GoogleService
على النحو التالي:
public static void deleteComment(GoogleService myService, String editLinkHref) throws ServiceException, IOException { URL deleteUrl = new URL(editLinkHref); myService.delete(deleteUrl); }