На информационном ресурсе применяются рекомендательные технологии (информационные технологии предоставления информации на основе сбора, систематизации и анализа сведений, относящихся к предпочтениям пользователей сети "Интернет", находящихся на территории Российской Федерации)

artydev & Co

1 подписчик

Анализ отзывов с banki.ru [Часть 4] Создание сайта и RESTAPI

Анализ отзывов с banki.ru

img

Данный материал представлен в информационно-ознакомительных целях.

Список частей:

Короткое вступление

Четвертая часть в серии статей о сборе данных с ресурса banki.ru - отзывов клиентов

Прошлую статью мы закончили на создании аудита загрузок, с того момента прошло некоторое время - данные сохраняются а толку от них 0, чтобы исправить этот момент мы создадим сервис, который будет отдавать эти данные, а именно демонстрационный сайт и RESTAPI.

В данный момент работают несколько потоков:

  • Тинькофф Банк
  • ВТБ
  • Хоум Кредит
  • Альфа-Банк
  • Банк Открытие
  • Газпромбанк
  • Райффайзенбанк
select      bank_name     , round(avg(score),2 ) as scorex      , trunc(median(score)) as median     , count(*) as cnt from home.dt_banki_responses where      create_dt >= date('2021-01-01')     and bank_name in (         'Тинькофф Банк',         'ВТБ',         'Хоум Кредит Банк',         'Альфа-Банк',         'Банк Открытие',         'Газпромбанк',         'Райффайзенбанк'     ) group by bank_name order by cnt desc 
  1. Тинькофф Банк - кол-во: 13954 средняя: 4.60 медиана: 5
  2. ВТБ - кол-во: 10100 средняя: 2.39 медиана: 2
  3. Хоум Кредит Банк - кол-во: 5433 средняя: 3.73 медиана: 5
  4. Альфа-Банк - кол-во: 5251 средняя: 1.40 медиана: 1
  5. Банк Открытие - кол-во: 3003 средняя: 2.11 медиана: 1
  6. Газпромбанк - кол-во: 2881 средняя: 1.98 медиана: 1
  7. Райффайзенбанк - кол-во: 1130 средняя: 1.71 медиана: 1
img

Заглядывая в будущее можно смело сделать вывод, что реализация демонстрационной страницы с использованием только django - это догога, ведущая к неизмежному “переписыванию” фронтовой части на что-то из современных JS библиотек, поэтому django будет использован только для реализации API endpoints.

urlpatterns = [     path('sample/', get_data_sample, name='sample'),     path('export/', get_example_csv, name='export'),     path('stats/', get_bank_stats, name='stats'), ] 

Создадим несколько django view:

Семпл данных для стартовой страницы

def get_data_sample(request):     cursor = get_cursor()     query = '''         select              id             , link              , title             , city              , bank_name             , score              , status              , username              , create_dt              , comments         from home.dt_banki_responses         order by id desc          limit 10     '''     cursor.execute(query)     result = cursor.fetchall()     data = {         'status': 'success',         'data': result,         'time': datetime.now()     }     return JsonResponse(data=data, safe=False, json_dumps_params={'ensure_ascii': False}) 

Выгрузка в формате CSV

def get_example_csv(request):     response = HttpResponse(content_type='text/csv; charset=windows-1251')     cursor = get_cursor()     query = '''         select *         from home.dt_banki_responses         where create_dt <= date(now())-2         order by id desc          limit 250     '''     cursor.execute(query)     result = cursor.fetchall()     writer = csv.writer(response, delimiter=';')     writer.writerow([col.name for col in cursor.description])     for row in result:         try:             writer.writerow(list(row.values()))         except UnicodeEncodeError:             continue     response['Content-Disposition'] = f'attachment; filename=export_{sysdate()}.csv'     return response 

Статистика

def get_bank_stats(request):     cursor = get_cursor()     query = 'select * from home.v_stats'     cursor.execute(query)     result = cursor.fetchall()     data = {         'status': 'success',         'data': result,         'time': datetime.now()     }     return JsonResponse(data=data, safe=False, json_dumps_params={'ensure_ascii': False}) 

Создание postgres view home.v_stats

create or replace view home.v_stats as ( 	select  	    bank_name 	    , round(avg(score),2 ) as scorex  	    , trunc(median(score)) as median 	    , count(*) as cnt 	from home.dt_banki_responses 	where  		create_dt >= date('2021-01-01') 		and bank_name in ( 			'Тинькофф Банк', 'ВТБ', 'Хоум Кредит Банк', 'Альфа-Банк', 'Банк Открытие', 'Газпромбанк', 'Райффайзенбанк' 		) 	group by bank_name 	order by cnt desc ); 

После развертывания на тестовом сервере - получаем 3 апи-роута:

  • Таблица: sample - кликабельно
  • Статистика: stats - кликабельно
  • Выгрузка в CSV: export - кликабельно

Сам демонстрационный сайт временно размещен на поддомене http://banki.artydev.ru/ По вопросам сотрудничества можно обращаться в @artydevx

Ссылка на первоисточник
наверх