-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfunctions.py
119 lines (110 loc) · 6.61 KB
/
functions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import config
import telebot
import json
import requests
from telebot import types
# необходимые глобальные переменные
result = '' # результат, приходящий через get-запрос, приведенный к словарю
len = 0 # количество найденных заведений
cnt = 0 # номер найденного заведения
msg = { # сообщение, которые выводятся пользователю
'start' : 'Тут можно перекусить.. Что выберешь?)',
'loc' : 'Покажи на карте, где ты находишься\n\nНу а если ты в СПб, можешь ввести ближайшую станцию метро..',
'call' : 'Оо.. Есть еще места, где можно перекусить, можешь выбрать'
}
# функция определения геопозиции введенного пользователем адреса (в частности станции метро) с помощью 2gis
# выполнение запроса к Geocoder API 2gis (get-запрос: gis_geo) с ключом API_key_gis
def func_geo_gis(bot, message):
query = 'СПб метро ' + message.text
r = requests.get(url=config.gis_geo, params={
'q' : query,
'key': config.API_key_gis,
'fields' : 'items.point'
})
result = json.loads(r.text)
point = str(result['result']['items'][0]['point']['lon']) + ',' + str(result['result']['items'][0]['point']['lat'])
return point
# функция поиска по местам с помощью 2gis
# работает с помощью библиотеки requests, запросы отправляются и принимаются согласно документации API поиска по организациям
# выполнение запроса Places API 2gis (get-запрос: gis_search) с ключом API_key_gis
def func_search_gis(bot, call, point):
r = requests.get(url=config.gis_search, params={
'q' : call.data,
'key': config.API_key_gis,
'point' : point,
'type' : 'branch',
'fields' :'items.point,items.schedule',
'radius' : '1000'
})
global result, cnt
result = json.loads(r.text)
cnt = 0
func_output_gis(bot, call)
# функция вывода на результатов поиска мест при реализации с помощью 2gis
def func_output_gis(bot, call):
if result['meta']['code'] == 200:
global len
len = result['result']['total']
if len == 1:
text1 = 'Я нашел ' + call.data + '! Но только ' + str(len) + ' ресторан'
elif (len > 1 and len < 5):
text1 = 'Я нашел ' + call.data + '! Даже ' + str(len) + ' ресторана'
else:
text1 = 'Я нашел ' + call.data + '! Целых ' + str(len) + ' ресторанов'
bot.delete_message(chat_id=call.message.chat.id, message_id=call.message.message_id)
bot.send_message(chat_id=call.message.chat.id, text=text1)
keyboard = types.InlineKeyboardMarkup()
if len > 1:
button = types.InlineKeyboardButton(text='Хочу другое место', callback_data='var')
keyboard.add(button)
button1 = types.InlineKeyboardButton(text='McDonald’s', callback_data='McDonald’s')
button2 = types.InlineKeyboardButton(text='KFC', callback_data='KFC')
keyboard.add(button1, button2)
button3 = types.InlineKeyboardButton(text='Subway', callback_data='Subway')
button4 = types.InlineKeyboardButton(text='Burger King', callback_data='Burger King')
keyboard.add(button3, button4)
bot.send_venue(chat_id=call.message.chat.id,
latitude=result['result']['items'][0]['point']['lat'],
longitude=result['result']['items'][0]['point']['lon'],
title=result['result']['items'][0]['name'],
address=result['result']['items'][0]['address_name'],
reply_markup=keyboard)
else:
text1 = 'Ресторанов '+ call.data + ' рядом нет..('
bot.delete_message(chat_id=call.message.chat.id, message_id=call.message.message_id)
bot.send_message(chat_id=call.message.chat.id, text=text1)
func_inline_button(bot, call.message.chat.id, msg['call'])
# функция смены найденной локации на другую
# происходит перебот элементов в списке с счетчиком cnt
def func_var(bot, call):
global cnt
if cnt < len - 1:
cnt = cnt + 1
elif cnt == len - 1:
cnt = 0
keyboard = types.InlineKeyboardMarkup()
button = types.InlineKeyboardButton(text='Выбрать другое место', callback_data='var')
keyboard.add(button)
button1 = types.InlineKeyboardButton(text='McDonald’s', callback_data='McDonald’s')
button2 = types.InlineKeyboardButton(text='KFC', callback_data='KFC')
keyboard.add(button1, button2)
button3 = types.InlineKeyboardButton(text='Subway', callback_data='Subway')
button4 = types.InlineKeyboardButton(text='Burger King', callback_data='Burger King')
keyboard.add(button3, button4)
bot.delete_message(chat_id=call.message.chat.id, message_id=call.message.message_id)
bot.send_venue(chat_id=call.message.chat.id,
latitude=result['result']['items'][cnt]['point']['lat'],
longitude=result['result']['items'][cnt]['point']['lon'],
title=result['result']['items'][cnt]['name'],
address=result['result']['items'][cnt]['address_name'],
reply_markup=keyboard)
# функция создания inline клавиатуры
def func_inline_button(bot, c_id, text):
keyboard = types.InlineKeyboardMarkup(row_width=5)
button1 = types.InlineKeyboardButton(text='McDonald’s', callback_data='McDonald’s')
button2 = types.InlineKeyboardButton(text='KFC', callback_data='KFC')
keyboard.add(button1, button2)
button3 = types.InlineKeyboardButton(text='Subway', callback_data='Subway')
button4 = types.InlineKeyboardButton(text='Burger King', callback_data='Burger King')
keyboard.add(button3, button4)
bot.send_message(c_id, text, reply_markup=keyboard)