{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Разберемся, каким образом забирать данные о курсе валют в реальном времени с [сайта](https://www.cbr-xml-daily.ru/daily_json.js)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#!pip3 install requests "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Импортируем модуль и отправим запрос к сервису с курсами валют с помощью метода [GET](https://ru.wikipedia.org/wiki/HTTP#GET):"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import requests \n",
"response = requests.get('https://www.cbr-xml-daily.ru/daily_json.js') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Посмотрим, что получили в ответ:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"response"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Мы получили объект ответа, который содержит всю нужную нам информацию. По умолчанию на экран выводится HTTP-код ответа 200. Это означает, что запрос был корректным, и сервер отдал нам нужную информацию."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Код ответа в виде числа можно получить с помощью метода `status_code`:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"200"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"response.status_code"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Адрес, по которому мы обращались, возвращает результат в `json` формате. Эти данные уже лежат в атрибуте `text` в полученном ответе `response`."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'{\\n \"Date\": \"2020-11-12T11:30:00+03:00\",\\n \"PreviousDate\": \"2020-11-11T11:30:00+03:00\",\\n \"PreviousURL\": \"\\\\/\\\\/www.cbr-xml-daily.ru\\\\/archive\\\\/2020\\\\/11\\\\/11\\\\/daily_json.js\",\\n \"Timestamp\": \"2020-11-11T21:00:00+03:00\",\\n \"Va'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"response.text[:230]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сейчас текст хранится просто в строковой переменной. Далее мы можем превратить эту строку в словарь. Сделать это можно с помощью JSON-парсера либо воспользовавшись методом `json`, который уже встроен в объект ответа `response`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'Date': '2020-11-12T11:30:00+03:00',\n",
" 'PreviousDate': '2020-11-11T11:30:00+03:00',\n",
" 'PreviousURL': '//www.cbr-xml-daily.ru/archive/2020/11/11/daily_json.js',\n",
" 'Timestamp': '2020-11-11T21:00:00+03:00',\n",
" 'Valute': {'AUD': {'ID': 'R01010',\n",
" 'NumCode': '036',\n",
" 'CharCode': 'AUD',\n",
" 'Nominal': 1,\n",
" 'Name': 'Австралийский доллар',\n",
" 'Value': 55.5553,\n",
" 'Previous': 55.6634},\n",
" 'AZN': {'ID': 'R01020A',\n",
" 'NumCode': '944',\n",
" 'CharCode': 'AZN',\n",
" 'Nominal': 1,\n",
" 'Name': 'Азербайджанский манат',\n",
" 'Value': 44.8543,\n",
" 'Previous': 44.9663},\n",
" 'GBP': {'ID': 'R01035',\n",
" 'NumCode': '826',\n",
" 'CharCode': 'GBP',\n",
" 'Nominal': 1,\n",
" 'Name': 'Фунт стерлингов Соединенного королевства',\n",
" 'Value': 101.1959,\n",
" 'Previous': 100.9597},\n",
" 'AMD': {'ID': 'R01060',\n",
" 'NumCode': '051',\n",
" 'CharCode': 'AMD',\n",
" 'Nominal': 100,\n",
" 'Name': 'Армянских драмов',\n",
" 'Value': 15.4226,\n",
" 'Previous': 15.4824},\n",
" 'BYN': {'ID': 'R01090B',\n",
" 'NumCode': '933',\n",
" 'CharCode': 'BYN',\n",
" 'Nominal': 1,\n",
" 'Name': 'Белорусский рубль',\n",
" 'Value': 29.8443,\n",
" 'Previous': 29.8966},\n",
" 'BGN': {'ID': 'R01100',\n",
" 'NumCode': '975',\n",
" 'CharCode': 'BGN',\n",
" 'Nominal': 1,\n",
" 'Name': 'Болгарский лев',\n",
" 'Value': 45.9469,\n",
" 'Previous': 46.2316},\n",
" 'BRL': {'ID': 'R01115',\n",
" 'NumCode': '986',\n",
" 'CharCode': 'BRL',\n",
" 'Nominal': 1,\n",
" 'Name': 'Бразильский реал',\n",
" 'Value': 14.0734,\n",
" 'Previous': 14.1843},\n",
" 'HUF': {'ID': 'R01135',\n",
" 'NumCode': '348',\n",
" 'CharCode': 'HUF',\n",
" 'Nominal': 100,\n",
" 'Name': 'Венгерских форинтов',\n",
" 'Value': 25.2623,\n",
" 'Previous': 25.23},\n",
" 'HKD': {'ID': 'R01200',\n",
" 'NumCode': '344',\n",
" 'CharCode': 'HKD',\n",
" 'Nominal': 10,\n",
" 'Name': 'Гонконгских долларов',\n",
" 'Value': 98.2879,\n",
" 'Previous': 98.5358},\n",
" 'DKK': {'ID': 'R01215',\n",
" 'NumCode': '208',\n",
" 'CharCode': 'DKK',\n",
" 'Nominal': 1,\n",
" 'Name': 'Датская крона',\n",
" 'Value': 12.0698,\n",
" 'Previous': 12.1411},\n",
" 'USD': {'ID': 'R01235',\n",
" 'NumCode': '840',\n",
" 'CharCode': 'USD',\n",
" 'Nominal': 1,\n",
" 'Name': 'Доллар США',\n",
" 'Value': 76.2075,\n",
" 'Previous': 76.3978},\n",
" 'EUR': {'ID': 'R01239',\n",
" 'NumCode': '978',\n",
" 'CharCode': 'EUR',\n",
" 'Nominal': 1,\n",
" 'Name': 'Евро',\n",
" 'Value': 90.0468,\n",
" 'Previous': 90.3557},\n",
" 'INR': {'ID': 'R01270',\n",
" 'NumCode': '356',\n",
" 'CharCode': 'INR',\n",
" 'Nominal': 10,\n",
" 'Name': 'Индийских рупий',\n",
" 'Value': 10.2533,\n",
" 'Previous': 10.3014},\n",
" 'KZT': {'ID': 'R01335',\n",
" 'NumCode': '398',\n",
" 'CharCode': 'KZT',\n",
" 'Nominal': 100,\n",
" 'Name': 'Казахстанских тенге',\n",
" 'Value': 17.8351,\n",
" 'Previous': 17.8067},\n",
" 'CAD': {'ID': 'R01350',\n",
" 'NumCode': '124',\n",
" 'CharCode': 'CAD',\n",
" 'Nominal': 1,\n",
" 'Name': 'Канадский доллар',\n",
" 'Value': 58.3966,\n",
" 'Previous': 58.7179},\n",
" 'KGS': {'ID': 'R01370',\n",
" 'NumCode': '417',\n",
" 'CharCode': 'KGS',\n",
" 'Nominal': 100,\n",
" 'Name': 'Киргизских сомов',\n",
" 'Value': 90.8924,\n",
" 'Previous': 91.1196},\n",
" 'CNY': {'ID': 'R01375',\n",
" 'NumCode': '156',\n",
" 'CharCode': 'CNY',\n",
" 'Nominal': 1,\n",
" 'Name': 'Китайский юань',\n",
" 'Value': 11.5124,\n",
" 'Previous': 11.5689},\n",
" 'MDL': {'ID': 'R01500',\n",
" 'NumCode': '498',\n",
" 'CharCode': 'MDL',\n",
" 'Nominal': 10,\n",
" 'Name': 'Молдавских леев',\n",
" 'Value': 44.5788,\n",
" 'Previous': 44.6771},\n",
" 'NOK': {'ID': 'R01535',\n",
" 'NumCode': '578',\n",
" 'CharCode': 'NOK',\n",
" 'Nominal': 10,\n",
" 'Name': 'Норвежских крон',\n",
" 'Value': 84.4685,\n",
" 'Previous': 84.8544},\n",
" 'PLN': {'ID': 'R01565',\n",
" 'NumCode': '985',\n",
" 'CharCode': 'PLN',\n",
" 'Nominal': 1,\n",
" 'Name': 'Польский злотый',\n",
" 'Value': 19.9689,\n",
" 'Previous': 20.1758},\n",
" 'RON': {'ID': 'R01585F',\n",
" 'NumCode': '946',\n",
" 'CharCode': 'RON',\n",
" 'Nominal': 1,\n",
" 'Name': 'Румынский лей',\n",
" 'Value': 18.4607,\n",
" 'Previous': 18.5828},\n",
" 'XDR': {'ID': 'R01589',\n",
" 'NumCode': '960',\n",
" 'CharCode': 'XDR',\n",
" 'Nominal': 1,\n",
" 'Name': 'СДР (специальные права заимствования)',\n",
" 'Value': 108.2162,\n",
" 'Previous': 108.8592},\n",
" 'SGD': {'ID': 'R01625',\n",
" 'NumCode': '702',\n",
" 'CharCode': 'SGD',\n",
" 'Nominal': 1,\n",
" 'Name': 'Сингапурский доллар',\n",
" 'Value': 56.5002,\n",
" 'Previous': 56.7507},\n",
" 'TJS': {'ID': 'R01670',\n",
" 'NumCode': '972',\n",
" 'CharCode': 'TJS',\n",
" 'Nominal': 10,\n",
" 'Name': 'Таджикских сомони',\n",
" 'Value': 67.2914,\n",
" 'Previous': 67.4445},\n",
" 'TRY': {'ID': 'R01700J',\n",
" 'NumCode': '949',\n",
" 'CharCode': 'TRY',\n",
" 'Nominal': 10,\n",
" 'Name': 'Турецких лир',\n",
" 'Value': 93.8112,\n",
" 'Previous': 92.7428},\n",
" 'TMT': {'ID': 'R01710A',\n",
" 'NumCode': '934',\n",
" 'CharCode': 'TMT',\n",
" 'Nominal': 1,\n",
" 'Name': 'Новый туркменский манат',\n",
" 'Value': 21.8047,\n",
" 'Previous': 21.8592},\n",
" 'UZS': {'ID': 'R01717',\n",
" 'NumCode': '860',\n",
" 'CharCode': 'UZS',\n",
" 'Nominal': 10000,\n",
" 'Name': 'Узбекских сумов',\n",
" 'Value': 73.4256,\n",
" 'Previous': 73.7359},\n",
" 'UAH': {'ID': 'R01720',\n",
" 'NumCode': '980',\n",
" 'CharCode': 'UAH',\n",
" 'Nominal': 10,\n",
" 'Name': 'Украинских гривен',\n",
" 'Value': 27.0623,\n",
" 'Previous': 27.1854},\n",
" 'CZK': {'ID': 'R01760',\n",
" 'NumCode': '203',\n",
" 'CharCode': 'CZK',\n",
" 'Nominal': 10,\n",
" 'Name': 'Чешских крон',\n",
" 'Value': 33.9575,\n",
" 'Previous': 34.1443},\n",
" 'SEK': {'ID': 'R01770',\n",
" 'NumCode': '752',\n",
" 'CharCode': 'SEK',\n",
" 'Nominal': 10,\n",
" 'Name': 'Шведских крон',\n",
" 'Value': 88.3074,\n",
" 'Previous': 88.6563},\n",
" 'CHF': {'ID': 'R01775',\n",
" 'NumCode': '756',\n",
" 'CharCode': 'CHF',\n",
" 'Nominal': 1,\n",
" 'Name': 'Швейцарский франк',\n",
" 'Value': 83.1143,\n",
" 'Previous': 83.6961},\n",
" 'ZAR': {'ID': 'R01810',\n",
" 'NumCode': '710',\n",
" 'CharCode': 'ZAR',\n",
" 'Nominal': 10,\n",
" 'Name': 'Южноафриканских рэндов',\n",
" 'Value': 48.8169,\n",
" 'Previous': 49.5167},\n",
" 'KRW': {'ID': 'R01815',\n",
" 'NumCode': '410',\n",
" 'CharCode': 'KRW',\n",
" 'Nominal': 1000,\n",
" 'Name': 'Вон Республики Корея',\n",
" 'Value': 68.4903,\n",
" 'Previous': 68.5394},\n",
" 'JPY': {'ID': 'R01820',\n",
" 'NumCode': '392',\n",
" 'CharCode': 'JPY',\n",
" 'Nominal': 100,\n",
" 'Name': 'Японских иен',\n",
" 'Value': 72.2654,\n",
" 'Previous': 72.7217}}}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"currencies = response.json()\n",
"currencies "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Теперь данные лежат в словаре и мы можем легко получать необходимые значения."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'ID': 'R01235',\n",
" 'NumCode': '840',\n",
" 'CharCode': 'USD',\n",
" 'Nominal': 1,\n",
" 'Name': 'Доллар США',\n",
" 'Value': 76.2075,\n",
" 'Previous': 76.3978}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"currencies['Valute']['USD'] "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Задание \n",
"\n",
"Созраните текущий курс евро в файле csv формата."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}