Les captures d'écran sont empruntées à DroidKaigi / conference-app-2020.
Nous développons des applications pour nos propres services. En guise de rapport préliminaire lors de la sortie du programme de mise à jour de l'application, je souhaite automatiser partiellement le partage d'une liste de captures d'écran nouvellement créées ou modifiées avec les services de planification et d'exploitation. De plus, lorsque vous le regroupez dans une phrase plus tard, vous pouvez le faire efficacement car il existe une collection de captures d'écran qui ont déjà été collectées. L'équipe de développement à laquelle j'appartiens a l'habitude de mettre des captures d'écran et des animations Gif dans le corps de la pull request lors de la demande de révision de la pull request, donc je partagerai cette image avec le service de planification et des opérations.
Préparation préalable
sh
mkdir Downloads
pip install PyGithub BeautifulSoup4 requests
Exécution du code source Python
main.py
import os
from datetime import datetime, timedelta
#Convertir de Markdown en HTML
import markdown
#Client API Github
from github import Github
#Analyseur HTML
from bs4 import BeautifulSoup
#Client HTTP
import requests
#Obtenir l'extension du type MIME
import mimetypes
#Répertoire de destination
save_dir = "Downloads"
#Créer un objet responsable pour convertir le markdown en HTML
md = markdown.Markdown()
#Créez un jeton d'accès ici
# https://github.com/settings/tokens
access_token = os.environ['GITHUB_API_ACCESS_TOKEN']
#Créer un objet Github avec un jeton d'accès
g = Github(access_token)
#Obtenir le référentiel
gr = g.get_organization('DroidKaigi').get_repo('conference-app-2020')
#Pour les référentiels personnels
# gr = g.get_user().get_repo('repository_name')
#Gamme à télécharger(Date de création de la demande d'extraction standard)
start_datetime = datetime(2020, 1, 1)
end_datetime = datetime(2020, 1, 13)
#Obtenir une liste des pull requests fermées
prs = gr.get_pulls(state='close', base='master')
for pr in prs:
#L'ordre est l'ordre décroissant de la date de création
if pr.created_at < start_datetime:
#Vous n'avez plus besoin de revenir en arrière
break
if pr.created_at < end_datetime:
#Entré dans la plage de téléchargement
#Limité aux relations publiques fusionnées
if pr.merged != True:
continue
print("#%d %s" % (pr.number, pr.title))
#Convertir le démarquage du corps de la demande d'extraction en HTML
html = md.convert(pr.body)
#Analyser le HTML
soup = BeautifulSoup(html, features='html.parser')
#Pour toutes les balises img
for img_index, img in enumerate(soup.find_all('img')):
#Récupère la valeur de l'attribut src comme URL de l'image
url = img.get('src')
#Prend en charge les cas où l'attribut src est vide
if len(url) == 0:
continue
#Télécharger l'URL
r = requests.get(url)
if r.ok:
#Téléchargement réussi
#Obtenez le type mime du fichier
content_type = r.headers['Content-Type']
#Obtenir l'extension du type mime
ext = mimetypes.guess_extension(content_type)
#Je souhaite inclure le titre de la demande d'extraction dans le nom du fichier
#Si le nom de fichier contient une barre oblique, vous ne pouvez pas créer de fichier.
#Convertir en plein angle
title = pr.title.replace('/', '/')
#Créer un chemin de destination
path = "%s/%04d_%s_%02d.%s" % (save_dir,
pr.number, title, img_index, ext)
#Enregistrer l'image
with open(path, 'wb') as f:
f.write(r.content)
else:
#Échec du téléchargement
message = "Image download error\n%s\n%d %s" % (
url, r.status_code, r.reason)
raise RuntimeError(message)
Pour le moment, le code source ci-dessus est exécuté sur un PC local et téléchargé dans un dossier local à la fois. Par exemple, il serait bon de faire une telle personnalisation en fonction de la situation de l'organisation ou du projet.
Dans le workflow de publication de Homebrew App, obtenez la liste des relations publiques fusionnée après la version précédente et la [Note de publication](https://github.com/tfandkusu/ J'exécute un script Python qui crée automatiquement (quickecho / releases). Si vous obtenez le texte de la liste PR et effectuez le même processus que ci-dessus, vous ne pouvez télécharger l'image que pour la différence de mise à niveau de version.
Lien vers le code source applicable
Veuillez vous assurer que les captures d'écran que vous partagez avec d'autres services ne contiennent pas d'informations sensibles telles que les clés d'accès AWS.
Recommended Posts