$ brew tap kei-sato/usdex
$ brew install usdex
$ usdex -p 2.5 -v
1(USD) => 122.54078(JPY)
2.5(USD) => 306.35195(JPY)
Gist ist hier https://gist.github.com/kei-sato/98675769952ec7538d6a
Hier erfahren Sie, wie Sie die Brauinstallation aktivieren Brauen Sie die Installation von in Python erstellten Befehlszeilentools
Die aktuellen Austauschinformationen werden in verschiedenen Formaten veröffentlicht, einschließlich JSON ([http://api.aoikujira.com/kawase/ lightboxes(http://api.aoikujira.com/kawase/)). Da es eine Person gab, habe ich damit einen Befehl zum Umrechnen von Dollar in Yen über die Befehlszeile erstellt. Überprüfen Sie zunächst den von der API zurückgegebenen Wert.
$ curl -s http://api.aoikujira.com/kawase/json/usd | jq .
{
"result": "ok",
"basecode": "USD",
"update": "2015-07-13 17:41:44",
"source": "*",
"API_URL": "http://api.aoikujira.com/kawase/",
...(Unterlassung)
"JPY": "123.44644",
"KRW": "1131.46557",
"HKD": "7.75138",
...(Unterlassung)
"LBP": "1514.20449"
}
Sie können sehen, dass JPY den Wert von 1 Dollar enthält, der in Yen umgerechnet wird. (Es gibt auch KRW (gewonnen) und HKD (Hongkong-Dollar)) Schreiben wir vorerst ein einfaches Skript, das diesen Wert nur extrahiert und mit dem durch das Argument angegebenen numerischen Wert multipliziert.
exchange1.py
#coding:utf-8
import sys
import urllib
import json
URL = "http://api.aoikujira.com/kawase/json/usd"
if __name__ == "__main__":
price = float(sys.argv[1])
response = urllib.urlopen(URL)
data = json.loads(response.read())
rate = float(data[u'JPY'])
print "{0}(USD) => {1}(JPY)".format(1, rate)
print "{0}(USD) => {1}(JPY)".format(price, price * rate)
$ python exchange1.py 2.5
1(USD) => 122.568(JPY)
2.5(USD) => 306.42(JPY)
Als ich 2,5 (Dollar) als Argument gab, war die Antwort 306 Yen. Ich gebe auch den Yen pro Dollar zurück.
Sie haben Ihr Ziel erreicht. Das ist es.
Ich würde gerne gehen, aber dieses Mal möchte ich es veröffentlichen, damit ich es ein bisschen besser mache.
Es ist nicht gut, die API kontinuierlich zu öffnen, daher werde ich versuchen, einmal am Tag auf die API zuzugreifen.
import urllib
import json
URL = "http://api.aoikujira.com/kawase/json/usd"
FPATH = "/tmp/exchange"
def readCache():
with open(FPATH, 'r') as f:
body = f.read()
return body
def writeCache(body):
with open(FPATH, 'w') as f:
f.write(body)
def fetchRates():
# fetch rate list from remote
response = urllib.urlopen(URL)
body = response.read()
writeCache(body)
return body
Verwenden Sie fetchRates, um auf die API zuzugreifen, und writeCache, um den Inhalt in einer Datei zu speichern. Lesen Sie den in der Datei gespeicherten Inhalt mit readCache.
import os.path
from datetime import date, datetime
FPATH = "/tmp/exchange"
def hasCache():
if os.path.isfile(FPATH):
d = date.today()
today = datetime.combine(d, datetime.min.time())
mtime = datetime.fromtimestamp(os.path.getmtime(FPATH))
if mtime > today:
return True
return False
Sucht mit HasCache nach Cache-Dateien und gibt True zurück, wenn das Datum der letzten Änderung heute ist. Gibt False zurück, wenn die Cache-Datei nicht vorhanden ist oder die Cache-Datei zuletzt vor heute geändert wurde.
In Kombination sieht es so aus:
exchange2.py
#!/usr/bin/env python
import sys
import os.path
from datetime import date, datetime
import urllib
import json
URL = "http://api.aoikujira.com/kawase/json/usd"
FPATH = "/tmp/exchange"
def hasCache():
if os.path.isfile(FPATH):
d = date.today()
today = datetime.combine(d, datetime.min.time())
mtime = datetime.fromtimestamp(os.path.getmtime(FPATH))
if mtime > today:
return True
return False
def readCache():
with open(FPATH, 'r') as f:
body = f.read()
return body
def writeCache(body):
with open(FPATH, 'w') as f:
f.write(body)
def fetchRates():
# fetch rate list from remote
response = urllib.urlopen(URL)
body = response.read()
writeCache(body)
return body
if __name__ == "__main__":
price = float(sys.argv[1])
if hasCache():
body = readCache()
else:
body = fetchRates()
data = json.loads(body)
rate = float(data[u'JPY'])
print "{0}(USD) => {1}(JPY)".format(1, rate)
print "{0}(USD) => {1}(JPY)".format(price, price * rate)
Wenn hasCache True zurückgibt, liest readCache es aus der Cache-Datei, und wenn hasCache False zurückgibt, ruft fetchRates es von der API ab.
Mit argparse können Sie problemlos Befehlszeilentools erstellen
options.py
#coding:utf-8
import argparse
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='convert usd to any currency.')
parser.add_argument('-p', '--price', nargs='?', type=float, help='price', default=1.0)
parser.add_argument('-c', '--currency', nargs='?', help='currency', default=u'JPY')
parser.add_argument('-r', '--reverse', action='store_true', help='reverse the direction')
parser.add_argument('-v', '--verbosity', action='count', help='increase output verbosity')
args = parser.parse_args()
price = args.price
currency = args.currency
reverse = args.reverse
verbosity = args.verbosity
print "price:", price
print "currency:", currency
print "reverse:", reverse
print "verbosity:", verbosity
Speichern Sie das oben genannte und lassen Sie es uns ausführen
#Keine Argumente
$ python options.py
price: 1.0
currency: JPY
reverse: False
verbosity: None
#Mit Argument
$ python options.py -p 2.5 -c EUR -r -vvv
price: 2.5
currency: EUR
reverse: True
verbosity: 3
#Die Hilfemeldung wird automatisch generiert
$ python options.py -h
usage: options.py [-h] [-p [PRICE]] [-c [CURRENCY]] [-r] [-v]
convert usd to any currency.
optional arguments:
-h, --help show this help message and exit
-p [PRICE], --price [PRICE]
price
-c [CURRENCY], --currency [CURRENCY]
currency
-r, --reverse reverse the direction
-v, --verbosity increase output verbosity
Es ist einfach!
Das Ganze bis zu diesem Punkt ist auf Gist https://gist.github.com/kei-sato/98675769952ec7538d6a
Recommended Posts