Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden

Ich habe versucht, die API von Unity Cloud Build von Python zu verwenden. Ich denke, es kann verwendet werden, wenn Dateien hochgeladen werden, die in Zusammenarbeit mit anderen Systemen erstellt wurden.

Ich habe versucht, Unity Cloud Build zu verwenden

Der Punkt, dass es aus dem Quellcode von BitBucket (früher: Stash) erstellt werden kann, war ebenfalls hoch. Die anfängliche Build-Einstellung betrug ca. 5 Minuten mit einer Schaltfläche, daher wird die Erklärung weggelassen.

Das erste Mal wird es manuell erstellt und das zweite und nachfolgende Mal werden über die API verwendet. Alle Details der diesmal verwendeten API sind im offiziellen Dokument beschrieben.

1. Build-Ausführung

Wenn der Build fehlschlägt, wird der HTTP-Status 202 zurückgegeben. Die URL der fertigen Datei ist eine separate Datei

u.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

import requests

API_TOKEN = "****"
ORGID = "****"
PROJECTS = "****"
BUILD_TARGETS = "****"


def get_url(func_name, extend=None):
    auth_base = "orgs/{orgid}/projects/{projectid}/buildtargets/{buildtargetid}".format(orgid=ORGID,
                                                                                        projectid=PROJECTS,
                                                                                        buildtargetid=BUILD_TARGETS)
    if extend:
        url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}{extend}"
        return url_base.format(auth=auth_base, func=func_name, extend=extend)

    url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}"
    return url_base.format(auth=auth_base, func=func_name)


def get_headers():
    return {
        "Content-Type": "application/json",
        "Authorization": "Basic {token}".format(token=API_TOKEN),
    }


def execute_build():
    """
Build-Ausführung

    #Halbnormales System Bereits gebaut
    [{"buildtargetid":"****","buildTargetName":"****","error":"Cannot start build - already a build pending."}] 202
    """
    response = requests.post(get_url("builds"), headers=get_headers(), data={})
    print(response.text), response.status_code
    return

#Build-Ausführung
execute_build()

2. Erstellen Sie den Build-Status

Der Build-Status lautet wie folgt: {Warteschlange, SentToBuilder, gestartet, neu gestartet, Erfolg, Fehler, abgebrochen, unbekannt} Wenn keine Gebühr anfällt, ist die Wartezeit lang. Wenn der Build erfolgreich ist, wird er erfolgreich sein

u.py



def get_builds():
    """
Sie können die neuesten 25 Build-Informationen erhalten.
Wenn Sie ältere Daten erhalten möchten, per_Ändern Sie die Seite und die Seitenparameter
    """
    response = requests.get(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code
    return


def get_build(number):
    """
Sie können die angegebenen Build-Informationen abrufen

    #Halbnormales System
404 wenn es nicht existiert: {"error":"The requested object was not found."}

    :param number: int
    """
    response = requests.get(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code
    return


def get_latest_build():
    """
Sie können den neuesten 1 Build erhalten
    """
    build_start_result = requests.get(get_url("builds", extend="?per_page=1&page=1"), headers=get_headers())
    print(build_start_result.text), build_start_result.status_code
    return

#Holen Sie sich einen bestimmten Build
get_build(6)

#Holen Sie sich den neuesten Build
get_latest_build()

#Build-Batch abrufen
get_build_status()

3. Build Abbrechen

Gibt es etwas, das Sie nach der Implementierung von der API abbrechen möchten? Ich dachte. Es ist eine Spezifikation, die mit einer HTML-DELETE-Abfrage abgebrochen werden soll. Die DELETE-Abfrage wird dieses Jahr zum ersten Mal verwendet. Der Charakter des Ingenieurs, der die API dem REST-Prinzip treu gemacht hat, wurde irgendwie vermittelt.

u.py



def cancel_all():
    """
Alle Builds abbrechen
    """
    response = requests.delete(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code


def cancel(number):
    """
Brechen Sie einen bestimmten Build ab

    #Erfolgreiche Stornierung des normalen Systems
    204

    #Ein halbnormales System existiert nicht
    {"error":"The requested object was not found."} 404

    #Wenn Sie einen Build angeben, der einen quasi normalen Build abgeschlossen hat
    204

    :param number: int
    """
    response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code


#Spezifische Build-Stornierung
cancel(7)

#Alle Builds abbrechen
cancel_all()

4. Holen Sie sich die Download-URL

Wenn der Build erfolgreich ist, wird die Datei in S3 hochgeladen. Eine Funktion zum Abrufen der URL zum Herunterladen.

u.py



def get_latest_build_download_urls():
    """
Laden Sie die URL für den neuesten erfolgreichen Build herunter

    :return: str
    """
    response = requests.get(get_url("builds", extend="?buildStatus=success&per_page=1&page=1"),
                                      headers=get_headers())
    data = ujson.loads(response.text)
    assert len(data) > 0
    return data[0].get('links').get('download_primary').get('href')

#Laden Sie die URL für den neuesten erfolgreichen Build herunter
print get_latest_build_download_urls()

Die Quelle des fertigen Produkts

u.py


# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

import requests
import ujson

API_TOKEN = "****"
ORGID = "****"
PROJECTS = "****"
BUILD_TARGETS = "****"


def get_url(func_name, extend=None):
    auth_base = "orgs/{orgid}/projects/{projectid}/buildtargets/{buildtargetid}".format(orgid=ORGID,
                                                                                        projectid=PROJECTS,
                                                                                        buildtargetid=BUILD_TARGETS)
    if extend:
        url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}{extend}"
        return url_base.format(auth=auth_base, func=func_name, extend=extend)

    url_base = "https://build-api.cloud.unity3d.com/api/v1/{auth}/{func}"
    return url_base.format(auth=auth_base, func=func_name)


def get_headers():
    return {
        "Content-Type": "application/json",
        "Authorization": "Basic {token}".format(token=API_TOKEN),
    }


def execute_build():
    """
Build-Ausführung

    #Halbnormales System Bereits gebaut
    [{"buildtargetid":"****","buildTargetName":"****","error":"Cannot start build - already a build pending."}] 202
    """
    response = requests.post(get_url("builds"), headers=get_headers(), data={})
    print(response.text), response.status_code
    return


def get_builds():
    """
Sie können die neuesten 25 Build-Informationen erhalten.
Wenn Sie ältere Daten erhalten möchten, per_Ändern Sie die Seite und die Seitenparameter
    """
    response = requests.get(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code
    return


def get_build(number):
    """
Sie können die angegebenen Build-Informationen abrufen

    #Halbnormales System
404 wenn es nicht existiert: {"error":"The requested object was not found."}

    :param number: int
    """
    response = requests.get(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code
    return


def get_latest_build():
    """
Sie können den neuesten 1 Build erhalten
    """
    build_start_result = requests.get(get_url("builds", extend="?per_page=1&page=1"), headers=get_headers())
    print(build_start_result.text), build_start_result.status_code
    return


def get_latest_build_download_urls():
    """
Laden Sie die URL für den neuesten erfolgreichen Build herunter

    :return: str
    """
    response = requests.get(get_url("builds", extend="?buildStatus=success&per_page=1&page=1"),
                                      headers=get_headers())
    data = ujson.loads(response.text)
    assert len(data) > 0
    return data[0].get('links').get('download_primary').get('href')


def cancel_all():
    """
Alle Builds abbrechen
    """
    response = requests.delete(get_url("builds"), headers=get_headers())
    print(response.text), response.status_code


def cancel(number):
    """
Brechen Sie einen bestimmten Build ab

    #Erfolgreiche Stornierung des normalen Systems
    204

    #Ein halbnormales System existiert nicht
    {"error":"The requested object was not found."} 404

    #Wenn Sie einen Build angeben, der einen quasi normalen Build abgeschlossen hat
    204

    :param number: int
    """
    response = requests.delete(get_url("builds", extend="/" + str(number)), headers=get_headers())
    print(response.text), response.status_code


#Spezifische Build-Stornierung
# cancel(7)

#Alle Builds abbrechen
# cancel_all()

#Holen Sie sich einen bestimmten Build
# get_build(6)

#Holen Sie sich den neuesten Build
# get_latest_build()

#Build-Batch abrufen
# get_build_status()

#Build-Ausführung
# execute_build()

#Laden Sie die URL für den neuesten erfolgreichen Build herunter
print get_latest_build_download_urls()

Recommended Posts

Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Führen Sie Ansible über Python mithilfe der API aus
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, Headless Chrome von Selenium zu verwenden
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe Python> autopep8 ausprobiert
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe Python> Decorator ausprobiert
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, die Detect Labels-API von AWS Rekognition zu verwenden
Ich habe versucht, Remote API mit GAE / J zu verwenden
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich möchte mit Python eine E-Mail von Google Mail senden.
Ich habe Python ausprobiert! ] Heute Abschluss von "Jeder Python! Was ist Python!"!
Ich habe versucht, Mecab mit Python2.7, Ruby2.3, PHP7 zu verwenden
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Mit Python abflachen
Ich habe fp-Wachstum mit Python versucht
[Python] Ich habe sofort versucht, die VS-Code-Erweiterung von Pylance zu verwenden.
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, TradeWave zu verwenden (BitCoin-Systemhandel in Python)
Ich habe versucht, easydict (Memo) zu verwenden.
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API