├── .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 | --------------------------------------------------------------------------------