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.
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.
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.
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
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).
`npm install
`ausführen, wird Babel usw. eingehen.Danach können Sie ein JavaScript-Programm schreiben und wie folgt ausführen, damit es funktioniert.
./node_modules/.bin/babel-Knotenskriptname
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
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.
Diesmal
Ich werde alle Schritte versuchen. Daher werde ich mit den folgenden Anforderungen versuchen.
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.
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.
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.
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. Es ist ein Unterschied, also fühlt es sich an, als würde es funktionieren.
Ich habe es unten benutzt. Vielen Dank für die Bereitstellung der wunderbaren Software.
das ist alles.