منوهای نصب در پنل مدیریت

کار با API (نوشتن برنامه بررسی نرخ ارز)

در مقاله قبلی بنده توضیحاتی در مورد API ها دادم و در این مقاله قرار است که برنامه ای بنویسیم که قیمت روز ارز رو به دست بیاریم؛ با ما همراه باشید.

این مقاله برای نشان دادن نحوه استفاده از Application programming interface است همانطور که در قسمت قبل گفتیم رابط های برنامه نویسی یا همان Application programming interface به ما کمک میکنند که از تابع ها و ویژگی های برنامه های دیگر استفاده کنیم و سرویسی را دریافت کنیم.
برای اینکه بهتر این موضوع را درک کنیم قرار است که با هم یک برنامه برای بررسی نرخ ارز و طلا بنویسیم.

در مقاله قبل اشاره ای به یک مطلب کرده بودیم که انواع API های را توضیح میداد اگر مقاله قبلی رو نخواندید پیشنهاد میکنم نگاهی بهش بندازید.

مقاله پیشنهادی: Application Programming Interface یا API چیست؟

توضیحات:

API که قرار است از آن استفاده کنیم در این لینک قرار دارد.
اگه به آدرس  بالا بروید اطلاعات به صورت JSON به شما نمایش داده میشوند که این اطلاعات مربوط به نرخ ارز و طلا هستند.
با همچین چیزی رو به رو خواهید شد.

{"LastModified":"2020-08-19 14:45:00 +0100 BST","Currency":[{"Code":"USD","Currency":"US Dollar","Sell":22900,"Buy":22800},{"Code":"EUR","Currency":"Euro","Sell":27330,"Buy":27180},{"Code":"GBP","Currency":"British Pound","Sell":30255,"Buy":30055},{"Code":"CHF","Currency":"Swiss Franc","Sell":25250,"Buy":25100},{"Code":"CAD","Currency":"Canadian Dollar","Sell":17405,"Buy":17305},{"Code":"AUD","Currency":"Australian Dollar","Sell":16620,"Buy":16520},{"Code":"SEK","Currency":"Swedish Krona","Sell":2645,"Buy":2630},{"Code":"NOK","Currency":"Norwegian Krone","Sell":2590,"Buy":2575},{"Code":"RUB","Currency":"Russian Ruble","Sell":311,"Buy":308},{"Code":"THB","Currency":"Thai Baht","Sell":735,"Buy":730},{"Code":"SGD","Currency":"Singapore Dollar","Sell":16785,"Buy":16685},{"Code":"HKD","Currency":"Hong Kong Dollar","Sell":2955,"Buy":2925},{"Code":"AZN","Currency":"Azerbaijani Manat","Sell":13500,"Buy":13400},{"Code":"AMD","Currency":"¹⁰ Armenian Dram","Sell":472,"Buy":467},{"Code":"DKK","Currency":"Danish Krone","Sell":3670,"Buy":3650},{"Code":"AED","Currency":"UAE Dirham","Sell":6235,"Buy":6215},{"Code":"JPY","Currency":"¹⁰ Japanese Yen","Sell":2175,"Buy":2165},{"Code":"TRY","Currency":"Turkish Lira","Sell":3115,"Buy":3095},{"Code":"CNY","Currency":"Chinese Yuan","Sell":3315,"Buy":3295},{"Code":"SAR","Currency":"KSA Riyal","Sell":6105,"Buy":6075},{"Code":"INR","Currency":"Indian Rupee","Sell":305,"Buy":303},{"Code":"MYR","Currency":"Ringgit","Sell":5490,"Buy":5460},{"Code":"AFN","Currency":"Afghan Afghani","Sell":293,"Buy":291},{"Code":"KWD","Currency":"Kuwaiti Dinar","Sell":74985,"Buy":74585},{"Code":"IQD","Currency":"¹⁰⁰ Iraqi Dinar","Sell":1920,"Buy":1910},{"Code":"BHD","Currency":"Bahraini Dinar","Sell":60745,"Buy":60245},{"Code":"OMR","Currency":"Omani Rial","Sell":59555,"Buy":59255},{"Code":"QAR","Currency":"Qatari Riyal","Sell":6290,"Buy":6260}],"Gold":[{"Coin":"1 Old Azadi","Sell":10400000,"Buy":10150000},{"Coin":"1 Emami","Sell":10750000,"Buy":10600000},{"Coin":"1/2 Azadi","Sell":5500000,"Buy":5300000},{"Coin":"1/4 Azadi","Sell":3150000,"Buy":3000000}],"Item":[{"Name":"Ounce","Rate":"1992.34"},{"Name":"Mithqal","Rate":"4557000"},{"Name":"Gold 18","Rate":"1051987"},{"Name":"Bitcoin","Rate":"11833.07"},{"Name":"Bourse","Rate":"1904324.2"}]}

برای درک بهتر این اطلاعات بهتر است که آن را فرمت دهی کنیم من این کار را با استفاده از این سایت انجام دادم اما شما میتوانید این کار را به صورت دلخواه انجام دهید.
بعد از فرمت دهی اطلاعات به این صورت نمایش داده خواهند شد:

{
  "LastModified": "2020-08-19 14:45:00 +0100 BST",
  "Currency": [
    {
      "Code": "USD",
      "Currency": "US Dollar",
      "Sell": 22900,
      "Buy": 22800
    },
    {
      "Code": "EUR",
      "Currency": "Euro",
      "Sell": 27330,
      "Buy": 27180
    },
    {
      "Code": "GBP",
      "Currency": "British Pound",
      "Sell": 30255,
      "Buy": 30055
    },
    {
      "Code": "CHF",
      "Currency": "Swiss Franc",
      "Sell": 25250,
      "Buy": 25100
    },
    {
      "Code": "CAD",
      "Currency": "Canadian Dollar",
      "Sell": 17405,
      "Buy": 17305
    },
    {
      "Code": "AUD",
      "Currency": "Australian Dollar",
      "Sell": 16620,
      "Buy": 16520
    },
    {
      "Code": "SEK",
      "Currency": "Swedish Krona",
      "Sell": 2645,
      "Buy": 2630
    },
    {
      "Code": "NOK",
      "Currency": "Norwegian Krone",
      "Sell": 2590,
      "Buy": 2575
    },
    {
      "Code": "RUB",
      "Currency": "Russian Ruble",
      "Sell": 311,
      "Buy": 308
    },
    {
      "Code": "THB",
      "Currency": "Thai Baht",
      "Sell": 735,
      "Buy": 730
    },
    {
      "Code": "SGD",
      "Currency": "Singapore Dollar",
      "Sell": 16785,
      "Buy": 16685
    },
    {
      "Code": "HKD",
      "Currency": "Hong Kong Dollar",
      "Sell": 2955,
      "Buy": 2925
    },
    {
      "Code": "AZN",
      "Currency": "Azerbaijani Manat",
      "Sell": 13500,
      "Buy": 13400
    },
    {
      "Code": "AMD",
      "Currency": "¹⁰ Armenian Dram",
      "Sell": 472,
      "Buy": 467
    },
    {
      "Code": "DKK",
      "Currency": "Danish Krone",
      "Sell": 3670,
      "Buy": 3650
    },
    {
      "Code": "AED",
      "Currency": "UAE Dirham",
      "Sell": 6235,
      "Buy": 6215
    },
    {
      "Code": "JPY",
      "Currency": "¹⁰ Japanese Yen",
      "Sell": 2175,
      "Buy": 2165
    },
    {
      "Code": "TRY",
      "Currency": "Turkish Lira",
      "Sell": 3115,
      "Buy": 3095
    },
    {
      "Code": "CNY",
      "Currency": "Chinese Yuan",
      "Sell": 3315,
      "Buy": 3295
    },
    {
      "Code": "SAR",
      "Currency": "KSA Riyal",
      "Sell": 6105,
      "Buy": 6075
    },
    {
      "Code": "INR",
      "Currency": "Indian Rupee",
      "Sell": 305,
      "Buy": 303
    },
    {
      "Code": "MYR",
      "Currency": "Ringgit",
      "Sell": 5490,
      "Buy": 5460
    },
    {
      "Code": "AFN",
      "Currency": "Afghan Afghani",
      "Sell": 293,
      "Buy": 291
    },
    {
      "Code": "KWD",
      "Currency": "Kuwaiti Dinar",
      "Sell": 74985,
      "Buy": 74585
    },
    {
      "Code": "IQD",
      "Currency": "¹⁰⁰ Iraqi Dinar",
      "Sell": 1920,
      "Buy": 1910
    },
    {
      "Code": "BHD",
      "Currency": "Bahraini Dinar",
      "Sell": 60745,
      "Buy": 60245
    },
    {
      "Code": "OMR",
      "Currency": "Omani Rial",
      "Sell": 59555,
      "Buy": 59255
    },
    {
      "Code": "QAR",
      "Currency": "Qatari Riyal",
      "Sell": 6290,
      "Buy": 6260
    }
  ],
  "Gold": [
    {
      "Coin": "1 Old Azadi",
      "Sell": 10400000,
      "Buy": 10150000
    },
    {
      "Coin": "1 Emami",
      "Sell": 10750000,
      "Buy": 10600000
    },
    {
      "Coin": "1/2 Azadi",
      "Sell": 5500000,
      "Buy": 5300000
    },
    {
      "Coin": "1/4 Azadi",
      "Sell": 3150000,
      "Buy": 3000000
    }
  ],
  "Item": [
    {
      "Name": "Ounce",
      "Rate": "1992.34"
    },
    {
      "Name": "Mithqal",
      "Rate": "4557000"
    },
    {
      "Name": "Gold 18",
      "Rate": "1051987"
    },
    {
      "Name": "Bitcoin",
      "Rate": "11833.07"
    },
    {
      "Name": "Bourse",
      "Rate": "1904324.2"
    }
  ]
}

الان خیلی بهتر و قابل فهم تر شد، ما یه لیست از قیمت ارز، قیمت طلا و برای مثال نرخ قیمت بیتکوین داریم.
برنامه ای که ما قرار است بنویسیم اول این لیست را خوانده سپس آن را نمایش میدهد!
بریم سراغ قسمت کدنویسی.

کدنویسی:

کاری که ما به صورت دستی انجام دادیم، برنامه قرار است به صورت خودکار انجام دهد! ابتدا ما نیاز به مراجعه به یک API داریم، خب این کار را با کتابخانه requests انجام میدیم.

کتابخانه requests را import میکنیم.

import requests

حال باید درخواست خود را برای رابط برنامه نویسی بفرستیم.

req = requests.get('https://currency.jafarili.me/json')

بعد از دریافت اطلاعات از Application programming interface ما باید این اطلاعات را فرمت دهی کنیم.
این کار را با متد JSON انجام میدیم.

respone = req.json()

خب حالا ما میخواییم این اطلاعات را به کاربران نمایش بدیم. بهتر است اول تاریخ آخرین بروزرسانی رو به کاربر اطلاع بدیم.

print("بروزرسانی شده در تاریخ:",respone['LastModified'])

همانطور که مشاهده میکنید ما توانستیم با استفاده از متد JSON به اطلاعات مانند یک دیکشنری دسترسی پیدا کنیم حالا ما میخواهیم قیمت سکه امامی را به کاربران نمایش بدهیم این کار را با دستورات زیر انجام میدهیم.

print("سکه امامی:")
print("قیمت فروش:",str(respone['Gold'][1]['Sell']))
print("قیمت خرید:",str(respone['Gold'][1]['Buy']))

در کد بالا ما به ترتیب از دیکشنری به لیست Gold و ایندکس 1 آن دسترسی پیدا کردیم و قیمت خرید و فروش را نمایش دادیم.
اما این کار تعداد زیادی کپی پیست میخواهد و هر جا که ما نیاز به کپی پیست داشتیم یعنی داریم یعنی یه جای کار میلنگه!
برای قابل فهم، تمیزتر و بهتر شدن برنامه یه تابع مینویسیم.

def check(code): 
    for i in respone['Currency']:
        if str(i['Code']) == code:
            show_data(i)
            break

این تابع ابتدا لیست Currency را پیمایش کرده و اگر کد ارز با هم همخوانی داشت تابع show_data را صدا میکند.
اما تابع show_data چیست؟

def show_data(dic):
    print("قیمت فروش:",str(dic['Sell']))
    print("قیمت خرید:",str(dic['Buy']))
    spliter()

تابع show_data قیمت خرید و فروش ارز انتخاب شده را برمیگرداند و در آخر یک تابع را صدا میکند که جدا کننده ای را نمایش میدهد.

def spliter():
    print("________________________________________________________")

حالا ما میتوانیم کد را به تابع بدهیم و قیمت خرید و فروش را بگیریم.

check('USD')

برای فهمیدن کد هر ارز یک بار اطلاعات دریافتی را نگاه کنید.
سورس برنامه را به صورت یک جا براتون قرار میدم.

import requests

#FUNCTIONS
def spliter():
    print("________________________________________________________") #جدا کننده


def check(code): 
    for i in respone['Currency']:#کاوش در لیست ارز ها
        if str(i['Code']) == code:#بررسی کد ارز ورودی با اعضای لیست ارزها
            show_data(i)#ارسال دیکشنری به تابع 
            break


def show_data(dic):
    print("قیمت فروش:",str(dic['Sell']))#تبدیل قیمت فروش به رشته و نمایش آن
    print("قیمت خرید:",str(dic['Buy']))#تبدیل قیمت خرید به رشته و نمایش آن
    spliter()
    
#REQUEST
req = requests.get('https://currency.jafarili.me/json')#ارسال درخواست به API
respone = req.json()#فرمت دهی اطلاعات دریافتی
#SHOW DATA
print("بروزرسانی شده در تاریخ:",respone['LastModified'])
print("قیمت ها به تومان")
spliter()
print("سکه امامی:")
print("قیمت فروش:",str(respone['Gold'][1]['Sell']))
print("قیمت خرید:",str(respone['Gold'][1]['Buy']))
spliter()

print("دلار")
check('USD')

print("یورو:")
check('EUR')

print("پوند انگلیس:")
check('GBP')

این هم خروجی برنامه

بروزرسانی شده در تاریخ: 2020-08-19 15:30:00 +0100 BST
قیمت ها به تومان
________________________________________________________
سکه امامی:
قیمت فروش: 10800000
قیمت خرید: 10650000
________________________________________________________
دلار
قیمت فروش: 22850
قیمت خرید: 22750
________________________________________________________
یورو:
قیمت فروش: 27305
قیمت خرید: 27155
________________________________________________________
پوند انگلیس:
قیمت فروش: 30220
قیمت خرید: 30020
________________________________________________________

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
ورژن 4 طراحی شده با ❤  
0
Would love your thoughts, please comment.x
()
x