Erstellen Sie ein Befehlszeilenprogramm, um mit Python Dollar in Yen umzurechnen

Überblick

  1. Eine Liste der Tarife erhalten Sie von Exchange Confirmation API.
  2. Konvertieren Sie den im Befehlszeilenargument empfangenen Wert von Dollar in Yen
$ 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

Kommentar

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.

API-Trefferverhütung

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.

Ich möchte, dass es wie ein Befehlszeilenprogramm aussieht

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

Zusammenfassung

Recommended Posts

Erstellen Sie ein Befehlszeilenprogramm, um mit Python Dollar in Yen umzurechnen
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Hinweise Ich habe nachgeschlagen, um Befehlszeilentools in Python zu erstellen
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Verwalten von Argumenten beim Implementieren eines Python-Skripts als Befehlszeilentool
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Erstellen Sie mit tkinter eine Python-GUI
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Tool zum Konvertieren der Juniper-Konfiguration
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
[Python] Erstellen Sie eine Stapelumgebung mit AWS-CDK
[Python] [LINE Bot] Erstellen Sie einen LINE Bot mit Papageienrückgabe
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
[Python] So testen Sie den Befehlszeilen-Parser-Klick
So empfangen Sie Befehlszeilenargumente in Python
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Erstellen Sie eine GIF-Datei mit Pillow in Python
Erstellen Sie eine Webmap mit Python und GDAL
Erstellen Sie einen Sub-Sub-Befehl mit dem Klick --netsted-Sub-Sub-Befehl -
Schritte zum Erstellen eines Twitter-Bots mit Python
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
So erstellen Sie ein 1-zeiliges Kivy-Eingabefeld
Konvertieren Sie STL mit Python VTK in ein Voxel-Netz
Konvertieren Sie XLSX in CSV in der Befehlszeile
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Erstellen Sie einen Befehl, um das Arbeitsprotokoll abzurufen
Erstellen Sie eine Befehlszeilen-App in Python, um die Aktionen setup.py, argparse und GitHub zu verstehen
Konvertieren der cURL-API in ein Python-Skript (mithilfe des IBM Cloud-Objektspeichers)
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So schreiben Sie eine GUI mit dem Befehl maya
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So richten Sie eine Python-Umgebung mit pyenv ein
Geben Sie in Python einen Unterbefehl als Befehlszeilenargument an
Erstellen Sie ein Python-Modul
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
[Python] Generieren Sie ValueObject mit dem vollständigen Konstruktor mithilfe von Datenklassen
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
So erstellen Sie mit Python ein radiales Profil aus astronomischen Bildern (Chandra, XMM usw.)
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 3 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 4 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 5 ~
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
Ich möchte eine Karaoke-Klangquelle erstellen, indem ich Instrumente und Gesang mit Python trenne