Lassen Sie Python die durchschnittliche Punktzahl einer Seite mithilfe der PageSpeed Insights-API messen

Einführung

Das Produkt, zu dem ich jetzt gehöre, verfügt über PageSpeed Insights (PSI), um höhere Suchergebnisse anzuzeigen und Stress beim Surfen auf der Website zu reduzieren. Wir messen die Verbesserung der Seitengeschwindigkeit mit.

Die Verbesserungsergebnisse werden vorher / nachher gemessen, aber je nach Zeitpunkt der Messung kann der PSI-Wert einen Spielraum von 10 bis 30 Punkten aufweisen ** Unschärfe **.

Deshalb hat mein Team mehrmals gemessen, anstatt einmal pro Seite.

--Durchschnittliche Punktzahl

Ich entschied mich für die Methode der Beschreibung.

Je mehr Seiten Sie messen möchten, desto schwieriger ist es jedoch zu warten, indem Sie auf die Schaltfläche "Analysieren" klicken. Dieses Mal habe ich versucht, dies mithilfe der API effizienter zu gestalten.

Zielleserbild

Fertiges Produkt

kotahashihama/psi-score-collector https://github.com/kotahashihama/psi-score-collector

API-Schlüssel abrufen

Um Daten von der PageSpeed Insights-API abzurufen, benötigen Sie den API-Schlüssel als Parameter, wenn Sie darauf zugreifen.

Sie können es auf der folgenden Seite erhalten.

Versuchen Sie es mit der PageSpeed Insights API | Google Developers https://developers.google.com/speed/docs/insights/v5/get-started

Es ist nicht gut für die Sicherheit, den API-Schlüssel so zu belassen, wie er im Projektcode enthalten ist. Deshalb habe ich die Bibliothek "python-dotenv" verwendet und sie als Umgebungsvariable in ".env" verwaltet.

Terminal


pip install python-dotenv

config.py


from dotenv import load_dotenv
load_dotenv()

import os
API_KEY = os.getenv('API_KEY')

.env


API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Einstellungselemente vorbereiten

Da wir jede festgelegte Anzahl von Messungen nacheinander messen möchten, sind die folgenden Elemente erforderlich.

main.py


#Anzahl der Messungen
measurement_count = 3;

#Messziel-URL
url_list = [
  'https://www.google.com/',
  'https://www.yahoo.co.jp/',
  'https://www.bing.com/'
]

Es scheint ursprünglich gut zu sein, den Einstellungsinhalt von der Verarbeitung zu trennen, aber diesmal werden wir es tun.

Beschreibung der Hauptverarbeitung

Für jede URL

--Anzahl der Schritte

Wird ausgegeben und schließlich wird die Meldung zum Abschluss der Messung angezeigt.

main.py


print('\n'.join(map(str, url_list)))
print(f'Wird gemessen...({measurement_count}Zeitmessung)')

for i, url in enumerate(url_list):
  print(f'\n({i + 1}/{len(url_list)}) {url}')

  measure('mobile')
  measure('desktop')

  print('\n' + '=' * 60)

print('\n Messung abgeschlossen!')

Lassen Sie uns Punkte bekommen

Verfügen Sie über die URL und die Parameter, um auf die SPI-API zuzugreifen.

main.py


api_url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed'
api_key = config.API_KEY

payload = { 'key': api_key }

In der oben erstellten config.py werden die Umgebungsvariablen aus .env gelesen.

main.py


import config

Lesen wir config und setzen den Wert auf api_key.

Verarbeitung zum Abrufen von Punkten

Zunächst ist unten der gesamte Code.

main.py


def measure(device):
  device_name = {
    'mobile': 'Handy, Mobiltelefon',
    'desktop': 'Computer'
  }

  print(f'[ {device_name[device]} ]')

  payload['strategy'] = device
  url_name = api_url + "?url=" + url

  scores = []

  for i in range(measurement_count):
    result = requests.get(url_name, params = payload)
    result_json = result.json()
    result_score = result_json['lighthouseResult']['categories']['performance']['score']
    displayed_score = math.floor(result_score * 100)

    scores.append(displayed_score)
    print(displayed_score, end=' ')

  score_average_raw = numpy.average(scores)
  score_average = Decimal(str(score_average_raw)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)
  score_max = numpy.amax(scores)
  score_min = numpy.amin(scores)
  print(f'\n Durchschnitt{score_average}Punkt (niedrigster){score_min}Punkt, das Beste{score_max}Punkt)')

In diesem Prozess werden zwei Haupttypen von Bibliotheken verwendet.

tun.

(Ich werde diesmal nicht darauf eingehen, aber ich denke, es ist einfacher, die Python-Bibliothek für Teammitglieder freizugeben, wenn Sie Abhängigkeiten mit Poetry usw. verwalten.)

Bibliothek für den Zugriff auf die API

Verwenden Sie eine Python-Bibliothek namens "Anfragen".

Terminal


pip install requests

main.py


import requests

main.py


result = requests.get(url_name, params = payload)
result_json = result.json()
result_score = result_json['lighthouseResult']['categories']['performance']['score']

Greifen Sie mit get () auf die API zu, konvertieren Sie das Ergebnis mit json () in JSON und verfolgen Sie die Punktzahl, in der die Punktzahl gespeichert ist.

Bibliothek zur Berechnung der Ergebnisse

Ich benutze die Python-Bibliothek des Berechnungssystems. Von diesen ist numpy standardmäßig nicht enthalten, installieren Sie es also mit pip.

Terminal


pip install numpy

main.py


import numpy

Da decimal nur das Decimal-Objekt und die Rundungskonstante ROUND_HALF_UP verwendet, wird es beim Import in dieser Form gelesen.

main.py


from decimal import Decimal, ROUND_HALF_UP

main.py


score_average_raw = numpy.average(scores)
score_average = Decimal(str(score_average_raw)).quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)
score_max = numpy.amax(scores)
score_min = numpy.amin(scores)

tun.

Versuchen Sie es mit

Nach der Ausführung werden Punkte gesammelt, indem es in Ruhe gelassen wird. Es kann bequemer sein, etwas wie Terminal-Notifier zu verwenden, um das Ende zu signalisieren.

Terminal


py main.py

スクリーンショット 2020-07-18 午後8.26.48.png

Die Messergebnisse werden so akkumuliert.

Zusammenfassung

Die Datenerfassungsverarbeitung ist ein sehr grundlegender Bestandteil, daher scheint sie an verschiedenen Stellen im Unternehmen eingesetzt werden zu können. Als Ingenieur möchte ich in der Lage sein, solche Werkzeuge zu erstellen, damit ich ein- und ausatmen kann.

Es war also mein erster Qiita-Artikel. Nein!

Recommended Posts

Lassen Sie Python die durchschnittliche Punktzahl einer Seite mithilfe der PageSpeed Insights-API messen
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Versuchen Sie, die Kraken-API mit Python zu verwenden
Messen Sie die Assoziationsstärke in einer Kreuztabelle
Tweet mit der Twitter-API in Python
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
[Python] [Meta] Ist der Python-Typ ein Typ?
Die Geschichte der Verarbeitung A von Blackjack (Python)
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
[Python] Ein Programm, das die Partitur rundet
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
[Python] Summiert automatisch die Gesamtzahl der von Qiita mithilfe der API veröffentlichten Artikel
Konvertieren der cURL-API in ein Python-Skript (mithilfe des IBM Cloud-Objektspeichers)
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Holen Sie sich den Aufrufer einer Funktion in Python
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Kopieren Sie die Liste in Python
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Anonymer Upload von Bildern mit der Imgur-API (mit Python)
Berücksichtigung der Stärken und Schwächen von Python
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Lernen Sie Naive Bayes, das in Python 3.3 implementiert ist, auf einer Webseite kennen, die mit der Bing-API abgerufen wurde. Lassen Sie die Sätze klassifiziert werden
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Python: Berechnen Sie die konstante Flusstiefe eines rechteckigen Querschnitts mit der Brent-Methode
[Python] Implementierung von Clustering mit einem gemischten Gaußschen Modell
[Python] Ein Programm, das die Anzahl der Täler zählt
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
[Python] Ruft den Gesetzestext aus der e-GOV-Gesetz-API ab
[Python] Berechnen Sie den Durchschnittswert des Pixelwerts RGB des Objekts
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Python-Implementierung der Bayes'schen linearen Regressionsklasse
[Frage] Über die API-Konvertierung von Chat-Bot mit Python
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
Der Schmerz von gRPC mit Python. November 2019. (Persönliches Memo)
Senden und empfangen Sie Google Mail über die Google Mail-API mit Python
Verwenden wir die Python-Version des Confluence-API-Moduls.
Registrieren Sie Tickets mit der Redmine-API mithilfe von Python-Anforderungen
[Python] Verwenden der Linien-API [1. Erstellung des Beauty-Bots]
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
[Python] Maskiere das Bild mit Pillow zu einem Kreis
Aufgaben zu Beginn eines neuen Python-Projekts
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
Verwenden Sie die Such-API der National Parliament Library in Python
Studie aus Python Hour8: Verwenden von Paketen
[Python] Verwenden Sie die Face-API von Microsoft Cognitive Services
Ein Memorandum über die Umsetzung von Empfehlungen in Python