تتيح Blogger Data API لتطبيقات العميل عرض محتوى Blogger وتعديله في شكل خلاصات Google Data API.
يمكن لتطبيق العميل استخدام واجهة برمجة تطبيقات Blogger Data API لإنشاء مدوّنة جديدة. وتعديل مشاركات المدونة الحالية أو حذفها والاستعلام عن مشاركات المدونة المطابقة بمعايير محددة.
بالإضافة إلى تقديم بعض المعلومات الأساسية حول إمكانات Blogger للبيانات، يقدم هذا المستند أمثلة على تفاعلات Data API الأساسية باستخدام برنامج Python المكتبة. إذا كنت مهتمًا بمعرفة المزيد عن القيمة الأساسية الذي تستخدمه المكتبة، راجِع قسم البروتوكول في دليل المطور هذا.
المحتويات
الجمهور
هذا المستند مخصّص للمبرمجين الذين يريدون كتابة تطبيقات Python العملاء التي يمكنها التفاعل مع Blogger.
يفترض هذا المستند أنك تفهم الأفكار العامة التي تستند إليها Google Data APIs والبروتوكول.
للحصول على معلومات مرجعية عامة حول Blogger Data API، يُرجى الاطّلاع على دليل مرجعي للبروتوكول.
الخطوات الأولى
للحصول على مساعدة في إعداد مكتبة العميل، يُرجى الاطّلاع على دليل البدء .
تتطلب مكتبة برامج Python توفّر Python 2.2 أو إصدار أحدث. بعد تنزيل مكتبة البرامج، عليك أيضًا تنزيل حزمة 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 باستخدام مكتبة GData في بايثون، يُرجى مراجعة OAuth في مكتبات عميل بروتوكول بيانات Google.
مصادقة الخادم الوكيل AuthSub
تستخدم تطبيقات الويب التي تحتاج إلى مصادقة الخادم الوكيل AuthSub مصادقة المستخدمين على حسابات Google. لا يمكن لمشغّل الموقع الإلكتروني ورمز العميل الوصول إلى اسم مستخدم Blogger وكلمة مروره، وبدلاً من ذلك، يحصل العميل على رموز AuthSub خاصة تسمح له بالتصرّف نيابةً عن مستخدم معيّن. للحصول على معلومات أكثر تفصيلاً، يُرجى الاطّلاع على مستندات AuthSub.
عندما يزور مستخدم تطبيقك لأول مرة، لا يكون قد تم مصادقته بعد. وفي هذه الحالة، ستحتاج إلى عرض بعض المعلومات ورابط توجيه المستخدم إلى صفحة Google لمصادقة طلبك للدخول إلى مدوناتهم. توفر مكتبة برامج بايثون دالة لإنشاء عنوان 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 خلاصة تسرد المدونات الإلكترونية التي user; تُعرف هذه الخلاصة باسم "الخلاصة".
يستخدم نموذج الرمز البرمجي التالي مثيلًا تمّت مصادقته من 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 استخدام Query
التالية.
المواقع:
- الفئات
- يحدد هذا الإعداد الفئات (المعروفة أيضًا باسم التصنيفات) لفلترة نتائج الخلاصة. على سبيل المثال، تعرض الدالة
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
إدخالات بكل من التصنيفينFritz
وLaurie
. لتحديد طلب البحث عن الفئة هذا في مكتبة برامج Python، يمكنك استخدامquery.categories = ['Fritz','Laurie',]
- max_results
- الحد الأقصى لعدد الإدخالات التي سيتم عرضها
- منشور_min، post_max
- الحدّ الأدنى والأعلى لتاريخ نشر الإدخال
- start_index
- الفهرس المستند إلى 1 لأول نتيجة يتم استردادها (لتقسيم الصفحة إلى صفحات).
- Update_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 بإنشاء التعليقات واستردادها وحذفها. لا تتوفّر إمكانية تعديل التعليقات (ولا تتوفّر على الويب). ).
إنشاء التعليقات
لنشر تعليق، أنشئ عنصرًا من النوع 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)