-
-
Save xuio/297e16b84d700314241393e8f3aa42f3 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby | |
require 'watir-webdriver' | |
require 'telegram/bot' | |
Telegram.bots_config = { | |
default: '<Telegram Bot token>', | |
} | |
Telegram.bot.get_updates | |
chat_id = '<Telegram Chat ID>' | |
def log (message) puts " #{message}" end | |
def success (message) puts "+ #{message}" end | |
def fail (message) puts "- #{message}" end | |
def notify (message) | |
success message.upcase | |
system 'osascript -e \'Display notification "Bürgerbot" with title "%s"\'' % message | |
rescue StandardError => e | |
end | |
def appointmentAvailable? (b) | |
url = 'https://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&dienstleister=122282&anliegen[]=120703&herkunft=1' | |
puts '-'*80 | |
log 'Trying again' | |
b.goto url | |
log 'Page loaded' | |
link = b.element css: '.calendar-month-table:first-child td.buchbar a' | |
if link.exists? | |
link.click | |
notify 'An appointment is available.' | |
log 'Enter y to keep searching or anything else to quit.' | |
Telegram.bot.send_message(chat_id: chat_id, text: 'Found an appointment! Book here: https://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&dienstleister=122282&anliegen[]=120703&herkunft=1') | |
return gets.chomp.downcase != 'y' | |
else | |
fail 'No luck this time.' | |
return false | |
end | |
rescue StandardError => e | |
fail 'Error encountered.' | |
puts e.inspect | |
return false | |
end | |
b = Watir::Browser.new | |
Telegram.bot.send_message(chat_id: chat_id, text: 'starting bot...') | |
until appointmentAvailable? b | |
log 'Sleeping.' | |
sleep 60 | |
end |
Thank you very much for this! Somehow I only manage to get telegram notifications, when starting the bot.
I don't get notified via telegram when an appointment is availbe. In console I it works fine though.
Any ideas? @davidfurlongError is:
#<NameError: undefined local variable or method `chat_id' for main:Object>
I found a work around. Just pass in your id direcly like:
Telegram.bot.send_message(chat_id: 32912731, text: 'Found an appointment! Book here: https://service.berlin.de/terminvereinbarung/termin/tag.php?termin=1&dienstleister=122282&anliegen[]=120703&herkunft=1')
Hope that helps. Good luck!
I've built a similar tool, but it updates a public webpage via websockets
Thanks for your help @Runflast
I got everything working but couldn't figure out from where I get the correct link.
This really helped!
@nicbou
Great idea! That could have helped a lot of people.
I'm running it now for several hours and although sometimes a free spot appears the bot is not triggered. I wonder if this got to do with the Captcha that pops up when you click manually on it.
Is there any way to get rid of the captchas when a new appointment appears?
They are here for a reason. Have a look at their robots.txt.
Hej, thanks for sharing! Got the same problem as @n0rtap and the same Error.
I´m a total newbee so i wanted to share some (maybe pretty obvious stuff) for other like me:
How do you let the bot search for the service you need and at the location you prefer?
Hope that helps.
Looking forward to a solution for the other problem.