Einfache Verwendung der Nifty Cloud API mit Botocore und Python

Dieser Artikel ist der 12. Tagesartikel von NIFTY Adventskalender 2016.

Gestern war ein Artikel von @ alice02 Eine Geschichte über eine Ruby-Studiensitzung unter neuen Mitarbeitern. Ich war froh, dass mein Name ein wenig erwähnt wurde.

Ich bin @umiiiiins, ein Ingenieurlehrling für das erste Jahr von Nifty-Absolventen. Ich wurde kürzlich einer Abteilung zugewiesen und hatte die Möglichkeit, auf die Nifty Cloud-API zuzugreifen. Daher möchte ich darüber sprechen, wie man mit Python einfach eine sehr einfache Nifty Cloud-API erstellt.

Nifty Cloud API

Nifty Cloud bietet verschiedene Funktionen als API. Zum Senden einer Anfrage sind 1 bis 4 Signaturversionen erforderlich, und die verfügbaren Signaturen variieren je nach Dienst. Dieses Mal verwenden wir als Beispiel die Nifty Cloud Script API und die Signaturversion 4.

Was ist Botocore?

Eine Low-Level-Schnittstelle für AWS, die derzeit in der AWS CLI und in boto3 verwendet wird. Da die Nifty Cloud API-Signatur auf dieselbe Weise wie AWS generiert wird, können Sie Botocore verwenden. Wenn Sie interessiert sind, überprüfen Sie bitte den Quellcode im Repository botocore.

Vorbereitung

Installieren Sie Python (diesmal verwende ich 3.5.2) Führen Sie Quick Start Von Nifty Cloud Script aus. Registrieren Sie den Zugriffsschlüssel und den geheimen Schlüssel, die aus dem roten Rahmenteil des Bildes erhalten wurden, als ACCESS_KEY_ID und SECRET_ACCESS_KEY in den Umgebungsvariablen. [Systemsteuerung]Capture.JPG

Jetzt möchte ich das Skript ausführen.

Eigentlich versuchen

Legen Sie zunächst die erforderliche Anforderungs-URL, den Header und die Parameter unter Bezugnahme auf die Skript-API-Referenz fest.

script_api.py


url = "https://script.api.cloud.nifty.com/2015-09-01" 
headers = {
    'X-Amz-Target': '2015-09-01.ExecuteScript',
}
params = {
    'ScriptIdentifier': 'test.js',
    'Method': 'GET',
    'Header': '{}',
    'Body': '{}',
    'Query': '{"name":"Umino"}',
}

Verwenden Sie als Nächstes Botocore, um Signaturen zu generieren und anzufordern. Stellen Sie zu diesem Zeitpunkt sicher, dass die Methode des AWS Request-Arguments korrekt ist.

script_api.py


credentials = Credentials(os.environ["ACCESS_KEY_ID"],os.environ["SECRET_ACCESS_KEY"])
request = AWSRequest(method="POST",url=url,data=params,headers=headers)
SigV4Auth(credentials, "ExecuteScript",'east-1').add_auth(request)
response = BotocoreHTTPSession().send(request.prepare())

Importieren Sie, was Sie brauchen, und klicken Sie auf das obige Programm ...

<?xml version='1.0' encoding='utf-8'?>
<executescriptresponse>
    <requestid>
        9b195209-c025-4522-8e6a-9840324f3fb6
    </requestid>
    <executescriptresult>
        <result>
            <responsestatus>
                200
            </responsestatus>
            <scriptidentifier>
                test.js
            </scriptidentifier>
            <requestquery>
                <![CDATA[{"name":"Umino"}]]>
            </requestquery>
            <requestbody>
                <![CDATA[{}]]>
            </requestbody>
            <responseheader>
                <![CDATA[{"Content-Type":"text/plain"}]]>
            </responseheader>
            <requestheader>
                <![CDATA[{}]]>
            </requestheader>
            <responsedata>
                <![CDATA[Umino]]>
            </responsedata>
            <status>
                200
            </status>
        </result>
    </executescriptresult>
</executescriptresponse>

Es war erfolgreich und die Ergebnisse wurden zurückgegeben. Weitere Informationen finden Sie im Skript unter hier.

Ein kleiner Kommentar

Dieses Mal wird die Signatur durch verschiedene Methoden generiert, die in addAuth der SigV4Auth-Klasse aufgerufen werden. Zusätzlich zu SigV4Auth gibt es AigV2Auth, das die Signaturversion 2 generiert, sodass Sie mit diesen auf einfache Weise Verwendungssignaturen mit der Nifty Cloud-API generieren können. Wenn Sie versuchen, das Innere des Headers vor und nach der Ausführung von SigV4Auth zu vergleichen, sehen Sie, dass die Autorisierung nach der Ausführung hinzugefügt wird.

Vor der Signaturerstellung

{
 'X-Amz-Target': '2015-09-01.ExecuteScript',
}

Nach der Signaturerstellung

{
 'X-Amz-Target': '2015-09-01.ExecuteScript',
 'X-Amz-Date': '20161211T090451Z',
 'Authorization': 'AWS4-HMAC-SHA256 
               Credential=OOICPHKDBZZE9ZNGEBV7/20161211/east-1/ExecuteScript/aws4_request, 
               SignedHeaders=content-type;host;x-amz-date;x-amz-target,
               Signature=ffddxxxxxxxxxxxxxxxxxxxxxxxxxxxxd4',
}

Wenn ich versuche, Describe Instances des Servers mit SigV2Auth auszuführen, wird die generierte Signatur nach der Ausführung dem Parameter hinzugefügt.

Vor der Signaturerstellung

{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
 'Action': 'DescribeInstances', 'SignatureVersion': '2', 
 'Timestamp': '2016-12-11T18:28:03Z', 'SignatureMethod': 'HmacSHA256'
}

Nach der Signaturerstellung

{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
 'Action': 'DescribeInstances', 'SignatureVersion': '2', 
 'Timestamp': '2016-12-11T09:28:03Z', 'SignatureMethod': 'HmacSHA256',
 'Signature': 'FydxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqRc='
}

Zusammenfassung

Dieses Mal habe ich als Beispiel für die Verwendung von Botocore ein Skript angegeben, das möglicherweise nur selten von Python aufgerufen wird, aber natürlich auch für andere Dienste als Skripte verwendet werden kann. Wenn es um die Signaturversion 4 geht, ist es ziemlich schwierig, sie selbst zu implementieren. Wenn Sie Probleme mit der Verwendung der Nifty Cloud-API von Python haben, lesen Sie diese bitte.

Morgen ist "Verwalten der Ansible-Konfigurationsinformationen mit Graph DB" von @ntoofu!

Recommended Posts

Einfache Verwendung der Nifty Cloud API mit Botocore und Python
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Verwenden Sie die Trello-API mit Python
Verwenden Sie die Twitter-API mit Python
Verwenden Sie die Unterschall-API mit Python3
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
Python: So verwenden Sie Async mit
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Verwendung der Python-API von OpenPose
Einfach zu bedienendes Jupyter-Notebook (Python3.5)
[Python] Verwendung der Typetalk-API
Führen Sie Jupyter mit der REST-API aus, um Python-Code zu extrahieren und zu speichern
[Version September 2020] Erläutert das Verfahren zur Verwendung der Google Mail-API mit Python
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python
So installieren und verwenden Sie pandas_datareader [Python]
Fraktal zum Erstellen und Spielen mit Python
[Einführung in Python] Verwenden wir foreach mit Python
Verwenden Sie PIL oder Pillow mit Cygwin Python
Einfache Möglichkeit, Wikipedia mit Python zu verwenden
Verwenden Sie die Google Cloud Vision-API von Python
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von Python zip und Aufzählung
Verwendung der Cloud Vision API von GCP
Einfach! Verwenden Sie gensim und word2vec mit MAMP.
Einfaches Web-Scraping mit Python und Ruby
Verwendung ist und == in Python
Verwenden Sie Python und MeCab mit Azure-Funktionen
Herausforderung beim Erstellen eines Zeitachsenlistenberichts mit der Toggl-API und Python
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
Ich möchte MATLAB feval mit Python verwenden
Firebase: Verwenden Sie Cloud Firestore und Cloud Storage von Python
Einfache Möglichkeit, Python 2.7 unter Cent OS 6 zu verwenden
Vorgehensweise zur Verwendung der WEG-API von TeamGant (mit Python)
Textextraktion mit GCP Cloud Vision API (Python3.6)
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Verwendung der Google Cloud Translation API
Der einfachste Weg, OpenCV mit Python zu verwenden
Ich möchte Temporäres Verzeichnis mit Python2 verwenden
Wie man tkinter mit Python in Pyenv benutzt
[Python] Verwendung von Hash-Funktion und Taple.
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Verwenden Sie Python und word2vec (gelernt) mit Azure Databricks
Verwenden Sie Python / Django mit dem Windows Azure Cloud Service!
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
[Python] Verwenden Sie JSON mit Python
Einfach zu bedienende Flasche
Verwenden Sie Mecab mit Python 3
Verwenden Sie DynamoDB mit Python
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Python mit Docker
Einfach zu bedienendes SQLite3
[BigQuery] Verwendung der BigQuery-API für die Python-Tabellenerstellung-