تتيح Blogger Data API لتطبيقات العميل عرض محتوى Blogger وتعديله في شكل خلاصات Google Data API.
يمكن لتطبيق العميل استخدام Blogger Data API لإنشاء مشاركات مدونٍ جديدة وتعديل مشاركات المدونين الحالية أو حذفها والبحث عن مشاركات المدونين التي تتطابق مع معايير معيّنة.
بالإضافة إلى تقديم بعض المعلومات الأساسية حول إمكانات واجهة برمجة التطبيقات Data API في Blogger، يقدّم هذا المستند أمثلة على التفاعلات الأساسية مع واجهة برمجة التطبيقات Data API باستخدام مكتبة برمجة تطبيقات Python. إذا كنت مهتمًا بمعرفة المزيد عن الprotocolly الأساسي الذي تستخدمه المكتبة، اطّلِع على قسم البروتوكول في دليل المطوّر هذا.
المحتويات
الجمهور
هذا المستند مخصّص للمبرمجين الذين يريدون كتابة تطبيقات Python العملاء التي يمكنها التفاعل مع Blogger.
يفترض هذا المستند أنّك تفهم الأفكار العامة وراء بروتوكول Google Data APIs.
للحصول على معلومات مرجعية عامة حول Blogger Data API، يُرجى الاطّلاع على دليل مرجعي للبروتوكول.
الخطوات الأولى
للحصول على مساعدة في إعداد مكتبة العميل، يُرجى الاطّلاع على دليل البدء.
تتطلّب مكتبة Python للعملاء استخدام الإصدار 2.2 من Python أو إصدار أحدث. بعد تنزيل مكتبة البرامج، عليك أيضًا تنزيل حزمة ElementTree وتثبيتها.
إنشاء حساب على Blogger
ننصحك بإنشاء حساب على Blogger لأغراض الاختبار. يستخدم Blogger حسابات Google، لذا إذا كان لديك حساب على Google، لن تحتاج إلى إجراء أي إعدادات.
تشغيل نموذج الرمز
يتوفّر نموذج كامل لعمل العميل، يحتوي على جميع نماذج الرموز البرمجية المعروضة في
هذا المستند، في ملف BloggerExample.py
ضمن الدليل
gdata-python-client/samples/blogger/
.
ينفِّذ نموذج العميل عدّة عمليات على المدونة المقدَّمة لشرح استخدام Blogger Data API.
يمكنك تشغيل العيّنة باستخدام الوسيطات التالية:
python BloggerExample.py --email [email_address] --password [password]
لاستخدام الأمثلة الواردة في هذا المستند في الرمز البرمجي الخاص بك، ستحتاج إلى import
البيانَين التاليَين:
from gdata import service import gdata import atom
المصادقة على خدمة Blogger
يمكنك الوصول إلى الخلاصات العامة والخاصة باستخدام Blogger Data API. لا تتطلّب الخلاصات العامة أي مصادقة، ولكنها تكون للقراءة فقط. إذا أردت تعديل المدونات، يجب أن يُجري العميل مصادقة قبل طلب ملفّات الاطّلاع الخاصة. ويمكنه إجراء المصادقة باستخدام أيّ من الطرق الثلاث التالية:مصادقة OAuth أو مصادقة AuthSub باستخدام وكيل أو مصادقة اسم المستخدم/كلمة المرور باستخدام ClientLogin.
لمزيد من المعلومات عن المصادقة باستخدام Google Data APIs بشكل عام، يُرجى الاطّلاع على مستندات مصادقة.
تستند معظم العيّنات في الأقسام اللاحقة من هذا المستند إلى أنّ لديك
مثيل GDataService
تمّت مصادقته.
مصادقة OAuth
للحصول على مستندات حول مصادقة OAuth باستخدام مكتبة Python GData، يُرجى الاطّلاع على OAuth في مكتبات برمجة تطبيقات Google Data Protocol.
مصادقة الخادم الوكيل لبروتوكول AuthSub
تستخدِم تطبيقات الويب المصادقة الوكيلة عبر AuthSub التي تحتاج إلى مصادقة المستخدمين على حسابات Google. لا يمكن لمشغّل الموقع الإلكتروني ورمز العميل الوصول إلى اسم مستخدم Blogger وكلمة مروره، وبدلاً من ذلك، يحصل العميل على رموز AuthSub خاصة تسمح له بالتصرّف نيابةً عن مستخدم معيّن. للحصول على معلومات أكثر تفصيلاً، يُرجى الاطّلاع على مستندات AuthSub.
عندما يزور مستخدم تطبيقك لأول مرة، لا يكون قد تم مصادقته بعد. في هذه الحالة، عليك عرض بعض المعلومات ورابط يؤدي إلى توجيه المستخدم إلى صفحة على Google لمصادقة طلبك للوصول إلى مدوّناته. توفّر مكتبة برامج Python دالة لإنشاء عنوان URL لصفحة Google. يسترجع الرمز أدناه عنوان URL لصفحة AuthSubRequest:
def GetAuthSubUrl(): next = 'http://www.example.com/welcome.pyc' scope = 'http://www.blogger.com/feeds/' secure = False session = True blogger_service = service.GDataService() return blogger_service.GenerateAuthSubURL(next, scope, secure, session); authSubUrl = GetAuthSubUrl(); print '<a href="%s">Login to your Google account</a>' % authSubUrl
تأخذ الطريقة GenerateAuthSubURL
المَعلمات التالية
(المتوافقة مع مَعلمات طلب البحث المستخدَمة من قِبل معالِج 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.pyc
يتّبع المستخدم الرابط المؤدي إلى موقع Google الإلكتروني ويُثبِّت هويته في حسابه على Google.
بعد مصادقة المستخدم، يعيد نظام AuthSub توجيهه إلى عنوان URL
الذي حدّدته في مَعلمة طلب البحث next
لعنوان URL
AuthSubRequest. يُلحق نظام AuthSub رمزًا مميّزًا للمصادقة بهذا العنوان، وذلك بصفته
قيمة مَعلمة طلب البحث token
. على سبيل المثال:
http://www.example.com/welcome.pyc?token=yourAuthToken
هناك عدة طرق لاسترداد قيمة الرمز المميّز من عنوان URL، على سبيل المثال:
import cgi parameters = cgi.FieldStorage() authsub_token = parameters['token']
تمثّل قيمة الرمز المميّز هذا رمزًا مميزًا لبروتوكول AuthSub صالحًا لمرة واحدة. في هذا المثال،
بما أنّه تم تحديد session = True
، يمكن استبدال هذا الرمز المميّز برمز مميّز لجلسة AuthSub باستخدام طريقة UpgradeToSessionToken
،
التي تستدعي خدمة AuthSubSessionToken
:
blogger_service = service.GDataService() blogger_service.auth_token = authsub_token blogger_service.UpgradeToSessionToken()
وهذا يعني أنّك تُمرِّر الرمز المميّز لمرة واحدة إلى UpgradeToSessionToken
، وتُعرِض واجهة AuthSub رمزًا مميّزًا
للجلسة.
يمكن لتطبيقك بعد ذلك استخدام قيمة رمز الجلسة في التفاعلات التالية مع Blogger. تُرسِل مكتبة العميل الرمز المميّز تلقائيًا مع الطلبات.
مصادقة اسم المستخدم/كلمة المرور في ClientLogin
استخدِم مصادقة ClientLogin إذا كان برنامجك هو برنامج مستقل ومُثبَّت
لمستخدم واحد (مثل تطبيق مخصّص لأجهزة الكمبيوتر المكتبي). ما عليك سوى استدعاء ProgrammaticLogin()
في مثيل GDataService
، وسيتم إثبات هوية جميع التفاعلات اللاحقة مع Blogger:
blogger_service = service.GDataService('user@example.com', 'secretPassword') blogger_service.source = 'exampleCo-exampleApp-1.0' blogger_service.service = 'blogger' blogger_service.account_type = 'GOOGLE' blogger_service.server = 'www.blogger.com' blogger_service.ProgrammaticLogin()
في المقتطف أعلاه، ضبطنا ثلاث خصائص على مثيل
GDataService
. الأول هو اسم تطبيقنا في
الشكل companyName-applicationName-versionID.
والثاني هو اسم الخدمة التي نريد التفاعل معها، والثالث هو
عنوان الخادم.
يُرجى ملاحظة أنّه تم ضبط account_type
على
GOOGLE
بشكل صريح. سيؤدي عدم ضبط هذه المَعلمة إلى منع مستخدمي G Suite من استخدام
واجهة برمجة التطبيقات Blogger API بنجاح.
لمزيد من المعلومات عن مصادقة ClientLogin، بما في ذلك نماذج طلبات واستجابات، يُرجى الاطّلاع على مستندات المصادقة للتطبيقات المثبّتة.
ملاحظة: استخدِم الرمز المميّز نفسه لجميع الطلبات في جلسة معيّنة، ولا تحصل على رمز مميّز جديد لكل طلب في Blogger.
ملاحظة: كما هو موضّح في مستندات ClientLogin
، قد يتعذّر إكمال طلب المصادقة ويُطلب منك حلّ اختبار CAPTCHA. إذا كنت تريد أن تطلب Google من المستخدمين إكمال اختبار CAPTCHA وتعالجه، عليك
إرسال المستخدم إلى
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(بدلاً من عنوان URL المخصّص لمعالجة اختبار CAPTCHA الوارد في مستندات ClientLogin
).
استرداد قائمة بالمدونات
توفّر Blogger Data API خلاصة تسرد المدونات الخاصة بمستخدم معيّن، وتُعرف هذه الخلاصة باسم "الخلاصة الوصفية".
يستخدم نموذج الرمز البرمجي التالي مثيلًا تمّت مصادقته من GDataService
لاسترداد الخلاصة الوصفية ثم يطبع عنوان كل مدوّنة.
def PrintUserBlogTitles(blogger_service): query = service.Query() query.feed = '/feeds/default/blogs' feed = blogger_service.Get(query.ToUri()) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text
سجِّل عنوان URL المستخدَم من خلال طريقة Get
. هذا هو عنوان URL التلقائي
للخلاصة الوصفية، ويعرض قائمة بالمدوّنات للمستخدم الذي تمّت المصادقة عليه حاليًا.
للوصول إلى خلاصة لمستخدم مختلف، يمكنك وضع معرّف المستخدم بدلاً من
default
في عنوان URL للخلاصة الوصفية. معرّف المستخدم هو سلسلة الأرقام
التي تظهر في نهاية عنوان URL الخاص بملفه الشخصي.
يوضّح مقتطف الرمز البرمجي أدناه كيفية استخراج معرّف مدوّنة من السلسلة. ستحتاج إلى معرّف المدوّنة لإجراء عمليات الإنشاء والتعديل والحذف على المشاركات والتعليقات. يختار المقتطف أدناه المدونة الأولى التي يتم استرجاعها للمستخدم.
blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]
في نموذج BloggerExample.py
، يتم إنشاء فئة BloggerExample
، ويتم ضبط معرّف المدوّنة في أداة الإنشاء لتسهيل الوصول إليه
لاحقًا. في معظم الأمثلة التالية الواردة في هذا المستند، يتم تمرير
blog_id
كمتغيّر.
إنشاء المشاركات
تتيح لك Blogger Data API إنشاء إدخالات مدوّنة جديدة ونشرها، بالإضافة إلى إنشاء مسودات للإدخالات.
ملاحظة: لا يمكن حاليًا تحديد مؤلف مخصّص للمشاركة. ستظهر جميع المشاركات الجديدة كما لو أنّه تم إنشاؤها من قِبل المستخدم الذي تم مصادقة هويته حاليًا.
نشر مشاركة في مدوّنة
يمكنك استخدام مكتبة Python للعملاء لنشر إدخالات مدوّنة جديدة.
أولاً، أنشئ مثيلًا GDataEntry
لتمثيل مشاركة المدونة.
يمكنك بعد ذلك ضبط العنوان والمحتوى والسمات الأخرى لمشاركة المدونة.
أخيرًا، استخدِم مثيل GDataService
لإدراج المشاركة. في ما يلي مثال على كيفية نشر مشاركة جديدة في مدوّنة:
def CreatePublicPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) blogEntry = CreatePublicPost(blogger_service, blog_id, title='I have the answer', content='Eureka! It is 42!')
إنشاء مسودة لمشاركة مدونة
يتم إنشاء مسودات المشاركات بالطريقة نفسها التي يتم بها إنشاء المشاركات العلنية، ولكن عليك ضبط
عنصر الإضافة draft
في مثيلGDataEntry
. يمكن إنشاء مشاركة المدونة أعلاه كمسودة من خلال إضافة السطور التي تم تمييزها:
def CreateDraftPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) control = atom.Control() control.draft = atom.Draft(text='yes') entry.control = control return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) draftEntry = CreateDraftPost(blogger_service, blog_id, title='I have the question', content='What do you get if you multiply six by nine?')
يمكنك تحويل مسودة حالية لمشاركة مدونة إلى مشاركة منشورة من خلال استرداد
مسودة المشاركة وضبط سمة المسودة على no
، ثم
تعديل المشاركة. سنتناول استرداد المشاركات وتعديلها في القسمين التاليين.
استرداد المشاركات
توضّح الأقسام التالية كيفية استرداد قائمة بمشاركات المدونة، باستخدام ومعلمات طلب البحث بدونها.
يمكنك طلب البحث في خلاصة عامة على Blogger بدون مصادقة. لذلك، لست بحاجة إلى ضبط بيانات الاعتماد أو إجراء مصادقة AuthSub قبل استرداد المشاركات من مدوّنة علنية.
استرداد جميع مشاركات المدونة
لاسترداد مشاركات المستخدم، يمكنك استدعاء الطريقة GetFeed
باستخدام عنوان URL لخلاصة مشاركة المدونة:
def PrintAllPosts(blogger_service, blog_id): feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default') print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
استرداد المشاركات باستخدام مَعلمات طلب البحث
تتيح لك Blogger Data API طلب مجموعة من الإدخالات التي تتطابق مع معايير محدّدة، مثل طلب منشورات مدونة تم نشرها أو تعديلها في نطاق تاريخ معيّن. لإجراء ذلك، يمكنك إنشاء مثيل Query
ثم استدعاء الأسلوب
Get()
.
على سبيل المثال، لإرسال طلب بحث حسب النطاق الزمني، اضبط السمتَين published_min
وpublished_min
لنسخة Query
.
يطبع مقتطف الرمز التالي عنوان كل مشاركة مدوّنة
منشورة بين وقت البدء والوقت المُحدَّد للانتهاء:
def PrintPostsInDateRange(blogger_service, blog_id, start_time='2007-04-01', end_time='2007-04-25'): query = service.Query() query.feed = '/feeds/' + blog_id + '/posts/default' query.published_min = start_time query.published_max = end_time feed = blogger_service.Get(query.ToUri()) print feed.title.text + " posts between " + start_time + " and " + end_time for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
يُرجى ملاحظة أنّه تمّ إنشاء عنصر Query
باستخدام عنوان URL لخلاصة الرسائل
نفسه المستخدَم لاسترداد الرسائل.
تتيح Blogger Data API Query
الخصائص التالية:
- الفئات
- تُستخدَم لتحديد الفئات (المعروفة أيضًا باسم التصنيفات) لفلترة نتائج الخلاصة. على سبيل المثال، يعرض
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
الإدخالات التي تحتوي على الملصقينFritz
وLaurie
. لتحديد طلب البحث عن الفئة هذا في مكتبة Python للعملاء، يمكنك استخدامquery.categories = ['Fritz','Laurie',]
- max_results
- الحد الأقصى لعدد الإدخالات التي سيتم عرضها
- published_min وpublished_max
- الحدّ الأدنى والأعلى لتاريخ نشر الإدخال
- start_index
- فهرس يستند إلى 1 للنتيجة الأولى التي سيتم استرجاعها (لصفحة البيانات).
- updated_min وupdated_max
- الحدّ الأقصى لتواريخ تعديل الإدخالات يتم تجاهل مَعلمات طلب البحث هذه ما لم يتم ضبط المَعلمة
orderby
علىupdated
.
لمزيد من المعلومات عن مَعلمات طلب البحث، اطّلِع على دليل مرجعي لواجهة برمجة تطبيقات Blogger Data API ودليل مرجعي لواجهات برمجة تطبيقات Google Data API.
تعديل المشاركات
لتعديل مشاركة مدوّنة حالية، عليك أولاً استرداد الإدخال الذي تريد
تعديله، ثم تعديله، ثم إرساله إلى Blogger باستخدام Put
. تعمل المقتطف التالي من الرمز البرمجي على تعديل عنوان مدوّنة
، بافتراض أنّك سبق لك استرداد الإدخال من الخادم.
def UpdatePostTitle(blogger_service, entry_to_update, new_title='The REAL answer'): entry_to_update.title = atom.Title('xhtml', new_title) return blogger_service.Put(entry_to_update, entry_to_update.GetEditLink().href)
يعرض الرمز أعلاه GDataEntry
يحتوي على
المقالة المعدَّلة حديثًا بالكامل. لتعديل أيّ سمات أخرى، ما عليك سوى ضبطها في مثيل
GDataEntry
قبل استدعاء Put
.
ملاحظة: لا يمكن حاليًا تعديل بيانات المؤلف المرتبطة بالمواد المتوفّرة في المشاركات.
حذف المشاركات
لحذف مشاركة، مرِّر عنوان URL لتعديل المشاركة إلى طريقة Delete
في عنصر GDataService
، على النحو التالي:
def DeletePost(blogger_service, edit_link_href): blogger_service.Delete(edit_link_href)
التعليقات
تتيح Blogger Data API إنشاء التعليقات واستردادها وحذفها. لا يمكن تعديل التعليقات (ولا تتوفّر هذه الميزة في واجهة الويب).
إنشاء التعليقات
لنشر تعليق، أنشئ عنصرًا من النوع GDataEntry
وأدرِجه على النحو التالي:
def CreateComment(blogger_service, blog_id, post_id, comment_text='Mostly harmless'): feed_uri = '/feeds/' + blog_id + '/' + post_id + '/comments/default' entry = gdata.GDataEntry() entry.content = atom.Content(content_type='xhtml', text=comment_text) return blogger_service.Post(entry, feed_uri)
ملاحظة: لا يمكنك حاليًا نشر تعليقات إلّا في مدوّنة يملكها المستخدم الذي تمّت مصادقته.
ملاحظة: لا يمكن حاليًا تحديد مؤلف مخصّص للتعليقات. ستظهر جميع التعليقات الجديدة كما لو أنّها من إنشاء المستخدم الذي تمّت مصادقة هويته حاليًا.
استرداد التعليقات
يمكنك استرداد تعليقات مشاركة معيّنة من عنوان URL لخلاصة التعليقات الخاصة بالمشاركة:
def PrintAllComments(blogger_service, blog_id, post_id): feed_url = '/feeds/' + blog_id + '/' + post_id + '/comments/default' feed = blogger_service.Get(feed_url) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.updated.text print
يمكنك أيضًا الحصول على التعليقات من جميع المشاركات باستخدام عنوان URL لخلاصة التعليقات في المدونة:
http://www.blogger.com/feeds/blogID /comments/default
حذف التعليقات
لحذف تعليق، عليك تمرير عنوان URL لتعديل التعليق إلى Delete
طريقة على عنصر GDataService
على النحو التالي:
def DeleteComment(blogger_service, post_id, comment_id): feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id blogger_service.Delete(feed_url)