Skip to content

Commit 49d73a7

Browse files
committed
\beer PoC
1 parent cf1ed51 commit 49d73a7

File tree

4 files changed

+92
-0
lines changed

4 files changed

+92
-0
lines changed

aesc_bot/bot.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ def create_bot(**kwargs):
4242
dispatcher.add_handler(CommandHandler('version', version))
4343
dispatcher.add_handler(CommandHandler('menu', menu))
4444
dispatcher.add_handler(CallbackQueryHandler(menu_handler, pattern=r"menu_.*"))
45+
dispatcher.add_handler(CommandHandler('beers', beers))
46+
dispatcher.add_handler(CallbackQueryHandler(beers_handler, pattern=r"beers_.*"))
4547

4648
dispatcher.add_handler(MessageHandler(Filters.text, echo))
4749

aesc_bot/commands.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import requests
1919
from requests import RequestException
2020
from datetime import datetime, timedelta
21+
from aesc_bot.parsers import parse_beer_types
22+
from aesc_bot.formatters import format_beer_types
2123

2224
CACHE_MENU_PATH = "cache/menu/"
2325
ACTIVITIES = os.environ.get("ACTIVITY_YAML",
@@ -31,6 +33,16 @@
3133
"Unithèque": "unitheque",
3234
}
3335

36+
beers_buttons = {
37+
"Types": "types",
38+
}
39+
40+
beers_functions = {
41+
'types': {
42+
'parser': parse_beer_types,
43+
'formatter': format_beer_types,
44+
},
45+
}
3446

3547
# start
3648
def start(bot, update):
@@ -136,6 +148,27 @@ def menu_handler(bot, update):
136148
parse_mode='Markdown')
137149

138150

151+
def beers(bot, update):
152+
button_list = [InlineKeyboardButton(beers_button, callback_data="beers_%s" % beers_button_ref) for beers_button, beers_button_ref in
153+
beers_buttons.items()]
154+
155+
reply_markup = InlineKeyboardMarkup(build_menu(button_list, n_cols=2))
156+
157+
update.message.reply_text("Fait ton choix mon jeune padawan!", reply_markup=reply_markup)
158+
159+
160+
def beers_handler(bot, update):
161+
query = update.callback_query
162+
button = query.data.replace("beers_", "")
163+
164+
message = beers_functions[button]['formatter'](beers_functions[button]['parser']())[:4095]
165+
166+
bot.edit_message_text(chat_id=query.message.chat_id,
167+
message_id=query.message.message_id,
168+
text=message,
169+
parse_mode='Markdown')
170+
171+
139172
def version(bot, update):
140173
conf = Configuration.get_instance()
141174
bot.send_message(chat_id=update.message.chat_id,

aesc_bot/formatters.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# formatters.py
2+
# Project: aesc_bot
3+
#
4+
# Created by "Francesco Servida"
5+
# Created on 13.06.18
6+
7+
8+
def format_beer_types(beer_types):
9+
return "\n".join(["*{}* - {}".format(beer_type, description) for beer_type, description in beer_types.items()])

aesc_bot/parsers.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# parsers.py
2+
# Project: aesc_bot
3+
#
4+
# Created by "Francesco Servida"
5+
# Created on 13.06.18
6+
7+
import requests
8+
from requests import RequestException
9+
import json
10+
import bs4
11+
12+
from pprint import pprint
13+
14+
BEER_TYPES = "https://satellite.bar/bar/biere.php?type_biere=sortes"
15+
16+
17+
def parse_beer_types():
18+
try:
19+
response = requests.get(BEER_TYPES)
20+
html = response.text
21+
except (RequestException):
22+
return []
23+
24+
soup = bs4.BeautifulSoup(html, "html.parser")
25+
beer_types_raw = soup.select("div#main div.text_block")[2:]
26+
27+
beer_types = {}
28+
for beer_type in beer_types_raw:
29+
try:
30+
beer = beer_type.select_one("h2").text
31+
type_desc = " ".join(
32+
[line.strip() for line in beer_type.select_one("div.text_block_text").text.split("\n")]).strip()
33+
34+
beer_types[beer] = type_desc
35+
36+
except AttributeError:
37+
pass
38+
39+
return beer_types
40+
41+
42+
def beers_to_json():
43+
beer_types = parse_beer_types()
44+
pprint(beer_types)
45+
46+
47+
if __name__ == '__main__':
48+
beers_to_json()

0 commit comments

Comments
 (0)