تقدم Google واجهة برمجة تطبيقات PageSpeed Insights لمساعدة محترفي SEO والمطورين من خلال مزج بيانات العالم الحقيقي مع بيانات المحاكاة ، مما يوفر بيانات توقيت التحميل المتعلقة بصفحات الويب.
الفرق بين Google PageSpeed Insights (PSI) و منارة هو أن PSI تتضمن بيانات واقعية وبيانات معملية ، بينما تقوم Lighthouse بمحاكاة تحميل الصفحة عن طريق تغيير الاتصال ووكيل المستخدم للجهاز.
هناك اختلاف آخر يتمثل في أن PSI لا تقدم أي معلومات تتعلق بإمكانية الوصول إلى الويب أو تحسين محركات البحث أو تطبيقات الويب التقدمية (PWAs) ، بينما توفر Lighthouse كل ما سبق.
لذلك عندما نستخدم PageSpeed Insights API لاختبار أداء تحميل عناوين URL المجمعة ، فليس لدينا أي بيانات إمكانية الوصول.
ومع ذلك ، يوفر PSI مزيدًا من المعلومات حول أداء سرعة الصفحة ، مثل “حجم DOM” ، و “Deepest DOM Child Element” ، و “إجمالي عدد المهام” ، وتوقيت “تحميل محتوى DOM”.
ميزة أخرى لواجهة برمجة تطبيقات PageSpeed Insights هي أنها تعطي أسماء مختلفة “للمقاييس المرصودة” و “المقاييس الفعلية”.
ستتعلم في هذا الدليل:
- كيفية إنشاء نص برمجي بيثون على مستوى الإنتاج.
- كيفية استخدام واجهات برمجة التطبيقات مع بايثون.
- كيفية إنشاء إطارات البيانات من استجابات API.
- كيفية تحليل ردود API.
- كيفية تحليل عناوين URL ومعالجة الردود من طلبات URL.
- كيفية تخزين استجابات API بالهيكل المناسب.
يظهر أدناه نموذج ناتج من استدعاء Page Speed Insights API مع Python.
مكتبات لاستخدام PageSpeed Insights API مع Python
فيما يلي المكتبات اللازمة لاستخدام واجهة برمجة تطبيقات PSI مع Python.
- أدوات الدعاية يسترد عناوين URL التجريبية من خريطة موقع الويب.
- الباندا هو بناء إطار البيانات وتسطيح إخراج JSON من API.
- تتكون الاستعلامات من تقديم طلب إلى نقطة نهاية API المحددة.
- JSON هو أخذ الرد من API ووضعه في نقطة القاموس المرتبطة على وجه التحديد.
- Datetime هو تعديل اسم ملف الإخراج المحدد بالتاريخ الحالي.
- URLlib هو تحليل عنوان URL لموقع الويب الخاص بموضوع الاختبار.
كيف تستخدم PSI API مع Python؟
لاستخدام PSI API مع Python ، اتبع الخطوات أدناه.
- احصل على مفتاح واجهة برمجة تطبيقات PageSpeed Insights.
- استيراد المكتبات اللازمة.
- قم بتحليل عنوان URL لموقع الويب الخاص بموضوع الاختبار.
- خذ التاريخ الحالي لاسم الملف.
- خذ عناوين URL في قائمة من خريطة الموقع.
- اختر المقاييس التي تريدها من PSI API.
- قم بإنشاء حلقة For لأخذ استجابة API لجميع عناوين URL.
- قم ببناء إطار البيانات باستخدام مقاييس PSI API المختارة.
- إخراج النتائج كـ XLSX.
1. احصل على PageSpeed Insights API Key
استخدم ال واجهة برمجة تطبيقات PageSpeed Insights وثائق للحصول على مفتاح API.
انقر فوق الزر “الحصول على المفتاح” أدناه.
اختر مشروعًا قمت بإنشائه في Google Developer Console.
تفعيل PageSpeed Insights API في هذا المشروع المحدد.
ستحتاج إلى استخدام مفتاح API المحدد في طلبات API الخاصة بك.
2. استيراد المكتبات اللازمة
استخدم الأسطر أدناه لاستيراد المكتبات الأساسية.
import advertools as adv import pandas as pd import requests import json from datetime import datetime from urllib.parse import urlparse
3. تحليل عنوان URL لموقع الويب الخاص بموضوع الاختبار
لتحليل عنوان URL لموقع الويب المتأثر ، استخدم بنية الشفرة أدناه.
domain = urlparse(sitemap_url) domain = domain.netloc.split(".")[1]
متغير “domain” هو النسخة التي تم تحليلها من عنوان URL لخريطة الموقع.
يمثل “netloc” قسم النطاق لعنوان URL المحدد. عندما نقسمها مع “.” يأخذ “القسم الأوسط” الذي يمثل اسم المجال.
هنا ، “0” لـ “www” ، و “1” لـ “domain name” ، و “2” لـ “domain extension” ، إذا قسمناه بـ “.”
4. خذ التاريخ الحالي لاسم الملف
لأخذ تاريخ وقت استدعاء الوظيفة المحدد ، استخدم طريقة “datetime.now”.
يوفر Datetime.now الوقت المحدد للوقت المحدد. استخدم “strftime” مع القيم “٪ Y” و “٪ m” و “٪ d”. “٪ Y” هي السنة. تعد “٪ m” و “٪ d” قيمتين رقميتين لـ الشهر واليوم المحدد.
date = datetime.now().strftime("%Y_%m_%d")
5. خذ عناوين URL في قائمة من خريطة الموقع
لأخذ عناوين URL كقائمة من ملف خريطة الموقع ، استخدم كتلة التعليمات البرمجية أدناه.
sitemap = adv.sitemap_to_df(sitemap_url) sitemap_urls = sitemap["loc"].to_list()
إذا قرأت ملف التدقيق الصحي لخريطة موقع Pythonيمكنك قراءة المزيد عن خرائط المواقع.
6. اختر المقاييس التي تريدها من PSI API
لاختيار خصائص JSON لاستجابة PSI API ، يجب أن ترى ملف JSON نفسه.
إنه وثيق الصلة بقراءة عناصر JSON وتحليلها وتسويتها.
بل إنها مرتبطة بـ الدلالي SEOبفضل مفهوم “الرسم البياني الموجه” والبيانات المنظمة “JSON-LD”.
في هذه المقالة ، لن نركز على فحص تسلسلات JSON الهرمية المحددة لاستجابة PSI API.
يمكنك رؤية المقاييس التي اخترتها لتجميعها من واجهة برمجة تطبيقات PSI. إنه أكثر ثراءً من الناتج الافتراضي الأساسي لـ PSI API ، والذي يعطي فقط Core Web Vitals ، أو Speed Index-Interaction to Next Paint ، و Time to First Byte ، و First Contentful Paint.
بالطبع ، فإنه يعطي أيضًا “اقتراحات” بقوله “تجنب تسلسل الطلبات الحرجة” ، ولكن ليست هناك حاجة لوضع جملة في كتلة البيانات.
في المستقبل ، يمكن أخذ هذه الاقتراحات ، أو حتى كل حدث سلسلة فردي ، وقيم KB و MS في عمود واحد باسم “psi_suggestions”.
بالنسبة للمبتدئين ، يمكنك التحقق من المقاييس التي اخترتها ، وسيكون قدرًا كبيرًا منها أولًا بالنسبة لك.
مقاييس PSI API ، القسم الأول أدناه.
fid = [] lcp = [] cls_ = [] url = [] fcp = [] performance_score = [] total_tasks = [] total_tasks_time = [] long_tasks = [] dom_size = [] maximum_dom_depth = [] maximum_child_element = [] observed_fcp = [] observed_fid = [] observed_lcp = [] observed_cls = [] observed_fp = [] observed_fmp = [] observed_dom_content_loaded = [] observed_speed_index = [] observed_total_blocking_time = [] observed_first_visual_change = [] observed_last_visual_change = [] observed_tti = [] observed_max_potential_fid = []
يتضمن هذا القسم جميع مقاييس سرعة الصفحة الأساسية التي تمت ملاحظتها ومحاكاتها ، بالإضافة إلى بعض المقاييس غير الأساسية ، مثل “DOM Content Loaded” أو “أول لوحة مهمة. “
يركز القسم الثاني من مقاييس PSI على توفير البايت والوقت الممكن من مقدار الكود غير المستخدم.
render_blocking_resources_ms_save = [] unused_javascript_ms_save = [] unused_javascript_byte_save = [] unused_css_rules_ms_save = [] unused_css_rules_bytes_save = []
يركز القسم الثالث من مقاييس PSI على وقت استجابة الخادم أو الفوائد أو غير ذلك من استخدام الصور المتجاوبة باستخدام الضرر.
possible_server_response_time_saving = [] possible_responsive_image_ms_save = []
ملاحظة: تأتي نتيجة الأداء الإجمالية من “performance_score”.
7. قم بإنشاء حلقة For لأخذ استجابة API لجميع عناوين URL
الحلقة for هي أخذ جميع عناوين URL من ملف Sitemap واستخدام واجهة برمجة تطبيقات PSI لكل منها واحدًا تلو الآخر. تحتوي حلقة for لأتمتة PSI API على عدة أقسام.
يبدأ القسم الأول من واجهة برمجة تطبيقات PSI للتكرار بمنع عناوين URL المكررة.
في ملفات Sitemap ، قد ترى عنوان URL يظهر عدة مرات. هذا القسم يمنعه.
for i in sitemap_urls[:9]: # Prevent the duplicate "/" trailing slash URL requests to override the information. if i.endswith("/"): r = requests.get(f"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={i}&strategy=mobile&locale=en&key={api_key}") else: r = requests.get(f"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={i}/&strategy=mobile&locale=en&key={api_key}")
لا تنس التحقق من “api_key” في نهاية نقطة نهاية PageSpeed Insights API.
تحقق من رمز الحالة. في ملفات Sitemap ، قد تكون هناك عناوين URL لرموز الحالة بخلاف 200 ؛ هذه تحتاج إلى التنظيف.
if r.status_code == 200: #print(r.json()) data_ = json.loads(r.text) url.append(i)
يضيف القسم التالي المقاييس المحددة إلى القاموس المحدد الذي أنشأناه قبل “_data”.
fcp.append(data_["loadingExperience"]["metrics"]["FIRST_CONTENTFUL_PAINT_MS"]["percentile"]) fid.append(data_["loadingExperience"]["metrics"]["FIRST_INPUT_DELAY_MS"]["percentile"]) lcp.append(data_["loadingExperience"]["metrics"]["LARGEST_CONTENTFUL_PAINT_MS"]["percentile"]) cls_.append(data_["loadingExperience"]["metrics"]["CUMULATIVE_LAYOUT_SHIFT_SCORE"]["percentile"]) performance_score.append(data_["lighthouseResult"]["categories"]["performance"]["score"] * 100)
يركز القسم التالي على عدد “المهام الإجمالية” وحجم DOM.
total_tasks.append(data_["lighthouseResult"]["audits"]["diagnostics"]["details"]["items"][0]["numTasks"]) total_tasks_time.append(data_["lighthouseResult"]["audits"]["diagnostics"]["details"]["items"][0]["totalTaskTime"]) long_tasks.append(data_["lighthouseResult"]["audits"]["diagnostics"]["details"]["items"][0]["numTasksOver50ms"]) dom_size.append(data_["lighthouseResult"]["audits"]["dom-size"]["details"]["items"][0]["value"])
يأخذ القسم التالي “عمق DOM” و “أعمق عنصر DOM”.
maximum_dom_depth.append(data_["lighthouseResult"]["audits"]["dom-size"]["details"]["items"][1]["value"]) maximum_child_element.append(data_["lighthouseResult"]["audits"]["dom-size"]["details"]["items"][2]["value"])
يوضح القسم التالي نتائج الاختبار المحددة التي تمت ملاحظتها خلال واجهة برمجة تطبيقات Page Speed Insights API.
observed_dom_content_loaded.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedDomContentLoaded"]) observed_fid.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedDomContentLoaded"]) observed_lcp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["largestContentfulPaint"]) observed_fcp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["firstContentfulPaint"]) observed_cls.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["totalCumulativeLayoutShift"]) observed_speed_index.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedSpeedIndex"]) observed_total_blocking_time.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["totalBlockingTime"]) observed_fp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedFirstPaint"]) observed_fmp.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["firstMeaningfulPaint"]) observed_first_visual_change.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedFirstVisualChange"]) observed_last_visual_change.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["observedLastVisualChange"]) observed_tti.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["interactive"]) observed_max_potential_fid.append(data_["lighthouseResult"]["audits"]["metrics"]["details"]["items"][0]["maxPotentialFID"])
يأخذ القسم التالي مقدار التعليمات البرمجية غير المستخدمة والبايتات المهدرة ، بالمللي ثانية ، بالإضافة إلى موارد حظر العرض.
render_blocking_resources_ms_save.append(data_["lighthouseResult"]["audits"]["render-blocking-resources"]["details"]["overallSavingsMs"]) unused_javascript_ms_save.append(data_["lighthouseResult"]["audits"]["unused-javascript"]["details"]["overallSavingsMs"]) unused_javascript_byte_save.append(data_["lighthouseResult"]["audits"]["unused-javascript"]["details"]["overallSavingsBytes"]) unused_css_rules_ms_save.append(data_["lighthouseResult"]["audits"]["unused-css-rules"]["details"]["overallSavingsMs"]) unused_css_rules_bytes_save.append(data_["lighthouseResult"]["audits"]["unused-css-rules"]["details"]["overallSavingsBytes"])
القسم التالي هو تقديم فوائد الصورة سريعة الاستجابة ووقت استجابة الخادم.
possible_server_response_time_saving.append(data_["lighthouseResult"]["audits"]["server-response-time"]["details"]["overallSavingsMs"]) possible_responsive_image_ms_save.append(data_["lighthouseResult"]["audits"]["uses-responsive-images"]["details"]["overallSavingsMs"])
القسم التالي هو التأكد من أن الوظيفة تستمر في العمل على الخطأ.
else: continue
مثال على استخدام Page Speed Insights API مع Python للاختبار الجماعي
لاستخدام كتل تعليمات برمجية محددة ، ضعها في دالة Python.
قم بتشغيل البرنامج النصي وستحصل على 29 مقياسًا متعلقًا بسرعة الصفحة في الأعمدة أدناه.
استنتاج
توفر PageSpeed Insights API أنواعًا مختلفة من ملفات مقاييس أداء تحميل الصفحة.
يوضح كيف ينظر مهندسو Google إلى مفهوم أداء تحميل الصفحة وفي النهاية يستخدمون هذه المقاييس كمنظور للترتيب وتجربة المستخدم وفهم الجودة.
يمنحك استخدام Python لاختبار سرعة الصفحة المجمعة نظرة ثاقبة على موقع الويب بالكامل لمساعدتك في تحليل تجربة المستخدم المحتملة ، وكفاءة الزحف ، ومعدل التحويل ، وتحسينات الترتيب.
المزيد من الموارد:
الصورة المميزة: Dundanim / Shutterstock
if( sopp != 'yes' && addtl_consent != '1~' ){
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');
if( typeof sopp !== "undefined" && sopp === 'yes' ){ fbq('dataProcessingOptions', ['LDU'], 1, 1000); }else{ fbq('dataProcessingOptions', []); }
fbq('init', '1321385257908563');
fbq('track', 'PageView');
fbq('trackSingle', '1321385257908563', 'ViewContent', { content_name: 'pagespeed-insights-api-python-test', content_category: 'technical-seo digital-marketing-tools' }); }
#اختبار #أداء #التحميل #المجمع #باستخدام #PageSpeed #Insights #API #Python
المصدر
تعليقات
إرسال تعليق