Die Screenshots stammen aus DroidKaigi / Konferenz-App-2020.
Wir entwickeln Apps für unsere eigenen Dienste. Als vorläufigen Bericht, wenn der App-Updater veröffentlicht wird, möchte ich die Freigabe der Screenshot-Liste neu erstellter oder geänderter Bildschirme für die Planungs- und Betriebsabteilungen teilweise automatisieren. Wenn Sie es später in einem Satz zusammenstellen, können Sie es auch effizient erstellen, da bereits eine Sammlung von Screenshots vorhanden ist. Das Entwicklungsteam, dem ich angehöre, hat die Angewohnheit, Screenshots und Gif-Animationen in den Text der Pull-Anfrage einzufügen, wenn eine Überprüfung der Pull-Anfrage angefordert wird. Daher werde ich dieses Bild mit der Planungs- und Betriebsabteilung teilen.
Vorbereitungen
sh
mkdir Downloads
pip install PyGithub BeautifulSoup4 requests
Ausführung Python-Quellcode
main.py
import os
from datetime import datetime, timedelta
#Konvertieren Sie von Markdown in HTML
import markdown
#Github API-Client
from github import Github
#HTML-Parser
from bs4 import BeautifulSoup
#HTTP-Client
import requests
#Holen Sie sich die Erweiterung vom MIME-Typ
import mimetypes
#Zielverzeichnis
save_dir = "Downloads"
#Erstellen Sie ein verantwortliches Objekt, um Markdown in HTML zu konvertieren
md = markdown.Markdown()
#Machen Sie hier ein Zugriffstoken
# https://github.com/settings/tokens
access_token = os.environ['GITHUB_API_ACCESS_TOKEN']
#Erstellen Sie ein Github-Objekt mit einem Zugriffstoken
g = Github(access_token)
#Repository abrufen
gr = g.get_organization('DroidKaigi').get_repo('conference-app-2020')
#Für persönliche Repositories
# gr = g.get_user().get_repo('repository_name')
#Bereich zum Herunterladen(Standard für das Erstellungsdatum der Anforderung ziehen)
start_datetime = datetime(2020, 1, 1)
end_datetime = datetime(2020, 1, 13)
#Holen Sie sich eine Liste der geschlossenen Pull-Anforderungen
prs = gr.get_pulls(state='close', base='master')
for pr in prs:
#Die Reihenfolge ist in absteigender Reihenfolge des Erstellungsdatums
if pr.created_at < start_datetime:
#Sie müssen nicht weiter zurückgehen
break
if pr.created_at < end_datetime:
#Geben Sie den Downloadbereich ein
#Beschränkt auf fusionierte PR
if pr.merged != True:
continue
print("#%d %s" % (pr.number, pr.title))
#Konvertieren Sie den Markdown des Pull-Anforderungskörpers in HTML
html = md.convert(pr.body)
#HTML analysieren
soup = BeautifulSoup(html, features='html.parser')
#Für alle img Tags
for img_index, img in enumerate(soup.find_all('img')):
#Ruft den Wert des src-Attributs als Bild-URL ab
url = img.get('src')
#Unterstützt Fälle, in denen das src-Attribut leer ist
if len(url) == 0:
continue
#URL herunterladen
r = requests.get(url)
if r.ok:
#Erfolgreicher Download
#Holen Sie sich den MIME-Typ der Datei
content_type = r.headers['Content-Type']
#Holen Sie sich die Erweiterung vom MIME-Typ
ext = mimetypes.guess_extension(content_type)
#Ich möchte den Titel der Pull-Anforderung in den Dateinamen aufnehmen
#Wenn der Dateiname einen Schrägstrich enthält, können Sie keine Datei erstellen.
#In vollen Winkel konvertieren
title = pr.title.replace('/', '/')
#Zielpfad erstellen
path = "%s/%04d_%s_%02d.%s" % (save_dir,
pr.number, title, img_index, ext)
#Bild speichern
with open(path, 'wb') as f:
f.write(r.content)
else:
#Download-Fehler
message = "Image download error\n%s\n%d %s" % (
url, r.status_code, r.reason)
raise RuntimeError(message)
Derzeit wird der obige Quellcode auf einem lokalen PC ausgeführt und sofort in einen lokalen Ordner heruntergeladen. Zum Beispiel wäre es gut, eine solche Anpassung an die Situation der Organisation oder des Projekts vorzunehmen.
Lassen Sie im Release-Workflow von Homebrew App die PR-Liste nach der vorherigen Versionsversion und Release Note zusammenführen. Ich führe ein Python-Skript aus, das automatisch erstellt wird (Quickecho / Releases). Wenn Sie den Text aus der PR-Liste erhalten und den gleichen Vorgang wie oben ausführen, können Sie das Bild nur für den Unterschied im Versions-Upgrade herunterladen.
Link zum entsprechenden Quellcode
Bitte beachten Sie, dass die Screenshots, die Sie mit anderen Abteilungen teilen, keine vertraulichen Informationen wie AWS-Zugriffsschlüssel enthalten.
Recommended Posts