2
2
3
3
# modified from https://gist.github.com/pbock/3ab260f3862c350e6b5f #
4
4
5
+
6
+ ##################################################
7
+ ##################################################
8
+ # NOTE: due to changes in Berlin's websites,
9
+ # this script is currently borked
10
+ ##################################################
11
+ ##################################################
12
+
13
+
5
14
require 'selenium-webdriver'
6
15
require 'date'
7
- require 'pry'
16
+ # require 'pry'
8
17
9
18
class BurgerBot
19
+ CHARLOTTENBURG = [ 122210 , 122217 , 122219 , 122227 ]
20
+ KREUZBERG = [ 122231 , 122238 , 122243 ]
21
+ LICTENBERG = [ 122252 , 122254 , 122260 , 122262 ]
22
+ MARZAHN = [ 122271 , 122273 , 122277 ]
23
+ MITTE = [ 122280 , 122282 , 122284 ]
24
+ NEUKOLLN = [ 122285 , 122286 , 122291 , 122296 ]
25
+ PANKOW = [ 122294 , 122297 , 122301 , 150230 ]
26
+ REINICKENDORF = [ 122304 , 122309 , 122311 , 122312 , 122314 , 317869 ]
27
+ SPANDAU = [ 122279 , 122281 , 122283 , 324414 ]
28
+ STEGLITZ = [ 122267 , 122274 , 122276 ]
29
+ TEMPELHOF_SCHOENEBERG = [ 122246 , 122251 , 122257 ]
30
+ TREPTOW_KOEPENICK = [ 122208 , 122226 ]
31
+
10
32
def initialize ( termin_type )
11
33
today = Date . today
12
34
13
35
@attempt_count = 0
14
36
@date = Date . new ( today . year , today . month , 1 )
15
- @url = determine_url ( termin_type )
37
+ @selected_locations = [ KREUZBERG , NEUKOLLN , PANKOW ] . flatten . join ( ',' )
38
+ @termin_type = termin_type
39
+ @url = determine_url
16
40
end
17
41
18
42
def run
19
- until appointment_available?
20
- puts 'Sleeping.'
21
- sleep 35
43
+ if visa_seeker?
44
+ puts 'Entering kafkaesque nightmare. Hold on to your butts'
45
+ puts '-' *80
46
+ puts "Beginning attempt ##{ @attempt_count += 1 } "
47
+ browser . get @url
48
+ puts 'Page loaded'
49
+ browser . find_elements ( css : 'a' ) . detect { |el | el . text == 'Termin buchen' } . click
50
+ puts 'We\'re in'
51
+ wait = Selenium ::WebDriver ::Wait . new
52
+ wait . until { browser . find_elements ( css : 'input' ) . any? ( &:displayed? ) }
53
+ checkbox = browser . find_element ( css : 'input[name=gelesen]' )
54
+ p checkbox
55
+ checkbox . click
56
+ # browser.find_element(css: 'button#applicationForm:managedForm:proceed').click
57
+ else
58
+ until appointment_available?
59
+ puts 'Sleeping.'
60
+ sleep 35
61
+ end
22
62
end
23
63
end
24
64
@@ -43,13 +83,18 @@ def appointment_available?
43
83
return false
44
84
end
45
85
46
- def determine_url ( termin_type )
47
- case termin_type
86
+ def visa_seeker?
87
+ @termin_type == 'employee_visa'
88
+ end
89
+
90
+ def determine_url
91
+ case @termin_type
48
92
when 'anmeldung' then anmeldung_url
49
93
when 'background_check' then background_check_url
50
94
when 'gewerbe' then gewerbe_registration_url
95
+ when 'employee_visa' then employee_visa_url
51
96
else
52
- raise ArgumentError , "Unknown termin type: #{ termin_type } "
97
+ raise ArgumentError , "Unknown termin type: #{ @ termin_type} "
53
98
end
54
99
end
55
100
@@ -68,15 +113,15 @@ def background_check_url
68
113
'https://service.berlin.de/terminvereinbarung/termin/tag.php?' \
69
114
'termin=1&' \
70
115
'anliegen[]=120926&' \
71
- ' dienstleisterlist=122210,122217,122219,122227,122231,122238,122243,122254,331011,349977,122252,122260,122262,122271,122273,122277,122280,122282,122284,122291,122285,122286,122296,150230,122297,122294,122312,122314,122304,122311,122309,317869,122281,122279,122283,122276,122274,122267,122246,122251,122257,122208,122226&' \
116
+ " dienstleisterlist=#{ @selected_locations } &" \
72
117
'herkunft=http%3A%2F%2Fservice.berlin.de%2Fdienstleistung%2F120926%2F'
73
118
end
74
119
75
120
def gewerbe_registration_url
76
121
'https://service.berlin.de/terminvereinbarung/termin/tag.php?' \
77
122
'termin=1&' \
78
123
'anliegen[]=327835&' \
79
- ' dienstleisterlist=122210,122217,122219,122227,122231,122238,122243,122254,331011,349977,122252,122260,122262,122271,122273,122277,122280,122282,122284,122291,122285,122286,122296,324759,150230,122297,122294,122312,122314,122304,122311,122309,317869,122281,122279,122283,122276,122274,122267,122246,122251,122257,122208,122226&' \
124
+ " dienstleisterlist=#{ @selected_locations } &" \
80
125
'herkunft=http%3A%2F%2Fservice.berlin.de%2Fdienstleistung%2F327835%2F'
81
126
end
82
127
@@ -85,60 +130,22 @@ def anmeldung_url
85
130
'?id=&buergerID=&buergername=&absagecode=' \
86
131
"&Datum=#{ @date } " \
87
132
'&anliegen%5B%5D=120686' \
88
- '&dienstleister%5B%5D=122210' \
89
- '&dienstleister%5B%5D=122217' \
90
- '&dienstleister%5B%5D=122219' \
91
- '&dienstleister%5B%5D=122227' \
92
- '&dienstleister%5B%5D=122231' \
93
- '&dienstleister%5B%5D=122243' \
94
- '&dienstleister%5B%5D=122252' \
95
- '&dienstleister%5B%5D=122260' \
96
- '&dienstleister%5B%5D=122262' \
97
- '&dienstleister%5B%5D=122254' \
98
- '&dienstleister%5B%5D=122271' \
99
- '&dienstleister%5B%5D=122273' \
100
- '&dienstleister%5B%5D=122277' \
101
- '&dienstleister%5B%5D=122280' \
102
- '&dienstleister%5B%5D=122282' \
103
- '&dienstleister%5B%5D=122284' \
104
- '&dienstleister%5B%5D=122285' \
105
- '&dienstleister%5B%5D=122286' \
106
- '&dienstleister%5B%5D=122296' \
107
- '&dienstleister%5B%5D=150230' \
108
- '&dienstleister%5B%5D=122301' \
109
- '&dienstleister%5B%5D=122297' \
110
- '&dienstleister%5B%5D=122294' \
111
- '&dienstleister%5B%5D=122312' \
112
- '&dienstleister%5B%5D=122314' \
113
- '&dienstleister%5B%5D=122304' \
114
- '&dienstleister%5B%5D=122311' \
115
- '&dienstleister%5B%5D=122309' \
116
- '&dienstleister%5B%5D=317869' \
117
- '&dienstleister%5B%5D=324433' \
118
- '&dienstleister%5B%5D=325341' \
119
- '&dienstleister%5B%5D=324434' \
120
- '&dienstleister%5B%5D=122281' \
121
- '&dienstleister%5B%5D=324414' \
122
- '&dienstleister%5B%5D=122283' \
123
- '&dienstleister%5B%5D=122279' \
124
- '&dienstleister%5B%5D=122276' \
125
- '&dienstleister%5B%5D=122274' \
126
- '&dienstleister%5B%5D=122267' \
127
- '&dienstleister%5B%5D=122246' \
128
- '&dienstleister%5B%5D=122251' \
129
- '&dienstleister%5B%5D=122257' \
130
- '&dienstleister%5B%5D=122208' \
131
- '&dienstleister%5B%5D=122226'
133
+ "&dienstleisterlist=#{ @selected_locations } "
134
+ end
135
+
136
+ def employee_visa_url
137
+ 'https://otv.verwalt-berlin.de/ams/TerminBuchen'
132
138
end
133
139
end
134
140
135
- print "Which kind of appointment do you need?\n \n 1. Anmeldung\n 2. Background Check\n 3. Gerwerbe Registration\n "
141
+ print "Which kind of appointment do you need?\n \n 1. Anmeldung\n 2. Background Check\n 3. Gerwerbe Registration\n 4. Employee Visa \ n "
136
142
input = gets . chomp . to_i
137
143
138
144
termin_type = case input
139
145
when 1 then 'anmeldung'
140
146
when 2 then 'background_check'
141
147
when 3 then 'gewerbe'
148
+ when 4 then 'employee_visa'
142
149
end
143
150
144
151
`clear`
0 commit comments