├── .gitignore
├── LICENSE
├── README.md
├── TrainMonitor
├── __init__.py
├── dateutils.py
├── viaggiatreno.py
└── vt_data
│ └── stationIDs.json
├── demo-dumpstations.py
├── demo-trainstatus.py
├── run_tests.py
└── test
├── __init__.py
├── all_tests.py
├── test_dateutils.py
└── test_viaggiatreno.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 |
5 | # data directory
6 | data/
7 |
8 | # IDE
9 | .idea
10 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TrainMonitor
2 | A set of python script to download and process data of Italian railways site www.viaggiatreno.it
3 |
4 | * TrainMonitor/
5 | * viaggiatreno.py - a simple interface to viaggiatreno.it API
6 | * dateutils.py - utilities for Italian holidays and other date operations
7 |
8 | * test/ - Unit tests
9 |
10 | * demo-dumpstations.py - dumps informations about Italian railway stations, in CSV and GeoJSON format (a dump updated to 2018-02-26 can be downloaded here:
11 | https://gist.github.com/febs/39d373bf876caed20fdfc8cf4cf4921f
12 |
13 | * demo-trainstatus.py - display train running status informations, given the train number
14 |
15 | * run_tests.py - Runs unit tests
16 |
--------------------------------------------------------------------------------
/TrainMonitor/__init__.py:
--------------------------------------------------------------------------------
1 | __version_info__ = ('0', '0', '1', 'alpha')
2 | __version__ = '.'.join(__version_info__)
3 | __author__ = 'Fabrizio Tarizzo'
4 | __license__ = 'GPL v3'
5 | __copyright__ = '(c) 2015 by Fabrizio Tarizzo'
6 |
--------------------------------------------------------------------------------
/TrainMonitor/dateutils.py:
--------------------------------------------------------------------------------
1 | import datetime
2 |
3 | __italian_holidays = (
4 | '01-01', '06-01', '25-04', '01-05', '02-06',
5 | '15-08', '01-11', '08-12', '25-12', '26-12'
6 | )
7 |
8 | def easter (year):
9 | a = year % 19
10 | b = year // 100
11 | c = year % 100
12 | d = (19 * a + b - b // 4 - ((b - (b + 8) // 25 + 1) // 3) + 15) % 30
13 | e = (32 + 2 * (b % 4) + 2 * (c // 4) - d - (c % 4)) % 7
14 | f = d + e - 7 * ((a + 11 * d + 22 * e) // 451) + 114
15 | month = f // 31
16 | day = f % 31 + 1
17 | return datetime.date(year, month, day)
18 |
19 | def is_holiday (date):
20 | ddmm = date.strftime('%d-%m')
21 | east = easter(date.year) # Easter
22 | em = east + datetime.timedelta(1) # Easter Monday
23 | return ddmm in __italian_holidays or date in (east, em)
24 |
25 | def is_weekend (date):
26 | return date.weekday() in (5, 6)
27 |
28 | def iter_month (year, month):
29 | d = datetime.date (year, month, 1)
30 | oneday = datetime.timedelta(1)
31 | while d.month == month:
32 | yield d
33 | d += oneday
34 |
35 | def check_timestamp (ts):
36 | return (ts is not None) and (ts > 0) and (ts < 2147483648000)
37 |
38 | def format_timestamp (ts, fmt="%H:%M:%S"):
39 | return convert_timestamp(ts).strftime(fmt)
40 |
41 | def convert_timestamp (ts):
42 | if check_timestamp(ts):
43 | return datetime.datetime.fromtimestamp(ts/1000)
44 | else:
45 | return None
46 |
47 |
--------------------------------------------------------------------------------
/TrainMonitor/viaggiatreno.py:
--------------------------------------------------------------------------------
1 | import json
2 | import re
3 | import os
4 | import datetime
5 | from TrainMonitor import dateutils
6 |
7 | try:
8 | from urllib.request import urlopen
9 | except ImportError:
10 | from urllib import urlopen
11 |
12 | class Utils:
13 | __path = os.path.join(os.path.dirname(__file__), 'vt_data', 'stationIDs.json')
14 | with open(__path, 'r') as fp:
15 | __stationsIDs = json.load(fp)
16 |
17 | @staticmethod
18 | def station_from_ID (station_ID):
19 | return Utils.__stationsIDs.get(station_ID, 'UNKNOWN')
20 |
21 | @staticmethod
22 | def exists_station_ID (station_ID):
23 | return station_ID in Utils.__stationsIDs
24 |
25 | @staticmethod
26 | def train_runs_on_date (train_info, date):
27 | # trainInfo['runs_on'] flag:
28 | # G Runs every day
29 | # FER5 Runs only Monday to Friday (holidays excluded)
30 | # FER6 Runs only Monday to Saturday (holidays excluded)
31 | # FEST Runs only on Sunday and holidays
32 | runs_on = train_info.get ('runs_on', 'G')
33 | suspended = train_info.get ('suspended', [])
34 |
35 | for from_, to in suspended:
36 | ymd = date.strftime('%Y-%m-%d')
37 | if ymd >= from_ and ymd <= to:
38 | return False
39 |
40 | if runs_on == 'G':
41 | return True
42 |
43 | wd = date.weekday()
44 |
45 | if runs_on == 'FEST':
46 | return dateutils.is_holiday(date) or wd == 6
47 |
48 | if dateutils.is_holiday(date):
49 | return False
50 |
51 | if runs_on == 'FER6' and wd < 6:
52 | return True
53 | if runs_on == 'FER5' and wd < 5:
54 | return True
55 |
56 | return False
57 |
58 | # Decoders for API Output - TODO: Proper error handling
59 | def _decode_json (s):
60 | if s == '':
61 | return None
62 | return json.loads(s)
63 |
64 | def _decode_lines (s, linefunc):
65 | if s == '':
66 | return []
67 |
68 | lines = s.strip().split('\n')
69 | result = []
70 | for line in lines:
71 | result.append(linefunc(line))
72 |
73 | return result
74 |
75 | def _decode_cercaNumeroTrenoTrenoAutocomplete (s):
76 | def linefunc (line):
77 | r = re.search('^(\d+)\s-\s(.+)\|(\d+)-(.+)-(\d+)$', line)
78 | if r is not None:
79 | return r.group(2,4,5)
80 |
81 | return _decode_lines (s, linefunc)
82 |
83 | def _decode_autocompletaStazione (s):
84 | return _decode_lines (s, lambda line: tuple(line.strip().split('|')))
85 |
86 |
87 | class API:
88 | def __init__ (self, **options):
89 | self.__verbose = options.get('verbose', False)
90 | self.__urlopen = options.get('urlopen', urlopen)
91 | self.__plainoutput = options.get('plainoutput', False)
92 | self.__decoders = {
93 | 'andamentoTreno': _decode_json,
94 | 'cercaStazione': _decode_json,
95 | 'tratteCanvas': _decode_json,
96 | 'dettaglioStazione': _decode_json,
97 | 'regione': _decode_json,
98 | 'cercaNumeroTrenoTrenoAutocomplete': _decode_cercaNumeroTrenoTrenoAutocomplete,
99 | 'autocompletaStazione': _decode_autocompletaStazione
100 | }
101 | self.__default_decoder = lambda x: x
102 |
103 | def __checkAndDecode(self, function, data):
104 | decoder = self.__decoders.get(function, self.__default_decoder)
105 | return decoder(data)
106 |
107 | def call (self, function, *params, **options):
108 | plain = options.get('plainoutput', self.__plainoutput)
109 | verbose = options.get('verbose', self.__verbose)
110 |
111 | base = 'http://www.viaggiatreno.it/infomobilita/resteasy/viaggiatreno/'
112 | path = '/'.join(str(p) for p in params)
113 | url = base + function + '/' + path
114 |
115 | if verbose:
116 | print (url)
117 |
118 | req = self.__urlopen(url)
119 | data = req.read().decode('utf-8')
120 | if plain:
121 | return data
122 | else:
123 | return self.__checkAndDecode (function, data)
124 |
125 |
126 |
--------------------------------------------------------------------------------
/TrainMonitor/vt_data/stationIDs.json:
--------------------------------------------------------------------------------
1 | {
2 | "S02672": "VENEZIA CARPENEDO",
3 | "S02670": "QUARTO D`ALTINO",
4 | "S02671": "GAGGIO",
5 | "S07998": "ATELETA",
6 | "S00018": "SUNO",
7 | "S07994": "COLLEDIMEZZO",
8 | "S07995": "VILLA S.MARIA",
9 | "S07996": "QUADRI-BORELLO",
10 | "S07997": "GAMBERALE-S.ANGELO P.",
11 | "S07990": "PIANIBBIE",
12 | "S07991": "CASOLI",
13 | "S07992": "ARCHI",
14 | "S07993": "BOMBA TORRICELLA",
15 | "S07203": "MONTECAROTTO CASTELBELLINO",
16 | "S05130": "BOLOGNA S.RUFFILLO",
17 | "S05131": "PIANORO",
18 | "S09464": "BONEFRO S.CROCE",
19 | "S09465": "CASACALENDA GUARDIALFIERA",
20 | "S09462": "CAMPOLIETO MONACILIONI",
21 | "S09463": "RIPABOTTONI S.ELIA",
22 | "S05136": "VAIANO",
23 | "S09461": "MATRICE MONTAGANO",
24 | "S05138": "RASTIGNANO",
25 | "S05139": "MUSIANO-PIAN DI MACINA",
26 | "S09468": "S.MARTINO IN PENSILIS",
27 | "S03418": "BALATONFOELDVAR",
28 | "S11457": "SALANDRA",
29 | "S08680": "PIEDIMONTE-V.S.L.-AQUINO",
30 | "S12050": "VILLAFRANCA TIRRENA",
31 | "S12055": "PALERMO BRANCACCIO",
32 | "S06023": "SANTA LUCE",
33 | "S06022": "ORCIANO",
34 | "S06021": "FAUGLIA - LORENZANA",
35 | "S06026": "CECINA",
36 | "S06025": "VADA",
37 | "S06024": "CASTELLINA MARITTIMA",
38 | "S06029": "CASTAGNETO CARDUCCI",
39 | "S06028": "BOLGHERI",
40 | "S08533": "CARRITO-ORTONA",
41 | "S03304": "GORIZIA CENTRALE",
42 | "S03307": "SAGRADO",
43 | "S08530": "CERCHIO",
44 | "S08537": "ANVERSA-VILLALAGO-SCANNO",
45 | "S03300": "CORMONS",
46 | "S08535": "GORIANO SICOLI",
47 | "S08534": "COCULLO",
48 | "S09800": "NAPOLI S.GIOV.BARRA",
49 | "S09801": "PIETRARSA",
50 | "S09802": "PORTICI- ERCOLANO",
51 | "S08538": "BUGNARA",
52 | "S03309": "RONCHI DEI LEGIONARI NORD",
53 | "S03308": "REDIPUGLIA",
54 | "S09806": "TORRE ANNUNZIATA CENTRALE",
55 | "S00927": "ORMEA",
56 | "S06751": "CASINO DI TERRA",
57 | "S06750": "RIPARBELLA",
58 | "S06753": "VOLTERRA SALINE - POMARANCE",
59 | "S06752": "PONTE GINORI",
60 | "S05820": "RIMINI VISERBA",
61 | "S00978": "SILLAVENGO",
62 | "S00973": "COSSATO",
63 | "S00972": "CASALEGGIO",
64 | "S00971": "CARPIGNANO SESIA",
65 | "S00970": "BIELLA CHIAVAZZA",
66 | "S00977": "VIGLIANO CANDELO",
67 | "S11119": "BARI CENTRALE",
68 | "S00974": "GHISLARENGO",
69 | "S00408": "SAIRANO",
70 | "S00403": "SANNAZZARO",
71 | "S00402": "PIEVE ALBIGNOLA",
72 | "S00401": "ZINASCO NUOVO",
73 | "S00400": "SAIRANO ZINASCO",
74 | "S00406": "MEDE",
75 | "S00405": "LOMELLO",
76 | "S00404": "FERRERA LOMELLINA",
77 | "S00920": "NUCETTO",
78 | "S11112": "TRANI",
79 | "S08226": "ROMA TIBURTINA PIAZZALE EST",
80 | "S08222": "PIANA BELLA MONTELIBRETTI",
81 | "S08221": "COLLEVECCHIO",
82 | "S08220": "Dev.Int. DD/AV",
83 | "S00925": "TRAPPA",
84 | "S11508": "PALAGIANELLO",
85 | "S11509": "PALAGIANO MOTTOLA",
86 | "S12231": "VALLEDOLMO",
87 | "S12237": "VILLAROSA",
88 | "S00926": "ECA NASAGO`",
89 | "S12234": "MARIANOPOLI",
90 | "S11500": "MODUGNO",
91 | "S11501": "BITETTO PALO DEL COLLE",
92 | "S12239": "LEONFORTE-PIRATO",
93 | "S12238": "ENNA",
94 | "S11504": "ACQUAVIVA DELLE FONTI",
95 | "S11505": "GIOIA DEL COLLE",
96 | "S11507": "CASTELLANETA",
97 | "S11760": "TROPEA",
98 | "S11841": "BADOLATO",
99 | "S11763": "JOPPOLO",
100 | "S11764": "NICOTERA",
101 | "S11765": "ROSARNO",
102 | "S11766": "GIOIA TAURO",
103 | "S00701": "VERZUOLO",
104 | "S11769": "PALMI",
105 | "S00702": "COSTIGLIOLE SALUZZO",
106 | "S12880": "URAS MOGORO",
107 | "S07406": "CITTADUCALE",
108 | "S07407": "CASTEL S.ANGELO",
109 | "S07404": "CONTIGLIANO",
110 | "S07405": "RIETI",
111 | "S07403": "GRECCIO",
112 | "S07400": "STRONCONE",
113 | "S07401": "MARMORE",
114 | "S11845": "RIACE",
115 | "S07408": "ANTRODOCO BORGO VELINO",
116 | "S07409": "ROCCA DI FONDI",
117 | "S09466": "LARINO",
118 | "S09467": "URURI ROTELLO",
119 | "S05132": "MONZUNO",
120 | "S06040": "VIAREGGIO",
121 | "S05133": "GRIZZANA",
122 | "S05134": "SAN BENEDETTO SAMBRO-CAST.PEPOLI",
123 | "S09761": "SPARTIMENTO DI SCISCIANO",
124 | "S05135": "VERNIO MONTEPIANO CANTAGALLO",
125 | "S12882": "SAN GAVINO",
126 | "S09707": "LANZARA FIMIANI",
127 | "S08316": "VIGNA DI VALLE",
128 | "S06325": "PIAZZA AL SERCHIO",
129 | "S00338": "SERRALUNGA CERESETO",
130 | "S12883": "SANLURI STATO",
131 | "S09060": "VENAFRO",
132 | "S09061": "CAPRIATI AL VOLTURNO",
133 | "S06322": "VILLETTA S. ROMANO",
134 | "S09700": "NOLA",
135 | "S06504": "S.FREDIANO A SETTIMO",
136 | "S03551": "PROSECCO",
137 | "N00075": "LEZZA - CARPESINO",
138 | "S09321": "BOVINO DELICETO",
139 | "S09320": "ORSARA DI PUGLIA",
140 | "S09323": "CASTELFRANCO IN MISCANO",
141 | "S09322": "TROIA CASTELLUCCIO SAURI",
142 | "S09325": "PONTE ALBANITO",
143 | "S09324": "CORSANO",
144 | "S09326": "TELESE CERRETO",
145 | "S06500": "PISA CENTRALE",
146 | "S06501": "PISA SAN ROSSORE",
147 | "S01138": "FERNO LONATE POZZOLO",
148 | "S01139": "MALPENSA",
149 | "S11961": "TOSCANO",
150 | "S01135": "RESCALDINA",
151 | "S01136": "CASTELLANZA",
152 | "S01137": "BUSTO ARSIZIO N.",
153 | "S11968": "OFFICINE G.R. SALINE JONICHE",
154 | "S11969": "REGGIO DI CALABRIA BOCALE",
155 | "S12865": "TORRALBA",
156 | "S01484": "MACHERIO-CANONICA",
157 | "S01485": "TRIUGGIO-PONTE ALBIATE",
158 | "S01486": "CARATE-CALO`",
159 | "S09005": "S.MARCELLINO FRIGNANO",
160 | "S01480": "MONZA SOBBORGHI",
161 | "S01481": "VILLASANTA",
162 | "S01482": "BUTTAFAVA",
163 | "S01483": "BIASSONO-LESMO PARCO",
164 | "S01488": "BESANA",
165 | "S01489": "RENATE-VEDUGGIO",
166 | "S02102": "RIO DI PUSTERIA",
167 | "S05057": "RIMINIFIERA",
168 | "S05056": "CASTELBOLOGNESE",
169 | "S05055": "OZZANO DELL'EMILIA",
170 | "S05054": "IMOLA",
171 | "S05053": "CASTEL S.PIETRO TERME",
172 | "S05052": "VARIGNANA",
173 | "S05059": "FORLI`",
174 | "S05058": "FAENZA",
175 | "S01008": "VOGOGNA OSSOLA",
176 | "S01009": "PREMOSELLO CHIOVENDA",
177 | "S04509": "IMPERIA PORTO MAURIZIO",
178 | "S01000": "SEZANA",
179 | "S01003": "DOMODOSSOLA",
180 | "S04502": "VALLECROSIA",
181 | "S04503": "BORDIGHERA",
182 | "S01006": "DARFO-CORNA",
183 | "S01007": "BEURA CARDEZZA",
184 | "S02446": "VICENZA",
185 | "N00107": "BUSTO ARSIZIO RFI",
186 | "S05905": "BARBIANO",
187 | "S05904": "GODO",
188 | "S00021": "VIGNALE",
189 | "S05900": "SOLAROLO",
190 | "S05903": "RUSSI",
191 | "S05902": "BAGNACAVALLO",
192 | "S06908": "FIGLINE VALDARNO",
193 | "S11207": "RAPOLLA - LAVELLO",
194 | "S06900": "FIRENZE CAMPO MARTE",
195 | "S06901": "FI ROVEZZANO",
196 | "S06902": "COMPIOBBI",
197 | "S06903": "SIECI",
198 | "S02005": "COLLE ISARCO ",
199 | "S06905": "S.ELLERO",
200 | "S06906": "RIGNANO SULL`ARNO REGGELLO",
201 | "S06907": "INCISA",
202 | "S08810": "CUPONE",
203 | "S01315": "CARIMATE",
204 | "S01316": "CAMNAGO-LENTATE",
205 | "S08813": "MORREA-CASTRONOVO-RENDINARA",
206 | "S01310": "ALBATE CAMERLATA",
207 | "S01647": "MI P.GAR.SOTT.",
208 | "S08816": "COMPRE S.VINCENZO",
209 | "S01313": "CANTU`- CERMENATE",
210 | "S02113": "DOBBIACO ",
211 | "S02444": "ALTAVILLA TAVERNELLE",
212 | "S01648": "MILANO REPUBBLICA",
213 | "S01649": "MILANO VENEZIA",
214 | "S02441": "LONIGO",
215 | "S02440": "SAN BONIFACIO",
216 | "S02443": "MONTEBELLO",
217 | "S02114": "S.CANDIDO",
218 | "S02665": "CEGGIA",
219 | "S07903": "NOTARESCO",
220 | "S02667": "FOSSALTA DI PIAVE",
221 | "S02666": "S. DONA` DI PIAVE",
222 | "S02661": "CORDOVADO SESTO",
223 | "S02660": "S.VITO AL TAGLIAMENTO",
224 | "S02663": "LISON",
225 | "S12113": "CASTELVETRANO",
226 | "S12110": "MAZARA DEL VALLO",
227 | "S01868": "CHIGNOLO PO",
228 | "S01869": "LAMBRINIA",
229 | "S01862": "MOTTA S. DAMIANO",
230 | "S01863": "ALBUZZANO",
231 | "S01860": "PAVIA",
232 | "S01861": "PAVIA PORTA GARIBALDI",
233 | "S07987": "CASTEL FRENTANO",
234 | "S07986": "LANCIANO",
235 | "S01864": "BELGIOIOSO",
236 | "S01865": "CORTEOLONA",
237 | "S00022": "VAPRIO D`AGOGNA",
238 | "S02207": "LACES",
239 | "S02206": "COLDRANO-MARTELLO",
240 | "S02205": "SILANDRO",
241 | "S02204": "LASA",
242 | "S02203": "ORIS",
243 | "S02202": "SPONDIGNA-PRATO VENOSTA",
244 | "S09473": "CESE",
245 | "S09472": "BENEVENTO ACQUAFREDDA",
246 | "S05123": "PONTE DELLA VENTURINA",
247 | "S05122": "CASTAGNO",
248 | "S02209": "CIARDES",
249 | "S02208": "CASTELBELLO",
250 | "S08322": "ROMA MONTE MARIO",
251 | "S08323": "ROMA S.PIETRO",
252 | "S06168": "AULLA",
253 | "S08321": "LA GIUSTINIANA",
254 | "S08326": "GEMELLI",
255 | "S08327": "ROMA BALDUINA",
256 | "S08324": "OTTAVIA",
257 | "S08325": "ROMA S.FILIPPO NERI",
258 | "S06163": "PONTREMOLI",
259 | "S08328": "APPIANO",
260 | "S06161": "BORGO VAL DI TARO",
261 | "S06166": "VILLAFRANCA - BAGNONE",
262 | "S06167": "TERRAROSSA - TRESANA",
263 | "S06164": "SCORCETOLI",
264 | "S06165": "FILATTIERA",
265 | "S11740": "S.LUCIDO MARINA",
266 | "S02528": "VIGODARZERE",
267 | "S02061": "VERONA CA` DI DAVID",
268 | "S02060": "PERCA",
269 | "S11741": "FIUMEFREDDO BRUZIO",
270 | "S08817": "SANTOPADRE",
271 | "S05305": "REVERE",
272 | "S08857": "SORA",
273 | "S09509": "BENEVENTO PORTA RUFINA",
274 | "S08751": "FRASCATI",
275 | "S09508": "PIETRELCINA",
276 | "S05301": "BUTTAPIETRA",
277 | "S11420": "POTENZA INFERIORE",
278 | "S12422": "ROSOLINI",
279 | "S12420": "POZZALLO",
280 | "S12421": "ISPICA",
281 | "S12426": "AVOLA",
282 | "S12424": "NOTO",
283 | "S09922": "CASALETTO",
284 | "S09921": "PERTOSA",
285 | "S09920": "CASTELLUCCIO",
286 | "S04217": "GENOVA PONTEDECIMO",
287 | "S12888": "DECIMOMANNU",
288 | "S12889": "ASSEMINI",
289 | "S00023": "NOVARA FERROVIA NORD MILANO",
290 | "S08532": "PESCINA",
291 | "S00216": "ALPIGNANO",
292 | "S00217": "COLLEGNO",
293 | "S00214": "AVIGLIANA",
294 | "S00215": "ROSTA",
295 | "S00212": "CONDOVE",
296 | "S00213": "S. AMBROGIO",
297 | "S00210": "BORGONE",
298 | "S00211": "S. ANTONINO VAIE",
299 | "S99999": "Y",
300 | "S03301": "CAPRIVA",
301 | "S09502": "S.CROCE DEL SANNIO",
302 | "S08536": "PREZZA",
303 | "S11515": "MODUGNO CITTA`",
304 | "S11514": "PM GROTTALUPARA",
305 | "S11513": "BARI S.ANDREA",
306 | "S11512": "BELLAVISTA",
307 | "S11510": "MASSAFRA",
308 | "S03302": "MOSSA",
309 | "S09817": "VIETRI SUL MARE",
310 | "S09816": "CAVA DEI TIRRENI",
311 | "S00500": "CHIERI",
312 | "S00501": "MADONNA DELLA SCALA",
313 | "S09813": "PAGANI",
314 | "S09812": "ANGRI",
315 | "S09811": "SCAFATI",
316 | "S09810": "POMPEI",
317 | "S08539": "SULMONA",
318 | "S09819": "DUOMO VIA VERNIERI",
319 | "S09818": "SALERNO",
320 | "S09803": "TORRE DEL GRECO",
321 | "S09827": "SICIGNANO DEGLI ALBURNI",
322 | "S11777": "REGGIO DI CALABRIA GALLICO",
323 | "S11776": "REGGIO DI CALABRIA CATONA",
324 | "S11774": "VILLA SAN GIOVANNI",
325 | "S11773": "VILLA S.G.CANNITELLO",
326 | "S11772": "SCILLA",
327 | "S11771": "FAVAZZINA",
328 | "S11770": "BAGNARA",
329 | "S12956": "VILLASPECIOSA UTA",
330 | "S07414": "L`AQUILA",
331 | "S12954": "SILIQUA",
332 | "S07416": "PAGANICA",
333 | "S07411": "SELLA DI CORNO",
334 | "S12953": "MUSEI",
335 | "S12950": "IGLESIAS",
336 | "S02522": "ROSSANO VENETO",
337 | "S07418": "S.DEMETRIO DE` VESTINI",
338 | "S11603": "FRANCAVILLA FONTANA",
339 | "S11602": "GROTTAGLIE",
340 | "S11601": "MONTEIASI",
341 | "S11600": "NASISI",
342 | "S11607": "MESAGNE",
343 | "S11606": "LATIANO",
344 | "S11605": "ORIA",
345 | "S11608": "VILLA CASTELLI",
346 | "S02600": "TREVIGNANO SIGNORESSA",
347 | "S06617": "STRADA CASALE",
348 | "S00036": "OLEVANO",
349 | "S00037": "VALLE LOMELLINA",
350 | "S00034": "MORTARA",
351 | "S00035": "TORINO PORTA SUSA",
352 | "S00032": "BORGO LAVEZZARO",
353 | "S00033": "ALBONESE",
354 | "S00030": "GARBAGNA",
355 | "N00016": "MOZZATE",
356 | "S00038": "SARTIRANA",
357 | "S00039": "TORREBERETTI",
358 | "S02589": "VENEZIA MESTRE",
359 | "N00049": "VANZAGHELLO - MAGNAGO",
360 | "N00040": "PORTICHETTO - LUISAGO",
361 | "N00041": "GRANDATE - BRECCIA",
362 | "N00042": "COMO NORD CAMERLATA",
363 | "N00043": "COMO NORD BORGHI",
364 | "N00044": "COMO NORD LAGO",
365 | "S09318": "SAVIGNANO GRECI",
366 | "S09319": "MONTAGUTO PANNI",
367 | "S09314": "APICE S.ARCANGELO BONITO",
368 | "S09315": "MONTECALVO BUONALBERGO CASALB.",
369 | "S09316": "ARIANO IRPINO",
370 | "S09317": "PIANEROTTOLO DI ARIANO",
371 | "S09310": "VITULANO FOGLIANISE",
372 | "S09311": "BENEVENTO",
373 | "S09313": "PADULI",
374 | "S11975": "REGGIO DI CALABRIA S.CATERINA",
375 | "S11971": "TORREMEZZO DI FALCONARA",
376 | "S11970": "REGGIO DI CALABRIA OMECA",
377 | "S11973": "REGGIO DI CALABRIA ARCHI",
378 | "S11972": "CURINGA",
379 | "S01123": "CASTELLETTO TICINO",
380 | "S01122": "TAINO ANGERA",
381 | "S01121": "ISPRA",
382 | "S01120": "LEGGIUNO MONVALLE",
383 | "S01125": "POMBIA",
384 | "S01124": "PORTO VARALLO POMBIA",
385 | "S08303": "MONTEFIASCONE",
386 | "S01491": "COSTA MASNAGA",
387 | "S01490": "CASSAGO-NIBIONNO-BULCIAGO",
388 | "S00976": "NIBBIA",
389 | "S06823": "ROCCASTRADA",
390 | "S06822": "CIVITELLA PAGANICO",
391 | "S06821": "TREQUANDA",
392 | "S06820": "MONTE ANTICO",
393 | "S06826": "P.M. BADESSE",
394 | "S06825": "ASCIANO MONTE OLIVETO MAGGIORE",
395 | "S01318": "SEREGNO",
396 | "S01017": "BELGIRATE",
397 | "S05023": "REGGIO EMILIA",
398 | "S05020": "BOLOGNA FIERE",
399 | "S05021": "S.ILARIO",
400 | "S01013": "VERBANIA-PALLANZA",
401 | "S01012": "MERGOZZO",
402 | "S01011": "CANDOGLIA ORNAVASSO",
403 | "S01010": "CUZZAGO",
404 | "S01019": "MEINA",
405 | "S01018": "LESA",
406 | "S04519": "LOANO",
407 | "S04518": "BORGHETTO SANTO SPIRITO",
408 | "S04515": "ALASSIO",
409 | "S04514": "LAIGUEGLIA",
410 | "S04517": "CERIALE",
411 | "S04516": "ALBENGA",
412 | "S04511": "DIANO MARINA",
413 | "S04510": "IMPERIA ONEGLIA",
414 | "S04513": "ANDORA",
415 | "S04512": "CERVO SAN BARTOLOMEO",
416 | "S06915": "AREZZO",
417 | "S06914": "INDICATORE",
418 | "S06913": "PONTICINO",
419 | "S06912": "LATERINA",
420 | "S06911": "BUCINE",
421 | "S06910": "MONTEVARCHI TERRANUOVA",
422 | "S03392": "ZAMARDI",
423 | "S01650": "MILANO DATEO",
424 | "S01301": "CHIASSO",
425 | "S01307": "COMO S. GIOVANNI",
426 | "S08809": "TERRACINA",
427 | "S08808": "LA FIORA",
428 | "S08806": "FRASSO",
429 | "S08804": "CAPOCROCE",
430 | "S05804": "ARGENTA",
431 | "S05805": "S.BIAGIO",
432 | "S05806": "LAVEZZOLA",
433 | "S05807": "VOLTANA",
434 | "S05800": "GAIBANELLA",
435 | "S05801": "MONTESANTO",
436 | "S02308": "CALDONAZZO",
437 | "S02309": "LEVICO",
438 | "S02306": "S.CRISTOFORO AL LAGO-ISCHIA",
439 | "S02307": "CALCERANICA",
440 | "S02305": "PERGINE",
441 | "S05808": "ALFONSINE",
442 | "S05809": "GLORIE",
443 | "S02300": "VILLAZZANO",
444 | "S02301": "POVO",
445 | "S00619": "TENDE",
446 | "S09302": "RECALE",
447 | "S01871": "OSPEDALETTO LODIGIANO",
448 | "S01870": "ORIO LITTA",
449 | "S07475": "KANDERSTEG",
450 | "S00730": "SOMMARIVA BOSCO",
451 | "S06220": "PALLERONE",
452 | "S06223": "FIVIZZANO - GASSANO",
453 | "S06222": "FIVIZZANO ROMETTA - SOLIERA",
454 | "S06225": "MONZONE-M.DEI BANCHI-ISOLANO",
455 | "S06224": "GRAGNOLA",
456 | "S06227": "MINUCCIANO - PIEVE - CASOLA",
457 | "S06226": "EQUI TERME",
458 | "S05152": "BORGONUOVO",
459 | "S05153": "SUZZARA V.N.",
460 | "S05151": "PISTOIA OVEST",
461 | "S05156": "QUISTELLO",
462 | "S05157": "SAN ROCCO MANTOVANO",
463 | "S05154": "PEGOGNAGA",
464 | "S05155": "SAN BENEDETTO PO",
465 | "S08330": "IPOGEO DEGLI OTTAVI",
466 | "S08333": "OLGIATA",
467 | "S07478": "FRUTIGEN",
468 | "S08334": "PINETO",
469 | "S06171": "VEZZANO LIGURE",
470 | "S06170": "S. STEFANO DI MAGRA",
471 | "S11220": "POSSIDENTE",
472 | "S08811": "PESCOCANALE",
473 | "S00887": "VALPERGA",
474 | "S00904": "POGLIOLA",
475 | "S00615": "ROBILANTE",
476 | "S12365": "RANDAZZO",
477 | "S06857": "SERRE DI RAPOLANO",
478 | "S02094": "SOMMACAMPAGNA-SONA",
479 | "S02093": "CASTELNUOVO",
480 | "S06773": "POPULONIA",
481 | "S06770": "PIOMBINO",
482 | "S06775": "PIOMBINO BINARI MARE",
483 | "S07312": "S.CLAUDIO",
484 | "S07313": "MACERATA FONTESCODELLA",
485 | "S07310": "MONTECOSARO",
486 | "S07311": "GAGLIOLE",
487 | "S00885": "FAVRIA",
488 | "S08025": "ROMA AURELIA",
489 | "S08024": "CIVITAVECCHIA VIALE DELLA VITTORIA",
490 | "S08021": "LADISPOLI-CERVETERI",
491 | "S08020": "MACCARESE",
492 | "S08022": "MARINA DI CERVETERI",
493 | "S08671": "CASSINO",
494 | "S02050": "AVIO",
495 | "S07554": "MONTEPRANDONE",
496 | "S07555": "MALTIGNANO DEL TRONTO",
497 | "S07224": "BAIANO DI SPOLETO",
498 | "S07225": "GIUNCANO",
499 | "S07550": "ASCOLI PICENO",
500 | "S00208": "BUSSOLENO",
501 | "S07220": "S.GIACOMO DI SPOLETO",
502 | "S07553": "MONSAMPOLO DEL TRONTO",
503 | "S00205": "SALBERTRAND",
504 | "S00204": "OULX CESANA CLAVIERE SESTRIERE",
505 | "S00206": "CHIOMONTE",
506 | "S00201": "MODANE",
507 | "S00203": "BEAULARD",
508 | "S00202": "BARDONECCHIA",
509 | "S08241": "GAVIGNANO",
510 | "S02055": "DOMEGLIARA",
511 | "S00511": "NICHELINO",
512 | "S00510": "MONCALIERI SANGONE",
513 | "S00513": "NONE",
514 | "S00512": "CANDIOLO",
515 | "S00515": "PISCINA DI PINEROLO",
516 | "S00514": "AIRASCA",
517 | "S00517": "PINEROLO",
518 | "S11708": "OMIGNANO SALENTO",
519 | "S11709": "VALLO DELLA LUC. CASTELNUOVO",
520 | "S11702": "CAPACCIO ROCCADASPIDE",
521 | "S11703": "PAESTUM",
522 | "S11700": "SAN NICOLA VARCO DI EBOLI",
523 | "S11706": "TORCHIARA",
524 | "S11707": "RUTINO",
525 | "S11705": "AGROPOLI CASTELLABATE",
526 | "S07420": "FAGNANO CAMPANA",
527 | "S07421": "FONTECCHIO",
528 | "S07422": "BEFFI",
529 | "S07423": "ACCIANO",
530 | "S07424": "MOLINA CASTEL VECCHIO SUBAQUEO",
531 | "S07425": "TERRIA",
532 | "S07426": "TIONE DEGLI ABRUZZI",
533 | "S07427": "LABRO MOGGIO",
534 | "S07428": "POGGIO FIDONI",
535 | "S07429": "CANETRA",
536 | "S00333": "CANDIA LOMELLINA",
537 | "S00332": "COZZO",
538 | "S00337": "OZZANO MONFERRATO",
539 | "S00336": "S.GIORGIO CASALE",
540 | "S12233": "VILLALBA",
541 | "S12232": "VALLELUNGA",
542 | "S00880": "VOLPIANO",
543 | "S12897": "SANT`ANNA",
544 | "S12896": "SU CANALE",
545 | "S12895": "RUDALZA",
546 | "S12891": "CAGLIARI",
547 | "S12890": "CAGLIARI ELMAS",
548 | "S00278": "VILLANOVA D`ARDENGHI",
549 | "S12899": "CHIRIALZA",
550 | "S12898": "MANDRAS",
551 | "S02053": "POSTO COMUNICAZIONE DOLCE`",
552 | "S11137": "BRINDISI MARITTIMA",
553 | "S11019": "TERMOLI",
554 | "S04212": "MIGNANEGO",
555 | "S04213": "GENOVA SAN QUIRICO",
556 | "S04210": "ISOLA DEL CANTONE",
557 | "S04211": "RONCO SCR.",
558 | "S04216": "PIANO ORIZZONTALE DEI GIOVI",
559 | "S00020": "CALTIGNAGA",
560 | "S04214": "BORGO FORNARI PER VOLTAGGIO",
561 | "S04215": "BUSALLA",
562 | "S04218": "GENOVA BOLZANETO",
563 | "S04219": "GENOVA RIVAROLO",
564 | "S11502": "GRUMO APPULA",
565 | "S00905": "ROCCADEBALDI",
566 | "S00903": "PIANFEI",
567 | "S00273": "NICORVO",
568 | "S11827": "SAN LEONARDO DI CUTRO",
569 | "S11826": "CUTRO",
570 | "S00056": "ROVASENDA ALTA",
571 | "S09309": "PONTE CASALDUNI",
572 | "S09308": "S.LORENZO MAGGIORE",
573 | "S09303": "MADDALONI SUPERIORE",
574 | "S00050": "COMIGNAGO",
575 | "S09301": "MARCIANISE",
576 | "S09300": "GRICIGNANO",
577 | "S09307": "SOLOPACA",
578 | "S09306": "AMOROSI MELIZZANO",
579 | "S09305": "FRASSO T. DUGENTA",
580 | "S11822": "STRONGOLI",
581 | "S02337": "ROMANORE",
582 | "S00052": "GATTINARA",
583 | "S02336": "MANTOVA",
584 | "S00721": "MONASTERO PRATAVECCHI",
585 | "S02334": "S.ANTONIO MANTOVANO",
586 | "S02333": "ROVERBELLA",
587 | "S05031": "RUBIERA",
588 | "S02331": "VILLAFRANCA DI VERONA",
589 | "S01462": "CIVATE",
590 | "S01463": "VALMADRERA",
591 | "S01460": "OGGIONO",
592 | "S00190": "MODANE FX",
593 | "S05032": "MODENA",
594 | "S06414": "PISTOIA",
595 | "S03206": "TORVISCOSA",
596 | "S01067": "MILANO NORD DOMODOSSOLA",
597 | "S01062": "ABBIATEGRASSO",
598 | "S01063": "GAGGIANO",
599 | "S01060": "PARONA LOMELLINA",
600 | "S03207": "CERVIGNANO A.G.",
601 | "S01066": "MILANO NORD CADORNA",
602 | "S05037": "CASTELFRANCO D'EMILIA",
603 | "S01064": "CORSICO",
604 | "S01065": "TREZZANO S.N.",
605 | "S05039": "SAMOGGIA",
606 | "S01069": "MILANO NORD QUARTO OGGIARO ",
607 | "S04529": "ALBISOLA",
608 | "N00055": "NOVARA NORD",
609 | "N00054": "GALLIATE",
610 | "N00053": "PONTE TICINO",
611 | "N00052": "LIDO DI TURBIGO",
612 | "N00051": "TURBIGO",
613 | "N00050": "CASTANO PRIMO",
614 | "S04520": "PIETRA LIGURE",
615 | "S04521": "BORGIO VEREZZI",
616 | "S04522": "FINALE LIGURE MARINA",
617 | "S03203": "PALAZZOLO DELLO STELLA",
618 | "S04526": "SPOTORNO NOLI",
619 | "N00058": "CORMANO - BRUSUGLIO",
620 | "S01208": "CASTRONNO",
621 | "S01209": "ALBIZZATE SOLBIATE ARNO",
622 | "S01202": "BISUSCHIO VIGGIU",
623 | "S01203": "ARCISATE",
624 | "S01200": "PORTO CERESIO",
625 | "S01207": "GAZZADA SCHIANNO MORAZZONE",
626 | "S01204": "INDUNO OLONA",
627 | "S01205": "VARESE",
628 | "S08913": "VASTOGIRARDI",
629 | "S05325": "SEGNALE DI CONF. RENO OVEST",
630 | "S05326": "SEGNALE DI CONF. RENO EST",
631 | "S05813": "LIDO DI CLASSE-LIDO DI SAVIO",
632 | "S05812": "CLASSE",
633 | "S01514": "OLGIATE-CALCO-BRIVIO",
634 | "S01515": "AIRUNO",
635 | "S05817": "BELLARIA",
636 | "S05816": "GATTEO A MARE",
637 | "S05815": "CESENATICO",
638 | "S01511": "CARNATE USMATE",
639 | "S02315": "STRIGNO",
640 | "S02314": "BORGO VALSUGANA EST",
641 | "S02317": "GRIGNO",
642 | "S05818": "IGEA MARINA",
643 | "S01848": "CANNETO SULL`OGLIO",
644 | "S01849": "S. GIOVANNI IN CROCE",
645 | "S02313": "BORGO VALSUGANA CENTRO",
646 | "S02312": "RONCEGNO BAGNI-MARTER",
647 | "S01413": "LIERNA",
648 | "S01144": "MORNAGO CIMBRO",
649 | "S09699": "NOLA INTERPORTO",
650 | "S01417": "PRATA CAMPORTACCIO",
651 | "S01140": "SANGIANO",
652 | "S08906": "ROCCARASO",
653 | "S02263": "MATREI",
654 | "S08905": "RIVISONDOLI-PESCOCOSTANZO",
655 | "S08903": "CAMPO DI GIOVE",
656 | "S09459": "CAMPOBASSO",
657 | "S09458": "BARANELLO",
658 | "S09457": "VINCHIATURO",
659 | "S05140": "BOLOGNA MAZZINI",
660 | "S04527": "QUILIANO VADO",
661 | "S09453": "BOIANO",
662 | "S09452": "BOSCO REDOLE",
663 | "S09451": "CANTALUPO DEL SANNIO",
664 | "S08308": "TRE CROCI",
665 | "S08309": "VETRALLA",
666 | "S08658": "ANAGNI-FIUGGI",
667 | "S08659": "SGURGOLA",
668 | "S08304": "VITERBO PORTA FIORENTINA",
669 | "S08657": "COLLEFERRO-SEGNI-PALIANO",
670 | "S08654": "LABICO",
671 | "S08307": "S.MARTINO AL CIMINO",
672 | "S08300": "SIPICCIANO",
673 | "S08653": "COLONNA GALLERIA",
674 | "S08650": "CIAMPINO",
675 | "S08651": "COLLE MATTIA",
676 | "S05303": "RONCANOVA DI GAZZO VER.",
677 | "S00750": "POSTOJNA",
678 | "S02088": "PESCHIERA DEL GARDA",
679 | "S02084": "DESENZANO",
680 | "S02083": "LONATO",
681 | "S02082": "PONTE S.MARCO - CALCINATO",
682 | "S07309": "MORROVALLE MONTE S.GIUSTO",
683 | "S07308": "CORRIDONIA MOGLIANO",
684 | "S04330": "POZZOLO FORMIGARO",
685 | "S07301": "MATELICA",
686 | "S07300": "CERRETO D`ESI",
687 | "S07303": "S.SEVERINO MARCHE",
688 | "S07302": "CASTELRAIMONDO CAMERINO",
689 | "S07305": "POLLENZA",
690 | "S07304": "TOLENTINO",
691 | "S07307": "MACERATA",
692 | "S07306": "URBISAGLIA SFORZACOSTA",
693 | "S08018": "PALO LAZIALE",
694 | "S08019": "TORRE IN PIETRA-PALIDORO",
695 | "S08010": "CIVITAVECCHIA",
696 | "S08012": "CIVITAVECCHIA M.MA",
697 | "S08015": "SANTA MARINELLA",
698 | "S08016": "SANTA SEVERA",
699 | "S29399": "HORB",
700 | "S12394": "PIANA DEL SIGNORE",
701 | "S04101": "PRASCO CREMOLINO",
702 | "S12392": "NISCEMI",
703 | "S12393": "PRIOLO SOPRANO",
704 | "S08498": "PARCO PRENESTINO BIN. ESTERNI",
705 | "S12409": "ACATE",
706 | "S12405": "FALCONARA",
707 | "S12407": "GELA",
708 | "S12400": "LICATA",
709 | "S12150": "ALCAMO DIRAMAZIONE",
710 | "S12151": "CALATAFIMI",
711 | "S00238": "BIANZE`",
712 | "S07234": "PANTIERE DI CASTELBELLINO",
713 | "S12375": "CANICATTI`",
714 | "S12372": "GROTTE",
715 | "S07230": "NARNI AMELIA",
716 | "S12370": "ARAGONA CALDARE",
717 | "S07232": "CANCELLI DI FABRIANO",
718 | "S00231": "BRANDIZZO",
719 | "S00232": "CHIVASSO",
720 | "S00233": "CASTELROSSO",
721 | "S00234": "TORRAZZA P.",
722 | "S00235": "SALUGGIA",
723 | "S00236": "S. ANTONINO DI SALUGGIA",
724 | "S00237": "LIVORNO FERRARIS",
725 | "S12887": "VILLASOR",
726 | "S78400": "PERPIGNAN",
727 | "S03317": "TRIESTE CENTRALE",
728 | "S00838": "BERGAMASCO",
729 | "S00839": "CARENTINO",
730 | "S00836": "CASTELNUOVO BELBO",
731 | "S00837": "BRUNO",
732 | "S00834": "NIZZA MONFERRATO",
733 | "S00835": "INCISA SCAPACCINO",
734 | "S00832": "CANELLI",
735 | "S00833": "CALAMANDRANA",
736 | "S00522": "BIBIANA",
737 | "S00523": "LUSERNA S. GIOVANNI",
738 | "S11718": "POLICASTRO BUSSENTINO",
739 | "S00300": "BELLINZONA",
740 | "S04104": "ROSSIGLIONE",
741 | "S11711": "ASCEA",
742 | "S11712": "PISCIOTTA PALINURO",
743 | "S11715": "CENTOLA",
744 | "S11714": "SAN MAURO LA BRUCA",
745 | "S11717": "TORRE ORSAIA",
746 | "S11716": "CELLE BULGHERIA ROCCAGLORIOSA",
747 | "S12970": "CIXERRI",
748 | "S12971": "BARBUSI",
749 | "S12972": "CARBONIA STATO",
750 | "S12973": "MONTE ARCAU",
751 | "S07435": "ANTRODOCO CENTRO",
752 | "S07434": "SORGENTI DEL PESCHIERA",
753 | "S07432": "COTILIA",
754 | "S07430": "TERNI COSPEA",
755 | "S44200": "DIVACA",
756 | "S04810": "ALTARE",
757 | "S02541": "GALLIERA VENETA TOMBOLO",
758 | "S09053": "ISERNIA",
759 | "S04200": "FRUGAROLO BOSCOMARENGO",
760 | "S04203": "NOVI LIGURE",
761 | "S09050": "CARPINONE",
762 | "S00014": "BOLZANO NOVARESE",
763 | "S00015": "GOZZANO",
764 | "S04207": "ARQUATA SCRIVIA",
765 | "S00017": "CRESSA FONTANETO",
766 | "S04209": "PIETRABISSARA",
767 | "S00019": "MOMO",
768 | "S09059": "S.MARIA OLIVETO",
769 | "S09058": "ROCCA RAVINDOLA",
770 | "S00889": "CAMPORE",
771 | "S09829": "ROMAGNANO V.",
772 | "S12211": "CAMPOFRANCO",
773 | "S07216": "SCANZANO BELFIORE",
774 | "S12213": "AGRIGENTO BASSA",
775 | "S11216": "TIERA",
776 | "S00884": "RIVAROLO",
777 | "S09822": "MONTECORVINO",
778 | "S09823": "BATTIPAGLIA",
779 | "S09821": "PONTECAGNANO",
780 | "S11810": "VILLAPIANA TORRE CERCHIARA",
781 | "S08329": "VALLE AURELIA",
782 | "S11957": "SANTA MARIA DI CATANZARO",
783 | "S11956": "CATANZARO",
784 | "S11954": "SETTINGIANO",
785 | "S11953": "MARCELLINARA",
786 | "S11952": "FEROLETO ANTICA PIANOPOLI",
787 | "S11951": "LAMEZIA TERME NICASTRO",
788 | "S11950": "LAMEZIA TERME SAMBIASE",
789 | "S09062": "SESTO CAMPANO",
790 | "S01844": "VISANO",
791 | "S01845": "REMEDELLO SOPRA",
792 | "S05811": "RAVENNA",
793 | "S09202": "TORA PRESENZANO",
794 | "S09203": "VAIRANO",
795 | "S09200": "ROCCA D`EVANDRO",
796 | "S01847": "ASOLA",
797 | "S09206": "SPARANISE",
798 | "S05799": "CODIGORO",
799 | "S09204": "RIARDO",
800 | "S09205": "TEANO",
801 | "S01840": "MONTIRONE",
802 | "S09208": "CAPUA",
803 | "S09209": "S.MARIA CAPUA VETERE",
804 | "S01841": "GHEDI",
805 | "S01071": "BOLLATE CENTRO",
806 | "S04536": "GENOVA PEGLI",
807 | "S04535": "GENOVA PRA",
808 | "S01072": "BOLLATE NORD",
809 | "S04533": "ARENZANO",
810 | "S04532": "COGOLETO",
811 | "S01077": "SARONNO SUD",
812 | "S01076": "CARONNO PERTUSELLA",
813 | "S01079": "MILANO BRUZZANO",
814 | "S01078": "MILANO AFFORI",
815 | "S05006": "CADEO",
816 | "S05007": "FIORENZUOLA",
817 | "S05000": "PIACENZA",
818 | "S04538": "GENOVA CORNIGLIANO",
819 | "N00022": "VEDANO",
820 | "N00023": "MALNATE",
821 | "N00020": "VENEGONO INF.",
822 | "N00021": "VENEGONO SUP. - CASTIGLIO",
823 | "N00026": "MOROSOLO - CASCIAGO",
824 | "N00027": "BARASSO - COMERIO",
825 | "N00024": "VARESE NORD",
826 | "N00025": "VARESE CASBENO",
827 | "N00028": "GAVIRATE",
828 | "N00029": "GAVIRATE VERBANO",
829 | "S05819": "RIMINI TORRE PEDRERA",
830 | "S01210": "CAVARIA OGGIONA JERAGO",
831 | "N00150": "SACCONAGO",
832 | "S12152": "SEGESTA TEMPIO",
833 | "S09518": "MONTORO FORINO",
834 | "S09519": "FISCIANO",
835 | "S09516": "SOLOFRA",
836 | "S09517": "MONTORO SUPERIORE",
837 | "S09514": "AVELLINO",
838 | "S09515": "SERINO",
839 | "S09512": "TUFO",
840 | "S09513": "PRATA PRATOLA",
841 | "S09510": "CHIANCHE CEPPALONI",
842 | "S09511": "ALTAVILLA IRPINA",
843 | "S05319": "SAN GIOVANNI IN PERSICETO",
844 | "S08861": "ARCE",
845 | "S05311": "MIRANDOLA",
846 | "S05313": "S.FELICE SP",
847 | "S05314": "CAMPOSANTO",
848 | "S05316": "CREVALCORE",
849 | "S01853": "TORRILE S. POLO",
850 | "S01852": "COLORNO",
851 | "S01851": "MEZZANI RONDANI",
852 | "S01850": "CASALMAGGIORE",
853 | "S01501": "LESMO",
854 | "S01500": "MACHERIO SOVICO",
855 | "S01503": "CALUSCO",
856 | "S01502": "PADERNO ROBBIATE",
857 | "S09617": "MORRA DE SANCTIS TEORA",
858 | "S01509": "SIERRE SIDERS",
859 | "S08900": "SULMONA-INTRODACQUA",
860 | "S04100": "VISONE",
861 | "S05174": "DOGATO",
862 | "S05175": "OSTELLATO",
863 | "S05176": "MIGLIARINO",
864 | "S05177": "VALCESURA",
865 | "S05170": "QUARTESANA",
866 | "S05171": "MASI TORELLO",
867 | "S05172": "TRESIGALLO - CORREGGI",
868 | "S05173": "ROVERETO - S.V. - MEDELANA",
869 | "S03124": "S.STEFANO UDINESE",
870 | "S05178": "MIGLIARO",
871 | "S09910": "CASALBUONO",
872 | "S00600": "VILLASTELLONE",
873 | "S05952": "MASSALOMBARDA",
874 | "S08914": "CAROVILLI-ROCCASICURA",
875 | "S05950": "CONSELICE",
876 | "S05951": "LUGO",
877 | "S05956": "COTIGNOLA",
878 | "S08910": "CASTEL DI SANGRO",
879 | "S05954": "S.AGATA SUL SANTERNO",
880 | "S05955": "GRANAROLO",
881 | "S02526": "S.GIORGIO DELLE PERTICHE",
882 | "S02527": "CAMPODARSEGO",
883 | "S02524": "FRATTE CENTRO",
884 | "S02525": "CAMPOSAMPIERO",
885 | "S08919": "CAMPO DI GIOVE-MONTE MAIELLA",
886 | "S02523": "VILLA DEL CONTE",
887 | "S02520": "BASSANO DEL GRAPPA",
888 | "S02521": "ROSA`",
889 | "S08319": "CESANO DI ROMA",
890 | "S08318": "ANGUILLARA",
891 | "S03125": "LUMIGNACCO",
892 | "S08312": "BASSANO ROMANO",
893 | "S08311": "CAPRANICA",
894 | "S08310": "VICO MATRINO",
895 | "S08317": "CROCICCHIE",
896 | "S08640": "FORMIA-GAETA",
897 | "S03123": "BAGNARIA ARSA",
898 | "S08314": "MANZIANA-CANALE MONTERANO",
899 | "S11310": "SANTERAMO",
900 | "S12416": "RAGUSA IBLA",
901 | "S08007": "CHIARONE",
902 | "S08006": "CAPALBIO",
903 | "S08005": "QUATTRO VENTI",
904 | "S08004": "ORBETELLO",
905 | "S08003": "ALBINIA",
906 | "S08002": "TALAMONE",
907 | "S08001": "ALBERESE",
908 | "S08009": "TARQUINIA",
909 | "S08008": "MONTALTO DI CASTRO",
910 | "S12383": "SERRADIFALCO",
911 | "S12382": "S.CATALDO",
912 | "S12381": "CALTANISSETTA CENTRALE",
913 | "S12380": "CALTANISSETTA XIRBI",
914 | "S08904": "PALENA",
915 | "S12385": "CAMPOBELLO RAVANUSA",
916 | "S06153": "FORNOVO",
917 | "S06152": "OZZANO TARO",
918 | "S06151": "COLLECCHIO",
919 | "S12418": "SCICLI",
920 | "S06156": "SOLIGNANO",
921 | "S06155": "SELVA DEL BOCCHETTO",
922 | "S06154": "CITERNA TARO",
923 | "S12412": "DONNAFUGATA",
924 | "S12411": "COMISO",
925 | "S06158": "BERCETO",
926 | "S12417": "MODICA",
927 | "S12140": "CARDILLO ZEN",
928 | "S12414": "RAGUSA",
929 | "S11148": "BARI PARCO NORD",
930 | "S11149": "BARI PARCO NORD FASCIO TARANTO",
931 | "S07202": "JESI",
932 | "S11499": "BA POLICLINICO",
933 | "S07204": "CASTELPLANIO CUPRAMONTANA",
934 | "S12360": "MOTTA CAMASTRA",
935 | "S07206": "GENGA S.VITTORE TERME",
936 | "S07207": "ALBACINA",
937 | "S07208": "FABRIANO",
938 | "S07209": "FOSSATO DI VICO GUBBIO",
939 | "S11142": "SQUINZANO",
940 | "S08901": "PETTORANO SUL GIZIO",
941 | "S11144": "SURBO",
942 | "S11145": "LECCE",
943 | "S09999": "PIEDIMONTE MATESE",
944 | "S09456": "GUARDIAREGIA",
945 | "S07510": "PEDASO",
946 | "S07511": "CUPRAMARITTIMA",
947 | "S08207": "ATTIGLIANO",
948 | "S07513": "S.BENEDETTO DEL TRONTO",
949 | "S00829": "COSTIGLIOLE D`ASTI",
950 | "S00828": "CASTAGNOLE DELLE LANZE",
951 | "S00825": "ALBA",
952 | "S00824": "MUSSOTTO",
953 | "S00827": "NEIVE",
954 | "S00821": "BRA",
955 | "S00820": "MADONNA DEL PILONE",
956 | "S09842": "FRANCIOSA",
957 | "S00822": "S.VITTORIA",
958 | "S08908": "ALFEDENA-SCONTRONE",
959 | "S00311": "PERTENGO",
960 | "S00316": "GIAROLE",
961 | "S00315": "BORGO S.MARTINO",
962 | "S00314": "CASALE MONFERRATO",
963 | "S09199": "FONTANAROSA",
964 | "S05810": "MEZZANO",
965 | "S06068": "MONTE S. SAVINO",
966 | "S02038": "TRENTO",
967 | "S00224": "TORINO DORA",
968 | "S00223": "TORINO S. PAOLO",
969 | "S08306": "VITERBO PORTA ROMANA",
970 | "S00229": "SETTIMO",
971 | "S00228": "TORINO STURA",
972 | "S08655": "TOR VERGATA",
973 | "S08652": "ZAGAROLO",
974 | "S08301": "GROTTE S.STEFANO",
975 | "S08302": "SIPICCIANO S.NICOLA",
976 | "S11818": "CARIATI",
977 | "S11819": "CRUCOLI",
978 | "S00007": "GRAVELLONA TOCE",
979 | "S11817": "MANDATORICCIO CAMPANA",
980 | "S11814": "MIRTO CROSIA",
981 | "S11815": "CALOPEZZATI",
982 | "S11812": "CORIGLIANO CALABRO",
983 | "S00002": "PALLANZENO",
984 | "S00001": "VILLADOSSOLA",
985 | "S11811": "SIBARI",
986 | "S11724": "MARINA DI MARATEA",
987 | "S11725": "PRAJA AJETA TORTORA",
988 | "S11726": "S.NICOLA ARCELLA",
989 | "S11727": "SCALEA S.DOMENICA TALAO",
990 | "S11721": "SAPRI",
991 | "S11722": "ACQUAFREDDA",
992 | "S11723": "MARATEA",
993 | "S11728": "MARCELLINA VERBICARO ORSOMARSO",
994 | "S11729": "GRISOLIA S.MARIA",
995 | "S05814": "CERVIA-MILANO MARITTIMA",
996 | "S01487": "VILLA RAVERIO",
997 | "S01099": "CANZO",
998 | "S04300": "CARBONARA SCRIVIA",
999 | "N00209": "PROVAGLIO - TIMOLINE",
1000 | "S01097": "PONTELAMBRO - CASTELMARTE",
1001 | "S00251": "EXILLES",
1002 | "S06402": "RIPAFRATTA",
1003 | "S01096": "ERBA",
1004 | "N00205": "PADERNO",
1005 | "S01440": "TIRANO",
1006 | "S01093": "INVERIGO",
1007 | "N00203": "MANDOLOSSA",
1008 | "S09211": "CASERTA",
1009 | "S09210": "SAN PIETRO INFINE",
1010 | "S09213": "CANCELLO",
1011 | "S09212": "MADDALONI INFERIORE",
1012 | "S09215": "ACERRA",
1013 | "S09216": "CASALNUOVO",
1014 | "S09304": "VALLE DI MADDALONI",
1015 | "S09218": "NAPOLI CENTRALE",
1016 | "S04540": "GENOVA VESIMA",
1017 | "S04541": "GENOVA VOLTRI MARE",
1018 | "S00091": "NOLE",
1019 | "S05012": "CASTELGUELFO",
1020 | "S01040": "MAGENTA",
1021 | "S01041": "CORBETTA S. STEFANO",
1022 | "S01042": "VITTUONE ARLUNO",
1023 | "S05014": "PARMA",
1024 | "N00031": "GEMONIO",
1025 | "N00030": "COCQUIO - TREVISAGO",
1026 | "N00032": "CITTIGLIO",
1027 | "N00035": "ROVELLASCA - MANERA",
1028 | "N00034": "ROVELLO PORRO",
1029 | "N00037": "CASLINO AL PIANO",
1030 | "N00036": "LOMAZZO",
1031 | "N00039": "FINO MORNASCO",
1032 | "N00038": "CADORAGO",
1033 | "S00173": "S.SILVESTRO",
1034 | "S00172": "CRESCENTINO",
1035 | "S00171": "BORGO REVEL",
1036 | "S00170": "VEROLENGO",
1037 | "S00177": "MORANO SUL PO",
1038 | "S00176": "TRINO VERCELLESE",
1039 | "S05307": "ISOLA DELLA SCALA",
1040 | "S08855": "S.VINCENZO V.R.",
1041 | "S08856": "BALSORANO",
1042 | "S05304": "OSTIGLIA",
1043 | "S08850": "CAPISTRELLO",
1044 | "S05302": "OSTERIA NUOVA",
1045 | "S08852": "CIVITELLA ROVETO",
1046 | "S08853": "CIVITA D`ANTINO-MORINO",
1047 | "S09505": "CAMPOLATTARO",
1048 | "S09504": "PONTELANDOLFO",
1049 | "S09507": "PESCOSANNITA FRAGNETO L`ABATE",
1050 | "S09506": "FRAGNETO MONFORTE",
1051 | "S08858": "ISOLA LIRI",
1052 | "S08859": "ARPINO",
1053 | "S09503": "MORCONE",
1054 | "S05308": "POGGIO RUSCO",
1055 | "S01533": "SERIATE",
1056 | "S01534": "ALBANO S.ALESSANDRO",
1057 | "S01535": "MONTELLO GORLAGO",
1058 | "S01536": "CHIUDUNO",
1059 | "S01537": "GRUMELLO DEL MONTE",
1060 | "S01538": "PALAZZOLO SULL`OGLIO",
1061 | "S01539": "COLOGNE",
1062 | "S05163": "ZERBINATE",
1063 | "S05162": "FELONICA PO",
1064 | "S05161": "SERMIDE",
1065 | "S05160": "VALLAZZA - CARBONARA PO",
1066 | "S05167": "FERRARA ALEOTTI",
1067 | "S05166": "VIGARANO PIEVE",
1068 | "S05165": "BONDENO",
1069 | "S05164": "STELLATA FICAROLO",
1070 | "S05169": "CONA F. C.",
1071 | "S05168": "FERRARA P. RENO",
1072 | "S01225": "SION",
1073 | "S02539": "ISTRANA",
1074 | "S02538": "ALBAREDO",
1075 | "S02535": "CITTADELLA",
1076 | "S02534": "FONTANIVA",
1077 | "S02537": "CASTELFRANCO VENETO",
1078 | "S02536": "S.MARTINO DI LUPARI",
1079 | "S02531": "S.PIETRO IN GU`",
1080 | "S02530": "LISIERA",
1081 | "S02532": "CARMIGNANO DI BRENTA",
1082 | "S03118": "BADEN",
1083 | "S06418": "SESTO FIORENTINO",
1084 | "S06419": "FIRENZE CASTELLO",
1085 | "S06416": "PRATO CENTRALE",
1086 | "S06417": "CALENZANO",
1087 | "S08672": "CAPANNELLE",
1088 | "S06415": "MONTALE AGLIANA",
1089 | "S06412": "MONTECATINI CENTRO",
1090 | "S06413": "SERRAVALLE PISTOIESE",
1091 | "S06410": "BORGO A BUGGIANO",
1092 | "S06411": "MONTECATINI TERME",
1093 | "S11805": "MONTE GIORDANO",
1094 | "S09476": "S.GIULIANO DEL SANNIO",
1095 | "S09605": "TAURASI",
1096 | "S11804": "ROCCA IMPERIALE",
1097 | "S11807": "AMENDOLARA ORIOLO",
1098 | "S00071": "CANDELO",
1099 | "S11302": "VENOSA - MASCHITO",
1100 | "S06302": "CASTELVECCHIO PASCOLI",
1101 | "S06303": "BARGA GALLICANO",
1102 | "S06300": "CASTELNUOVO DI GARFAGNANA",
1103 | "S06301": "FOSCIANDORA - CESERANA",
1104 | "S06306": "GHIVIZZANO - COREGLIA",
1105 | "S02332": "MOZZECANE",
1106 | "S06304": "FORNACI DI BARGA",
1107 | "S02330": "DOSSOBUONO",
1108 | "S03204": "MUZZANA DEL TURGNANO",
1109 | "S03205": "SAN GIORGIO DI NOGARO",
1110 | "S06308": "BAGNI DI LUCCA",
1111 | "S06309": "BORGO A MOZZANO",
1112 | "S03200": "PORTOGRUARO CAORLE",
1113 | "S03201": "FOSSALTA DI PORTOGRUARO",
1114 | "S03202": "LATISANA LIGNANO B.",
1115 | "S02338": "BORGOFORTE",
1116 | "S02264": "STEINACH TIROL",
1117 | "S03459": "BALATONLELLE",
1118 | "S04506": "TAGGIA ARMA",
1119 | "S04110": "GENOVA COSTA DI SESTRI PONENTE",
1120 | "S04505": "SAN REMO",
1121 | "S11300": "S. NICOLA DI MELFI",
1122 | "S09600": "SALZA IRPINA",
1123 | "S04501": "VENTIMIGLIA",
1124 | "S12351": "SIRACUSA M.",
1125 | "S12353": "TARGIA",
1126 | "S12355": "CONTESSE",
1127 | "S07219": "CAMPELLO",
1128 | "S07218": "TREVI",
1129 | "S12358": "GAGGI",
1130 | "S12359": "GRANITI",
1131 | "S07215": "CAPODACQUA PIEVE FANONICA",
1132 | "S07214": "VALTOPINA",
1133 | "S07213": "NOCERA UMBRA",
1134 | "S07212": "GAIFANA",
1135 | "S07211": "GUALDO TADINO",
1136 | "S08108": "MADONNA DEL PIANO",
1137 | "S08109": "RONCIGLIONE",
1138 | "S07483": "SPIEZ",
1139 | "S02319": "PRIMOLANO",
1140 | "S07824": "VASTO S.SALVO",
1141 | "S07825": "MONTENERO PETACCIATO",
1142 | "S02318": "TEZZE DI GRIGNO",
1143 | "S12014": "TERMINI IMERESE",
1144 | "S12012": "S.NICOLA T.",
1145 | "S07822": "PORTO DI VASTO",
1146 | "S11106": "TRINITAPOLI S.FERDIN. DI P.",
1147 | "S00252": "TRECATE",
1148 | "S11154": "EGNAZIA",
1149 | "S11151": "COZZE",
1150 | "S11150": "BARI S.GIORGIO",
1151 | "S11028": "RIGNANO GARGANICO",
1152 | "S11025": "SAN SEVERO",
1153 | "S11024": "APRICENA",
1154 | "S11023": "POGGIO IMPERIALE",
1155 | "S11021": "CHIEUTI SERRACAPRIOLA",
1156 | "S11020": "CAMPOMARINO",
1157 | "S11809": "VILLAPIANA LIDO",
1158 | "S11808": "TREBISACCE",
1159 | "S04223": "GENOVA VIA DI FRANCIA",
1160 | "S04222": "GENOVA S.BIAGIO",
1161 | "S00070": "BIELLA S.PAOLO",
1162 | "S04220": "GENOVA SAMPIERDARENA",
1163 | "S11801": "SCANZANO J. MONTALBANO J.",
1164 | "S11800": "MARCONIA",
1165 | "S11803": "NOVA SIRI ROTONDELLA",
1166 | "S11802": "POLICORO TURSI",
1167 | "S01922": "OSPITALETTO MANTOVANO",
1168 | "S03800": "STUTTGART HBF",
1169 | "S08716": "MARECHIARO",
1170 | "S07000": "TUORO SUL TRASIMENO",
1171 | "S11733": "SANGINETO",
1172 | "S11732": "BELVEDERE MARITTIMO",
1173 | "S11731": "DIAMANTE BUONVICINO",
1174 | "S11730": "CIRELLA MAJERA`",
1175 | "S11737": "GUARDIA PIEMONTESE TERME",
1176 | "S11736": "ACQUAPPESA",
1177 | "S11735": "CETRARO",
1178 | "S11734": "CAPO BONIFATI",
1179 | "S07006": "PERUGIA UNIVERSITA'",
1180 | "S11739": "PAOLA",
1181 | "S11738": "FUSCALDO",
1182 | "S03032": "P.M.VAT",
1183 | "S03031": "S.GIOVANNI AL NATISONE",
1184 | "S06909": "S.GIOVANNI VALDARNO",
1185 | "S08710": "NETTUNO",
1186 | "S00106": "GRIGNASCO",
1187 | "S00104": "BORGOSESIA",
1188 | "S00102": "QUARONA",
1189 | "S06511": "MONTELUPO CAPRAIA",
1190 | "S08495": "PARCO PRENESTINO",
1191 | "S00108": "PRATO SESIA",
1192 | "S00109": "ROMAGNANO SESIA",
1193 | "S06323": "POGGIO - CAREGGINE - VAGLI",
1194 | "S07235": "S.LIBERATO",
1195 | "S00100": "VARALLO SESIA",
1196 | "S00239": "TRONZANO",
1197 | "S06904": "PONTASSIEVE",
1198 | "S04482": "BEVERA",
1199 | "S04481": "AIROLE",
1200 | "S04480": "OLIVETTA SAN MICHELE",
1201 | "S09220": "NAPOLI TRACCIA",
1202 | "S12373": "RACALMUTO",
1203 | "S04003": "PREDOSA",
1204 | "S01642": "MILANO BOVISA FNM",
1205 | "S01059": "ALBAIRATE VERMEZZO",
1206 | "S04000": "CASTELLAZZO CASALCERMELLI",
1207 | "S04007": "OVADA NORD",
1208 | "S07233": "PONTE PARRANO DI NOCERA UMBRA",
1209 | "S04005": "SAN GIACOMO",
1210 | "S01643": "MILANO LANCETTI",
1211 | "S08812": "CANISTRO",
1212 | "S08814": "ROCCAVIVI",
1213 | "S08815": "RIDOTTI-COLLEPIANO",
1214 | "S01312": "CUCCIAGO",
1215 | "S01645": "MILANO PORTA GARIBALDI",
1216 | "S08818": "FONTANA LIRI",
1217 | "S06958": "IL CIONFO",
1218 | "S08819": "FONTANA LIRI INFERIORE",
1219 | "S06953": "FIESOLE CALDINE",
1220 | "S06952": "PIAN DEL MUGNONE",
1221 | "S06951": "IL CIONFO BIN. SALVIATI",
1222 | "S06950": "BINARIO S.MARCO VECCHIO",
1223 | "S06957": "IL CIONFO BIN. LE CURE",
1224 | "S06956": "CERCINA",
1225 | "S06954": "MIMMOLE",
1226 | "S02110": "VALDAORA - ANTERSELVA",
1227 | "S09530": "BENEVENTO ARCO TRAIANO",
1228 | "S02435": "S.MARTINO BUON ALBERGO",
1229 | "S08917": "SESSANO DEL MOLISE",
1230 | "S02437": "CALDIERO",
1231 | "S02430": "VERONA PORTA NUOVA",
1232 | "S02433": "VERONA PORTA VESCOVO",
1233 | "S01457": "CASLETTO-ROGENO",
1234 | "S04704": "GENOVA QUARTO DEI MILLE",
1235 | "S01454": "MERONE",
1236 | "S01453": "ANZANO DEL PARCO",
1237 | "S01452": "BRENNA-ALZATE",
1238 | "S01451": "CANTU`",
1239 | "S09009": "CASORIA",
1240 | "S01458": "MOLTENO",
1241 | "S73107": "KRIZEVCI",
1242 | "S01529": "BERGAMO",
1243 | "S01528": "PONTE S.PIETRO",
1244 | "S01527": "AMBIVERE MAPELLO",
1245 | "S01526": "PONTIDA",
1246 | "S01525": "CISANO CAPRINO BERGAMASCO",
1247 | "S01524": "CALOLZIOCORTE OLGINATE",
1248 | "S01523": "VERCURAGO S.GIROLAMO",
1249 | "S01522": "LECCO MAGGIANICO",
1250 | "S01520": "LECCO",
1251 | "S02709": "SPRESIANO",
1252 | "S08656": "VALMONTONE",
1253 | "S02662": "TEGLIO VENETO",
1254 | "S02508": "RESANA",
1255 | "S02509": "PIOMBINO DESE",
1256 | "S01235": "MONTREUX",
1257 | "S02500": "CISMON DEL GRAPPA",
1258 | "S02501": "S.MARINO",
1259 | "S02502": "CARPANE`VALSTAGNA",
1260 | "S02503": "S.NAZARIO",
1261 | "S02504": "SOLAGNA",
1262 | "S02505": "POVE DEL GRAPPA CAMPESE",
1263 | "S02506": "CASSOLA",
1264 | "S02507": "CASTELLO DI GODEGO",
1265 | "S02760": "OLMI SPERCENIGO",
1266 | "S02761": "S.BIAGIO DI CALLALTA",
1267 | "S02762": "FAGARE",
1268 | "S02763": "PONTE DI PIAVE",
1269 | "S06409": "PESCIA",
1270 | "S06408": "MONTECARLO SAN SALVATORE",
1271 | "S02766": "GORGO AL MONTICANO",
1272 | "S02767": "MOTTA DI LIVENZA",
1273 | "S06405": "TASSIGNANO",
1274 | "S06404": "LUCCA",
1275 | "S06407": "ALTOPASCIO",
1276 | "S06406": "PORCARI",
1277 | "S06401": "RIGOLI",
1278 | "S06400": "S.GIULIANO TERME",
1279 | "S02668": "MEOLO",
1280 | "S06081": "BACIANO",
1281 | "S06080": "CALBEZANO",
1282 | "S06083": "CAPOLONA",
1283 | "S02111": "MONGUELFO VALLE DI CASIES",
1284 | "S06085": "PUGLIA - CECILIANO",
1285 | "S06084": "GIOVI",
1286 | "S06086": "AREZZO C.C.",
1287 | "S07989": "S.EUSANIO DEL SANGRO",
1288 | "S06312": "PONTE A MORIANO",
1289 | "S06310": "DIECIMO - PESCAGLIA",
1290 | "S06313": "S. PIETRO A VICO",
1291 | "S07988": "CROCETTA",
1292 | "S02346": "ROLO NOVI FABBRICO",
1293 | "S02344": "GONZAGA-REGGIOLO",
1294 | "S09717": "P.M.TORRICCHIO",
1295 | "S01846": "REMEDELLO SOTTO",
1296 | "S01941": "S.GIULIANO PIEMONTE",
1297 | "S02349": "CARPI",
1298 | "S01940": "SPINETTA",
1299 | "S03566": "BALATONSZENTGYORGY",
1300 | "S01866": "S. CRISTINA E BISSONE",
1301 | "S01867": "MIRADOLO TERME",
1302 | "S08666": "CEPRANO-FALVATERRA",
1303 | "S08665": "ISOLETTA-S.GIOVANNI I.",
1304 | "S08664": "CECCANO",
1305 | "S08663": "CASTRO-POFI",
1306 | "S08662": "FROSINONE",
1307 | "S08661": "FERENTINO-SUPINO",
1308 | "S08660": "MOROLO",
1309 | "S08668": "ROCCASECCA",
1310 | "S11134": "SURBO FASCIO MERCI",
1311 | "S12349": "SIRACUSA",
1312 | "S12347": "PRIOLO MELILLI",
1313 | "S12345": "AUGUSTA",
1314 | "S01061": "VIGEVANO",
1315 | "S12341": "LENTINI",
1316 | "S12340": "LENTINI DIRAMAZIONE",
1317 | "S00524": "TORRE PELLICE",
1318 | "S08114": "CASTEL BAGNOLO DI ORTE",
1319 | "S08111": "FABRICA DI ROMA",
1320 | "S08110": "CAPRAROLA",
1321 | "S08113": "GALLESE BASSANELLO",
1322 | "S08112": "CORCHIANO",
1323 | "S00807": "BAZZANA",
1324 | "S00804": "AGLIANO CASTELNUOVO CALCEA",
1325 | "S00803": "MONTEGROSSO",
1326 | "S00802": "VIGLIANO D`ASTI",
1327 | "S00801": "MONGARDINO",
1328 | "S00809": "ALICE BELCOLLE",
1329 | "S00521": "BRICHERASIO",
1330 | "S01842": "VIADANA BRESCIANA",
1331 | "S00831": "S.STEFANO BELBO",
1332 | "S00260": "SUSA",
1333 | "S01843": "CALVISANO",
1334 | "S12901": "OLBIA MARITTIMA ISOLA BIANCA",
1335 | "S09475": "SASSINORO",
1336 | "S09474": "S.MARIA COLLE SERRA",
1337 | "S00240": "SANTHIA`",
1338 | "S00243": "S. GERMANO VERCELLESE",
1339 | "S11121": "MARCONI",
1340 | "S11126": "BARI TORRE A MARE",
1341 | "S11127": "MOLA DI BARI",
1342 | "S11124": "LISIDE",
1343 | "S00246": "BORGO VERCELLI",
1344 | "S00248": "NOVARA",
1345 | "S11128": "POLIGNANO A MARE",
1346 | "S11129": "MONOPOLI",
1347 | "S02201": "SLUDERNO-GLORENZA",
1348 | "S08711": "VILLETTA",
1349 | "S11053": "FRATTAROLO",
1350 | "S02200": "MALLES VENOSTA",
1351 | "S11056": "SIPONTO",
1352 | "S04001": "CASTELSPINA PORTANOVA",
1353 | "S11054": "MANFREDONIA",
1354 | "S11303": "PALAZZO S.GERVASIO - MONTEMIL.",
1355 | "S11838": "S SOSTENE",
1356 | "S01058": "PREGNANA MILANESE",
1357 | "S44100": "PIVKA",
1358 | "S11830": "CROPANI",
1359 | "S11831": "SELLIA MARINA",
1360 | "S11832": "SIMERI CRICHI",
1361 | "S11833": "CATANZARO LIDO",
1362 | "S11835": "SQUILLACE",
1363 | "S11836": "MONTEPAONE - MONTAURO",
1364 | "S04006": "ROCCAGRIMALDA",
1365 | "S02367": "VILLABARTOLOMEA",
1366 | "S04004": "RIO SECCO",
1367 | "S01640": "MILANO CERTOSA",
1368 | "S05121": "LAMA DI RENO",
1369 | "S05120": "CARBONA",
1370 | "S06044": "CA` DI BOSCHETTI",
1371 | "S06450": "PISA BINARI AEROPORTO",
1372 | "S08320": "LA STORTA",
1373 | "S11904": "S.MARCO ROGGIANO",
1374 | "S11905": "MONGRASSANO CERVICATI",
1375 | "S11906": "TORANO LATTARICO",
1376 | "S11907": "ACRI BISIGNANO LUZZI",
1377 | "S11900": "CASSANO ALL`IONIO",
1378 | "S00110": "GHEMME",
1379 | "S00113": "BRIONA",
1380 | "S00112": "FARA",
1381 | "S08739": "S. EUROSIA",
1382 | "S11908": "MONTALTO ROSE",
1383 | "S11909": "CASTIGLIONE COSENTINO",
1384 | "S08738": "S. MARIA DELLE MOLE",
1385 | "S09150": "MINTURNO",
1386 | "S00209": "BRUZOLO",
1387 | "S06514": "S.DONNINO BADIA",
1388 | "S03018": "VENZONE",
1389 | "S07060": "PERGOLA",
1390 | "S08734": "VELLETRI",
1391 | "S06160": "OSTIA PARMENSE",
1392 | "S07063": "SASSOFERRATO ARCEVIA",
1393 | "S07065": "MELANO MARISCHIO",
1394 | "S02018": "BRUNICO NORD",
1395 | "S08732": "CECCHINA",
1396 | "S01644": "MILANO FARINI",
1397 | "N00019": "TRADATE",
1398 | "N00018": "ABBIATE GUAZZONE",
1399 | "S01461": "SALA AL BARRO-GALBIATE",
1400 | "N00017": "LOCATE V. - CARBONATE",
1401 | "S04811": "MASCHIO",
1402 | "N00015": "CISLAGO",
1403 | "N00014": "GERENZANO - TURATE",
1404 | "S01080": "CORMANO - BRUSUGLIO",
1405 | "S01082": "PADERNO DUGNANO",
1406 | "S01083": "PALAZZOLO",
1407 | "S01084": "VAREDO",
1408 | "S01085": "BOVISO MASCIAGO - MOMBELLO",
1409 | "S01086": "CESANO MADERNO",
1410 | "S01087": "MEDA",
1411 | "S01088": "CABIATE",
1412 | "S01089": "MARIANO COMENSE",
1413 | "S03015": "TARVISIO BOSCOVERDE",
1414 | "S09526": "BORGO",
1415 | "S09524": "FRATTE VILLA COMUNALE",
1416 | "S09523": "S.MICHELE DI SERINO",
1417 | "S09522": "FRATTE",
1418 | "S09521": "PELLEZZANO",
1419 | "S09520": "BARONISSI",
1420 | "S09529": "MONTEFREDANE",
1421 | "S09528": "MONTORSI",
1422 | "S01422": "DELEBIO",
1423 | "S01423": "ROGOLO",
1424 | "S04108": "GENOVA GRANARA",
1425 | "S04109": "GENOVA BORZOLI",
1426 | "S01426": "TALAMONA",
1427 | "S01427": "ARDENNO MASINO",
1428 | "S01424": "COSIO TRAONA",
1429 | "S01425": "MORBEGNO",
1430 | "S04102": "MOLARE",
1431 | "S04103": "OVADA",
1432 | "S01428": "S. PIETRO BERBENNO",
1433 | "S01429": "CASTIONE ANDEVENNO",
1434 | "S04106": "MELE",
1435 | "S04107": "GENOVA ACQUASANTA",
1436 | "S01512": "OSNAGO",
1437 | "S04105": "CAMPOLIGURE MASONE",
1438 | "S02515": "VENEZIA MARGHERA SCALO",
1439 | "S02514": "TREBASELEGHE",
1440 | "S02513": "VE ASSEGGIANO",
1441 | "S02512": "MAERNE DI MARTELLAGO",
1442 | "S02511": "SALZANO ROBEGANO",
1443 | "S02510": "NOALE SCORZE`",
1444 | "S06430": "FIRENZE STATUTO",
1445 | "S01952": "ISELLE DI TRASQUERA",
1446 | "S01950": "ROTTOFRENO",
1447 | "S01951": "S.NICOLO'",
1448 | "S03010": "PONTEBBA",
1449 | "S08601": "POMEZIA - S.PALOMBA",
1450 | "S06426": "PRATO BORGONUOVO",
1451 | "S08603": "CISTERNA DI LATINA",
1452 | "S02351": "SOLIERA MODENESE",
1453 | "S02602": "PAESE CASTAGNOLE",
1454 | "S02601": "POSTIOMA",
1455 | "S06424": "IL NETO",
1456 | "S09709": "NOCERA INFERIORE MERCATO",
1457 | "S09708": "LAVORATE",
1458 | "S06324": "CAMPORGIANO",
1459 | "S09706": "MERCATO SAN SEVERINO",
1460 | "S09705": "VALLE DI MERCATO S.SEVERINO",
1461 | "S09704": "CASTEL S.GIORGIO ROCCAPIEMONTE",
1462 | "S09703": "CODOLA",
1463 | "S09702": "SARNO",
1464 | "S09701": "PALMA S.GENNARO",
1465 | "S09603": "MONTEMILETTO",
1466 | "S03550": "AURISINA",
1467 | "S06505": "CASCINA",
1468 | "S06506": "PONTEDERA CASCIANA TERME",
1469 | "S07059": "FABRIANO CA` MAIANO",
1470 | "S06421": "FIRENZE S.M.N.",
1471 | "S06502": "NAVACCHIO",
1472 | "S03006": "UGOVIZZA VALBRUNA",
1473 | "S08709": "ANZIO",
1474 | "S06420": "FIRENZE RIFREDI",
1475 | "S06508": "S.ROMANO MONTOPOLI S.CROCE",
1476 | "S06509": "S.MINIATO FUCECCHIO",
1477 | "S03001": "ZURICH ALTSTETTEN",
1478 | "S08609": "SEZZE ROMANO",
1479 | "S01513": "CERNUSCO-MERATE",
1480 | "S08912": "S. PIETRO AVELLANA-CAPRACOTTA",
1481 | "S12112": "CAMPOBELLO DI MAZARA",
1482 | "S07902": "BELLANTE RIPATTONE",
1483 | "S07901": "CASTELLALTO CANZANO",
1484 | "S07900": "TERAMO",
1485 | "S12114": "SALEMI GIBELLINA",
1486 | "S07904": "MOSCIANO S. ANGELO",
1487 | "S00012": "ORTA MIASINO",
1488 | "S04202": "DONNA",
1489 | "S02557": "FAE`FORTOGNA",
1490 | "S09057": "MONTERODUNI",
1491 | "S09609": "CASTELFRANCI",
1492 | "S09056": "S.AGAPITO LONGANO",
1493 | "S12338": "BICOCCA",
1494 | "S00016": "BORGOMANERO",
1495 | "S12332": "CATANIA CENTRALE",
1496 | "S12331": "CATANIA OGNINA",
1497 | "S12337": "CATANIA ACQUICELLA",
1498 | "S00470": "ALESSANDRIA",
1499 | "S06610": "MARRADI",
1500 | "S06611": "BIFORCO",
1501 | "S06612": "POPOLANO",
1502 | "S06613": "S.MARTINO IN GATTARA",
1503 | "S06614": "BRISIGHELLA",
1504 | "S06615": "S.CASSIANO",
1505 | "S06616": "S.EUFEMIA DI BRISIGHELLA",
1506 | "S04208": "RIGOROSO",
1507 | "S06618": "FOGNANO",
1508 | "S06619": "FONTEBUONA",
1509 | "S00872": "MONTECHIARO DENICE",
1510 | "S00873": "MOMBALDONE ROCCAVERANO",
1511 | "S00870": "BISTAGNO",
1512 | "S00871": "PONTI",
1513 | "S00876": "PIANA",
1514 | "S00877": "DEGO",
1515 | "S00874": "SPIGNO",
1516 | "S00875": "MERANA",
1517 | "S00878": "ROCCHETTA CAIRO",
1518 | "S00879": "CAIRO MONTENOTTE",
1519 | "S12321": "CALATABIANO",
1520 | "S12028": "SAN MARCO D`ALUNZIO T.",
1521 | "S12029": "ZAPPULLA",
1522 | "S12026": "ACQUEDOLCI-S.FRATELLO",
1523 | "S12027": "S.AGATA M.",
1524 | "S12024": "SANTO STEFANO DI CAMASTRA",
1525 | "S12025": "CARONIA",
1526 | "S12022": "TUSA",
1527 | "S12020": "CASTELBUONO",
1528 | "S12021": "POLLINA",
1529 | "S12244": "CATENANUOVA",
1530 | "S00466": "ROCCHETTA TANARO CERRO",
1531 | "S12240": "DITTAINO",
1532 | "S07474": "GOPPESTEIN",
1533 | "S00613": "BORGO SAN DALMAZZO",
1534 | "S00610": "CUNEO",
1535 | "S00611": "CUNEO GESSO",
1536 | "S00616": "VERNANTE",
1537 | "S00617": "LIMONE",
1538 | "S00614": "ROCCAVIONE",
1539 | "S00460": "BALDICHIERI",
1540 | "S01026": "SESTO CALENDE",
1541 | "S00463": "S. PAOLO SOLBRITO",
1542 | "S00462": "ASTI",
1543 | "S08548": "COLLARMELE",
1544 | "S07112": "PALOMBINA",
1545 | "S01510": "ARCORE",
1546 | "S11131": "CISTERNINO",
1547 | "S11130": "FASANO",
1548 | "S11133": "CAROVIGNO",
1549 | "S11132": "OSTUNI",
1550 | "S11135": "S.VITO DEI NORMANNI",
1551 | "S00279": "CAVA CARBONARA",
1552 | "S00908": "BASTIA MONDOVI`",
1553 | "S11136": "BRINDISI",
1554 | "S00274": "GAMBOLO`REMONDO`",
1555 | "S00275": "TROMELLO",
1556 | "S00276": "GARLASCO",
1557 | "S00277": "GROPELLO CAIROLI",
1558 | "S00902": "MARGARITA",
1559 | "S00271": "PALESTRO",
1560 | "S00272": "ROBBIO",
1561 | "S00901": "BEINETTE",
1562 | "S00054": "BURONZO",
1563 | "S00055": "CARISIO",
1564 | "S11825": "ISOLA CAPO RIZZUTO",
1565 | "S00722": "DRONERO",
1566 | "S00051": "CUREGGIO",
1567 | "S00720": "CASTELLETTO BUSCA",
1568 | "S11820": "CIRO'",
1569 | "S11041": "ENZITETO/CATINO",
1570 | "S07557": "S.FILIPPO",
1571 | "S11042": "MAGNA GRECIA",
1572 | "S11829": "BOTRICELLO",
1573 | "S11828": "ROCCABERNARDA",
1574 | "S12802": "PORTO TORRES",
1575 | "S12804": "SAN GIOVANNI",
1576 | "S09114": "VIA CAMPANA",
1577 | "S12806": "SANT`ORSOLA",
1578 | "S12807": "SASSARI",
1579 | "S01933": "SARONNO",
1580 | "S00072": "SANDIGLIANO",
1581 | "S03121": "S.MARIA LA LONGA",
1582 | "S00042": "VALMADONNA",
1583 | "S02594": "VENEZIA MARITTIMA",
1584 | "N00234": "SONICO",
1585 | "S02593": "VENEZIA SANTA LUCIA",
1586 | "S11910": "COSENZA",
1587 | "S00125": "GYEKENYES",
1588 | "S00041": "VALENZA",
1589 | "S01420": "COLICO",
1590 | "S06425": "ZAMBRA",
1591 | "S03122": "PALMANOVA",
1592 | "S03424": "SCHAFFHAUSEN",
1593 | "S13966": "PINO CONFINE",
1594 | "S06423": "PRATIGNONE",
1595 | "S04803": "BRAGNO",
1596 | "S04802": "SANTUARIO",
1597 | "S04801": "SAVONA",
1598 | "S04800": "SAVONA MARITTIMA",
1599 | "S04805": "SAN GIUSEPPE DI CAIRO",
1600 | "S04804": "FERRANIA",
1601 | "S00073": "VERGNASCO",
1602 | "N00208": "BORGONATO - ADRO",
1603 | "S01098": "CASLINO D'ERBA",
1604 | "N00206": "PASSIRANO",
1605 | "N00207": "BORNATO - CALINO",
1606 | "N00204": "CASTEGNATO",
1607 | "S01094": "LAMBRUGO - LURAGO D'ERBA",
1608 | "N00202": "BORGO S. GIOVANNI",
1609 | "S01092": "AROSIO",
1610 | "S01091": "CARUGO - GIUSSANO",
1611 | "S01722": "POZZUOLO MARTESANA",
1612 | "S06422": "PRATO PORTA AL SERRAGLIO",
1613 | "S12037": "OLIVERI TINDARI",
1614 | "S07801": "TORTORETO LIDO",
1615 | "S05428": "CHIOGGIA",
1616 | "S07806": "PINETO ATRI",
1617 | "S05424": "ROSOLINA",
1618 | "S05425": "CAVANELLA D`ADIGE",
1619 | "S05422": "CAVANELLA PO",
1620 | "S05423": "LOREO",
1621 | "S05420": "ADRIA",
1622 | "S07807": "SILVI",
1623 | "S00219": "TORINO P.NUOVA",
1624 | "S01430": "SONDRIO",
1625 | "S01433": "POGGIRIDENTI-TRESIVIO-PIATEDA",
1626 | "S01435": "CHIURO",
1627 | "S01434": "PONTE IN VALTELLINA",
1628 | "S01437": "TRESENDA-APRICA-TEGLIO",
1629 | "S01436": "S. GIACOMO DI TEGLIO",
1630 | "S01439": "VILLA DI TIRANO",
1631 | "S01438": "BIANZONE",
1632 | "S11219": "LEONESSA",
1633 | "S01540": "COCCAGLIO",
1634 | "S02562": "S.GIUSTINA CESIO",
1635 | "S02563": "BUSCHE LENTIAI MEL",
1636 | "S02560": "SEDICO BRIBANO",
1637 | "S02566": "ALANO FENER VALDOBBIADENE",
1638 | "S02567": "PEDEROBBA CAVASO POSSAGNO",
1639 | "S02564": "FELTRE",
1640 | "S02565": "QUERO VAS",
1641 | "S02568": "LEVADA",
1642 | "S02569": "CORNUDA",
1643 | "S11210": "FORENZA",
1644 | "S04603": "GENOVA MARITTIMA S. LIMBANIA",
1645 | "S12881": "PABILLONIS",
1646 | "S11212": "CASTEL LAGOPESOLE",
1647 | "S09026": "PIANA DI M.VERNA",
1648 | "S02708": "SUSEGANA",
1649 | "S00602": "RACCONIGI",
1650 | "S09027": "PONTELATONE",
1651 | "S02702": "FONTANAFREDDA",
1652 | "S02703": "SACILE",
1653 | "S02700": "CUSANO",
1654 | "S02701": "PORDENONE",
1655 | "S02706": "CONEGLIANO",
1656 | "S09024": "VILLA ORTENSIA",
1657 | "S02704": "ORSAGO",
1658 | "S02705": "PIANZANO",
1659 | "S01945": "STRADELLA",
1660 | "S01944": "BRONI",
1661 | "S01947": "ARENA PO",
1662 | "S04721": "ZOAGLI",
1663 | "S09602": "MONTEFALCIONE",
1664 | "S12886": "SERRAMANNA NURAMINIS",
1665 | "S01943": "S.GIULETTA",
1666 | "S01942": "CASTEGGIO",
1667 | "S09022": "S. MARCO",
1668 | "S11217": "POTENZA SUPERIORE",
1669 | "S01949": "SARMATO",
1670 | "S01948": "CASTEL S.GIOVANNI",
1671 | "S04727": "MONEGLIA",
1672 | "S04724": "CAVI",
1673 | "S02345": "VILLANOVA DI REGGIOLO",
1674 | "S04725": "SESTRI LEVANTE",
1675 | "S02368": "CASTAGNARO",
1676 | "S02364": "CEREA",
1677 | "S09773": "MADONNA DELLE GRAZIE",
1678 | "S02366": "LEGNAGO",
1679 | "S09771": "ROVIGLIANO",
1680 | "S02363": "BOVOLONE",
1681 | "S06513": "SIGNA",
1682 | "S02017": "CHIUSA ",
1683 | "S02014": "BRESSANONE",
1684 | "S06510": "EMPOLI",
1685 | "S03019": "GEMONA DEL FRIULI",
1686 | "S06516": "LE PIAGGE",
1687 | "S06043": "CAMAIORE LIDO CAPEZZANO",
1688 | "S02011": "FORTEZZA ",
1689 | "S08735": "CANCELLIERA",
1690 | "S07061": "BELLISIO SOLFARE",
1691 | "S07062": "MONTEROSSO MARCHE",
1692 | "S03016": "CARNIA",
1693 | "S08731": "PAVONA",
1694 | "S08730": "CASABIANCA",
1695 | "S08733": "LANUVIO",
1696 | "S02019": "LEVATA",
1697 | "S02384": "SANGUINETTO",
1698 | "S02382": "CASTEL D`ARIO",
1699 | "S02383": "BONFERRARO",
1700 | "S02380": "MANTOVA FRASSINE",
1701 | "S02381": "GAZZO DI BIGARELLO",
1702 | "S02765": "ODERZO",
1703 | "S03491": "FONYOD",
1704 | "S12100": "TRAPANI",
1705 | "S12103": "PACECO",
1706 | "S12105": "MOZIA-BIRGI",
1707 | "S12104": "MARAUSA",
1708 | "S12107": "MARSALA",
1709 | "S12106": "SPAGNUOLA",
1710 | "S12109": "PETROSINO STRASATTI",
1711 | "S12108": "TERRENOVE",
1712 | "S09606": "LUOGOSANO",
1713 | "S09607": "PATERNOPOLI",
1714 | "S09604": "LAPIO",
1715 | "S08602": "CAMPOLEONE",
1716 | "S08605": "MONTE S.BIAGIO",
1717 | "S07119": "MISANO ADRIATICO",
1718 | "S08607": "ITRI",
1719 | "S08606": "FONDI - SPERLONGA",
1720 | "S07114": "ANCONA STADIO",
1721 | "S08608": "LATINA",
1722 | "S07116": "ANCONA MARITTIMA",
1723 | "S07117": "FALCONARA STADIO",
1724 | "S07110": "MONTEMARCIANO",
1725 | "S07111": "FALCONARA MARITTIMA",
1726 | "S09608": "CASTELVETERE",
1727 | "S07113": "ANCONA",
1728 | "S12328": "ACIREALE",
1729 | "S00469": "SOLERO",
1730 | "S00468": "FELIZZANO",
1731 | "S00465": "CASTELLO D`ANNONE",
1732 | "S12320": "ALCANTARA",
1733 | "S12323": "MASCALI",
1734 | "S12322": "FIUMEFREDDO DI SICILIA",
1735 | "S00461": "S. DAMIANO D`ASTI",
1736 | "S12324": "GIARRE RIPOSTO",
1737 | "S12327": "GUARDIA MANGANO SANTA VENERINA",
1738 | "S12326": "CARRUBA",
1739 | "S11821": "TORRE MELISSA",
1740 | "S07413": "SASSA TORNIMPARTE",
1741 | "S06607": "CRESPINO DEL LAMONE",
1742 | "S06606": "RONTA",
1743 | "S06605": "PANICAGLIA",
1744 | "S06604": "BORGO S. LORENZO",
1745 | "S06603": "S.PIERO A SIEVE",
1746 | "S06602": "VAGLIA",
1747 | "S06601": "MONTORSOLI",
1748 | "S00861": "GAMALERO",
1749 | "S00860": "BORGORATTO",
1750 | "S00864": "CASSINE",
1751 | "S00867": "ACQUI TERME",
1752 | "S00866": "STREVI",
1753 | "S00869": "TERZO MONTABONE",
1754 | "S07808": "MONTESILVANO",
1755 | "S12039": "NOVARA MONTALBANO FURNARI",
1756 | "S12038": "FALCONE",
1757 | "S07802": "GIULIANOVA",
1758 | "S12034": "SAN GIORGIO",
1759 | "S07800": "ALBA ADRIATICA NERETO CONTR.",
1760 | "S12036": "PATTI-SAN PIERO PATTI",
1761 | "S12031": "BROLO FICARRA",
1762 | "S12030": "CAPO D`ORLANDO-NASO",
1763 | "S12033": "GIOJOSA MAREA",
1764 | "S07805": "SCERNE DI PINETO",
1765 | "S00609": "S.BENIGNO DI CUNEO",
1766 | "S00608": "CENTALLO",
1767 | "S00601": "CARMAGNOLA",
1768 | "S11211": "FILIANO",
1769 | "S00603": "CAVALLERMAGGIORE",
1770 | "S11213": "PIETRAGALLA",
1771 | "S11214": "AVIGLIANO LUCANIA",
1772 | "S11215": "POTENZA MACCHIA ROMANA",
1773 | "S00607": "MADDALENE",
1774 | "S00606": "FOSSANO",
1775 | "S08555": "VILLA SAN MICHELE",
1776 | "S08714": "VILLA CLAUDIA",
1777 | "S08550": "AIELLI",
1778 | "S07985": "S. VITO CHIETINO",
1779 | "S09815": "NOCERA SUPERIORE",
1780 | "S09814": "NOCERA INFERIORE",
1781 | "S11108": "BARLETTA",
1782 | "S11458": "FERRANDINA",
1783 | "S11459": "PISTICCI",
1784 | "S11456": "GRASSANO",
1785 | "S11105": "CANDIDA",
1786 | "S11454": "CAMPOMAGGIORE",
1787 | "S11455": "CALCIANO",
1788 | "S11100": "FOGGIA",
1789 | "S11453": "ALBANO DI LUCANIA",
1790 | "S11102": "ORTANOVA",
1791 | "S11451": "BRINDISI DI MONTAGNA",
1792 | "S00735": "MONCHIERO DOGLIANI",
1793 | "S11853": "ARDORE",
1794 | "S00737": "FARIGLIANO",
1795 | "S11851": "LOCRI",
1796 | "S11856": "FERRUZZANO",
1797 | "S11857": "BRANCALEONE",
1798 | "S11854": "BOVALINO",
1799 | "S00732": "BANDITO",
1800 | "S11858": "CAPO SPARTIVENTO",
1801 | "S11859": "PALIZZI",
1802 | "S00739": "NIELLA",
1803 | "S00738": "CARRU` CLAVESANA",
1804 | "S06082": "SUBBIANO",
1805 | "S12819": "ELMAS AEROPORTO",
1806 | "S12818": "CARBONIA SERBARIU",
1807 | "S12817": "ARDARA",
1808 | "S12816": "PLOAGHE",
1809 | "S12815": "CAMPOMELA",
1810 | "S12814": "SCALA DI GIOCCA",
1811 | "S12813": "TISSI USINI",
1812 | "S12812": "CANIGA",
1813 | "S00547": "SALUZZO",
1814 | "S11107": "MARGHERITA DI SAV./OFANTINO",
1815 | "S11452": "TRIVIGNO",
1816 | "S07412": "VIGLIANO D`ABRUZZO",
1817 | "S11101": "INCORONATA",
1818 | "S09201": "MIGNANO DI MONTE LUNGO",
1819 | "S11450": "VAGLIO BASILICATA",
1820 | "S11103": "CERIGNOLA",
1821 | "S09207": "PIGNATARO MAGGIORE",
1822 | "S00734": "NARZOLE",
1823 | "S11850": "SIDERNO",
1824 | "S00138": "QUART",
1825 | "S00137": "AOSTA",
1826 | "S00731": "SANFRE`",
1827 | "S00135": "VILLENEUVE",
1828 | "S00134": "ARVIER",
1829 | "S00133": "AVISE",
1830 | "S00132": "LA SALLE",
1831 | "S00131": "MORGEX",
1832 | "S00130": "PRE` SAINT DIDIER",
1833 | "S00733": "CHERASCO",
1834 | "S02343": "PALIDANO",
1835 | "S11855": "BIANCO",
1836 | "S02340": "SUZZARA",
1837 | "S01456": "MOIANA",
1838 | "S07005": "PERUGIA PONTE S.GIOVANNI",
1839 | "S08674": "ROMA CASILINA",
1840 | "S04537": "GENOVA SESTRI PONENTE",
1841 | "S08737": "S. GENNARO",
1842 | "S01070": "NOVATE MILANESE",
1843 | "S04206": "SERRAVALLE SCRIVIA",
1844 | "S01073": "SERENELLA",
1845 | "S04534": "GENOVA VOLTRI",
1846 | "S01075": "CESATE",
1847 | "S05009": "FIDENZA",
1848 | "S04531": "VARAZZE",
1849 | "S04530": "CELLE",
1850 | "S05005": "PONTENURE",
1851 | "S12952": "VILLAMASSARGIA DOMUSNOVAS",
1852 | "S07410": "ROCCA DI CORNO",
1853 | "N00219": "ARTOGNE - GIANICO",
1854 | "N00218": "PIANCAMUNO - GRATACASOLO",
1855 | "S01710": "MORENGO BARIANO",
1856 | "N00214": "MARONE - ZONE",
1857 | "S01712": "CALCIO",
1858 | "S01713": "CHIARI",
1859 | "N00211": "PILZONE",
1860 | "N00210": "ISEO",
1861 | "S01716": "OSPITALETTO TRAVAGLIATO",
1862 | "S01717": "BRESCIA",
1863 | "S01408": "DERVIO",
1864 | "S01409": "BELLANO TARTAVELLE TERME",
1865 | "S01404": "VERCEIA",
1866 | "S01405": "DUBINO",
1867 | "S01406": "PIONA",
1868 | "S01407": "DORIO",
1869 | "S01400": "CHIAVENNA",
1870 | "S01401": "S. CASSIANO VALCHIAVENNA",
1871 | "S01150": "OLTEN",
1872 | "S01403": "NOVATE-MEZZOLA",
1873 | "S12443": "S.LORENZO LO VECCHIO",
1874 | "S12215": "TEMPIO DI VULCANO",
1875 | "S00053": "ROVASENDA",
1876 | "S02570": "MONTEBELLUNA",
1877 | "S01450": "ALBATE-TRECALLO",
1878 | "S02575": "FANZOLO",
1879 | "S02579": "GRISIGNANO DI ZOCCO",
1880 | "S02578": "LERINO",
1881 | "S06854": "TORRITA DI SIENA",
1882 | "S06855": "MONTEPULCIANO",
1883 | "S12214": "PORTO EMPEDOCLE",
1884 | "S06850": "RAPOLANO TERME",
1885 | "S06851": "RIGOMAGNO",
1886 | "S09804": "S.MARIA LA BRUNA",
1887 | "S05721": "GALLIERA",
1888 | "S05720": "POGGIO RENATICO",
1889 | "S05723": "S.GIORGIO P.",
1890 | "S05722": "S.PIETRO IN CASALE",
1891 | "S05725": "BOLOGNA CORTICELLA",
1892 | "S05724": "CASTELMAGGIORE",
1893 | "S05726": "FUNO CENTERGROSS",
1894 | "S02710": "LANCENIGO",
1895 | "S02712": "TREVISO C.",
1896 | "S02715": "PREGANZIOL",
1897 | "S02717": "MOGLIANO VENETO",
1898 | "S01970": "CAORSO",
1899 | "S01971": "MONTICELLI D`ONGINA",
1900 | "S00420": "S.SEBASTIANO PO",
1901 | "S01607": "SORESINA",
1902 | "S02373": "LENDINARA",
1903 | "S09763": "BOCCIA AL MAURO",
1904 | "S02370": "BADIA POLESINE",
1905 | "S02375": "COSTA",
1906 | "S02374": "FRATTA",
1907 | "S08708": "LIDO DI LAVINIO",
1908 | "S03029": "BUTTRIO",
1909 | "S02007": "CAMPO DI TRENS ",
1910 | "S06073": "PORRENA - STRADA - MONTEM.",
1911 | "S02001": "BRENNERO",
1912 | "S06075": "MEMMENANO",
1913 | "S06076": "BIBBIENA",
1914 | "S06077": "BIBBIENA CORSALONE",
1915 | "S06078": "RASSINA",
1916 | "S03021": "ARTEGNA",
1917 | "S03022": "TARCENTO",
1918 | "S08703": "CASTEL GANDOLFO",
1919 | "S08704": "ALBANO LAZIALE",
1920 | "S08705": "APRILIA",
1921 | "S08706": "CAMPO DI CARNE",
1922 | "S01603": "CAPRALBA",
1923 | "S02395": "OSPEDALETTO EUGANEO",
1924 | "S02394": "SALETTO",
1925 | "S02396": "ESTE",
1926 | "S02391": "BEVILACQUA",
1927 | "S02390": "BOSCHI S.ANNA",
1928 | "S02392": "MONTAGNANA",
1929 | "S12048": "SPADAFORA",
1930 | "S00422": "MONTEU DA PO",
1931 | "S12138": "GIACHERY",
1932 | "S12139": "FRANCIA",
1933 | "S12134": "PALERMO NOTARBARTOLO",
1934 | "S12135": "VESPRI",
1935 | "S12136": "FEDERICO",
1936 | "S12137": "FIERA",
1937 | "S12130": "PALAZZO REALE-ORLEANS",
1938 | "S12131": "TOMMASO NATALE",
1939 | "S12132": "S.LORENZO COLLI",
1940 | "S12133": "PUNTA RAISI",
1941 | "S09615": "S.ANGELO DEI LOMBARDI",
1942 | "S09614": "NUSCO",
1943 | "S07109": "MARZOCCA",
1944 | "S09616": "LIONI",
1945 | "S09611": "CASSANO IRPINO",
1946 | "S09610": "MONTEMARANO",
1947 | "S09613": "BAGNOLI IRPINO",
1948 | "S09612": "MONTELLA",
1949 | "S07102": "CATTOLICA S.GIOVANNI GABICCE",
1950 | "S03624": "NAGYKANIZSA",
1951 | "S07100": "RIMINI MIRAMARE",
1952 | "S07107": "MAROTTA MONDOLFO",
1953 | "S09618": "CONZA ANDRETTA CAIRANO",
1954 | "S07105": "FANO",
1955 | "S07104": "PESARO",
1956 | "S00458": "VILLANOVA",
1957 | "S00459": "VILLAFRANCA C.",
1958 | "S08411": "FIUMICINO AEROPORTO",
1959 | "S08412": "PARCO LEONARDO",
1960 | "S00452": "TORINO LINGOTTO",
1961 | "S00453": "MONCALIERI",
1962 | "S00455": "TROFARELLO",
1963 | "S00456": "CAMBIANO SANTENA",
1964 | "S00457": "PESSIONE",
1965 | "S75648": "MENTON",
1966 | "S00850": "GIUBIASCO",
1967 | "S12008": "BAGHERIA",
1968 | "S12009": "S.FLAVIA",
1969 | "S07811": "PESCARA PORTA NUOVA",
1970 | "S07810": "PESCARA",
1971 | "S07813": "FRANCAVILLA AL MARE",
1972 | "S07815": "ORTONA",
1973 | "S07814": "TOLLO CANOSA SANNITA",
1974 | "S07817": "S.VITO LANCIANO",
1975 | "S05701": "TERME EUGANEE-ABANO-MONTEGR.",
1976 | "S06704": "BORGO S.L.RIMORELLI",
1977 | "S02558": "PONTE NELLE ALPI POLPET",
1978 | "S06702": "CONTEA LONDA",
1979 | "S06703": "RUFINA",
1980 | "S06700": "VICCHIO",
1981 | "S06701": "DICOMANO",
1982 | "S12799": "CARINI TORRE CIACHEA",
1983 | "S05706": "ROVIGO",
1984 | "S12314": "SANTA TERESA DI RIVA",
1985 | "S12315": "S.ALESSIO SICULO FORZA D`AGRO`",
1986 | "S12316": "LETOJANNI",
1987 | "S11118": "BARI PALESE MACCHIE",
1988 | "S12310": "ALI` TERME",
1989 | "S12311": "NIZZA DI SICILIA",
1990 | "S12312": "ROCCALUMERA MANDANICI",
1991 | "S12313": "FURCI",
1992 | "S11113": "BISCEGLIE",
1993 | "S00921": "BAGNASCO",
1994 | "S11865": "MOTTA SAN GIOVANNI LAZZARO",
1995 | "S00923": "PRIOLA",
1996 | "S00924": "GARESSIO",
1997 | "S11116": "BARI S. SPIRITO",
1998 | "S11115": "GIOVINAZZO",
1999 | "S11114": "MOLFETTA",
2000 | "S00700": "MANTA",
2001 | "S11840": "S.ANDREA DELL`JONIO",
2002 | "S11843": "GUARDAVALLE",
2003 | "S05708": "POLESELLA",
2004 | "S00704": "BUSCA",
2005 | "S11844": "MONASTERACE STILO",
2006 | "S11847": "ROCCELLA JONICA",
2007 | "S11846": "CAULONIA",
2008 | "S11848": "GIOIOSA JONICA",
2009 | "S00031": "VESPOLATE",
2010 | "S12869": "MACOMER",
2011 | "S00136": "SARRE",
2012 | "S12862": "OZIERI CHILIVANI",
2013 | "S03312": "SISTIANA",
2014 | "S12860": "OSCHIRI",
2015 | "S12861": "OZIERI FRAIGAS",
2016 | "S12866": "GIAVE",
2017 | "S12867": "BONORVA",
2018 | "S12864": "MORES ITTIREDDU",
2019 | "S08521": "SANTE MARIE",
2020 | "S08522": "TAGLIACOZZO",
2021 | "S02339": "MOTTEGGIANA",
2022 | "S08523": "VILLA SAN SEBASTIANO",
2023 | "S00634": "LA BRIGUE",
2024 | "S11206": "MELFI",
2025 | "S11205": "ROCCHETTA S.ANT.LAC.",
2026 | "S11204": "CANDELA",
2027 | "S11203": "ASCOLI SATRIANO",
2028 | "S11202": "ORDONA",
2029 | "S11201": "SANTUARIO INCORONATA",
2030 | "S11200": "CERVARO",
2031 | "S11209": "RIONERO ATELLA RIPACANDITA",
2032 | "S11208": "BARILE",
2033 | "S09831": "BELLA MURO",
2034 | "S05310": "NOGARA",
2035 | "S00148": "DONNAZ",
2036 | "S00149": "PONT SAINT MARTIN",
2037 | "S00142": "CHATILLON SAINT VINCENT",
2038 | "S00143": "AOSTA ISTITUTO",
2039 | "S00140": "NUS",
2040 | "S00141": "CHAMBAVE",
2041 | "S00146": "AOSTA VIALE EUROPA",
2042 | "S00147": "HONE BARD",
2043 | "S00144": "MONTJOVET",
2044 | "S00145": "VERRES",
2045 | "S01016": "STRESA",
2046 | "S01504": "TERNO",
2047 | "S03081": "TRAVESIO",
2048 | "N00228": "CETO - CERVENO",
2049 | "N00229": "CAPO DI PONTE",
2050 | "N00221": "BOARIO TERME",
2051 | "N00222": "ERBANNO - ANGONE",
2052 | "N00223": "PIAN DI BORNO",
2053 | "N00224": "COGNO - ESINE",
2054 | "N00225": "CIVIDATE - MALEGNO",
2055 | "N00226": "BRENO",
2056 | "N00227": "NIARDO - LOSINE",
2057 | "S01145": "BESNATE",
2058 | "S01412": "FIUMELATTE",
2059 | "S01411": "VARENNA ESINO",
2060 | "S01410": "REGOLEDO",
2061 | "S01141": "BESOZZO",
2062 | "S01416": "ABBADIA LARIANA",
2063 | "S01415": "MANDELLO DEL LARIO",
2064 | "S01414": "OLCIO",
2065 | "S02140": "SCHIO",
2066 | "S02141": "ANCONETTA",
2067 | "S02142": "MARANO",
2068 | "S02143": "THIENE",
2069 | "S02145": "VILLAVERLA MONTECCHIO",
2070 | "S02146": "DUEVILLE",
2071 | "S02147": "CAVAZZALE",
2072 | "S02664": "S. STINO DI LIVENZA",
2073 | "S00808": "MOMBARUZZO",
2074 | "S72517": "DUGO SELO",
2075 | "S05710": "OCCHIOBELLO",
2076 | "S05711": "PONTELAGOSCURO",
2077 | "S05712": "FERRARA",
2078 | "S02540": "PAESE",
2079 | "S05719": "CORONELLA",
2080 | "S01707": "CASSANO D`ADDA",
2081 | "S01706": "TRECELLA",
2082 | "S01705": "MELZO",
2083 | "S01704": "VIGNATE",
2084 | "S01703": "PIOLTELLO LIMITO",
2085 | "S05081": "BOLOGNA SAN VITALE",
2086 | "S01701": "MILANO LAMBRATE",
2087 | "S01700": "MILANO CENTRALE",
2088 | "S01709": "VIDALENGO",
2089 | "S01708": "TREVIGLIO",
2090 | "S76290": "LYON ST EXUPERY",
2091 | "S01964": "CASTIONE DEI MARCHESI",
2092 | "S01963": "BUSSETO",
2093 | "S01962": "VILLANOVA D`ARDA",
2094 | "S01961": "S. GIULIANO PIACENTINO",
2095 | "S01960": "CASTELVETRO",
2096 | "S09754": "BOSCOREALE",
2097 | "S03700": "SINGEN",
2098 | "S09756": "CASTELLAMMARE DI STABIA",
2099 | "S09750": "MARIGLIANO",
2100 | "S09751": "OTTAVIANO",
2101 | "S09752": "S.GIUSEPPE VESUVIANO",
2102 | "S09753": "TERZIGNO",
2103 | "S09758": "GRAGNANO",
2104 | "S02030": "BRONZOLO ",
2105 | "S02031": "ORA",
2106 | "S02032": "EGNA-TERMENO ",
2107 | "S02033": "MAGRE`- CORTACCIA",
2108 | "S02034": "SALORNO",
2109 | "S02035": "MEZZOCORONA",
2110 | "S06069": "LUCIGNANO - MARCIANO - POZZO",
2111 | "S02037": "LAVIS",
2112 | "S06067": "ALBERGO",
2113 | "S06066": "CIVITELLA - BADIA AL PINO",
2114 | "S06065": "SAN GIULIANO D'AREZZO",
2115 | "S06064": "VIA CHIARI",
2116 | "S06063": "AREZZO PESCAIOLA",
2117 | "S03299": "VRTOJBA",
2118 | "S05179": "MASSAFISCAGLIA",
2119 | "S06730": "ROSIGNANO",
2120 | "S08915": "PESCOLANCIANO-CHIAUCI",
2121 | "S12129": "ISOLA DELLE FEMMINE",
2122 | "S12128": "CAPACI",
2123 | "S05953": "S.PATRIZIO",
2124 | "S12123": "TRAPPETO",
2125 | "S12122": "BALESTRATE",
2126 | "S12121": "ORSA",
2127 | "S12120": "CASTELLAMMARE DEL GOLFO",
2128 | "S12127": "CARINI",
2129 | "S12126": "CINISI TERRASINI",
2130 | "S12125": "PIRAINETO",
2131 | "S12124": "PARTINICO",
2132 | "S09620": "CALITRI PESCOPAGANO",
2133 | "S09621": "RAPONE RUVO S.FELE",
2134 | "S09622": "MONTICCHIO",
2135 | "S09623": "AQUILONIA",
2136 | "S09624": "MONTEVERDE",
2137 | "S09625": "PISCIOLO",
2138 | "S09626": "CAMPO DI NUSCO",
2139 | "S09627": "PERCIANTI ARIANELLO",
2140 | "S09628": "LIONI VALLE DELLE VITI",
2141 | "S09629": "SANZANO OCCHINO",
2142 | "S03633": "ST VEIT GLAN",
2143 | "S08403": "PONTE GALERIA",
2144 | "S71341": "DOLE VILLE",
2145 | "S08400": "MURATELLA",
2146 | "S08406": "ROMA OSTIENSE",
2147 | "S08405": "ROMA TRASTEVERE",
2148 | "S08404": "MAGLIANA",
2149 | "S07714": "PIANO D`ORTA BOLOGNANO",
2150 | "S08408": "ROMA TUSCOLANA",
2151 | "S07712": "CHIETI",
2152 | "S07710": "MANOPPELLO",
2153 | "S08600": "TORRICOLA",
2154 | "S08399": "VILLA BONELLI",
2155 | "S12017": "CAMPOFELICE",
2156 | "S12016": "BUONFORNELLO",
2157 | "S12015": "FIUMETORTO",
2158 | "S06200": "PONZANO MAGRA",
2159 | "S12013": "TRABIA",
2160 | "S07821": "CASALBORDINO POLLUTRI",
2161 | "S12011": "ALTAVILLA M.",
2162 | "S12010": "CASTELDACCIA",
2163 | "S00842": "POCAPAGLIA",
2164 | "S00840": "OVIGLIO",
2165 | "S08409": "ROMA TERMINI",
2166 | "S12019": "CEFALU`",
2167 | "S12018": "LASCARI",
2168 | "S07002": "MAGIONE",
2169 | "S07003": "ELLERA CORCIANO",
2170 | "S08715": "ACQUA ACETOSA",
2171 | "S07001": "PASSIGNANO SUL TRASIMENO",
2172 | "S08713": "ANZIO COLONIA",
2173 | "S07007": "BASTIA",
2174 | "S07004": "PERUGIA",
2175 | "S03030": "MANZANO",
2176 | "S29411": "ROTTEWEIL",
2177 | "S07008": "ASSISI",
2178 | "S07009": "CANNARA",
2179 | "S12279": "PALAGONIA",
2180 | "S12278": "SCORDIA",
2181 | "S12277": "FILDIDONNA",
2182 | "S12276": "MILITELLO",
2183 | "S12275": "MINEO",
2184 | "S12273": "VIZZINI",
2185 | "S12272": "GRAMMICHELE",
2186 | "S12270": "CALTAGIRONE",
2187 | "S07804": "ROSETO DEGLI ABRUZZI",
2188 | "S12303": "TREMESTIERI",
2189 | "S08313": "ORIOLO",
2190 | "S12301": "MESSINA CENTRALE",
2191 | "S12300": "MESSINA MARITTIMA",
2192 | "S12305": "GALATI",
2193 | "S06013": "AULLA LUNIGIANA",
2194 | "S12309": "SCALETTA ZANCLEA",
2195 | "S12308": "GIAMPILIERI",
2196 | "S02024": "PRATO TIRES",
2197 | "S11309": "CASAL SABINI",
2198 | "S11306": "GRAVINA IN PUGLIA",
2199 | "S11307": "ALTAMURA",
2200 | "S11304": "SPINAZZOLA",
2201 | "S11305": "POGGIORSINI",
2202 | "S11870": "ANNA'",
2203 | "S11871": "GABELLA GRANDE",
2204 | "S11872": "AFRICO NUOVO",
2205 | "S03120": "RISANO",
2206 | "S12879": "MARRUBIU TERRALBA ARBOREA",
2207 | "S12878": "ORISTANO",
2208 | "S08315": "BRACCIANO",
2209 | "S12873": "ABBASANTA",
2210 | "S12872": "BORORE",
2211 | "S12875": "BAULADU MILIS",
2212 | "S12874": "PAULILATINO",
2213 | "S12876": "SOLARUSSA",
2214 | "S11780": "REGGIO CALABRIA LIDO",
2215 | "S11781": "REGGIO CALABRIA CENTRALE",
2216 | "S11786": "SANTA DOMENICA",
2217 | "S11788": "ECCELLENTE",
2218 | "S11789": "VIBO VALENZIA PIZZO",
2219 | "S03854": "TRIESTE SERVOLA",
2220 | "S03856": "TRIESTE AQUILINIA",
2221 | "S00622": "BREIL SUR ROYA",
2222 | "S00621": "FONTAN SAORGE",
2223 | "S00620": "ST.DALMAS DE TENDE",
2224 | "S00159": "RODALLO",
2225 | "S00158": "CALUSO",
2226 | "S00151": "SETTIMO TAVAGNASCO",
2227 | "S00150": "QUINCINETTO",
2228 | "S00153": "MONTALTO DORA",
2229 | "S00152": "BORGOFRANCO",
2230 | "S00155": "STRAMBINO",
2231 | "S00154": "IVREA",
2232 | "S00157": "CANDIA CANAVESE",
2233 | "S00156": "MERCENASCO",
2234 | "S09113": "CAVALLEGGERI AOSTA",
2235 | "S09110": "NAPOLI GIANTURCO",
2236 | "S09111": "QUARTO DI MARANO",
2237 | "S02769": "ANNONE VENETO",
2238 | "N00215": "VELLO",
2239 | "S02112": "VILLABASSA - BRAIES",
2240 | "S01711": "ROMANO",
2241 | "S00245": "VERCELLI",
2242 | "N00217": "PISOGNE",
2243 | "S00244": "OLCENENGO",
2244 | "N00216": "TOLINE",
2245 | "S00247": "PONZANA",
2246 | "S01714": "ROVATO",
2247 | "S08604": "PRIVERNO FOSSANOVA",
2248 | "S11125": "BARI PARCO SUD",
2249 | "S01715": "SEGRATE",
2250 | "N00213": "SALE MARASINO",
2251 | "N00212": "SULZANO",
2252 | "S04722": "CHIAVARI",
2253 | "S04723": "LAVAGNA",
2254 | "S04720": "RAPALLO",
2255 | "S09025": "CAIAZZO",
2256 | "S04726": "RIVA TRIGOSO",
2257 | "S09023": "ALVIGNNO",
2258 | "S09020": "ALIFE",
2259 | "S09021": "DRAGONI",
2260 | "S04728": "DEIVA MARINA",
2261 | "S04729": "FRAMURA",
2262 | "S09028": "TRIFLISCO",
2263 | "S09029": "S. IORIO",
2264 | "S12391": "VITUSO",
2265 | "S09501": "SEPINO",
2266 | "S05417": "CEREGNANO",
2267 | "S05411": "S.ANNA DI CHIOGGIA",
2268 | "S05419": "BARICETTA",
2269 | "S05418": "LAMA",
2270 | "S01810": "TORTONA",
2271 | "S01179": "SCHWAZ",
2272 | "S06824": "STICCIANO",
2273 | "S01176": "JENBACH",
2274 | "S02736": "STAZIONE PER L`ALPAGO",
2275 | "S05022": "VILLA CADE`",
2276 | "S11051": "AMENDOLA",
2277 | "S01609": "CASALBUTTANO",
2278 | "S01606": "CASTELLEONE",
2279 | "S05386": "ANZOLA",
2280 | "S01604": "CASALETTO VAPRIO",
2281 | "S01605": "CREMA",
2282 | "S01602": "CARAVAGGIO",
2283 | "S01015": "BAVENO",
2284 | "S01600": "VERDELLO DALMINE",
2285 | "S01601": "TREVIGLIO OVEST",
2286 | "S42100": "SEVNICA",
2287 | "S06840": "COLLE VAL D`ELSA",
2288 | "S05703": "MONSELICE",
2289 | "S05702": "BATTAGLIA TERME",
2290 | "S02559": "BELLUNO",
2291 | "S05700": "ABANO TERME",
2292 | "S05707": "ARQUA`",
2293 | "S05254": "REGGIO EMILIA AV",
2294 | "S05705": "STANGHELLA",
2295 | "S05704": "S.ELENA - ESTE",
2296 | "S02553": "PERAROLO DI CADORE",
2297 | "S06871": "MONTERONI D`ARBIA",
2298 | "S05709": "P.C.CANARO",
2299 | "S02550": "CALALZO PIEVE CADORE CORTINA",
2300 | "S06874": "BUONCONVENTO",
2301 | "S02556": "LONGARONE ZOLDO",
2302 | "S06876": "MURLO",
2303 | "S02554": "OSPITALE DI CADORE",
2304 | "N00237": "ROVATO CITTA",
2305 | "N00235": "EDOLO",
2306 | "S05090": "SALSOMAGGIORE T.",
2307 | "N00233": "MALONNO",
2308 | "N00232": "FORNO ALLIONE",
2309 | "N00231": "CEDEGOLO",
2310 | "N00230": "SELLERO",
2311 | "N00238": "CAZZAGO S. MARTINO",
2312 | "S11842": "S.CATERINA DELL`JONIO",
2313 | "S01918": "TORRE DE` PICENARDI",
2314 | "S01919": "PIADENA",
2315 | "S00060": "TORINO REBAUDENGO FOSSATA",
2316 | "S01912": "PONTE D`ADDA",
2317 | "S01913": "ACQUANEGRA CREMONESE",
2318 | "S01910": "MALEO",
2319 | "S01911": "PIZZIGHETTONE",
2320 | "S01916": "VILLETTA MALAGNINO",
2321 | "S01917": "GAZZO PIEVE S. GIACOMO",
2322 | "S01914": "CAVA TIGOZZI",
2323 | "S01915": "CREMONA",
2324 | "S11837": "SOVERATO",
2325 | "S00823": "MONTICELLO D`ALBA",
2326 | "S06018": "COLLESALVETTI",
2327 | "S02029": "LAIVES ",
2328 | "S06012": "PIETRASANTA",
2329 | "S02026": "BOLZANO ",
2330 | "S06011": "FORTE DEI MARMI SERRAVEZZA Q.",
2331 | "S06017": "VICARELLO",
2332 | "S02020": "PONTE GARDENA",
2333 | "S01826": "SECUGNAGO",
2334 | "S01827": "CASALPUSTERLENGO",
2335 | "S01824": "TAVAZZANO",
2336 | "S01825": "LODI",
2337 | "S01822": "MELEGNANO",
2338 | "S01823": "S. ZENONE AL LAMBRO",
2339 | "S01820": "MILANO ROGOREDO",
2340 | "S01821": "S. GIULIANO MILANESE",
2341 | "S01828": "CODOGNO",
2342 | "S01829": "S.STEFANO LODIGIANO",
2343 | "S02733": "VITTORIO VENETO",
2344 | "S02732": "SOFFRATTA",
2345 | "S01402": "SAMOLACO",
2346 | "S02735": "S.CROCE DEL LAGO",
2347 | "S02734": "NOVE",
2348 | "S03600": "ROSENHEIM",
2349 | "S09630": "S.TOMMASO DEL PIANO",
2350 | "S07708": "ALANNO",
2351 | "S03466": "VILLA OPICINA",
2352 | "S07705": "TOCCO CASTIGLIONE",
2353 | "S07704": "BUSSI",
2354 | "S07707": "SCAFA S.VALENTINO CARAMANICO T",
2355 | "S07706": "TORRE DEI PASSERI",
2356 | "S06659": "CAMPOMIGLIAIO",
2357 | "S07703": "POPOLI VITTORITO",
2358 | "S03199": "S.GIOVANNI DI CASARSA",
2359 | "S07011": "TORRICELLA",
2360 | "S07010": "SPELLO",
2361 | "S07013": "PERUGIA SILVESTRINI",
2362 | "S07012": "OSPEDALICCHIO",
2363 | "S07015": "ANCONA TORRETTE",
2364 | "S07014": "MONTE MELINO",
2365 | "S07017": "PESCARA S. MARCO",
2366 | "S07018": "FOSSACESIA - TORINO DI SANGRO",
2367 | "S00890": "PONT",
2368 | "S12209": "ACQUAVIVA",
2369 | "S00546": "CERVIGNASCO",
2370 | "S12203": "MONTEMAGGIORE",
2371 | "S12200": "CERDA",
2372 | "S00545": "TORRE S.GIORGIO",
2373 | "S00542": "VIGONE",
2374 | "S12207": "CAMMARATA S.GIOVANNI GEMINI",
2375 | "S12204": "ROCCAPALUMBA-ALIA",
2376 | "S00541": "CERCENASCO",
2377 | "S06720": "TOMBOLO",
2378 | "S08508": "TIVOLI",
2379 | "S06725": "LIVORNO CENTRALE",
2380 | "S06727": "ANTIGNANO",
2381 | "S06728": "QUERCIANELLA",
2382 | "S06729": "CASTIGLIONCELLO",
2383 | "S08500": "ROMA PRENESTINA",
2384 | "S08501": "TOR SAPIENZA",
2385 | "S08506": "GUIDONIA-MONTECELLO-S.ANGELO",
2386 | "S08507": "MARCELLINA-PALOMBARA",
2387 | "S08504": "BAGNI DI TIVOLI",
2388 | "S11465": "TARANTO",
2389 | "S11464": "PALAGIANO CHIATONA",
2390 | "S11463": "CASTELLANETA MARINA",
2391 | "S11462": "GINOSA",
2392 | "S11461": "METAPONTO",
2393 | "S11460": "BERNALDA",
2394 | "S00430": "SETTIME CINAGLIO MOMBARONE",
2395 | "S00431": "SERRAVALLE D`ASTI",
2396 | "S00434": "S.ANNA ROBELLA",
2397 | "S11869": "THURIO",
2398 | "S11868": "REGGIO DI CALABRIA S.GREGORIO",
2399 | "S00090": "CIRE'",
2400 | "S11862": "MARINA DI SAN LORENZO",
2401 | "S11861": "CONDOFURI",
2402 | "S11860": "BOVA MARINA",
2403 | "S00094": "BALANGERO",
2404 | "S00095": "LANZO",
2405 | "S00096": "GERMAGNANO",
2406 | "S11864": "SALINE DI REGGIO",
2407 | "S08216": "SETTE BAGNI",
2408 | "S08217": "ROMA TIBURTINA",
2409 | "S08214": "FARA SABINA",
2410 | "S08215": "MONTEROTONDO",
2411 | "S08212": "STIMIGLIANO",
2412 | "S08213": "POGGIO MIRTETO",
2413 | "S08210": "GALLESE IN TEVERINA",
2414 | "S08211": "CIVITA CASTELLANA",
2415 | "S11790": "MILETO",
2416 | "S12419": "SAMPIERI",
2417 | "S06150": "VICOFERTILE",
2418 | "S00160": "MONTANARO",
2419 | "S00161": "SAINT PIERRE",
2420 | "S00162": "DERBY",
2421 | "S05046": "BOLOGNA C.LE/AV",
2422 | "S06159": "ROCCAMURATA",
2423 | "S09109": "NAPOLI PIAZZA GARIBALDI",
2424 | "S09108": "PIAZZA CAVOUR",
2425 | "S12410": "VITTORIA",
2426 | "S05047": "P.M. RENO",
2427 | "S09101": "POZZUOLI SOLFATARA",
2428 | "S09100": "GIUGLIANO QUALIANO",
2429 | "S09103": "NAPOLI CAMPI FLEGREI",
2430 | "S09102": "BAGNOLI AGNANO TERME",
2431 | "S09105": "NAPOLI MERGELLINA",
2432 | "S09104": "NAPOLI PIAZZA LEOPARDI",
2433 | "S09107": "NAPOLI MONTESANTO",
2434 | "S09106": "PIAZZA AMEDEO",
2435 | "S06856": "MONTALLESE",
2436 | "S11503": "SANNICANDRO DI BARI",
2437 | "S00111": "SIZZANO",
2438 | "S11901": "SPEZZANO ALBANESE TERME",
2439 | "S07200": "CASTELFERRETTI",
2440 | "S07201": "CHIARAVALLE",
2441 | "S06852": "SINALUNGA",
2442 | "S11903": "TARSIA",
2443 | "S12366": "GOLE DI ALCANTARA",
2444 | "S12361": "FRANCAVILLA",
2445 | "S07205": "SERRA S.QUIRICO",
2446 | "S04731": "LEVANTO",
2447 | "S04730": "BONASSOLA",
2448 | "S04733": "VERNAZZA",
2449 | "S04732": "MONTEROSSO",
2450 | "S09031": "ANFITEATRO",
2451 | "S04734": "CORNIGLIA",
2452 | "S04736": "RIOMAGGIORE",
2453 | "S12362": "CASTIGLIONE DI SICILIA",
2454 | "S11140": "TUTURANO",
2455 | "S11141": "S. PIETRO VERNOTICO",
2456 | "S00544": "MORETTA",
2457 | "S11143": "TREPUZZI",
2458 | "S00543": "VILLAFRANCA P.",
2459 | "S00540": "SCALENGHE",
2460 | "S12205": "LERCARA BASSA",
2461 | "S09019": "S. FELICE A CANCELLO-ARIENZO",
2462 | "N00181": "RACCORDO X",
2463 | "S12885": "SAMASSI SERRENTI",
2464 | "S04713": "MULINETTI",
2465 | "S04712": "SORI",
2466 | "S04711": "PIEVE LIGURE",
2467 | "S02650": "PADOVA CAMPO MARTE",
2468 | "S09014": "S. MARTINO V.C.-M.SARCHIO-P.RANO",
2469 | "S13653": "MACCAGNO",
2470 | "S01610": "MADIGNANO",
2471 | "S09012": "BENEVENTO RIONE LIBERTA'",
2472 | "S06867": "SIENA ZONA INDUSTRIALE",
2473 | "S08502": "SALONE",
2474 | "S06015": "TORRE DEL LAGO PUCCINI",
2475 | "S08503": "LUNGHEZZA",
2476 | "S04714": "RECCO",
2477 | "S06869": "PONTE A TRESSA",
2478 | "S05802": "PORTOMAGGIORE",
2479 | "S09805": "TORRE ANNUNZIATA CITTA'",
2480 | "S07700": "PRATOLA PELIGNA",
2481 | "S05068": "SAVIGNANO SUL RUBICONE",
2482 | "S05069": "S.ARCANGELO DI ROMAGNA",
2483 | "S05066": "CESENA",
2484 | "S05067": "GAMBETTOLA",
2485 | "N00248": "CERIANO LAGHETTO SOLARO",
2486 | "S05065": "FORLIMPOPOLI",
2487 | "S02580": "MESTRINO",
2488 | "S02581": "PADOVA",
2489 | "S02585": "PONTE DI BRENTA",
2490 | "S02586": "VIGONZA PIANIGA",
2491 | "S02587": "DOLO",
2492 | "S02588": "MIRA MIRANO",
2493 | "S06351": "NOZZANO",
2494 | "S06350": "MASSAROSA BOZZANO",
2495 | "S01901": "BAGNOLO MELLA",
2496 | "S01900": "S. ZENO FOLZANO",
2497 | "S01903": "VEROLANUOVA",
2498 | "S01902": "MANERBIO",
2499 | "S01905": "OLMENETA",
2500 | "S01904": "ROBECCO-PONTEVICO",
2501 | "S08712": "SASSONE",
2502 | "S06009": "MASSA CENTRO",
2503 | "S02058": "VERONA PARONA",
2504 | "S02059": "CASANOVA KAISERAU",
2505 | "S02052": "PERI",
2506 | "S06000": "LA SPEZIA CENTRALE",
2507 | "S06003": "LUNI",
2508 | "S02051": "BORGHETTO",
2509 | "S06005": "CARRARA AVENZA",
2510 | "S06004": "LA SPEZIA MIGLIARINA",
2511 | "S06007": "SARZANA",
2512 | "S06006": "ARCOLA",
2513 | "S01830": "BORGOLOMBARDO",
2514 | "S02830": "CASARSA",
2515 | "S02831": "CODROIPO",
2516 | "S02832": "BASILIANO",
2517 | "S07500": "VARANO",
2518 | "S03612": "KNITTEFELD",
2519 | "S05116": "PITECCIO",
2520 | "S05117": "VALDIBRANA",
2521 | "S05114": "PIAN DI VENOLA",
2522 | "S05115": "CORBEZZI",
2523 | "S05112": "MOLINO DEL PALLONE",
2524 | "S05113": "PRACCHIA",
2525 | "S05110": "PORRETTA TERME",
2526 | "S05111": "CASALECCHIO GARIBALDI",
2527 | "S05118": "SAN MOMME`",
2528 | "S05119": "BIAGIONI LAGACCI",
2529 | "S02901": "TUTTINGEN",
2530 | "S00074": "SALUSSOLA",
2531 | "S09841": "PONTE S. CONO",
2532 | "S03051": "MAJANO",
2533 | "S04331": "RIVALTA SCRIVIA",
2534 | "S03053": "CORNINO",
2535 | "S03055": "PINZANO",
2536 | "S03054": "FORGARIA BAGNI ANDUINS",
2537 | "S03057": "BOTTENICCHIO Z.I.",
2538 | "S03056": "CIVIDALE",
2539 | "S03059": "REMANZACCO",
2540 | "S03058": "MOIMACCO",
2541 | "S07021": "CAMERANO ASPIO",
2542 | "S07600": "RAIANO",
2543 | "S07601": "PRATOLA PELIGNA SUPERIORE",
2544 | "S09828": "BUCCINO S.",
2545 | "S00888": "COURGNE'",
2546 | "S09826": "CONTURSI TERME",
2547 | "S00886": "SALASSA",
2548 | "S09824": "EBOLI",
2549 | "S09825": "CAMPAGNA SERRE PERSANO",
2550 | "S00883": "FELETTO",
2551 | "S00882": "BOSCONERO",
2552 | "S00881": "S. BENIGNO",
2553 | "S12216": "AGRIGENTO CENTRALE",
2554 | "S08519": "CARSOLI",
2555 | "S08518": "ORICOLA-PERETO",
2556 | "S08511": "VICOVARO",
2557 | "S08510": "CASTEL MADAMA",
2558 | "S08512": "MANDELA-SAMBUCI",
2559 | "S08515": "ROVIANO",
2560 | "S08514": "LA RUSTICA UIR",
2561 | "S08517": "RIOFREDDO",
2562 | "S08516": "ARSOLI",
2563 | "S00951": "MAGLIANO CRAVA MOROZZO",
2564 | "S00950": "TRINITA` BENE VAGIENNA",
2565 | "S00953": "VICOFORTE SAN MICHELE",
2566 | "S00952": "MONDOVI`",
2567 | "S00954": "LESEGNO",
2568 | "S05158": "SCHIVENOGLIA",
2569 | "S00421": "LAURIANO",
2570 | "S11863": "MELITO DI PORTO SALVO",
2571 | "S00423": "CAVAGNOLO BRUSASCO",
2572 | "S09911": "LAGONEGRO",
2573 | "S00425": "COCCONATO",
2574 | "S00424": "BROZOLO",
2575 | "S00427": "CUNICO SCANDELUZZA",
2576 | "S00426": "MONTIGLIO MURISENGO",
2577 | "S00429": "CHIUSANO COSSOMBRONE",
2578 | "S00428": "MONTECHIARO D`ASTI",
2579 | "S00092": "VILLANOVA - GROSSO",
2580 | "S12853": "MADONNA DI CASTRO",
2581 | "S12852": "GOLFO ARANCI",
2582 | "S12851": "CALA SABINA",
2583 | "S00093": "MATHI",
2584 | "S12857": "MONTI TELTI",
2585 | "S12856": "ENAS",
2586 | "S12855": "OLBIA",
2587 | "S12854": "MARINELLA",
2588 | "S11867": "REGGIO DI CALABRIA PELLARO",
2589 | "S12859": "BERCHIDDA",
2590 | "S11866": "R.C.AEROPORTO",
2591 | "S08205": "CASTIGLIONE IN TEVERINA",
2592 | "S08204": "BASCHI-MONTECCHIO",
2593 | "S07512": "GROTTAMMARE",
2594 | "S08206": "ALVIANO",
2595 | "S08201": "FABRO-FICULLE",
2596 | "S08200": "CITTA` DELLA PIEVE",
2597 | "S08203": "ORVIETO",
2598 | "S08202": "ALLERONA-CASTEL VISCARDO",
2599 | "S08209": "ORTE",
2600 | "S08208": "BASSANO IN TEVERINA",
2601 | "S09762": "REVIGLIONE DI SOMMA VESUVIANA",
2602 | "S02057": "PESCANTINA",
2603 | "S11746": "NOCERA TIRINESE",
2604 | "S11747": "FALERNA",
2605 | "S11744": "AMANTEA",
2606 | "S11745": "CAMPORA S.GIOV. SERRA AIELLO",
2607 | "S11742": "LONGOBARDI",
2608 | "S11743": "BELMONTE CALABRO",
2609 | "S00175": "PALAZZOLO VERCELLESE",
2610 | "S00174": "FONTANETTO PO",
2611 | "S00179": "CASALE POPOLO",
2612 | "S00178": "BALZOLA",
2613 | "S06072": "PRATOVECCHIO",
2614 | "S11748": "GIZZERIA LIDO",
2615 | "S11749": "LAMEZIA TERME CENTRALE",
2616 | "S02006": "VIPITENO",
2617 | "S06074": "POPPI",
2618 | "S00087": "CASELLE",
2619 | "S00086": "BORGARO",
2620 | "S00085": "VENARIA",
2621 | "S00084": "RIGOLA - STADIO",
2622 | "S00083": "MADONNA DI CAMPAGNA",
2623 | "S00082": "PINEROLO OLIMPICA",
2624 | "S08701": "MARINO",
2625 | "S00089": "SAN MAURIZIO",
2626 | "S00088": "CASELLE AEROPORTO",
2627 | "S07514": "PORTO D`ASCOLI",
2628 | "S03023": "TRICESIMO - SAN PELAGIO",
2629 | "S02009": "LE CAVE",
2630 | "S03026": "UDINE",
2631 | "S08707": "PADIGLIONE",
2632 | "S09000": "SESSA AURUNCA R.",
2633 | "S09001": "FALCIANO MONDRAGONE CAR.",
2634 | "S09002": "CANCELLO ARNONE",
2635 | "S09003": "VILLA LITERNO",
2636 | "S09004": "ALBANOVA",
2637 | "S04709": "BOGLIASCO",
2638 | "S09006": "AVERSA",
2639 | "S09007": "S.ANTIMO S.ARPINO",
2640 | "S09008": "FRATTAMAGGIORE",
2641 | "S04705": "GENOVA QUINTO AL MARE",
2642 | "S04707": "GENOVA NERVI",
2643 | "S04700": "GENOVA P.PRINCIPE",
2644 | "S04701": "GENOVA P. PRINCIPE SOTTERRANEA",
2645 | "S04702": "GENOVA BRIGNOLE",
2646 | "S04703": "GENOVA STURLA",
2647 | "N00092": "LANCETTI",
2648 | "N00090": "GARIBALDI",
2649 | "N00095": "REPUBBLICA",
2650 | "N00094": "PORTA VENEZIA",
2651 | "S73110": "VRBOVEC",
2652 | "S01112": "CESANO BOSCONE",
2653 | "S01113": "LUINO",
2654 | "S01110": "PINO T.",
2655 | "S01111": "COLMEGNA",
2656 | "S01116": "PORTO VALTRAVAGLIA",
2657 | "S01117": "CALDE`",
2658 | "S01118": "LAVENO MOMBELLO",
2659 | "S11761": "RICADI",
2660 | "S01620": "PARATICO SARNICO",
2661 | "S01622": "CAPRIOLO",
2662 | "S01624": "S.DONATO MILANESE",
2663 | "S06812": "CASTELNUOVO BERARDENGA",
2664 | "S06813": "ASCIANO",
2665 | "S06810": "STAGGIA",
2666 | "S06811": "ARBIA",
2667 | "S06816": "S.GIOVANNI D`ASSO",
2668 | "S06817": "TORRENIERI",
2669 | "S06818": "MONTE AMIATA",
2670 | "S06819": "S. ANGELO CINIGIANO",
2671 | "S06802": "CASTELFIORENTINO",
2672 | "S01028": "SOMMA LOMBARDO",
2673 | "S01029": "CASORATE SEMPIONE",
2674 | "S01754": "SACCONAGO",
2675 | "S01027": "VERGIATE",
2676 | "S01025": "DORMELLETTO",
2677 | "S05071": "RIMINI",
2678 | "S01020": "ARONA",
2679 | "S01934": "CERLANO LAGHETTO",
2680 | "S01930": "BRESSANA ARGINE",
2681 | "S01931": "PINAROLO PO",
2682 | "S01932": "BARBIANELLO",
2683 | "S02598": "PIOVE DI SACCO",
2684 | "S02225": "PONTE D`ADIGE",
2685 | "S02224": "SETTEQUERCE",
2686 | "S02226": "BOLZANO SUD ",
2687 | "S05299": "PdE 2AV",
2688 | "S02592": "VENEZIA PORTO MARGHERA",
2689 | "S02223": "TERLANO-ANDRIANO",
2690 | "S02222": "VILPIANO-NALLES",
2691 | "S06925": "CHIUSI C.T.",
2692 | "S06922": "TERONTOLA CORTONA",
2693 | "S06923": "CASTIGLION DEL LAGO",
2694 | "S06920": "CASTIGLION FIORENTINO",
2695 | "S06921": "CAMUCIA CORTONA",
2696 | "S07108": "SENIGALLIA",
2697 | "S02049": "ALA",
2698 | "S02048": "SERRAVALLE",
2699 | "S03269": "SZEKESFEHERVAR",
2700 | "S02041": "CALLIANO",
2701 | "S02040": "MATTARELLO",
2702 | "S02044": "ROVERETO",
2703 | "S02046": "MORI",
2704 | "S01800": "KARLSRUHE HBF",
2705 | "S01801": "LOCATE TRIULZI",
2706 | "S01802": "VILLAMAGGIORE",
2707 | "S01803": "CERTOSA DI PAVIA",
2708 | "S01804": "CAVA MANARA",
2709 | "S01805": "BRESSANA BOTTARONE",
2710 | "S01806": "LUNGAVILLA",
2711 | "S01807": "VOGHERA",
2712 | "S01809": "PONTECURONE",
2713 | "S07101": "RICCIONE",
2714 | "S03150": "STRASSOLDO",
2715 | "S01036": "VANZAGO POGLIANO",
2716 | "S03151": "SEVEGLIANO",
2717 | "S05105": "MARZABOTTO",
2718 | "S05104": "SASSO MARCONI",
2719 | "S05107": "VERGATO",
2720 | "S05106": "PIOPPE DI SALVARO",
2721 | "S05101": "CASALECCHIO DI RENO",
2722 | "S05100": "BOLOGNA BORGO PANIGALE",
2723 | "S05103": "PONTECCHIO MARCONI",
2724 | "S05102": "CASTELDEBOLE",
2725 | "S05109": "SILLA",
2726 | "S05108": "RIOLA",
2727 | "S06100": "BORGHETTO PARMENSE",
2728 | "S06101": "NOCETO",
2729 | "S06102": "MEDESANO",
2730 | "S06103": "FELEGARA - S.ANDREA BAGNI",
2731 | "S11823": "CROTONE",
2732 | "S12440": "FALCONARA IBLEA",
2733 | "S12442": "ROVETO BIMMISCA",
2734 | "S00008": "OMEGNA CRUSINALLO",
2735 | "S12444": "MARZAMEMI",
2736 | "S12445": "PACHINO",
2737 | "S12446": "NOTO BAGNI",
2738 | "S11816": "PIETRAPAOLA",
2739 | "S08699": "PANTANELLA",
2740 | "S00006": "ORNAVASSO",
2741 | "S00003": "PIEDIMULERA",
2742 | "S00004": "PIEVE VERGONTE",
2743 | "S00604": "SAVIGLIANO",
2744 | "S12049": "ROMETTA MESSINESE",
2745 | "S12044": "S.FILIPPO-S.LUCIA",
2746 | "S12045": "PACE DEL MELA",
2747 | "S12046": "ROCCAVALDINA",
2748 | "S12047": "VENETICO",
2749 | "S12040": "TERME VIGLIATORE",
2750 | "S12041": "BARCELLONA",
2751 | "S12042": "MILAZZO",
2752 | "S11813": "ROSSANO",
2753 | "S06035": "SCARLINO",
2754 | "S06036": "GAVORRANO",
2755 | "S06037": "GIUNCARICO",
2756 | "S06030": "S. VINCENZO",
2757 | "S06031": "CAMPIGLIA MARITTIMA",
2758 | "S06032": "VIGNALE RIOTORTO",
2759 | "S06033": "FOLLONICA",
2760 | "S00000": "X",
2761 | "S06038": "MONTEPESCALI",
2762 | "S06039": "GROSSETO",
2763 | "S08524": "SCURCOLA MARSICANA",
2764 | "S08525": "CAPPELLE-MAGLIANO",
2765 | "S08526": "AVEZZANO",
2766 | "S03315": "GRIGNANO",
2767 | "S08520": "COLLI DI MONTE BOVE",
2768 | "S03313": "BIVIO D`AURISINA",
2769 | "S03310": "MONFALCONE",
2770 | "S03311": "MIRAMARE",
2771 | "S09834": "TITO",
2772 | "S06071": "PRATOVECCHIO STIA",
2773 | "S08528": "CELANO-OVINDOLI",
2774 | "S09830": "BALVANO R.",
2775 | "S09833": "PICERNO",
2776 | "S09832": "BARAGIANO",
2777 | "S03087": "AVIANO",
2778 | "S03084": "MANIAGO",
2779 | "S03085": "MONTEREALE VALCELLINA",
2780 | "S03082": "MEDUNO",
2781 | "S03083": "FANNA - CAVASSO",
2782 | "S07217": "FOLIGNO",
2783 | "S01034": "CANEGRATE",
2784 | "S01037": "RHO",
2785 | "S03088": "BUDOIA POLCENIGO",
2786 | "S03089": "SACILE SAN LIBERALE",
2787 | "S11403": "MINERVINO MURGE",
2788 | "S11402": "CANOSA DI PUGLIA",
2789 | "S11406": "CANNE DELLA BATTAGLIA",
2790 | "S09901": "PETINA",
2791 | "S09900": "GALDO",
2792 | "S09903": "POLLA",
2793 | "S09902": "AULETTA",
2794 | "S09904": "ATENA",
2795 | "S09907": "SASSANO TEGGIANO",
2796 | "S09906": "SALA CONSILINA",
2797 | "S09909": "MONTESANO BUONABITACOLO",
2798 | "S09908": "PADULA",
2799 | "S01032": "MILANO ROMOLO",
2800 | "S01923": "CASTELLUCCHIO",
2801 | "S00984": "OLEGGIO",
2802 | "S00985": "BELLINZAGO",
2803 | "S00982": "VARALLO POMBIA",
2804 | "S00983": "MARANO TICINO",
2805 | "S00980": "DORMELLETTO PAESE",
2806 | "S00981": "BORGO TICINO",
2807 | "S12363": "MOJO-ALCANTARA MALVAGNA",
2808 | "S08231": "NUOVO SALARIO",
2809 | "S08232": "ROMA NOMENTANA LM",
2810 | "S08235": "FIDENE",
2811 | "S08236": "ROMA NOMENTANA L.L.",
2812 | "S07508": "PORTO S. GIORGIO FERMO",
2813 | "S07507": "PORTO S. ELPIDIO",
2814 | "S07506": "CIVITANOVA MARCHE",
2815 | "S07505": "POTENZA PICENA MONTELUPONE",
2816 | "S07504": "PORTO RECANATI",
2817 | "S07503": "LORETO",
2818 | "S07502": "OSIMO CASTELFIDARDO",
2819 | "S01250": "THUN",
2820 | "S78500": "CERBERE",
2821 | "S12317": "TAORMINA",
2822 | "S02212": "PLAUS",
2823 | "S11754": "VIBO MARINA",
2824 | "S11757": "BRIATICO",
2825 | "S11750": "S.PIETRO A MAIDA",
2826 | "S11753": "PIZZO",
2827 | "S11752": "FRANCAVILLA ANGITOLA F.",
2828 | "S11759": "PARGHELIA",
2829 | "S11758": "ZAMBRONE",
2830 | "S00340": "MONCALVO",
2831 | "S00341": "PENANGO",
2832 | "S00342": "TONCO ALFIANO",
2833 | "S00343": "CASTELL`ALFERO",
2834 | "S00344": "PORTACOMARO",
2835 | "S00347": "ISOLA D`ASTI",
2836 | "S00348": "COSTIGLIOLE (MOTTA DI)",
2837 | "S03350": "SIOFOK",
2838 | "S00744": "SALICETO",
2839 | "S00745": "CENGIO",
2840 | "S00740": "ROCCACIGLIE`",
2841 | "S00741": "CASTELLINO TANARO",
2842 | "S00742": "CEVA",
2843 | "S00743": "SALE LANGHE",
2844 | "S11806": "ROSETO CAPO SPULICO",
2845 | "S07819": "FOSSACESIA",
2846 | "S04718": "S. MARGHERITA LIGURE PORTOFINO",
2847 | "S00010": "OMEGNA",
2848 | "S09018": "S. MARIA A VICO",
2849 | "S09017": "ARPAIA-AIROLA-S. AGATA DEI GOTI",
2850 | "S09016": "ROTONDI-PAOLISI",
2851 | "S09015": "CERVINARA",
2852 | "S04710": "PONTETTO",
2853 | "S09013": "TUFARA VALLE",
2854 | "S04716": "CAMOGLI SAN FRUTTUOSO",
2855 | "S09011": "BENEVENTO APPIA",
2856 | "S09010": "NAPOLI SCALO MERCI",
2857 | "S06079": "S. MAMA",
2858 | "S00011": "PETTENASCO",
2859 | "S00618": "VIEVOLA",
2860 | "S12002": "PALERMO CENTRALE",
2861 | "S01101": "ASSO",
2862 | "S01103": "VALLORBE",
2863 | "S01104": "PIEVE EMANUELE",
2864 | "S03303": "NOVA GORICA",
2865 | "S12006": "VILLABATE",
2866 | "S01143": "TERNATE VARANO BORGHI",
2867 | "S07226": "TERNI",
2868 | "S01321": "LISSONE-MUGGIO`",
2869 | "S01320": "DESIO",
2870 | "S01322": "MONZA",
2871 | "S01325": "SESTO S. GIOVANNI",
2872 | "S07556": "MARINO DEL TRONTO FOLIGNANO",
2873 | "S01326": "MILANO GRECO PIRELLI",
2874 | "S06801": "GRANAIOLO",
2875 | "S06803": "CERTALDO",
2876 | "S05159": "MAGNACAVALLO",
2877 | "S06805": "POGGIBONSI",
2878 | "S06804": "CAMBIANO",
2879 | "S06807": "PONTE A ELSA",
2880 | "S06806": "BARBERINO VAL D`ELSA",
2881 | "S06809": "SIENA",
2882 | "S06808": "CASTELLINA CH",
2883 | "S01142": "TRAVEDONA BIANDRONNO",
2884 | "S07551": "OFFIDA CASTEL DI LAMA",
2885 | "S07552": "SPINETOLI COLLI",
2886 | "S07221": "SPOLETO",
2887 | "S05048": "Biv. Venezia",
2888 | "S01039": "RHO FIERA MILANO",
2889 | "S01035": "PARABIAGO",
2890 | "S05041": "LAVINO",
2891 | "S05042": "BOLOGNA RAVONE",
2892 | "S05043": "BOLOGNA C.LE",
2893 | "S01031": "BUSTO ARSIZIO",
2894 | "S01030": "GALLARATE",
2895 | "S01033": "LEGNANO",
2896 | "S01632": "MILANO PORTA ROMANA",
2897 | "S02218": "GARGAZZONE ",
2898 | "S02219": "LANA-POSTAL ",
2899 | "S01921": "MARCARIA",
2900 | "S01920": "BOZZOLO",
2901 | "S01927": "GROANE",
2902 | "S01926": "BARLASSINA",
2903 | "S01925": "SEVESO",
2904 | "S01924": "S.MICHELE IN BOSCO",
2905 | "S02210": "SENALES",
2906 | "S02211": "NATURNO",
2907 | "S01929": "BARRUCCANA",
2908 | "S02213": "TEL",
2909 | "S02214": "MARLENGO",
2910 | "S02215": "MELZO SCALO",
2911 | "S02216": "MERANO",
2912 | "S02217": "MERANO MAIA BASSA",
2913 | "S04735": "MANAROLA",
2914 | "S07229": "NERA MONTORO",
2915 | "S09030": "S. ANGELO IN FOR.",
2916 | "S09798": "ACQUAMELA",
2917 | "S09799": "SALERNO IRNO",
2918 | "S06705": "SCOPETI",
2919 | "S01633": "MILANO PORTA VITTORIA",
2920 | "S08820": "COLFELICE",
2921 | "S01631": "MI.P.GENOVA",
2922 | "S01630": "MILANO S. CRISTOFORO",
2923 | "S02105": "CASTELDARNE ",
2924 | "S02107": "BRUNICO ",
2925 | "S02100": "KOELN HBF",
2926 | "S00922": "PIEVETTA",
2927 | "S01639": "MILANO VILLAPIZZONE",
2928 | "S02103": "VANDOIES"
2929 | }
2930 |
--------------------------------------------------------------------------------
/demo-dumpstations.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | from __future__ import print_function
5 |
6 | import sys
7 | import datetime
8 | import os
9 | import json
10 | import string
11 | import csv
12 | from operator import itemgetter
13 | from TrainMonitor import viaggiatreno
14 |
15 | region_codes = {
16 | 1: "Lombardia",
17 | 2: "Liguria",
18 | 3: "Piemonte",
19 | 4: "Valle d'Aosta",
20 | 5: "Lazio",
21 | 6: "Umbria",
22 | 7: "Molise",
23 | 8: "Emilia Romagna",
24 | 10: "Friuli-Venezia Giulia",
25 | 11: "Marche",
26 | 12: "Veneto",
27 | 13: "Toscana",
28 | 14: "Sicilia",
29 | 15: "Basilicata",
30 | 16: "Puglia",
31 | 17: "Calabria",
32 | 18: "Campania",
33 | 19: "Abruzzo",
34 | 20: "Sardegna",
35 | 22: "Trentino Alto Adige"
36 | }
37 |
38 | destdir = os.path.join('data', 'stations-dump')
39 | if not os.path.exists(destdir):
40 | os.makedirs(destdir)
41 |
42 | as_csv = []
43 | as_geojson = {
44 | 'type': 'FeatureCollection',
45 | 'features': []
46 | }
47 |
48 | api = viaggiatreno.API()
49 | sortkey = itemgetter(0)
50 |
51 | num_stations = 0
52 | for letter in string.ascii_uppercase:
53 | #Get all stations which name starts with 'letter'
54 | stations = api.call('autocompletaStazione', letter)
55 | num_stations += len(stations)
56 | print(letter, len(stations), num_stations)
57 | for s in sorted(stations, key=sortkey):
58 | station_name, station_id = s
59 | station = {
60 | 'name': station_name,
61 | 'id': station_id,
62 | 'region': 'N/A',
63 | 'region_code': 'N/A',
64 | 'lat': 'N/A',
65 | 'lon': 'N/A',
66 | 'city': 'N/A'
67 | }
68 |
69 | #Get region code, needed to obtain station details
70 | reg_code = api.call('regione', station_id)
71 | if reg_code is not None:
72 | station['region_code'] = int(reg_code)
73 | station['region'] = region_codes.get(int(reg_code), 'N/A')
74 | #Get station details
75 | details = api.call('dettaglioStazione', station_id, reg_code)
76 | if details is not None:
77 | station['city'] = details['nomeCitta']
78 | station['lat'] = details['lat']
79 | station['lon'] = details['lon']
80 |
81 | as_geojson['features'].append ({
82 | 'type': 'Feature',
83 | 'properties': {
84 | 'name': station['name'],
85 | 'id': station['id'],
86 | 'region_code': station['region_code'],
87 | 'region': station['region'],
88 | 'city': station['city']
89 | },
90 | 'geometry': {
91 | 'type': 'Point',
92 | 'coordinates': [details['lon'], details['lat']]
93 | }
94 | })
95 |
96 | as_csv.append(station)
97 |
98 | with open(os.path.join(destdir, 'stations.geojson'), 'w') as fp:
99 | json.dump(as_geojson, fp)
100 |
101 | with open(os.path.join(destdir, 'stations.csv'), 'w') as fp:
102 | csv_fields = itemgetter('name', 'id', 'region', 'region_code', 'city', 'lat', 'lon')
103 | wr = csv.writer(fp, delimiter=',', lineterminator='\n')
104 | wr.writerow(('name', 'id', 'region', 'region_code', 'city', 'lat', 'lon'))
105 | for row in as_csv:
106 | wr.writerow(csv_fields(row))
107 |
108 |
--------------------------------------------------------------------------------
/demo-trainstatus.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | from __future__ import print_function
5 |
6 | import sys
7 | import datetime
8 | from TrainMonitor import viaggiatreno
9 |
10 | def is_valid_timestamp(ts):
11 | return (ts is not None) and (ts > 0) and (ts < 2147483648000)
12 |
13 | def format_timestamp(ts, fmt='%H:%M:%S'):
14 | if is_valid_timestamp(ts):
15 | return datetime.datetime.fromtimestamp(ts/1000).strftime(fmt)
16 | else:
17 | return 'N/A'
18 |
19 | if __name__ == '__main__':
20 | if len(sys.argv) < 2:
21 | import os
22 | print ("Usage: " + os.path.basename(__file__) + " ")
23 | sys.exit()
24 |
25 | trainNumber = int(sys.argv[1])
26 | api = viaggiatreno.API()
27 |
28 | # "cercaNumeroTrenoTrenoAutocomplete is the viaggiatreno API call that returns the starting station
29 | # for the train number specified as its argument.
30 | # Unfortunately that could return more than one station.
31 | departures = api.call('cercaNumeroTrenoTrenoAutocomplete', trainNumber)
32 |
33 | if len(departures) == 0:
34 | print ("Train {0} does not exists.".format(trainNumber))
35 | sys.exit()
36 |
37 | # TODO: handle not unique train numbers, when len(departures) > 1
38 |
39 | # each result has two elements, the name of the station [0] and its ID [1].
40 | # we only care about the first result here (TODO)
41 | # Therefore, departures[0][1] is the station ID element #1 of the first result [0].
42 | departure_ID = departures[0][1]
43 | midnight_of_today = departures[0][2]
44 | # This fetches the status for that train number from that departure_ID we just fetched.
45 | # It is required by viaggiatreno.it APIs.
46 | # train_status also includes the whole list of stops for that train (used a few lines later on).
47 | train_status = api.call('andamentoTreno', departure_ID, trainNumber, midnight_of_today)
48 |
49 | # in these cases, the train has been cancelled.
50 | if train_status['tipoTreno'] == 'ST' or train_status['provvedimento'] == 1:
51 | print ("Train {0} cancelled".format(trainNumber))
52 |
53 | # otherwise, it is checked whether the train is running or if it's not yet.
54 | elif train_status['oraUltimoRilevamento'] is None:
55 | print ("Train {0} has not yet departed".format(trainNumber))
56 | print ("Scheduled departure {0} from {1}".format(
57 | format_timestamp (train_status['orarioPartenza']),
58 | train_status['origine']
59 | ))
60 |
61 | # finally, if the train is up and running
62 | else:
63 | if train_status['tipoTreno'] in ('PP', 'SI', 'SF'):
64 | print ("Train partially cancelled: ", train_status['subTitle'])
65 |
66 | print ('Last tracking in {0} at {1}'.format(
67 | train_status['stazioneUltimoRilevamento'],
68 | format_timestamp(train_status['oraUltimoRilevamento'])
69 | ))
70 |
71 | # each stop is processed and outputted on the console with the relevant informations.
72 | for f in train_status['fermate']:
73 | station = f['stazione']
74 | scheduled = format_timestamp(f['programmata'])
75 | if f['tipoFermata'] == 'P':
76 | actual = format_timestamp(f['partenzaReale'])
77 | delay = f['ritardoPartenza']
78 | descr = 'Departure'
79 | else:
80 | actual = format_timestamp(f['arrivoReale'])
81 | delay = f['ritardoArrivo']
82 | descr = 'Arrival'
83 |
84 | # the output line is formatted according to the available data:
85 | if f['actualFermataType'] == 3:
86 | station_output = '{:40} cancelled'.format(station)
87 | elif f['actualFermataType'] == 0:
88 | station_output = '{:40} data not available'.format(station)
89 | else:
90 | station_output = '{:40} {}: {} (scheduled {} - delay: {})'.format(station, descr, actual, scheduled, delay)
91 |
92 | # there we go
93 | print (station_output)
94 |
95 |
--------------------------------------------------------------------------------
/run_tests.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # -*- coding: utf-8 -*-
3 |
4 | import unittest
5 | import test.all_tests
6 |
7 | testSuite = test.all_tests.create_test_suite()
8 | text_runner = unittest.TextTestRunner().run(testSuite)
9 |
--------------------------------------------------------------------------------
/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/roughconsensusandrunningcode/TrainMonitor/6d46652d939ee16958a8d1b1548b74c85f8171a2/test/__init__.py
--------------------------------------------------------------------------------
/test/all_tests.py:
--------------------------------------------------------------------------------
1 | import glob
2 | import unittest
3 |
4 | def create_test_suite():
5 | test_file_strings = glob.glob('test/test_*.py')
6 | module_strings = ['test.'+str[5:len(str)-3] for str in test_file_strings]
7 | suites = [unittest.defaultTestLoader.loadTestsFromName(name) for name in module_strings]
8 | testSuite = unittest.TestSuite(suites)
9 | return testSuite
10 |
--------------------------------------------------------------------------------
/test/test_dateutils.py:
--------------------------------------------------------------------------------
1 | import unittest
2 | import datetime
3 | from TrainMonitor import dateutils
4 |
5 | class TestDateutils(unittest.TestCase):
6 | def test_easter(self):
7 | easter = {
8 | 2010: datetime.date(2010, 4, 4),
9 | 2011: datetime.date(2011, 4, 24),
10 | 2012: datetime.date(2012, 4, 8),
11 | 2013: datetime.date(2013, 3, 31),
12 | 2014: datetime.date(2014, 4, 20),
13 | 2015: datetime.date(2015, 4, 5),
14 | 2016: datetime.date(2016, 3, 27),
15 | 2017: datetime.date(2017, 4, 16),
16 | 2018: datetime.date(2018, 4, 1),
17 | 2019: datetime.date(2019, 4, 21),
18 | 2020: datetime.date(2020, 4, 12)
19 | }
20 | for year in easter:
21 | self.assertEqual(easter[year], dateutils.easter(year))
22 |
23 | def test_is_holiday(self):
24 | italian_holidays_2015 = (
25 | datetime.date(2015, 1, 1),
26 | datetime.date(2015, 1, 6),
27 | datetime.date(2015, 4, 25),
28 | datetime.date(2015, 5, 1),
29 | datetime.date(2015, 6, 2),
30 | datetime.date(2015, 8, 15),
31 | datetime.date(2015, 11, 1),
32 | datetime.date(2015, 12, 8),
33 | datetime.date(2015, 12, 25),
34 | datetime.date(2015, 12, 26),
35 | datetime.date(2015, 4, 5),
36 | datetime.date(2015, 4, 6)
37 | )
38 |
39 | date = datetime.date(2015, 1, 1)
40 | oneday = datetime.timedelta(1)
41 | while date.year == 2015:
42 | self.assertEqual(dateutils.is_holiday(date), date in italian_holidays_2015, date.isoformat())
43 | date += oneday
44 |
45 | def test_is_weekend(self):
46 | testdates = {
47 | datetime.date(2015, 4, 1): False, #Wed
48 | datetime.date(2015, 4, 2): False, #Thu
49 | datetime.date(2015, 4, 3): False, #Fri
50 | datetime.date(2015, 4, 4): True, #Sat
51 | datetime.date(2015, 4, 5): True, #Sun
52 | datetime.date(2015, 4, 6): False, #Mon
53 | datetime.date(2015, 4, 7): False, #Tue
54 | datetime.date(2015, 4, 8): False, #Wed
55 | datetime.date(2015, 4, 9): False, #Thu
56 | datetime.date(2015, 4, 10): False, #Fri
57 | datetime.date(2015, 4, 11): True, #Sat
58 | datetime.date(2015, 4, 12): True, #Sun
59 | }
60 |
61 | for date in testdates:
62 | self.assertEqual (testdates[date], dateutils.is_weekend(date))
63 |
64 | def __test_iter_month (self, year, month, monthdays):
65 | l = list(dateutils.iter_month(year, month))
66 | n = len(l)
67 | self.assertEqual(n, monthdays)
68 | days = [d.day for d in l]
69 | self.assertEqual(days, list(range(1, n+1)))
70 |
71 | def test_iter_month(self):
72 | self.__test_iter_month(2015, 1, 31)
73 | self.__test_iter_month(2015, 2, 28)
74 | self.__test_iter_month(2015, 3, 31)
75 | self.__test_iter_month(2015, 4, 30)
76 | self.__test_iter_month(2012, 2, 29)
77 |
78 | if __name__ == '__main__':
79 | unittest.main()
80 |
--------------------------------------------------------------------------------
/test/test_viaggiatreno.py:
--------------------------------------------------------------------------------
1 | import unittest
2 | from TrainMonitor import viaggiatreno
3 | import datetime
4 |
5 | class TestViaggiatrenoUtils(unittest.TestCase):
6 | def test_station_ids(self):
7 | self.assertEqual(viaggiatreno.Utils.exists_station_ID('X00000'), False)
8 | self.assertEqual(viaggiatreno.Utils.exists_station_ID('S00219'), True)
9 |
10 | self.assertEqual(viaggiatreno.Utils.station_from_ID('S00219'), 'TORINO P.NUOVA')
11 | self.assertEqual(viaggiatreno.Utils.station_from_ID('X00000'), 'UNKNOWN')
12 |
13 | def test_train_runs_on_date_suspended(self):
14 | train_info = {'runs_on': 'G', 'suspended': [('2015-08-09', '2015-08-12')]}
15 | testdates = {
16 | datetime.date(2015, 8, 7): True,
17 | datetime.date(2015, 8, 8): True,
18 | datetime.date(2015, 8, 9): False,
19 | datetime.date(2015, 8, 10): False,
20 | datetime.date(2015, 8, 11): False,
21 | datetime.date(2015, 8, 12): False,
22 | datetime.date(2015, 8, 13): True,
23 | datetime.date(2015, 8, 14): True,
24 | }
25 | for date in testdates:
26 | result = viaggiatreno.Utils.train_runs_on_date(train_info, date)
27 | self.assertEqual(result, testdates[date], date)
28 |
29 | def test_train_runs_on_date(self):
30 | italian_holidays_2015 = (
31 | datetime.date(2015, 1, 1),
32 | datetime.date(2015, 1, 6),
33 | datetime.date(2015, 4, 25),
34 | datetime.date(2015, 5, 1),
35 | datetime.date(2015, 6, 2),
36 | datetime.date(2015, 8, 15),
37 | datetime.date(2015, 11, 1),
38 | datetime.date(2015, 12, 8),
39 | datetime.date(2015, 12, 25),
40 | datetime.date(2015, 12, 26),
41 | datetime.date(2015, 4, 5),
42 | datetime.date(2015, 4, 6)
43 | )
44 | workdays = (
45 | datetime.date(2015, 4, 1), #Wed
46 | datetime.date(2015, 4, 2), #Thu
47 | datetime.date(2015, 4, 3), #Fri
48 | datetime.date(2015, 4, 7), #Tue
49 | datetime.date(2015, 4, 8), #Wed
50 | datetime.date(2015, 4, 9), #Thu
51 | datetime.date(2015, 4, 10), #Fri
52 | datetime.date(2015, 4, 13) #Mon
53 | )
54 | saturdays = (
55 | datetime.date(2015, 2, 28),
56 | datetime.date(2015, 4, 11),
57 | datetime.date(2015, 4, 18)
58 | )
59 | sundays = (
60 | datetime.date(2015, 3, 1),
61 | datetime.date(2015, 4, 12),
62 | datetime.date(2015, 4, 19)
63 | )
64 |
65 | testcases = {}
66 | # G Runs every day
67 | # FER5 Runs only Monday to Friday (holidays excluded)
68 | # FER6 Runs only Monday to Saturday (holidays excluded)
69 | # FEST Runs only on Sunday and holidays
70 | for date in italian_holidays_2015:
71 | testcases[(date, 'G')] = True
72 | testcases[(date, 'FER6')] = False
73 | testcases[(date, 'FER5')] = False
74 | testcases[(date, 'FEST')] = True
75 | for date in workdays:
76 | testcases[(date, 'G')] = True
77 | testcases[(date, 'FER6')] = True
78 | testcases[(date, 'FER5')] = True
79 | testcases[(date, 'FEST')] = False
80 | for date in saturdays:
81 | testcases[(date, 'G')] = True
82 | testcases[(date, 'FER6')] = True
83 | testcases[(date, 'FER5')] = False
84 | testcases[(date, 'FEST')] = False
85 | for date in sundays:
86 | testcases[(date, 'G')] = True
87 | testcases[(date, 'FER6')] = False
88 | testcases[(date, 'FER5')] = False
89 | testcases[(date, 'FEST')] = True
90 |
91 | for date, runs_on in testcases:
92 | train_info = {'runs_on': runs_on}
93 | result = viaggiatreno.Utils.train_runs_on_date(train_info, date)
94 | self.assertEqual(result, testcases[(date, runs_on)], '{0} {1}'.format(date, runs_on))
95 |
96 | class TestViaggiatrenoAPI(unittest.TestCase):
97 | def setUp(self):
98 | self.api = viaggiatreno.API()
99 |
100 | def test_region(self):
101 | api = viaggiatreno.API()
102 | reg_code = self.api.call('regione', 'S00219')
103 | self.assertEqual(reg_code, 3)
104 |
105 | if __name__ == '__main__':
106 | unittest.main()
107 |
--------------------------------------------------------------------------------