patootey / api_oppgave

0 stars 0 forks source link

Lage program kode #10

Closed patootey closed 8 months ago

vobobos commented 9 months ago
import tkinter
import requests
from matplotlib import pyplot as plt

class Currency():
    def __init__(self):
        self.key = "https://api.frankfurter.app/"

    def chooser(self):
        self.fromCurrency = "from="+input("From (EUR): ")
        self.toCurrency = "to="+input("To (NOK,USD,GBP): ")
        return "?"+self.fromCurrency+"&"+self.toCurrency

    def set_date(self):
        self.startDate = input("Start (YYYY-MM-DD): ")
        self.endDate = input("End (..YYYY-MM-DD): ")

    def time(self):
        check = input("Current values? Y/N: ")
        if check.lower() == "y":
            return "latest"
        else:
            self.set_date()
            return self.startDate + self.endDate

    def sammensveising(self):
        self.key += self.time() + self.chooser()
        print(self.key)
        self.key = requests.get(self.key)
        return self.key.json()

    def printer(self):
        print(self.sammensveising())
penge = Currency()
penge.printer()

Denne bruker input i konsoll til å sveise sammen en nøkkel som den bruker til å be om data fra API som den skriver ut

vobobos commented 9 months ago
import requests

countries = requests.get("https://restcountries.com/v3.1/all")
countries = countries.json()
print(countries[0]['name']['official'])
for i in countries[10]['name']:
    if i == "nativeName":
        for x in countries[10]['name'][i]:
            if "Norway" in countries[10]['name'][i][x]:
                print(x)
    if "Norway" in countries[10]['name'][i]:
        print(countries[10]['name'][i])

Denne koden bruker APIet til land, og er bare en sketch for en "søkemotor"

vobobos commented 9 months ago

currency API-et

import tkinter
import requests
from matplotlib import pyplot as plt

class Currency():
    def __init__(self):
        self.key = "https://api.frankfurter.app/"

    def chooser(self):
        self.fromCurrency = "from="+input("From (EUR): ")
        self.toCurrency = "to="+input("To (NOK,USD,GBP): ")
        return "?"+self.fromCurrency+"&"+self.toCurrency

    def set_date(self):
        self.startDate = input("Start (YYYY-MM-DD): ")
        self.endDate = input("End (..YYYY-MM-DD): ")

    def time(self):
        check = input("Current values? Y/N: ")
        if check.lower() == "y":
            return "latest"
        else:
            self.set_date()
            return self.startDate + self.endDate

    def fetch_data(self):
        self.key += self.time() + self.chooser()
        print(self.key)
        self.key = requests.get(self.key)
        return self.key.json()

    def list_maker(self):
        goob = self.fetch_data()
        base = goob['base']
        rates = goob['rates']
        values = []
        for i in rates:
            values.append(rates[i]['NOK'])
        return values

    def plotter(self):
        data = self.list_maker()
        plt.plot(data)
        plt.ylabel(f"{self.toCurrency[3:]} i {self.fromCurrency[5:]}")
        plt.xlabel(f"Tid fra {self.startDate} til {self.endDate}")
        plt.show()

penge = Currency()
penge.plotter()

La til en funksjon som legger verdiene til en graf, men dette funker bare om en har valutaen i NOK og funker ikke om det kun er en spesifikk dato. Bør kun brukes som eksempel på en mulig løsning og ikke som et svar.

Land API-et

import requests

countries = requests.get("https://restcountries.com/v3.1/all")
countries = countries.json()
def search(key:str):
    for country in countries:

        for i in country['name']:
            if key in country['name'][i]:
                for name in country['currencies']:
                    symbol = name
                return country['name']['common'], symbol, country['currencies'][symbol]["symbol"]

            if i == "nativeName":
                for x in country['name'][i]:
                    for z in country['name'][i][x]:
                        if key in country['name'][i][x][z]:
                            for name in country['currencies']:
                                symbol = name
                            return country['name']['common'], symbol, country['currencies'][symbol]["symbol"]
    return f"Fant ikke landet '{key}'."

print(search("Norway"))
print(search("Norge"))
print(search("Britain"))
print(search("Lugudo"))

Forbedret med hjelp av Erik ❤️. Gjorde programmet funksjonsbasert og ryddet opp i den. Den funker nå for alle land og skriver ut navnet, valutanavnet og pengesymbolet.

vobobos commented 8 months ago
import tkinter
import requests
from matplotlib import pyplot as plt

countries = requests.get("https://restcountries.com/v3.1/all")
countries = countries.json()
def search(key:str):
    for country in countries:

        for code in country['name']:
            if code != "nativeName" and key.lower() in country['name'][code].lower():
                for name in country['currencies']:
                    code = name
                return country['name']['common'], country['currencies'][code]['name'], code, country['currencies'][code]["symbol"], country['flags']['png']

            elif code == "nativeName":
                for symbol in country['name'][code]:
                    for z in country['name'][code][symbol]:
                        if key.lower() in country['name'][code][symbol][z].lower():
                            for name in country['currencies']:
                                code = name
                            return country['name']['common'], country['currencies'][code]['name'], code, country['currencies'][code]["symbol"], country['flags']['png']
        try:
            for code in country['currencies']:
                if key.lower() == code.lower():
                    return country['name']['common'], country['currencies'][code]['name'], code, country['currencies'][code]["symbol"], country['flags']['png']

                for symbol in country['currencies'][code]:
                    if key.lower() == country['currencies'][code][symbol].lower():
                        return country['name']['common'], country['currencies'][code]['name'], code, country['currencies'][code]["symbol"], country['flags']['png']
        except:
            pass

    return f"Fant ikke landet '{key}'."

class Currency():
    def __init__(self):
        self.key = "https://api.frankfurter.app/"

    def chooser(self):
        self.fromCurrency = search(input("Gi land fra: "))
        self.toCurrency1 = search(input("Gi land til 1: "))
        self.toCurrency2 = search(input("Gi land til 2: "))

        self.fromCurrency = "from="+self.fromCurrency[2]
        self.toCurrency1 = "to="+self.toCurrency1[2]
        self.toCurrency2 = self.toCurrency2[2]

        return "?"+self.fromCurrency+"&"+self.toCurrency1+","+self.toCurrency2

    def set_date(self):
        self.startDate = input("Start (YYYY-MM-DD): ")
        self.endDate = input("End (..YYYY-MM-DD): ")
        return self.startDate + self.endDate

    def fetch_data(self):
        self.key += self.set_date() + self.chooser()
        print(self.key)
        self.key = requests.get(self.key)
        return self.key.json()

    def list_maker(self, data):
        raw_data = data
        if data != None:
            raw_data = self.fetch_data()
        rates = raw_data['rates']

        values1,values2 = [],[]
        for i in rates:
            try:values1.append(rates[i][self.toCurrency1[3:]])
            except:pass

            try:values2.append(rates[i][self.toCurrency2])
            except:pass
        return values1,values2

    def plotter(self, data=None):
        data = self.list_maker(data)
        plt.grid()
        plt.plot(data[0], color="blue")
        plt.plot(data[1], color="red")
        plt.ylabel(f"{self.fromCurrency[5:]} i valutaer")
        plt.xlabel(f"Tid fra {self.startDate} til {self.endDate}")
        plt.tick_params(axis='x', which='both', labelbottom=False)
        plt.legend([self.toCurrency1[3:],self.toCurrency2])
        plt.show()

penge = Currency()
penge.plotter(search('norway'))

Forbedret og i grunnen ferdigstilt, med noen innspill fra Henrik. search funksjonen tar nå for seg alle aspekter ved søkingen da du kan søke med valuta navn, kode, og landets navn på engelsk og eget språk. Nå gjenstår det bare å få gitt det en GUI som Henrik tar seg av.