Примеры работы с API на Python и С#
Специалисты Банка России подготовили примеры программного кода на Python и C# для обращения к API Сервиса получения данных.
Используйте код на Python или C# для получения данных в соответствии перечнем показателей и публикаций.
Скачайте архив с примерами реализации методов, описанных в документации, ниже.
# Пример работы с API Сервиса получения данных по шагам # аналогично реализации на демонстрационной странице сервиса # http://www.cbr.ru/statistics/data-service/ # используется python 3.11 from asyncio.windows_events import NULL import requests import json from types import SimpleNamespace import PivotExport as pe #дополнительный пакет для экспорта данных в CSV в виде простой таблицы print("Пример работы с API Сервиса получения данных") BASE_URL = 'http://www.cbr.ru/dataservice' #источник данных # необходимо получить все параметры для основного запроса /data # для этого последовательно получаем данные справочников print("**** Список публикаций ****") response = requests.get(f"{BASE_URL}/publications") pe.SaveJsonToFile(response,"publications.json") # сохраяеем данные запроса в файл (для теста) publicationObject= response.json(object_hook=lambda d: SimpleNamespace(**d)) for pbl in publicationObject: print(f"id:{pbl.id} title:{pbl.category_name} { ' - NoActive' if pbl.NoActive else '' }") publId=-1 #id публикации while True: try: publId=int(input("Введите id публикации:")) selPublItem = next((e for e in publicationObject if e.id == publId), None) if not selPublItem==None and not selPublItem.NoActive: break else: print ("Данного id не существует либо раздел не может быть выбран (NoActive)") except ValueError: print("ошибка! id должен быть числом...") print(f"Для id публикации:{publId} нужно выбрать показатель из списка") print("**** Список показателей ****") responseDS = requests.get(f"{BASE_URL}/datasets?publicationId={publId}") pe.SaveJsonToFile(response,"datasets.json") # сохраяеем данные запроса в файл (для теста) DSObject= responseDS.json(object_hook=lambda d: SimpleNamespace(**d)) for dsItem in DSObject: print(f"id:{dsItem.id}, title:{dsItem.name}") dsId=-1 #id показателя while True: try: dsId=int(input("Введите id показателя:")) selDSItem = next((e for e in DSObject if e.id == dsId), None) if selDSItem is None: print("Данного id не существует") else: currentTypeVal=selDSItem.type break except ValueError: print("ошибка! id должен быть числом...") print("currentTypeVal",currentTypeVal) melId=-1 # id разреза if currentTypeVal == 1: print("**** Список разрезов ****") responseME = requests.get(f"{BASE_URL}/measures?datasetId={dsId}") pe.SaveJsonToFile(response,"measures.json") # сохраяеем данные запроса в файл (для теста) MEObject= responseME.json(object_hook=lambda d: SimpleNamespace(**d)).measure for meItem in MEObject: print(f"id:{meItem.id}, title:{meItem.name}") while True: try: melId=int(input("Введите id разреза:")) selMeItem = next((e for e in MEObject if e.id == melId), None) if selMeItem is None: print("Данного id не существует") else: break except ValueError: print("ошибка! id должен быть числом...") else: print("У этого показателя нет разрезов") yaersParams = {'measureId': melId, 'datasetId': dsId} responseYears = requests.get(f"{BASE_URL}/years", params=yaersParams) pe.SaveJsonToFile(response,"years.json") # сохраяеем данные запроса в файл (для теста) yy=responseYears.json(object_hook=lambda d: SimpleNamespace(**d))[0] print(f"\r\nИнформация доступна с {yy.FromYear} по {yy.ToYear} год") FromYear=-1 ToYear=-1 while True: try: FromYear=int(input("Введите год начала периода:")) ToYear=int(input("Введите год окончания периода:")) if FromYear >= yy.FromYear and ToYear <= yy.ToYear: break else: print(f"\r\nИнформация доступна с {yy.FromYear} по {yy.ToYear} год") except ValueError: print("ошибка! год должен быть числом...") # Далее получаем массив данных dataParams = {'y1': FromYear, 'y2': ToYear, 'publicationId' : publId, 'datasetId' : dsId, "measureId" : melId} responseData = requests.get(f"{BASE_URL}/data", params=dataParams) pe.SaveJsonToFile(responseData,"data.json") # сохраяеем данные запроса в файл (для теста) pe.ExportDataToCSV (responseData.json(object_hook=lambda d: SimpleNamespace(**d))) print("All done...")
using IO.Swagger.Api; using IO.Swagger.Model; using System; using System.Collections.Generic; using System.Configuration; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestAppClientNew { // Пример использования методов, позволяюших получить данные сервиса одним запросом, используя массивы параметров. internal class Program { static void Main(string[] args) { Console.OutputEncoding = Encoding.GetEncoding(1251); Console.WriteLine("Пример работы с API Сервиса получения данных с помощью методов categoryNew и dataNew "); var client = new DefaultApi(ConfigurationManager.AppSettings["ApiLink"]); // http://www.cbr.ru/dataservice/ // Получаем каталог показателей var categories = client.CategoryNewGet(); //foreach (var catObj in categories.Category) //{ // Console.WriteLine($"id:{catObj.CategoryId} title:{catObj.CategoryName} / {catObj.IndicatorName} indicator id: {catObj.IndicatorId}"); //} using (var writer = new CsvWriter("categoryNew.csv")) { writer.WriteHeader(); foreach (var catObj in categories.Category) { writer.WriteRow(catObj); } } Console.WriteLine("**** Получаем данные одним запросом\r\n пример: \"Денежно - кредитная статистика - Структура денежной массы\" - \"Денежный агрегат М2 + Широкая денежная масса\" \r\nc 2021 по 2023 ****"); // для запроса DataNewGet: // categoryId = 5 - Денежно-кредитная статистика-Структура денежной массы // iIds=7 - Денежный агрегат М2 + + // iIds=8 - Широкая денежная масса // y1 и y2 соотв. диапазон годов var simpleQ1 =client.DataNewGet(5, 2021, 2023, new List () { 7, 8 }); using (var writer = new CsvWriter("data.csv")) { writer.WriteHeader (); var ret = simpleQ1.RowData.Join(simpleQ1.Links, p => new { p.IndicatorId, p.Measure1Id, p.Measure2Id, p.UnitId }, c => new { c.IndicatorId, c.Measure1Id, c.Measure2Id, c.UnitId }, (p,c) => new RowModel { date=p.Date, periodicity = p.Periodicity, indicator_name =c.IndicatorName, measure1_name = c.Measure1Name, measure2_name = c.Measure2Name, obs_val = p.ObsVal, un_name= c.UnName }); foreach (var row in ret) { writer.WriteRow(row); } } Console.WriteLine("**** Получаем данные одним запросом с большей фильтрацией:\r\n Статистика процентных ставок - По депозитам - В целом по Российской Федерации\r\nc 2021 по 2023 ****"); //categoryId = 18 - Статистика процентных ставок - По депозитам - В целом по Российской Федерации //iIds=38 - Ставки по вкладам (депозитам) нефинансовых организаций //m1Ids= [3,4] - выбираем данные в долларах(3) и евро(4), (параметр может отсуствовать) //m2Ids = [9,10] - для 9 - От 1 года до 3 лет, 10 - Свыше 3 лет, (параметр может отсуствовать) //y1 и y2 соотв. диапазон годов 2021-2023 var simpleQ2 = client.DataNewGet(18, 2021, 2023, new List () {38}, new List () {3,4 }, new List () { 9, 10 }); using (var writer = new CsvWriter("data2.csv")) { writer.WriteHeader (); var ret = simpleQ2.RowData.Join(simpleQ2.Links, p => new { p.IndicatorId, p.Measure1Id, p.Measure2Id, p.UnitId }, c => new {c.IndicatorId, c.Measure1Id, c.Measure2Id, c.UnitId}, (p, c) => new RowModel { date = p.Date, periodicity=p.Periodicity, indicator_name = c.IndicatorName, measure1_name = c.Measure1Name, measure2_name = c.Measure2Name, obs_val = p.ObsVal, un_name = c.UnName }); foreach (var row in ret) { writer.WriteRow(row); } } Console.WriteLine("Все готово..."); } } }
Страница была полезной?
Последнее обновление страницы: 25.02.2025