[First Ripple] [I am] Rufe JavaScript (Node.js) von Python auf und verarbeite Ripple

Einführung

In letzter Zeit sind sogenannte Fintech-Leute oft zu Followern auf Twitter geworden.

Wenn ich mir Tweets ansehe, gibt es einige Geschichten über Ripple. Es gibt viele große Gespräche über die Mizuho Bank, daher habe ich mich gefragt, ob ich, ein digitaler Hijikata (mit dem ich in letzter Zeit nicht vertraut bin), nichts damit zu tun habe.

Wenn ich mir die Developper-Site anschaue, mag es heutzutage natürlich sein, aber es ist ein Open-Source-Produkt, und ich konnte das API-System kostenlos fallen lassen. Es scheint, dass Sie in der Produktion mithilfe der von Node.js bereitgestellten API auf das Ripple-Netzwerk zugreifen können.

Ich bin ein trauriger Programmierer, der kürzlich jede Sprache ruiniert hat, aber unter ihnen wird Python ziemlich gut verwendet. Mit Python sind auch maschinelle Lernsysteme und Berechnungssysteme sehr umfangreich, sodass ich dachte, dass es ziemlich lustig wäre, automatische Verträge von AI mit Ripple zu verwenden. Dieses Mal ist der grundlegende Teil des Aufrufs von JavaScript aus Python für den Zugriff auf die Ripple-API abgeschlossen, daher werde ich ihn mit der Bedeutung einer Erinnerung veröffentlichen.

Also, was machst du

Es tut mir leid, dass der Prototyp diesmal als Funktion nicht sehr aussagekräftig ist. Es ist so.

Basierend auf diesem Ergebnis denke ich, dass es möglich sein wird, die Produktion von RippleAPI-Aufrufen zu steigern und sie mit TensorFlow zu verbinden.

Was ist Welligkeit?

Es ist ein Zahlungsprotokoll, das Blockchain anwendet. Nun, ich denke, es wird eine trendige Technologie sein. Die Oberfamilie ist hier.

In Bezug auf die Erklärung von Ripple ist die folgende Website von Giant Gox sehr gut organisiert. http://gtgox.com/

Ich denke, dass Sie die Gliederung verstehen können, indem Sie auf "Was ist Welligkeit" in ↑ schauen.

Was ist die Ripple-API?

Entwicklerseite ist hier. Unten ist ein Zitat daraus.

Das dezentrale Zahlungsnetzwerk von _Ripple basiert auf Open Source-Technologie, die jedem zur Verfügung steht. Hier sind die Tools, mit denen Entwickler Lösungen auf Open Source-Plattformen erstellen können. _

Die Ripple-API scheint eines der oben genannten "verfügbaren Tools" zu sein, und es scheint, dass Sie mit JavaScript auf den Ripple-Server zugreifen und Geld bewegen können.

Die Ripple-API wird auf node_js ausgeführt und verwendet ECMAScript 6 (ES2015). Mit anderen Worten, es scheint, dass Sie auf das System zugreifen können, indem Sie es mit babel-node ausführen.

API-Spezifikationen finden Sie auf der folgenden Website. https://ripple.com/build/rippleapi/

Das Skript ist hier so geschrieben. https://ripple.com/build/rippleapi/#boilerplate

Dieses Mal werden wir laut ↑ die API getLedger verwenden, um die Daten totalDrops abzurufen. Die API-Beschreibung finden Sie hier. https://ripple.com/build/rippleapi/#getledger

Konstruktion der Ausführungsumgebung

Es gibt einen Anfängerleitfaden für Ripple, daher ist es eine gute Idee, dort nachzuschauen. Hier sind einige Ergänzungen.

Wie ich in der Erklärung der API geschrieben habe, benötigen Sie eine Umgebung, in der node_js ausgeführt werden kann. Ich denke, es gibt viele Informationen zum Einrichten von node_js, daher werde ich sie weglassen. Wenn Sie die Ripple-API verwenden, ist zum Zeitpunkt des Schreibens (August 2016) 0.12, 4.x oder höher erforderlich. Erstellen Sie daher eine solche Umgebung.

Ich habe es auf MacOSX node_js 0.12.4 erstellt.

Wenn Sie node_js zum Laufen bringen, scheinen Sie bereit zu sein, wenn Sie babel in das folgende Verfahren einfügen (dies ist ein Verkauf von Beginner's Guide).

  1. Erstellen Sie einen geeigneten Ordner und verschieben Sie ihn.
  2. git init falls nötig (habe ich nicht).
  3. Schreiben Sie dort package.json. Der Inhalt befindet sich im Anfängerhandbuch, sodass Sie ihn kopieren und einfügen können.
  4. Wenn Sie `npm install `ausführen, wird Babel usw. eingehen.
  5. Wie Sie in der Anleitung sehen können, wird zum Zeitpunkt der Installation von npm eine Warnung angezeigt, aber es scheint, dass Sie dort "Ja" fühlen können.

Danach können Sie ein JavaScript-Programm schreiben und wie folgt ausführen, damit es funktioniert.

./node_modules/.bin/babel-Knotenskriptname

Rufen Sie die Ripple-API mit JavaScript auf

Dieses Mal rufen wir nur eine API auf, sodass das RIpple-Beispiel fast identisch ist. Ich denke, es ist einfacher zu verstehen, wenn man sich den Code ansieht, als ihn zu erklären.

"use strict";
const RippleAPI = require("ripple-lib").RippleAPI;

const api = new RippleAPI({
  server: "Geben Sie hier die Ripple-API-URL ein" // Public rippled server
});

api.connect().then(() => {
  //Die Verarbeitung nach dem Herstellen einer Verbindung zum Ripple-Netzwerk wird hier geschrieben.

  //Insbesondere wird die API aufgerufen.
  return api.getLedger()

}).then(info => {

  //Sie sind hier, wenn die API-Verarbeitung abgeschlossen ist.
  // info(Es gibt einen Rückgabewert (der Name scheint frei zu sein).

  //Dieses Mal wird totalDrops herausgenommen und ausgegeben.
  //→ Dies ist in der API-Dokumentation unter "Rückgabewert" definiert.
  //Es ist, als würde man den String von der Konsole an Python übergeben.
  console.log(info.totalDrops);

}).then(() => {

  //Jetzt, wo ich es getan habe, trenne ich mich von Ripple.
  return api.disconnect();

}).then(() => {

}).catch(console.error);

Sie müssen lediglich die API aufrufen, das Ergebnis in console.log ausgeben und Python benachrichtigen.

Geben Sie die Ripple-API-URL anstelle von __server ein. __ __

Sie finden die URL auf der folgenden Website. https://ripple.com/build/rippled-apis/#websocket-api

Da die URL im folgenden Beispiel geschrieben ist, können Sie sie von dort aus kopieren und einfügen. https://ripple.com/build/rippleapi/#boilerplate

In diesem Artikel gehe ich davon aus, dass das obige JavaScript in der Datei "get_totalDrops.js" behandelt wird. Wenn Sie es alleine ausführen, wird die Gesamtzahl der Drops wie folgt angezeigt (es dauert einige Sekunden bis 10 Sekunden, bis sie angezeigt wird).

$ ./node_modules/.bin//babel-node get_totalDrops.js 
99997222654452897

Rufen Sie JavaScript von Python aus auf.

Ich habe das geschrieben, aber diesmal ist es eine sehr schlampige Methode.

Da die diesmal zu erfassenden Daten eine Zahl sind, werden sie wie folgt funktionalisiert.

import commands

RIPPLE_API_COMMAND = "./node_modules/.bin//babel-node get_totalDrops.js"
def get_totalDrops():
    return long(commands.getoutput(RIPPLE_API_COMMAND))

Führen Sie get_totalDrops.js, das die RIpple-API aufruft, in command.getoutput aus. Das Ergebnis ist eine Zeichenfolge. Dieses Mal wird nur der numerische Wert ausgegeben, daher wird er in long konvertiert und als Rückgabewert verwendet.

Diesmal gab es nur einen Rückgabewert, aber wenn Sie mehrere Ergebnisse zurückgeben möchten, können Sie csv oder ähnliches verwenden. Für Massendaten brauchen wir meiner Meinung nach eine andere Logik.

Spezifikationen auf der Python-Seite

Diesmal

Ich werde alle Schritte versuchen. Daher werde ich mit den folgenden Anforderungen versuchen.

  1. Rufen Sie RippleAPI / getLedger zum angegebenen Zeitpunkt so oft auf.
  2. Berechnen Sie die Differenz zum vorherigen Zeitpunkt aus dem Rückgabewert (totalDrops).
  3. Sammeln Sie insgesamt Tropfen und Unterschiede.
  4. Nach dem angegebenen Aufruf werden zwei CSV-Dateien basierend auf den gesammelten Ergebnissen generiert.

Dieses Mal werde ich das Ergebnis mit R ausgeben, also werde ich die folgenden zwei CSV-Dateien ausgeben.

CSV für Analyseparameter

Geben Sie hier die Startzeit und das Intervall (Einheit: Sekunden) der einzelnen Daten ein. Das Folgende ist ein Beispiel.

time, by
2016/8/20 7:59, 300

Die erste Zeile ist der Titel und die zweite Zeile ist die Startzeit und das Intervall.

Daten CSV

Tragen Sie hier das tatsächliche Ergebnis (totalDrops und Differenz) ein. Das Folgende ist ein Beispiel.

total, diff
99997224489730292,0
99997224488731486,998806
99997224487789148,942338
99997224487350204,438944
99997224486780979,569225

In ähnlicher Weise ist die erste Zeile der Titel und wird ab der zweiten Zeile nacheinander mit dem Gefühl von totalDrops, Unterschied eingefügt. Das obige Beispiel ist ein 5-faches Beispiel.

Code auf der Python-Seite

Das ist nicht so kompliziert, deshalb werde ich den Code plötzlich veröffentlichen.

#!/usr/bin/python
# coding: UTF-8

import commands
import time
import datetime

# ---------Sie können Folgendes entsprechend ändern.

#Wie viele Sekunden, um die Ripple-API aufzurufen?
RIPPLE_WAIT_SECS   = 300

#Wie oft muss die RIpple-API aufgerufen werden?
RIPPLE_NUM_OF_GET_TOTALDROPS = 10

# ---------

#CSV-Dateiname der Parameter
RIPPLE_PARA_CSV_FILENAME = "ripple_para.csv"
#CSV-Dateiname mit totalDrops-Daten und Unterschieden
RIPPLE_DROP_CSV_FILENAME = "ripple_drops.csv"
#Lass dich diesmal machen_totalDrops.js Ausführungsbefehlsoperation
RIPPLE_API_COMMAND = "./node_modules/.bin//babel-node get_totalDrops.js"
#Definition des Zeilenvorschubcodes
RIPPLE_CR = "\r\n"

#Rufen Sie getLedger in der Ripple-API auf. Es wird mit einem numerischen Wert zurückgegeben.
def get_totalDrops():
    return long(commands.getoutput(RIPPLE_API_COMMAND))

#Es ist mühsam, also habe ich es zu einer Klasse gemacht.
class RippleTotalDros:

    def __init__(self):
        self.total = long(0)
        self.diff = long(-1)
        self.start_time = ""
        self.drop_csv = ""
        self.para_csv = ""

    #Generieren Sie eine Zeichenfolge basierend auf der aktuellen Zeit
    # need_seconed =Wahres Beispiel: 2016/8/15 12:27:5
    # need_seconed =Falsches Beispiel: 2016/8/15 12:27
    def get_date_time(self, need_second):
        d = datetime.datetime.today()
        text = str(d.year) + "/" + str(d.month) + "/" + str(d.day)
        text += " " + str(d.hour) + ":" + str(d.minute)
        if (need_second == True):
            text += ":" + str(d.second)
        return text

    #Berechnen Sie die Differenz zum Rückgabewert (totalDrops) von getLedger
    #In jeder Mitgliedsvariablen speichern
    def calc_drop_data(self, result):
        if self.diff >= 0:
            self.diff = self.total - result
        else:
            self.diff = 0
        self.total = result

    #CSV für die Parametereinstellung ist eine Mitgliedsvariable Abs_Erstellt in csv
    def make_para_csv(self):
        self.start_time = self.get_date_time(False)
        self.para_csv = "time, by" + RIPPLE_CR
        self.para_csv += self.start_time + "," + str(RIPPLE_WAIT_SECS) + RIPPLE_CR

    #Rufen Sie RippleAPI auf, um Daten zu sammeln
    #Rufen Sie die API auf und erstellen Sie CSV-Daten der Daten basierend auf dem Ergebnis.
    #Dieser Vorgang dauert eine bestimmte Zeit x x eine bestimmte Anzahl von Malen, daher dauert es einige Zeit.
    def collect_totalDrops(self):
        self.drop_csv = "total, diff" + RIPPLE_CR
        print "start to correct " + self.start_time
        for i in xrange(RIPPLE_NUM_OF_GET_TOTALDROPS):
            result = get_totalDrops()
            self.calc_drop_data(result)
            date_time = self.get_date_time(True)
            print i , " :" + date_time + " total=" , self.total , " diff=" , self.diff
            self.drop_csv += str(self.total) + "," + str(self.diff) + RIPPLE_CR
            if i < RIPPLE_NUM_OF_GET_TOTALDROPS - 1:
                time.sleep(RIPPLE_WAIT_SECS) #Wenn es das letzte ist, können Sie beenden, ohne zu warten.

    #Machen Sie aus der erstellten CSV-Datei eine Datei.
    def write_csv(self):
        f = open(RIPPLE_PARA_CSV_FILENAME, "w")
        f.write(self.para_csv)
        f.close()
        f = open(RIPPLE_DROP_CSV_FILENAME, "w")
        f.write(self.drop_csv)
        f.close()


# ---Maine
print "Ripple Collet totalDrops."
ripple = RippleTotalDros()
ripple.make_para_csv()          #Parameter CSV-Datenerstellung
ripple.collect_totalDrops()     #Datenerfassung und CSV-Datenerstellung
ripple.write_csv()              #Schreiben Sie CSV in die Datei
print "Complete. csv -> " + RIPPLE_DROP_CSV_FILENAME

Es wurde von einer Person mit geringen Fähigkeiten geschrieben, daher denke ich, dass Sie den Inhalt verstehen können, wenn Sie ihn betrachten, während Sie sich auf w, Kommentare usw. beziehen. Führen Sie es in diesem Beispiel etwa 10 Mal alle 5 Minuten aus.

Wie ich vor einiger Zeit geschrieben habe, wird davon ausgegangen, dass get_totalDrops.js im selben Ordner abgelegt ist und es eine Umgebung gibt, in der sowohl node_js & rippleAPI als auch Python ausgeführt werden können. Seien Sie also bitte vorsichtig. Wenn ich diesen Python starte, sieht es so aus:

$ python ./get_totalDrops.py 
Ripple Collet totalDrops.
start to correct 2016/8/21 13:7
0  :2016/8/21 13:8:1 total= 99997222541580190  diff= 0
1  :2016/8/21 13:13:33 total= 99997222534612330  diff= 6967860
2  :2016/8/21 13:19:6 total= 99997222528462961  diff= 6149369
3  :2016/8/21 13:24:36 total= 99997222523885100  diff= 4577861
4  :2016/8/21 13:30:4 total= 99997222514133479  diff= 9751621
5  :2016/8/21 13:35:36 total= 99997222505328424  diff= 8805055
6  :2016/8/21 13:41:7 total= 99997222500019477  diff= 5308947
7  :2016/8/21 13:46:37 total= 99997222496816135  diff= 3203342
8  :2016/8/21 13:52:5 total= 99997222493532687  diff= 3283448
9  :2016/8/21 13:57:35 total= 99997222488190979  diff= 5341708
Complete. csv -> ripple_drops.csv

Darüber hinaus verfügen Sie über zwei CSV-Dateien, ripple_para.csv und ripple_drops.csv.

Überprüfen Sie das Ergebnis mit R.

Ich bin fast ein Amateur in Python, aber R ist mehr Amateur (was dieser Japaner w). Dieses Mal hat es keine aussagekräftige Analyse, sondern eine starke Bedeutung für die Bestätigung, ob es visualisiert werden kann. Bei der Erstellung des Codes habe ich auf die folgende Website von Herrn Okumura verwiesen.

https://oku.edu.mie-u.ac.jp/~okumura/stat/timeseries.html

__Plotdatenerstellung __

Ich habe die Originaldaten der Handlung so gemacht.

ripple.para = read.csv("ripple_para.csv")
ripple.by_csv = as.numeric(ripple.para[1,2])
ripple.start_time = as.character(ripple.para[1,1])

ripple.drops = read.csv("ripple_drops.csv")
ripple.matrix <- as.matrix(ripple.drops)

base_time = as.POSIXct(ripple.start_time)
time_scale = seq(base_time, by=ripple.by_csv,  along.with=ripple.matrix[,2])

Kurz gesagt, lesen Sie csv und matrixieren Sie die Daten. Da die Zeit auf der horizontalen Achse liegt, habe ich das Gefühl, sie angepasst zu haben.

__total Drops Visualisierung __

Die Darstellung von totalDrops sieht folgendermaßen aus. Da es sich um totalDrpos, diff handelt, ist die y-Achse [, 1].

plot(time_scale, ripple.matrix[,1], type="o", pch=16, xlab="time(sec)", ylab="total drops")

Das Ergebnis ist so. totalDrops.PNG

Die Zahlen fallen allmählich.

__ Visualisierung von Unterschieden __

Das Differenzdiagramm sieht so aus. Da es sich um totalDrpos, diff handelt, ist die y-Achse [, 2].

plot(time_scale, ripple.matrix[,2], type="o", pch=16, xlab="time(sec)", ylab="drops")

Das Ergebnis ist dies. diff.PNG Es ist ein Unterschied, also fühlt es sich an, als würde es funktionieren.

Lizenz

Ich habe es unten benutzt. Vielen Dank für die Bereitstellung der wunderbaren Software.

das ist alles.

Recommended Posts

[First Ripple] [I am] Rufe JavaScript (Node.js) von Python auf und verarbeite Ripple
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
[Python] Ich habe das Spiel von pip installiert und versucht zu spielen
Gehen Sie zur Sprache, um Teil 8 zu sehen und sich daran zu erinnern. Rufen Sie die GO-Sprache von Python aus auf
Rufen Sie CPLEX von Python aus auf (DO cplex)
Ich habe Java und Python verglichen!
Installieren Sie mecab auf dem gemeinsam genutzten Sakura-Server und rufen Sie es von Python aus auf
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Rufen Sie Matlab von Python zur Optimierung auf
Rufen Sie C von Python mit DragonFFI auf
AM-Modulation und Demodulation mit Python
Python, Ausbeute, Rückkehr und manchmal Ausbeute von
Rufen Sie popcount von Ruby / Python / C # auf
Lesen und verwenden Sie Python-Dateien aus Python
Über Python, aus und importieren, als
Python (vom ersten Mal bis zur Ausführung)
Ich habe mit PyQt5 und Python3 gespielt
Rufen Sie Python von Nim mit Nimpy auf
Vergleichen Sie Python- und JavaScript-Array-Schleifen
Rufen Sie C / C ++ von Python auf dem Mac auf
Rufen Sie die c-Sprache von Python aus auf (python.h)
C-Sprache zum Anzeigen und Erinnern Teil 2 Rufen Sie die C-Sprache aus der Python-Zeichenfolge (Argument) auf
C-Sprache zum Sehen und Erinnern Teil 1 Rufen Sie die C-Sprache aus Python auf (Hallo Welt)
C-Sprache zum Anzeigen und Erinnern Teil 4 Rufen Sie die C-Sprache von Python (Argument) double auf
C-Sprache zum Anzeigen und Erinnern Teil 5 Rufen Sie die C-Sprache aus dem Python-Array (Argument) auf