pax_global_header00006660000000000000000000000064121774100460014514gustar00rootroot0000000000000052 comment=b3a7530d6b81607d460191f39293b42d45de2daf weboob-0.g/000077500000000000000000000000001217741004600127175ustar00rootroot00000000000000weboob-0.g/.gitignore000066400000000000000000000001601217741004600147040ustar00rootroot00000000000000*_ui.py *.pyc *.swp Session.vim build dist *.egg-info *~ tags docs/source/api modules/modules.list /localconfig weboob-0.g/.mailmap000066400000000000000000000014161217741004600143420ustar00rootroot00000000000000Romain Bignon Romain Bignon Juke Juke Julien Hebert Clément Schreiner Noé Rubinstein Johann Broudin Florent Fourcot Florent Florent Fourcot Florent Fourcot Florent Fourcot ffourcot Nicolas Duhamel Gabriel Kerneis weboob-0.g/AUTHORS000066400000000000000000000126531217741004600137760ustar00rootroot00000000000000Weboob is a free software written by: Romain Bignon * Core team; * Qt Applications; * Maintainer of too many modules. Laurent Bachelier * Core team; * Pastealacon, PasteBin, PayPal and RadioFrance modules maintainer. Florent Fourcot * Release manager; * Champslibres, Freemobile, ING, LeclercMobile, Presseurop, Sachsen, Nettokom, dresdenwetter and Taz modules maintainer; * BNPorc patches. Julien Hebert * Developer of masstransit; * Ecrans, Inrocks, LeFigaro, Minutes20 and Transilien modules maintainer. Noe Rubinstein * Bototo, Eatmanga, MangaFox, MangaHere, MangaReader, Mangatoshokan and Simplyreadit modules maintainer. Julien Veyssier * Suboob, Cineoob, QCineoob and Booblyrics developer * CreditMutuel, Geolocip, Ipinfodb, IsoHunt, Kickass, Piratebay, Attilasub, Opensubtitles, Tvsubtitle, Btmon, Imdb, Seeklyrics, Parolesmusique and Parolesmania modules maintainer. Christophe Benz * Bouygues, INA, SFR and Youtube modules maintainer. Roger Philibert * Ehentai, Izneo, OKC and Youjizz modules maintainer. Nicolas Duhamel * BP, CanalPlus and Orange modules maintainer. Clément Schreiner * MediaWiki and Newsfeed modules maintainer. François Revol * Europarl, GDCVault and Vimeo modules maintainer. * Canaplus and qvideoob fixes Benjamin Carton * vlille, grooveshark, adecco, apec, lolix and popolemploi modules maintainer. * handjoob application. Pierre Mazière * LCL module maintainer; * BNPorc fixes. Xavier Guerrin * Author of the CrAgr module. Gabriel Kerneis * Boursorama module maintainer. Kevin Pouget * CreditCooperatif module maintainer. Gilles Quenot * Fortuneo module maintainer. Mathieu Jourdan * GdfSuez module maintainer. Benjamin Drieu * TricTracTV module maintainer. Jeremy Monnet * Opacwebaloes module maintainer. Lord * CappedTV module maintainer. Lucien Loiseau * GoogleTranslate module maintainer. Christophe Lampin * HelloBank, ameli and amelipro modules maintainer. * Patchs on cragr and freemobile Sébastien Monel * QHandJoob application. Arno Renevier * Weather module maintainer. Jocelyn Jaubert * SocieteGenerale module maintainer. Johann Broudin * CMB module maintainer. Cedric Defortis * MeteoFrance module maintainer. François D. * ArretsurImages module maintainer. Gabriel Serme * Support of two-factor authentication for Boursorama. Erwan Jahier * Patches on BP. theo * Ergonomics enhancements. Willy Villard * Patches on modules. Alexandre Flament * Script contrib/downloadboob. BohwaZ * Script contrib/report_accounts.sh. Grmbl Frechneu * Anonymizer script. Jérôme Poisson * Patches on webcontentedit. Laurent Dufréchou * Windows support. Fabien Grumelard * Fixes in FranceTelevision. leto * AuM anti-spam updates. Vincent Paredes * Changes in Repl. Richard Genoud * Fixes on CrArg. Jean-Christophe Dubacq * Fix on FreeMobile. Lucas Nussbaum * Fix on Credit Mutuel. Camille Baldock * Fixes on BP. Alexandre Franke * Contribution to boobank. Olivier Schwander * Fix XDG support. Luc Didry * Fixes on LCL. Stefano Zacchiroli * Patch on the build system. Adrien Kunysz * Fixes on setup.py. Michael Scherer * Contribution on weboob-config. Damien Cassou * Minor fixes on housing modules. ianux * Patches on videoob. Laurent George * Fixes on AuM. Romain Garbage * Fixes for FreeBSD. Philippe Fremy * Fixes for Windows. Antoine * QVideoob fixes. David Jeanneteau * Fix on ING and icon of ING Juliette Stehlé * Enable LDD and PEL accounts on Boursorama Discover how to contribute to this great software: http://weboob.org/How_to_contribute weboob-0.g/COPYING000066400000000000000000001033301217741004600137520ustar00rootroot00000000000000 GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . weboob-0.g/ChangeLog000066400000000000000000001700051217741004600144740ustar00rootroot00000000000000Weboob 0.g (2013-08-03) General * New application: handjoob * New application: parceloob * New application: qhandjoob * New capabilitie: CapJob * New capabilitie: CapParcel * New module: Citélis (CapBank) * New module: Banque Delubac (CapBank) * New module: Hello Bank! (CapBank) (#1276) * New module: Ameli (CapBill) * New module: AmeliPro (CapBill) * New module: GDF SUEZ DolceVita (CapBill) * New module: V'Lille (CapGauge) * New module: Adecco (CapJob) * New module: Apec (CapJob) * New module: Lolix (CapJob) * New module: Pôle Emploi (CapJob) * New module: Paroles.net (CapLyrics) * New module: Chronopost (CapParcel) * New module: UPS (CapParcel) * New module: Allrecipes (CapRecipe) * New module: Supertoinette (CapRecipe) * New module: podnapisi (CapSubtitle) * New module: Arrêt sur Images (CapVideo) * New module: Grooveshark (CapVideo) * New tool: stale_pyc.py * New tool: certhash.py Core * Change '_backend' setting to '_module' (#789) * Remove all compatibily glue for python 2.5 (#806) * Remove some from __future__, forbid 2.5 in setup * Do not crash when repository is invalid (#1281) * Explicit module load errors * Fix: import Pillow in core * Fix: create containing directory of backend configuration * Fix: better English sentence when Weboob refuses to start * Fix: crash if backend name contains unicode chars Core: applications * Display a message when more results are available (#1038) * Default behavior is now to unlimit results, except for explicit commands (searches or history) (#1139) * Remove useless calls to ReplApplication.flush() (#812) * Add colors in console applications * console: display collections before objects with ls command * console: fix error if there are private attributes on backend * console: better handling of "tiny" choices, allow forcing * console: Automatically create a storage if STORAGE class attribute is not empty * repl: add a new caps parameter to get_object * repl: get_object supports backend's services returning lists * repl: Invoking 'help' command from shell display only list of commands * Fix: printing of DictObj Core: browser * Add a cache for DNS requests * Implicitly convert unicode objects to str for form values Core: capabilities * Move Currency from CapBank to CapBase * Fix: problem with strftime on date.year<1900 CapBase * add method to convert currency value to text CapBank * do not crash if date in label regexp isn't valid * add Investment object and iter_investment method * add Transaction.unique_id * more help for date fields * introduce vdate * FrenchTransaction.parse takes a new optional argument 'vdate' CapBill * add attributes to Bill (#1202) * add new attributes to Detail (#1203) CapBook * remove unused parameter 'pattern' in iter_books CapGauge * add address field to GaugeSensor CapMessage * default type of threads is IS_THREADS CapRecipe * handle interval number of persons * fix comparison to None CapSubtitle * add 'ext' attribut (extension of file) CapWeather * always call base constructor of CapBaseObject to prevent shared fields Core: documentation * Fix typo and wordwrap in INSTALL * Add manpages for new applications Core: tools * Do not try to fill None * All string values are Unicode * Allow overriding delay and tries in decorated function arguments * Add parse_french_date in weboob.tools.date Application: boobank * In interactive mode, 'transfer' commands asks confirmation (#1077) * Add parameter END_DATE to 'history' and 'coming' commands (#1150) * Add investment command * Avoid blank lines between entries in (pretty_)qif formatting * Better error messages * Prevent encoding issues in __repr__ of Transactions * Fix: do not flush twice Application: booblyrics * Fix: search command needs 2 arguments Application: boobmsg * Fix: display of messages list in non interactive mode Application: cineoob * Add caps parameter to get_object (#1280) * Filmographies and castings restricted to movie/person backend * Add language abbreviations in subtitle search help * Small bug fixes Application: comparoob * Add missing docstrings to commands Application: cookboob * Handle interval number of persons * Better nb_person interval display * Check if preparation time is available * Strip newlines from descriptions in search results Application: flatboob * Add command help * Do not use limit for cities search Application: qcineoob * Check if short description is available * Encode filename when download * Add tabs navigation * ctrl+l to get focus on search edit * Do not go on middle click opened tab * Remove useless print Application: qcookboob * Handle interval number of persons * Better nb_person interval display Application: qvideoob * Use fillobj instead of get_video to complete all fields Application: suboob * Rename command 'getfile' to 'download' * Save subtitles in a better file name (#1278) * Print filename where subtitle is saved (#1279) * Add language abbreviations in subtitle search help * Do not show URL if empty Application: webcontentedit * Use NamedTemporaryFile(delete=False) instead of mkstemp Application: weboobcfg * Remove 'backends' command from help * Fix: do not crash if a module cannot be loaded Application: weboorrents * Catch empty seeders and leechers Application: wetboobs * Fix: gauges command parsing Module: 750g * Strip accents in search URL * Fix: comments and accents striping Module: allocine * Fix: gender detection Module: americanexpress * Fix: parsing of coming value * Fix: parsing of April month Module: aum * Support new fields * Logging to see profile (because of craps) * Unescape description of profiles * Disable warning when unable to get public profile from website * Fix: encoding errors * Fix: typo on 'style' field Module: arte * Add support of ArteLive * Fix: parsing on German and English pages * Fix: id is now prefixed with "--" * Fix: prevent module from catching all URLs Module: attilasub * Add attribute 'ext' Module: axabanque * Detect when there is no operations Module: banquepopulaire * Support new authentication on some regions * Sort entries by value date * Add new URL for homepage * Store vdate * Fix: go on professional accounts list page Module: bnporc * Add support of personal accounts on professional website * Add enterprise website support * Support when sometimes 'coming' value is '-' * Prevent navigation conflicts during accounts iteration * Add regexp for payback of card transactions Module: bp * Fix: support new authentication Module: boursorama * Add two factor authentication for boursorama module * Add history for saving accounts * Add PEL support * Fix: parsing on new website * Fix: new certificat * Fix: support new website Module: bred * Supports new page which asks for a code from a card * Fix: login on accounts with several subaccounts * Fix: new certificat Module: caissedepargne * Support professional website * Add support of deferred debit cards * Be more robust on logout * Clear cookies during login * Fix: detection on login failed * Fix: navigation * Fix: avoid crashes if some useless fields are missing in global form * Fix: support new version of website * Fix: import of ControlNotFound on old versions of mechanize * Fix: navigation in card accounts history Module: cmb * Use new-style classes (coding style) Module: cic * Supports new page which asks for a code from a card Module: cragr * Add support for credit cards * Ignore accounts without balance * Add new regions * Support special login URLs on some regions * Use new-style classes (coding style) * Support account where name contains the owner * Do not raise BrowserIncorrectPassword when the website displays an useless "urgent message" on login * Better detection of useful label * Fix: use web site instead of mobile website for ca-centrest, and probably others (#1035) * Fix: an account owner name can start with Mle Module: creditcooperatif * Support coming transactions on pro accounts Module: creditdunord * Fix: navigation in history calls * Fix: attach cards to the good account * Fix: encoding error to get history for accounts with special chars in name * Fix: navigation for deferred cards * Fix: crash if the date of a transaction is empty Module: creditmutuel * Fix: listing of recipients in transfer Module: cuisineaz * Temporary fix of person number range * Fix: comments and accents striping Module: dailymotion * Fix: parsing of authors Module: dlfp * Be compliant with the dlfp 1st april joke * Fix: get new threads even if there is no comment Module: dresdenwetter * Add tests * Fix: no more snow sensor Module: freemobile * Add some tests * Fix: history when internationals calls option is not subscribed (#1078) * Fix: new certificat * Fix: conversion warnings * Fix: new bill listing * Fix: bad method name in tests Module: ganassurances * Enable support to Groupama Banque (#1112) Module: gdcvault * Only logout when actually logged in Module: hsbc * Support international accounts * Add a retry if login fail * Add missing file (login.py) * Fix: update module to support last website update * Fix: new certificate Module: imdb * Replace latin2unicode by HTMLParser Module: ing * Add support of investments * Add type of accounts * Raise NotImplementedError if account type not supported * Add some tests * Fix: conversion warnings * Fix: history of accounts * Fix: new certificat * Fix: transfer Module: kickass * Use https * Fix: new URL Module: lcl * Add enterprise site * Fix: detection of bad passwords * Fix: support new auth system * Fix: do not need to logout if the browser hasn't been used Module: leclercmobile * Add real tests * Fix: history parsing * Fix: details parsing * Fix: compatibility with calibre 0.9 Module: marmiton * Fix: comments and accents striping Module: opensubtitles * Add attribute 'ext' Module: orange * Fix SMS sending (#1206) Module: ouifm * Fix: json describing current songs and artists changed Module: paypal * Fix: ignore extra-lines in accounts list * Fix: new certificate Module: piratebay * New URL * Support proxies Module: presseurop * Get newspaper source * Fix: body parsing * Fix: better check for daily links Module: redmine * Fix: missing id class on older versions Module: sachsen * Fix: string conversion * Fix: tests do not work with new CapGauge API Module: seeklyrics * Fix: parsing in some cases Module: societegenerale * Add entreprise support * Do not consider expired cards * support 'OPPOSITION' state for cards * Fix: conflicts in detection of balance * Fix: new hashes for login * Fix: new certificat Module: tvsubtitles * Add attribute 'ext' Module: youtube * Support for a silly protection (#1277) * Detect if video is forbidden * Use https * Change maintainer * Fix: encoding of pages * Fix: stop search queries if there is no more results * Fix: parsing details * Fix: crash with weird characters * Fix: credentials encoding Module: vimeo * Get authors Module: weather * Add a favicon Tools * boilerplate.py: fix encoding issues * boilerplate.py: add default license * pyflakes.sh: more code quality checks * pyflakes.sh: use only tracked Python files * pyflakes.sh: add lines number * pyflakes.sh: ban more stuff * local_install.py: no deps by default on local install * local_run.py: do not copy the backends file * local_run.py: do not capture stderr * local_run.py and run_tests.sh: remove stale .pyc files * local_run.py: allow complete paths for script * local_run.py: allow overriding WEBOOB_BACKENDS * weboob_bash_completion: fix bash completion Contrib: boobot * Support python-irclib >= 3 * Proper freenode server name * Irc 5.0+ compatibility * Display regular URL info * Support multiple channel * Fix weird/unicode URLs * Guess page encoding * Better newline handling * Support servers without HEAD * Faster timeout * Twitter support * Configuration of boobot storage path * Better handling of zero/invalid HTML * Proper ^C closing * Support ignored users Contrib: freemobile-munin * Fix SMS regexp Contrib: generic-munin * Allow float values * Do not start every graph to 0 * Use rigid Packaging * Add --nodeps option to ignore dependencies in setup.py * Rename Makefile -> build.mk to avoid spurious build attempts * Use Pillow, unless PIL is already there * Better README/INSTALL files * Workaround Debian compatibily layer Weboob 0.f (2013-03-26) General * New application: booblyrics * New application: cineoob * New application: cookboob * New application: suboob * New application: qcineoob * New application: qcookboob * New capabilitie: CapSubtitles * New capabilitie: CapCinema * New capabilitie: CapLyrics * New capabilitie: CapRecipe * New module: American Express (CapBank) * New module: Paypal (CapBank) * New module: Crédit du Nord (CapBank) * New module: Allocine (CapCinema) * New module: IMBD (CapCinema) * New module: Parole De Musique (CapLyrics) * New module: Parolesmania (CapLyrics) * New module: Seeklyrics (CapLyrics) * New module: 750g (CapRecipe) * New module: Cuisineaz (CapRecipe) * New module: Marmiton (CapRecipe) * New module: Attilasub (CapSubtitle) * New module: OpenSubtitles (CapSubtitle) * New module: tvsubtitles (CapSubtitle) * New module: Btmon (CapTorrent) * New module: DresdenWetter (CapWeather) * New script: Generic Munin Plugin Core * Do not cry if an object is not support to be filled by a backend * Add a CSV parser * Remove two old and useless debug messages (bcall) * Force updating modules after upgrade (#1066) Core: application * Fix crash when there is no selected fields * Allow infinite search with 0 * Add a JSON encoder * move to_dict to base.py (#1060, #1061) Core: browser * Ability to set a ENCODING constant to BasePage which overrides the Browser's one * Use recent firefox user agent (Firefox ESR) * Fall back on SSLv3 if TLSv1 fails * Cache the sucessful SSL protocol Core: tools * Create DateGuesser extracted from cragr Application: boobill * Improve documentation of download command Application: havedate * Display contact IDs in 'events' command output Application: pastoob * Add command-line parameters (#920) * Support "no expiration" Application: videoob * Add resume option for video downloading * Stop the video when closing with ESC Application: webcontentedit * Add non tty stdin support to edit command * Add "get" command to webcontentedit Application: Wetboobs * Add a default error message on SensorNotFound Module: aum * Handle GONE exception * Mimic mobile application (#1041) * Fix: date used may be UTC * Fix: display of summary * Support new 'favorite_food' field * Go on website to get stats and geographical position * Read field ratio * Don't stop on threads with a contact who left the website * Fix: send email when taken in a basket Module: axabanque * Remove mkdtemp in module * Fix: crash on a new tab Module: banquepopulaire * Fix: parsing of some card transactions * Update regexps Module: barclays * Update regexps * Support market page (but do not display any history) * Support when accounts are in javascript... Module: bnporc * Remove mkdtemp in modul * Support pro accounts Module: boursoram * Take id of the website for transactions * On page to update user information, raise BrowserIncorrectPassword * Get maximum history * Do not crash for special accounts * Remove mkdtemp in module Module: bp * Fix: New SSL certificat Module: bred * Fix: deferred debit cards parsing Module: caissedepargne * Update regexps * New SSL certificat * Support more history Module: cic * support pagination * support wher forced to go on change_password page * Fix: crash on pagination Module: cmso * Update regexps Module: cragr * Use LinearDateGuesser * New maintener * Support new website Module: creditmutuel * Transfer now accepts long and short IDs * Support pagination * Support wher forced to go on change_password page * Fix: transfer problem * Fix: crash on pagination Module: dailymotion * Fix search * Avoid redirects * Fix: extraction of video url Module: dlfp * Do not crash when revision is provided(#1067) Module: fortuneo * Update regexps * Support when website asks to renew password * Fix: card transaction pattern * Fix: accounts list on new version of website * Get more history * Support PRLV pattern Module: francetelevisions * Fix: search Module: freemobile * Add an id for calls * Fix get_bill * Add multi-account support for bills command Module: gdcvault * Retrieve now video, audio, slides and Dual Screen Video * Implement searching * Implement login * Handle pages with redirects to files * Fix a lot of bugs on some pages Module: hsbc * Support deferred cards * Do not support other kind of account histories than CPT Module: ing * Detect when website is unavailable * Fix: new website * Fix: generation of IDs * Merge LoginPage and Login2Page to prevent problems when the website fails with 500 * Prevent useless debug folders Module: isohunt * Fix: bug if leech or seed is empty corrected * Fillobj integration Module: kickass * Fix: downloading gziped torrents * Fix: download URL and support magnets * Return NotAvailable if needed * Fix: url correction * Fix: download URL and magnet support in all iter_torrents Module: mediawiki * Add support for the revision argument Module: lcl * Support when there is an error * Remove mkdtemp in modules Module: leclercmobile * Add an id for balance objects Module: nettokom * Fix: crash when no data available * Display validity date of subscriptions Module: piratebay * Fix: bug on empty result page corrected * fillobj integration * get_torrent return None if 404 * Unescape title Module: presseurop * Better id management * Increase RSS size Module: redmine * Add support for the revision argument (#1067) Module: sachsen * Fix: as0.gif keyerror * Better image analyse Module: societegenerale * Fix: login * Fix: Do not crash when an account is unavailable * Fix: Transfer regexp * Recipient of a transfer can be a name Module: trictractv * Add an icon Module: vimeo * Fix for no-embed videos Module: wordreference * Fix: Take the first word * Make result cleaner * Add favicon Module: youtube * Fix: detection of media url on youtube Capabilitie: CapBank * More robust currency guessing * Fix repr() on transactions with unicode labels * support empty dates for transactions Documentation * New git URL * Add missing "whatis entry" to man pages (#618) Contrib * Add a "id_regexp" parameter to filter results on video id * Exclude on case sensitive pattern * Add utf-8 support on title_exclude Tools * Add basic boilerplate script (replace gen_comic_reader.sh) * Remove storage_convert.py * Ignore Qt generated UI files (pyflakes) Packaging * Update setup.py for latest Gentoo installs * Use a central Makefile * Fast and silent building * Ensure proper building of man pages * Tell groff manpages are utf-8 * Update INSTALL Weboob 0.e (2013-01-25) General * New module: Axa Banque (CapBank) (#807). * New module: Barclays bank (CapBank). * New module: Carrefour Banque (CapBank). * New module: Credit Cooperatif (CapBank). * New module: Credit Mutuel Sud Ouest (CapBank). * New module: Gan Assurances (CapBank). * New module: Mangago (CapGallery). * New script: anonymiser.sh. Module: Arte * Fix: parsing video title (site changed). Module: Banque Populaire * Update transaction regexps. * Correctly encode login and password. * Fix: change hostname of Aquitaine Centre atlantique bank region. * Fix: parsing accounts for some specific versions of website (reported by Alain Spaite). * Get the full label of an account. * Fix: parsing banquepopulaire accounts with no link. * Fix: crash where there is no transactions for an account. * Fix: date parsing (happy new year). * Add Credit Maritime regions compatibles with Banque Populaire. Module: bnporc * Add a second SSL cert. * Support international withdrawal. Module: Boursorama * Fix: Correctly parse label of deferred card transactions. * Support of Livret A accounts. * Support new Virtual keyboard. Module: bp * Fix: compatibility with python2.6. * Add a SSL timeout. * Support page delestage. * Support deferred debit. Module: Bred * Correctly encode login and password. * Support payment in several times. * Fix: parsing accounts when there are interlines. * ignore special accounts. * Fix: crash when there is no ID on a transaction. Module: Caisse d'épargne * Handle login errors. * Support when website is unavailable. * Parse more card transactions. * Fix: parsing funding accounts. * New favicon. Module: cic * New favicon. * Fix: parsing amounts in special cases * Fix: parsing card pages in special cases Module: cmb * do not consider special accounts * Fix: parsing balance Module: CrAgr * update transaction regexps * Fix: do not crash if there is no history link for an account * correctly use iterators Module: dlfp * Allow anonyme browsing (#923) * Fix: deconnection error * Fix: Support new html structure Module: ebonics * Add favicon Module: ehentai * Fix: Support new website Module: Fortuneo * Add new certificate Module: France Télévisions * Fix: Support new website Module: Freemobile * Fix: Support the new website * Add a real id for all details objects (#932) * Add renew date (#931) * Support of multi-accounts (#890) Module: Gazelle * Fix: parsing torrents descriptions Module: HSBC * Raise exception on login error Module: ING * Add ICapBill to download monthly reports (#897) * Add support of proxy account * Add support of Livret Epargne Orange accounts * Fix: crash when there is no operation on an account * Support question page Module: INA * Try to handle more videos Module: LCL * Fix: login regexp * Add the new SSL certificat * Add a pattern to detect cards Module: Leclercmobile * Fix: Support new versions of website Module: Le Figaro * Fix: encoding * Remove some unused files (#819) * Fix: author selection Module: Nettokom * Add validity date Module: Opacwebaloes * Fix: Accept ID with 8 chars (#921) Module: pastalacon * Remove some test warnings Module: pastebin * Fix: visibility detection * Fix: login without API * Remove some test warnings Module: Piratebay * Fix: search (site changed) Module: Presseurop * Remove tweeter sharing * Use clean_relativ_urls * Fix: Support new version of daily titles Module: Sachsen * Add a favicon * Search is no more case sentitive * Use ICapGauge instead of ICapWaterLevel * Get alarm level Module: Societegenerale * Handle error when service is unavailable * Update transaction regexps * New SSL certificat * Check date of card debit to apply it * Fix: crash on special accounts Module: Taz * Remove some adds Module: Wordreference * Fix: parsing (#840, #1036) Module: youporn * Set domain to www.youporn.com Module: youtube * Fix: login CapBank * Support currencies CapBill * Rename iter_history to iter_bills_history * Add validity and renew date fields CapCollection * Declare fields to avoid warnings CapGauge * Change API to be more flexible * Add GaugeSensor objects CapVideo * Fix: CapVideo-related ConversionWarnings (dailymotion, ehentai, francetelevisions, ina, radiofrance, youjizz, youporn, youtube) CapWaterLevel * Rename it to ICapGauge Console Applications * Properly get to the previous path, not home * Add support for ls -d option (#858) * Add global "insecure" option to skip SSL validation (#930) * Allow to exclude some backends (#617) Application: boobill * Add the keyword "all" to download command Application: boobmsg * Improve documentation of export_thread * Allow "show" command in non-interactive mode * Datetime now human readable Application: comparoob * Remove double products with multiple backends * Sort results in comparoob (#934) Application: radioob * Support of rtmp Application: videoob * Add -e to rtmpdump options * Allow to use all videos players * Allow to give arguments to players * Add mplayer2 support Application: weboob-config * fix double message "Unable to load module" Application: wetboobs * Change to use ICapGauge instead of ICapWaterLevel * Add sensors command Tools: html2text * Set INLINE_LINKS to false Tools: Newsfeed * Take the creation date if no update available Tools: Messages/GenericBackend * Get the real thread of an article * Add clean_relativ_urls function Tools: VirtKeyboard * Add an overridable method to check pixel colos * Add a parameter "convert" Tools: IParser * Add a raw parser Tools: LxmlParser * Get all strings under this element Tools: tests * Save and submit test results * Better way of handling non-module tests * Guess the right builder name * Use the guessed nosetests for the core tests too Tools: pyflakes * Use flake8 if available instead of pyflakes Core * Check value of ValueBackendPassword during load * Add new exception BrowserForbidden and add handler in applications * Fix langage when the lastet version is already installed * Allow multiple CERTHASH values in a module * Ability to specify a parser to use on a page handler Installation * setup.py: print what executable we were looking for * setup.py: be less confusing when make is missing Contrib: boobank-munin * Fix: encoding issue Contrib: downloadboob * Correctly create symlink and support when one is removed * 'exclude' parameter is case insensitive Contrib: nettokom-munin * Print all labels in config mode and stack results Weboob 0.d (2012-10-28) General * New module: BanquePopulaire (CapBank). * New module: Bred (CapBank). * New module: CaisseDEpargne (CapBank). * New module: CIC (CapBank). * New module: Ebonics (CapTranslate). * New module: EuroParl (CapVideo). * New module: GDCVault (CapVideo). * New module: LeclercMobile (CapBill). * New module: Vimeo (CapVideo). * New module: Weather (CapWeather). * New script: contrib/downloadboob to automatically download vidéos matching some criteria (#838). * Add a basic system to check SSL certificates. Console Applications * Correctly check new version of the module. * Short commands for all applications (and suggestions). Module: AuM * Add a status field to display number of new visits. * Support new API (#871,#900,#902). Module: BNPorc * Strip trailing 'CARTE XXX' from card transactions labels. * Get last 100 transactions instead of 30. * Fix: website changes. Module: Boursorama * Correctly handle case that we don't support the history page of an account. * Fix: unlimited loop in case of bad credentials. Module: BP * Parse labels and detect type of transactions. * Get maximum of transactions in history. * Workaround to libssl 1.0.1c-4 bug in Debian (#863). Module: CappedTV * Fix: proper handling of No Results Found. Module: CMB * Support proxy. * Check SSL certificate. * Fix: a bug in the accounts listing. Module: CrAgr * Reworked the whole parsing for 'list' and 'history' operations. * Parse labels and detect type of transactions. Module: CreditMutuel * Support deferred debit. * Never store 'RELEVE CARTE' transactions (redundancy with card transactions). * Fix: login (skip page which warns about phishing). Module: Dailymotion * Add support for embed URLs. * Fix: parsing authors on anyclip videos. * Fix: search-then-play combination (#860). Module: Fortuneo * Fix: website changes. * Fix: check on login failure. Module: FreeMobile * Catch unit for data. * Support multiple accounts. * Fix: login (website change). * Fix: pdf downloading. * Fix: international calls. * Fix: parsing name with a dash. Module: Gazelle * Fix: parsing title on whatcd. Module: HDS * Fix: parsing dates. Module: HSBC * Support history and coming transactions. * Fix: duplicated IDs of accounts. * Fix: parsing of accounts and history. Module: ING * Transaction IDs are generated with a hash function. * Use static IDs of accounts. * Support tranfers. Module: LCL * Parse labels and detect type of transactions. * Display password renewal warning. * Support CB operations. * Support several contracts. Module: LeFigaro * Fix: parsing of live articles. Module: Minutes20 * Fix: RSS feed url has changed. Module: Nettokom * Fix: website change about authentication. Module: Newsfeed * Add a link on top of content. Module: NolifeTV * Fix: authentication and retrieve of video url (#880). Module: Nova * Fix: retrieving of current song. Module: PAP * Fix: parsing housings (#874). Module: PressEurop * Fetch last 140 entries instead of 50. Module: PrixCarburants * Fix: regexp of product name in page. Module: RadioFrance * Support franceinfo archives. Module: SocieteGenerale * Truncate password to 6 digits. * Handle error message when unable to login. * Support deferred debit cards. * Fix: follow next pages of history. * Fix: website changes about authentication (#891). Module: Transilien * Support when a train is removed (#894). * Fix: parsing time (#866). Module: Yahoo * Fix: search of cities (website change). Module: Youjizz * Fix: parsing of duration. * Fix: parsing video url. Module: Youporn * Fix: website changed. Module: Youtube * Add support for youtube-nookie.com. * Fix: login and play of nsfw videos (#918). * Fix: finding video url (website change). Application: boobank * Fix: QIF spec requires capitalized 'type' (#898). Application: boobill * New command 'balance'. Application: comparoob * Fix: selection of product. Application: freemobile-munin * Add parameter 'phonenumber'. * Fix: data parsing. Application: havedate * Add command 'events'. Application: pastoob * Abort if paste is empty. Application: QHaveDate * Nicknames are selectable (#869). Application: QVideoob * White background is not forced anymore (#823). Application: translaboob * Add 'nigger' language. Application: weboob-debug * Support more shell libs (ipython, bpython, standard python). Appliccation: wetboobs * Ability to display temperatures either on celsius or on fahrenheit. Core * Use module 'imp' instead of '__import__'. * Fix table formatter with python-prettytable 0.6. Weboob 0.c (2012-05-04) General * New capability: CapPriceComparison. * New capability: CapTranslate. * New module: ChampsLibres (CapBook). * New module: Fortuneo (CapBank). * New module: GoogleTranslate (CapTranslate). * New module: NettoKom (CapBill). * New module: Okc (CapDating). * New module: PrixCarburants (CapPriceComparison). * New module: Taz (CapMessages). * New module: WordReference (CapTranslate). * New application: comparoob (CapPriceComparison). * New application: translaboob (CapTranslate). * New script: boobot. * New script: nettokom-munin (Nettokom). * New script: report_accounts.sh (CapBank). * Application havedate now inherits commands of boobmsg. * Fix: use the right default value for XDG_DATA_DIRS. Console Applications: * Add completion on 'ls' and 'cd' commands. * When a module requests to application a password (for example if it is not stored in the backend config), display a real question, not only 'Password:'. * Use $EDITOR env variable to edit input. * Rewrite of the formatters system. * When a bug occurs in a module, suggest user to update it. Capability: CapBank * Rename Operation object to Transaction. * Rename iter_operations() to iter_coming(). * Add a field Transaction.rdate to store date of payment. * Add field Transaction.type (enum). * Add field Account.type (enum). * Create a class FrenchTransaction in weboob.tools.capabilities.bank to help parsing transactions of french banks. * Use decimal.Decimal instead of float to store amounts of money. Module: AuM * Fix: website has changed its charset. * Fix: don't crash when a message content is empty. * Fix: save IDs as integers in storage. Module: Arte * Fix: getting latest videos. Module: BNPorc * Support private messages (CapMessages). * Fetch the last 100 transactions (instead of 30). * Support CIF accounts. Module: Boursorama * Parse categories and dates. * Ignore spurious accounts. * Fix: credit and debit where inversed. Module: BP * Don't list spurious accounts. Module: CrAgr * Fix: parsing dates. * Fix: CA Centre website has changed (#850). Module: CreditMutuel * Capitalize each words in account labels. * Fix: parsing accounts list whene there is no history associated. * Fix: parsing history when there are extra columns. * Fix: use unique IDs for accounts. Module: Dailymotion * Fix: getting latest videos. * Fix: getting thumbnails. * Fix: parsing video IDs. Module: DLFP * Do not get pages with 0 comment. * Add a cleanup function to dlfp backend. Module: FranceTelevisions * Fix: getting latest videos. Module: FreeMobile * Fix: remove timer (not more used by website). * Fix: website has changed. * Fix: multiple accounts login. Module: ING * Use FrenchTransaction for parsing transactions. * Get more historical transactions. * Catch error on password/birthday/login. * Fix: website changes on livret A history. Module: LCL * Add a regexp on password field. * Fix: getting accounts. * Fix: crash when the balance is negative. * Fix: site specific fix. * Fix: parsing account labels. * Fix: always go on the history page. * Fix: when history is empty. * Fix: prevent infinite loop when password is wrong. Module: MangaFox * Fix: domain name change. Module: PressEurop * Fix: parsing of cartoon pages. * Fix: real author catching on article pages. Module: RadioFrance * Fix: crash when there is no author. Module: Sachsen * Catch “Go Up” value. Module: SocieteGenerale * Support display of history and coming transactions. * Fix: when there is no transaction for the account. Module: Transilien * Fix: roadmap when there is no confirm page. Module: YouJizz * Fix: getting video URLs. Module: YouPorn * Fix: changes on website. Application: boobank * Add a new pretty_qif formatter (use label and rdate if exist). Application: boobathon * Fix: close command. Application: boobill * Get all available subscriptions for 'details' command (#846). Application: boobmsg * New command 'photos' to display photos of a contact with cacaview. * Add an 'atom' formatter. Application: bonboob * Add a command 'once' to process retrieving of messages once. Application: QWebContentEdit * Possibility to edit an url (#619). * Add a 'History' tab. Application: weboob-config * Remove 'install' command. Script: freemobile-munin * Fix: condition to detect empty output. Script: hds/export.py * Fix: loading HDS module. Core: * Change way to describe fields of CapBaseObjects. * Add a lot of code documentation. * Warn when implicit conversions happen on CapBaseObjects. * Create UserError exception for errors raised by modules. * Scheduler: do not stop timer because of an exception. * Repositories: support gpgv2 (#837). Weboob 0.b (2012-03-14) General * New capability: CapBill. * New capability: CapBook. * New capability: CapHousing. * New capability: CapWaterLevel. * New module: CappedTV (CapVideo). * New module: FreeMobile (CapBill). * New module: OpacWebAloes (CapBook). * New module: Pap (CapHousing). * New module: PressEurop (CapMessages). * New module: Sachsen (CapWaterLevel). * New module: SeLoger (CapHousing). * New application: boobill (CapBill). * New application: boobooks (CapBook). * New application: flatoob (CapHousing). * New application: QFlatBoob (CapHousing). * New contrib script: freemobile-munin. * Rename application: havesex -> havedate. * Rename application: QHaveSex -> QHaveDate. * Remove module: MangaToShokan (website is dead). Console applications: * Improvements of 'ls' and 'cd' commands. * Fix: crash when trying to add twice a same module. Module: Boursorama * Fix: IDs of operations. Module: BNPorc * Parse categories. * Parse account types. * Fix: getting history of secondary accounts. Module: BP * Store transactions dates as datetime.date objects. * Fix: parsing of accounts in particular cases. Module: CanalPlus * Friendlier paths in canalplus. Module: CMB * Add type and label support to CMB backend. Module: CrAgr * Now handle history-less accounts, at least for Toulouse-like layouts. * Transaction objects are now created using datetime.date (#800). * Fix: balance retrieval for history-less accounts (#788). Module: CreditMutuel * Store Transaction.date as a datetime.date object. * Support loan history. * Parse type of transactions. * Fix: lot of bugs. Module: DLFP * Parse a comment only if needed (performances enhancement). * Get comments only in case of rss-comments changes. Module: Ecrans * Store only last 20 articles. Module: HSBC * Display only real accounts. Module: ING * The account listing is now more robust. * Parse types of transactions. Module: Kickass * Fix: search was broken. Module: Mangafox * Fix: crash on Comments page. Module: NolifeTV * Support authentication. * Fix: parsing of videos with missing description. Module: OuiFM * Fix: error when no artist/title. Module: Pastebin * Fix: getting pastebin paste visiblity. Module: Piratebay * Support magnets properly. Module: RadioFrance * Support replay. * Use a better source for FIP. * Fix: fetching FIP current. Module: SocieteGenerale * Check if login is failed. Module: Youtube * Fix: crash when there is no author. Application: boobank * Display types of transactions. * Add formatter 'transactions'. Application: chatoob * Removed because unused. Application: videoob-webserver * Moved to contrib/. Application: weboob-config * Fix: command 'list' can filter by capability (#786). Application: weboorrents * Support magnet URLs. Application: wetboobs * Now supports CapWaterLevel in addition to CapWeather. Core: * Big refactoring of CapCollection. * Use libyaml for faster loading and saving. * Sign modules.list. * Support gzipped responses in Browser. * Fix: retrieving third icons if module is local. Weboob 0.a (2012-02-05) General * New backend: Boursorama (CapBank). * New backend: CMB (CapBank). * New backend: HSBC (CapBank). * New backend: ING (CapBank). * New backend: Nolifetv (CapVideo). * New backend: RadioFrance (CapVideo, CapRadio) which merges FranceInter and LeMouv backends. * Support repositories to manage backends (#747). * Support XDG Base Directory Specification (#765). * Make CapCollection understandable and usable by humans. Console applications * Ability to add all supported modules at once. * With -a, try to separate saved responses by backend (#661). Qt applications * Verbose error messages (#775). Backend: AuM * Display the 'title' field on contact profiles. * Get events (baskets, charms and visits). * Add city in status message. * Add 'Sent with my iPhone' in mail signatures when needed. * Display at least one photo url in profile even if there isn't any visible. * Add a 'ratio' field. * Fix: getting contacts list. * Fix: support new API. * Fix: ipaddr is not available anymore. * Fix: do not crash if there are php errors before json. Backend: Batoto * Change .com to .net. Backend: BNP * Fix: website changed (#769). Backend: BP * Fix: website changed. * Fix: open images in memory instead of saving them in temp files. Backend: CanalPlus * Support https?://www\.canal-?plus\.fr/.*\?vid=(\d+) urls. Backend: CreditMutuel * Internal transfer implemented. * Fix: website changed. Backend: Dailymotion * Fix: support missing descriptions. Backend: DLFP * Limit feed entries by date instead of number of results. Backend: FranceTelevisions * Fix: website changed. Backend: Gazelle * Handle general errors when website is unavailable. Backend: INA * Fix: parsing of URLs. Backend: Kickass * Fix: website changed. Backend: LCL * Add support for various types of accounts. * List 45 days history by default. * Fix: website changed. Backend: LeFigaro * Better cleanup of generic articles (#725). * Fix: website changed. Backend: Orange * Fix: unicode errors. Backend: Pastebin * Handle user pages. Backend: Piratebay * Fix: website changed. Backend: SocieteGenerale * Fix: website changed. Backend: Youjizz * Fix: video URLs have changed. Backend: Youporn * Fix: website changed. Backend: Youtube * Fix: website changed. Application: QBoobMsg * When a thread is a discussion, display messages linearly. * Add a button 'Profile'. Application: QHaveSex * Add a 'Events' tab. * Add a 'Notes' tab for taking notes about a contact. Application: QVideoob * Fix: crash when there is no thumbnail on a video (#708). Application: weboob-config-qt * Ability to edit sources.list, update repositories and install modules. Weboob 0.9 (2011-10-10) General * New backend: Batoto (CapGallery). * New backend: Eatmanga (CapGallery). * New backend: FranceTelevisions (CapVideo). * New backend: HDS (CapMessages). * New backend: Izneo (CapGallery). * New backend: Mangafox (CapGallery). * New backend: Mangahere (CapGallery). * New backend: Mangareader (CapGallery). * New backend: Mangatoshokan (CapGallery). * New backend: Nova (CapRadio). * New backend: PhpBB (CapMessages, CapMessagesReply). * New backend: Simplyread.it (CapGallery). * New application: boobtracker (CapBugTracker). * New script: hds/export.py to export stories from histoires-de-sexe.net into a sqlite database. * License change to AGPLv3+. * Ability to not save backend passwords. Applications will prompt them when needed. Backend: Arte * Set duration on video results. Backend: AuM * Rewrite to use the mobile API. Backend: BNPorc * Get operation categories. Backend: CrAgr * Get full history. * Optimized operations retrieval for CA Centre. * Fix: parsing accounts list. Backend: CreditMutuel * Maine-Anjou, Basse-Normandie bank added. Backend: Dailymotion * Fix: parsing duration. * Fix: parsing of lives in search results. Backend: DLFP * Fix: disconnection URL needs to be called with POST instead of GET. * Fix: do tests on alpha.linuxfr.org. * Fix: relevance on news/diaries. Backend: Gazelle * Handle login errors. * Fix: parsing on several gazelle websites. Backend: INA * Support videos on www.ina.fr (in addition to boutique.ina.fr). Backend: IPInfoDB * Fix: no crash when there are no coordinates from server. Backend: Kickass * Fix: parsing of search results (#663). Backend: MediaWiki * Handle errors from API. Backend: MeteoFrance * Fix: website changes. Backend: Orange * Fix: handling of pages. Backend: PirateBay * Fix: parsing of search results. Backend: Redmine * Now implements CapBugTracker (#684). Backend: Transilien * Supports the roadmap feature (#681). Backend: Youtube * Support more URLs. * Support authentication. * Fix: website changes. Application: boobank * Add the 'qif' formatter. Application: boobank-munin * When handling an incorrect password error, disable backend to prevent your bank to disable your account (for example with BNP). Application: pastoob * Ability to pipe output. Application: traveloob * New command 'roadmap' to get the roadmap between to stations. It's also possible to give a departure or an arrival time (#681). Application: videoob * Do not run player in background (#664). * Command 'download' supports mms streams. Application: weboorrents * The given filename to command 'getfile' is optional (#683). Weboob 0.8 (2011-05-08) General * New backend: E-Hentai (CapGallery). * New backend: FranceInter (CapRadio). * New backend: LeMouv (CapRadio). * New backend: PasteALaCon (CapPaste). * New backend: PasteBin (CapPaste). * New application: Boobathon (CapContent). * New application: Galleroob (CapGallery). * New application: Pastoob (CapPaste). * Fix lot of unicode problems. * License changed to AGPLv3+. * FreeBSD support. Repl applications * The new CapCollection capability is supported by every REPL Application. At the moment, only few backends implement it. * Better messages and return codes in applications. Backend: AdopteUnMec * Fix: website changes (#508,#637,#638,#639). Backend: BNPorc * The 'rotating_password' parameter is now an hidden one (#627). * Ability to do transfers to external recipients. Backend: BP * Add 'comptes titres', 'comptes vies' and 'comptes retraites' to the list of accounts (#567). * Fix: website changes (#621). Backend: CanalPlus * Implement the new CapCollection capability. Backend: CrAgr * Support of a new history layout. * Fix: login issues with the Toulouse website (#629). Backend: Dailymotion * Fix: URL was not found in special cases. Backend: FourChan * Fix: support message "AMERICA FUCK YEAH" outside of a thread. Backend: Gazelle * Fix: work with broken gazelle websites. Backend: Inrocks * Fix: matching URLs. Backend: KickAss * Several fixes and enhancements (#651). Backend: LCL * Fix: websites changes. Backend: OuiFM * Implements the new CapCollection capability. Backend: Transilien * Add the PAA code for Gare de Lyon. Backend: Youtube * Support more URLs. Backend: Youporn * Correctly set the 'ext' attribute on videos. Application: monboob * Check configuration (#484). Application: weboob-config * New commands 'enable' and 'disable'. Core * Use lowercase http_proxy environment variable. * select() function has been moved into parser. * Support for xpath in LxmlHtmlParser.select. * Fragments are removed from URLs (#636). * Remove a hack from feedparser which fixes parsing of webpages with recent versions of this library. * Also log redirects when saving responses and debugging (#398). Weboob 0.7 (2011-04-01) General * New backend: Dailymotion (CapVideo). * New backend: Ecrans (CapMessages). * Now compatible with Windows (is it really a good news? :)). Console applications * Do not print escape characters (like bold) when using -O. Backend: AuM * Fix: parsing of smileys (#532). * Fix: new page (#535). Backend: BP * Fix: parsing of accounts is case there are missing sections. Backend: CreditMutuel * Compatibility with other agencies (#550). Backend: DLFP * Ability to plusse/moinse contents. * Ability to tag a content. * Support the board. * Support comments signatures. * Support wiki, forums, polls, tracker. * Now implements CapContent to edit wiki. Backend: FourChan * All messages are children of thread. Backend: Inrocks * Add support of 'InrocksTV' pages. Backend: IpInfoDB * Fix: crash when lat/long are empty (#585). Backend: LCL * Fix login, and implement CapBank methods. Backend: Newsfeed * Fix: correctly set the UNREAD flag. Backend: Orange * Fix: posting messages (#614). Backend: Redmine * Fix: support project names with '-' in. Backend: Transilien * Fix: don't keep previous results. * Change user-agent of browser and use HTTPS (#580,#583). Backend: Youjizz * Fix: crash when duration is not available. Backend: Youtube * Now correctly handle gdata errors. * Fix: get video from page URL. * Fix: get file URL of video. Application: boobmsg * New command 'export_all'. * New xhtml formatter. Application: masstransit * Works without conic or hildon (#562). * Add banner on load. Application: QWebContentEdit * Better errors management. Application: videoob * New command 'download'. Application: webcontentedit * Set a default editor (#557). Core * Split of ReplApplication to create ConsoleApplication. * Remove the 'refresh' feature from Browser (to prevent unwanted behaviors like freezes). * Browser has upgraded Firefox from 3.0.3 to 3.6.13. * Browser doesn't retry on 404 errors. * Script to generate Sphinx API documentation. Weboob 0.6 (2011-03-01) General * New backend: Inrocks (CapMessages). * New backend: LeFigaro (CapMessages). * New backend: MediaWiki (CapContent). * New backend: Minutes20 (CapMessages). * New application: QWebContentEdit (CapContent). Backend: AuM * Fix: website changed, mails.php renamed to mail.php. Backend: BNP * Fix: the captcha has been changed on their website (#461). Backend: CrAgr * Fix: the history operation works when every non-ASCII character on the bank website is replaced with two interrogation marks. * Fix: calculation of cents. Backend: CreditMutuel * Fix: negative value correctly considered by 'list' Backend: DLFP * Fix: website changed to a new version (#503). Backend: IsoHunt * Fix: website doesn't provide seed information on info page anymore (#529). Backend: KickAss * Fix: size span detection improved (fixes #497). Backend: OuiFM * Fix: website changed to get current song. Backend: PirateBay * Fix: parsing to find leecher and seeders (#458). Backend: Redmine * Adds support for previewing modifications on redmine's wiki pages. * Fix: when login/password is invalid. Backend: Yahoo * Fix: didn't load with python < 2.6 Application: boobmsg * New command 'export_thread'. * New parameter '-t' on the 'post' command to set a title. Application: monboob * Fix: catch errors when trying to bind the SMTP server (#485). Application: QBoobMsg * Fix: reload of backends list. Application: webcontentedit * New command 'log' to display all revisions of a page. Application: weboob-config * The 'edit' command can be used to interactively edit one backend, instead of opening the './weboob/backends' file with a text editor. * Checks on given backends for 'backends ' subcommands. Application: weboob-config-qt * Fix: crash when trying to add an already existing backend. Repl Applications * New parameter '-O' to set an output file. Core: * Fix: Browser.location() crashes when uri is empty (#488). * Fix: catch every exceptions when loading a backend (not only ImportError). Weboob 0.5 (2011-01-08) General * New backend: MeteoFrance (CapWeather). * New backend: Orange (CapMessages, CapMessagesPost). * A new tool, make_man.py, is used to generate manpages. Backend: Bouygues * Fix: logging issues (#444). Backend: CrAgr * Fix: do not keep accounts list in cache. * Fix: extraction of amounts >999€ and negative amounts. Backend: KickAss * Fix: website changes (#457). * Fix: size parsing. Backend: PirateBay * Fix: size parsing. Backend: Yahoo * The 'search' command is implemented. Backend: Youtube * Fix: website changes (#450). Application: boobmsg * The 'post' command can take message from command-line instead of stdin. * Fix: encoding problems. Application: videoob * Fix: playing videos in some cases (#446). Application: wetboobs * Rewrite of application to use formatters. Weboob 0.4 (2010-12-01) General * New backend: Bouygues (CapMessagesPost). * New backend: CanalPlus (CapVideo). * New backend: CreditMutuel (CapBank). * New backend: IPInfoDB (CapGeolocIp). * New backend: IsoHunt (CapTorrent). * New backend: KickAss (CapTorrent). * New backend: PirateBay (CapTorrent). * New backend: SFR (CapMessagesPost). * New backend: SocieteGenerale (CapBank). * New application: boobmsg (CapMessages, CapMessagesPost). Console applications * New command 'inspect' to open a graphical webkit browser with the current page (to help debugging). If it is not available, the page source is displayed on stdout. * In question prompts, display a bullet list when there are too many choices. * The --save-responses (-a) parameter stores now pages in a directory and save here a debug log and a list of visited URLs associated to the files. * Fix unicode issues (#436). Backend: AuM * Do not send baskets messages from left sluts. * Anti-spam is updated. * Raise an error when user is banned. * New optimization PRIORITY_CONNECTION to create fake godchilds to allow user access to website between 18h and 1h. (#319) * New optimization QUERIES_QUEUE to enqueue queries in case no charms are available. * New backend parameter 'baskets' to enable getting baskets messages. * In profiles, look for hidden photos. Backend: BNPorc * Fix: display of coming operations. * Fix: check if the password rotation has been succeed. Backend: BP * Backend has been rewritten to use BaseBrowser (#422). * Fix: backend initialization. * Fix: parsing of accounts. * Fix: handle of transfers errors. Backend: CrAgr * Support of history operations. * Support monay transfers. * Choose the agency website in a list instead of giving URL. Backend: DLFP * Store datetime from newsfeed in the Thread object (#419). * Now the session is closed at deinit. * Fix: when posting a comment, send right parameters to immediately display it. Backend: GeolocIP * Use the website www.geolocip.com instead of www.geolocalise-ip.com. It prevents authentication and limits. Backend: INA * Fix: parsing date, duration and title. Application: boobank-munin * Save cache in .weboob/munin/ and handle errors. * New option 'boobank_cumulate' to display graph as areas instead of plots. Application: havesex * The optimizations management has been rewritten. * New command 'query' to send a query to a contact (like a charm or a poke). * Fix: do not exist after displaying a profile in interactive mode. Application: monboob * New option to pipe mails to an external process instead of sending it to a SMTP server. * Fix: when domain in In-Reply-To contains a '@'. * Fix: parsing incoming mails when no charset is supplied. * Fix: unicode issues. Application: QHaveSex * Display URL of contacts. * Contacts list is now sorted. * Have a photos caroussel on profile page. Application: weboob-config * New command 'confirm'. It takes an email in stdin and call corresponding backend to go on the confirm address. It is useful to automatically confirm account register. Application: weboorrents * Ability to complete paths. Core * The 'repeat' scheduler has been rewritten. * Ability to cancel a scheduled task. * Fix parsing of path-like in INI config. * Conditions are now treated by BackendsCall instead by formatters (#372). * Backends name can now contain only letters and digits. * Add a tool to generate manpages. Weboob 0.3 (2010-11-01) General * New backend: LCL (CapBank) -- unfinished. * New backend: OuiFM (CapRadio). * New backend: Newsfeed (CapMessages). * New backend: Redmine (CapContent). * New application: radioob (CapRadio). * New application: webcontentedit (CapContent). * New application: boobank-munin is a plugin for munin (CapBank). * New tests. * New global parameter --logging-file to log into a file instead of stdout. * Logging is now colorized when printed on stdout (depending on level). Console Applications * Formatters management have been rewritten. Now each command can set its own default formatter, and user can redefine them. * If output exceed the height of term, ask user to press a key for each page. * Do not display columns when all of these values are NotLoaded or NotAvailable. * Add a CSV formatter (#350). * Command 'backends register' to register a new account (#294). * Can use '$full' and '$direct' selectors. Backend: Arte * Fix: fall-back when the wanted quality is not available. Backend: AuM * New anti-spam feature to detect, block and report spambots (#313). * Implements the capability CapAccount to register new accounts (#389). * In profile walker, when reloading sluts list from search page, do not keep the previous queue to prevent visiting sluts who have been added a long time before and who are now disconnected. * Contact status is now 'connected'/'not connected since ... hours'. * Fix: do not crash if contact list is empty. Backend: BNPorc * If password is expired, switch with the value of the new 'rotating_password' backend setting. * Support transfers (#416). * Fix: don't crash when accounts don't support 'coming' (#401). * Fix: when website is not available, raise BrowserUnavailable instead of BrowserIncorrectPassword. Backend: DLFP * Replace 'cite>' and 'tt>' to 'i>' in read messages. Application: boobank * Use 'table' as default formatter. * Output for the 'list' command is more readable (#410). * When a transfer is made, display all information instead of ID. * Fix: do not load backends twice (#405). Application: QBoobMsg * Support threads display and answers. * Support sending answers (plaintext or HTML). * Unread messages are in yellow in list, and set message as read when one is selected. * Fix: correctly reload when backends have been changed. Application: QHaveSex * Ability to display a profile from URL. Application: QVideoob * Fix: search on youtube was unlimited, so QVideoob freezed. Application: traveloob * Use 'table' as default formatter. Application: videoob * Output for the 'search' command is more readable. Application: weboob-config * Add a 'register' command (#294). Application: weboob-config-qt * Add a 'Register' button to register a new account on a backend (#390). Application: weboorrents * Output for the 'search' and 'info' commands is more readable. Core * Weboob.load_backends() takes a new 'errors' argument. * CapBaseObject has a new method 'add_field' to add a field property which forces a specific type and is set to NotLoaded by default. * Browser.readurl() can take same arguments than Browser.openurl(). * If a page is not recognized by the Browser instance, save response even if -a is not supplied. * Introduce 'Value' classes to replace BaseBackend.ConfigField and is used by ReplApplication.ask(). * Use several loggers for parts of weboob. * Fix: crash when HTTP server returns shit (#406). Weboob 0.2 (2010-10-01) * Backend 'yweather' renamed to 'yahoo'. * New capability: ICapGeolocIp to geolocalise IP addresses. * New backend Arte: for the arte.tv french TV website. * New backend GeolocIp: for the geolocalise-ip.com website. * New backend BP: for the “Banque Postale” french bank. * AuM backend: check when the account is blocked. * AuM backend: ability to register new account. * BNPorc backend: support history. * CrAgr backend fix: support of another version of Credit Agricole. * CrAgr backend fix: check if website is down. * DLFP backend: display comments link in signature. * DLFP backend fix: parsing of comments when templeet sucks. * Youtube backend: support infinite searches. * Youtube backend fix: parsing of URLs (#388). * New application geolooc: a console application to interact with ICapGeolocIp backends. * New application weboob-cli: a console application to interact with every backends. * boobank application: new command 'history'. * boobank application: new command 'transfer'. * QHaveSex application: know if a message has been read or not. * videoob application: new command 'play'. * Console applications: can be interactive (repl) when run without any command (#353). * Console applications: if no backends are loaded at startup, ask user to add them. * Console applications: -s '*' fills objects. * Qt applications: display configuration window if no backends are loaded at startup. * Core: ability to fill objects already fetched to complete them. * Core: ICapMessages has been rewritten to be more efficient. * Core: can enable or disable backends. * Core: a test architecture has been written. * Core: all loaded backends now need to be configured (#368). * Core: new pargument --save-responses to debug HTML pages (#274). * Core fix: handle read URL data failure. * Core fix: Client is merged into mechanize >= 0.2 (#362). Weboob 0.1 (2010-08-03) * First public release. * The core system can load/unload backends, supports configured backends, can do asynchronous calls to specific backends. * Capabilities are abstractions to be overloaded by backends: - ICapBank - ICapChat - ICapContact - ICapDating - ICapMessages - ICapMessagesReply - ICapTorrent - ICapTravel - ICapVideo - ICapWeather * Backends interact with websites: - AuM - BNPorc - CanalTP - CrAgr - DLFP - FourChan - Gazelle - INA - Transilien - YouJizz - YouPorn - YouTube - YWeather * Applications interact with backends: Console - boobank - chatoob - havesex - traveloob - videoob - weboob-config - weboorrents - wetboobs Nokia N900 Phones - masstransit Daemon - monboob Qt - QBoobMsg - QHaveSex - QVideoob - weboob-config-qt Web - videoob-web-server weboob-0.g/INSTALL000066400000000000000000000040071217741004600137510ustar00rootroot00000000000000Weboob installation =================== Using the packages provided by your distribution is recommended. See http://weboob.org/install for a list of available packages. Since there are many dependencies, when you install from sources, you have to handle them by hand, according to your distribution. The requirements are provided in ``setup.py``, except for: * gpgv (for secure updates). If not packaged alone, it should be in ``gnupg`` or ``gpg``. * PyQt4 (python-qt4) for graphical applications. * For more performance, ensure you have ``libyaml`` and ``simplejson`` installed. Some modules may have more dependencies. All installation procedures allow you to chose whether you want graphical applications. Add ``--no-qt --no-xdg`` to disable them; ``--qt --xdg`` to enable them. After a package or system installation, you should run ``weboob-config update`` as your login user. User installation ----------------- There is a way to install weboob locally without messing with your system. Run ``./tools/local_install.sh`` as your local user. :: $ ./tools/local_install.sh ~/bin The scripts are copied to ``~/bin``. System installation (discouraged) --------------------------------- The install mode copies files to the Python system-wide packages directory (for example ``/usr/lib/python2.5/site-packages`` for Python 2.5, or ``/usr/local/lib/python2.6/dist-packages`` for Python 2.6). :: # ./setup.py install Scripts are copied to ``/usr/bin``. Development mode ---------------- This does not actually install anything, but lets you run Weboob from the source code, while also using the modules from that source. This is only recommended if using the git source and not a release. :: $ ./tools/local_run.sh APPLICATION COMMANDS For example, instead of running ``videoob -b youtube search plop``, you would run:: $ ./tools/local_run.sh videoob -b youtube search plop Bash completion --------------- To enable bash completion, just source the ``tools/weboob_bash_completion`` file from your ``~/.bashrc`` file. weboob-0.g/MANIFEST.in000066400000000000000000000004001217741004600144470ustar00rootroot00000000000000include COPYING include INSTALL include README include AUTHORS include ChangeLog include desktop/* include icons/* include man/* recursive-include contrib * recursive-include weboob/applications Makefile recursive-include weboob/tools/application Makefile weboob-0.g/README000066400000000000000000000022511217741004600135770ustar00rootroot00000000000000Weboob is a project which provides a core library, modules and applications. Overview -------- The core library defines capabilities: features common to various websites. For example, http://www.youtube.com/ and http://www.dailymotion.com/ both provide videos; Weboob defines the "ICapVideo" capability for them. Each module interfaces with a website and implements one or many of these capabilities. Modules can be configured (becoming a "backend"), which means that the end-user can provide personal information to access the underlying website, like a login and password. Applications allow the end-user to work with many modules in parallel, in a multi-threaded way. For example, one could search a video on many websites at once. Applications are toolkit-agnostic. They can use GTK+, Qt or be text-only. The latter can be used either in an interactive way or in pipes. The core library provides base classes which help developers write modules and applications. Weboob is written in Python and is distributed under the AGPLv3+ license. For more information, please go to the official website at http://weboob.org/ Installation is described on the website or in the INSTALL file. weboob-0.g/build.mk000066400000000000000000000006241217741004600143510ustar00rootroot00000000000000core := weboob/tools/application/qt applications := qboobmsg qhavedate qwebcontentedit qflatboob qcineoob qcookboob qhandjoob ifeq ($(WIN32),) applications += qvideoob endif directories := $(core) $(applications:%=weboob/applications/%/ui) .PHONY: clean all $(directories) all: target := all all: $(directories) clean: target := clean clean: $(directories) $(directories): $(MAKE) -C $@ $(target) weboob-0.g/contrib/000077500000000000000000000000001217741004600143575ustar00rootroot00000000000000weboob-0.g/contrib/anonymiser.sh000077500000000000000000000020461217741004600171040ustar00rootroot00000000000000#!/bin/bash # A special file with the list of words to replace. The format is one word per line, with a tabulation as separation # Example: # name offuscatedname # phonenumber 111111 anonymise_list="Anonymiser" # Take the folder to anonymise as argument, and check if it is a folder if [ $# -gt 0 ] && [ -d $1 ] then dossier=$1 else echo "Usage: $0 FOLDER" echo "For example : $0 /tmp/weboob_session_NLSIls/freemobile/" exit 1 fi if [ ! -f $anonymise_list ] then echo "Please create the $anonymise_list file (see documentation)" exit 1 fi # remove potentials old files find $dossier -name \*_anonymised -delete rm -rf $dossier/Anonyme for file_to_anonymise in `find $dossier -type f` do file=$file_to_anonymise"_anonymised" cp $file_to_anonymise $file cat $anonymise_list | tr '\t' '_' | while read line do to_replace=$(echo "$line"|cut -d_ -f1) replace_with=$(echo "$line"|cut -d_ -f2) sed -i "s%$to_replace%$replace_with%Ig" $file done done mkdir $dossier/Anonyme find $dossier -name \*_anonymised -exec mv \{\} $dossier/Anonyme \; weboob-0.g/contrib/boobank-munin000077500000000000000000000202031217741004600170410ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # vim: ft=python et softtabstop=4 cinoptions=4 shiftwidth=4 ts=4 ai # Copyright(C) 2010-2011 Romain Bignon # # This file is part of weboob. # # weboob is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # weboob is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . import os import sys import locale import time import logging from weboob.core import Weboob, CallErrors from weboob.capabilities.bank import ICapBank from weboob.tools.browser import BrowserIncorrectPassword class BoobankMuninPlugin(object): def __init__(self): if 'weboob_path' in os.environ: self.weboob = Weboob(os.environ['weboob_path']) else: self.weboob = Weboob() self.monitored_accounts = None if 'boobank_monitored' in os.environ: self.monitored_accounts = os.environ['boobank_monitored'].split(' ') self.cache_expire = long(os.environ.get('boobank_cache_expire', 3600)) self.add_coming = int(os.environ.get('boobank_add_coming', 1)) self.cumulate = int(os.environ.get('boobank_cumulate', 1)) self.cache = None def display_help(self): print 'boobank-munin is a plugin for munin' print '' print 'Copyright(C) 2010-2011 Romain Bignon' print '' print 'To use it, create a symlink /etc/munin/plugins/boobank to this script' print 'and add this section in /etc/munin/plugin-conf.d/munin-node:' print '' print '[boobank]' print 'user romain' print 'group romain' print 'env.HOME /home/romain' print '# The weboob directory path.' print 'env.weboob_path /home/romain/.config/weboob/' print '# Monitored accounts. If this parameter is missing, all accounts' print '# will be displayed.' print 'env.boobank_monitored 0125XXXXXXXXXXXX@bnporc 0125XXXXXXXXXXXX@bnporc' print '# To prevent mass connections to bank websites, results are cached.' print '# You can set here the expiration delay (in seconds).' print 'env.boobank_cache_expire 7200' print '# If enabled, coming operations are added to the value of accounts\'' print '# balance.' print 'env.boobank_add_coming 1' print '# Cumulate accounts values' print 'env.boobank_cumulate 1' print '' print 'When you change configuration, you can use this command to reset cache:' print '$ boobank-munin --reset' def clear_cache(self): for name in ('boobank-munin', 'boobank-munin-config'): try: os.unlink(self.cachepath(name)) except IOError: pass def cachepath(self, name): tmpdir = os.path.join(self.weboob.workdir, "munin") if not os.path.isdir(tmpdir): os.makedirs(tmpdir) return os.path.join(tmpdir, name) def check_cache(self, name): return self.print_cache(name, check=True) def print_cache(self, name, check=False): try: f = open(self.cachepath(name), 'r') except IOError: return False try: last = int(f.readline().strip()) except ValueError: return False if check and (last + self.cache_expire) < time.time(): return False for line in f.xreadlines(): sys.stdout.write(line) return True def new_cache(self, name): os.umask(0077) new_name = '%s.new' % name filename = self.cachepath(new_name) try: f = open(filename, 'w') except IOError, e: print >>sys.stderr, 'Unable to create the cache file %s: %s' % (filename, e) return self.cache = f self.cache.write('%d\n' % time.time()) def flush_cache(self): old_name = self.cache.name new_name = self.cache.name[:-4] self.cache.close() os.rename(old_name, new_name) def write_output(self, line): sys.stdout.write('%s\n' % line) if self.cache: self.cache.write('%s\n' % line) def config(self): if self.check_cache('boobank-munin-config'): return self.new_cache('boobank-munin-config') self.weboob.load_backends(ICapBank) self.write_output('graph_title Bank accounts') self.write_output('graph_vlabel balance') self.write_output('graph_category weboob') self.write_output('graph_args -l 0') try: accounts = [] if self.monitored_accounts is not None: d = {} for backend, account in self.weboob.do('iter_accounts'): if self.monitored(account): d['%s@%s' % (account.id, account.backend)] = account for id in self.monitored_accounts: try: accounts.append(d[id]) except KeyError: pass else: accounts = reversed([a for b, a in self.weboob.do('iter_accounts')]) first = True for account in accounts: id = self.account2id(account) type = 'STACK' if first: type = 'AREA' first = False self.write_output('%s.label %s' % (id, account.label.encode('iso-8859-15'))) if self.cumulate: self.write_output('%s.draw %s' % (id, type)) except CallErrors, errors: self.print_errors(errors) self.print_cache('boobank-munin-config') else: self.flush_cache() def monitored(self, account): return not self.monitored_accounts or ('%s@%s' % (account.id, account.backend)) in self.monitored_accounts def account2id(self, account): return '%s_%s' % (account.backend, account.id) def print_errors(self, errors): for backend, err, backtrace in errors: print >>sys.stderr, (u'%s(%s): %s' % (type(err).__name__, backend.name, err)).encode(sys.stdout.encoding or locale.getpreferredencoding(), 'replace') if isinstance(err, BrowserIncorrectPassword): self.weboob.backends_config.edit_backend(backend.name, backend.NAME, {'_enabled': False}) def execute(self): if self.check_cache('boobank-munin'): return self.new_cache('boobank-munin') self.weboob.load_backends(ICapBank) try: for backend, account in self.weboob.do('iter_accounts'): if self.monitored(account): balance = account.balance if account.coming and self.add_coming: balance += account.coming self.write_output('%s.value %d' % (self.account2id(account), balance)) except CallErrors, errors: self.print_errors(errors) self.print_cache('boobank-munin') else: self.flush_cache() def run(self): cmd = (len(sys.argv) > 1 and sys.argv[1]) or "execute" if cmd == 'execute': self.execute() elif cmd == 'config': self.config() elif cmd == 'autoconf': print 'no' sys.exit(1) elif cmd == 'suggest': sys.exit(1) elif cmd == 'help' or cmd == '-h' or cmd == '--help': self.display_help() elif cmd == 'reload' or cmd == '--reload' or \ cmd == 'reset' or cmd == '--reset': self.clear_cache() if self.cache: self.cache.close() sys.exit(0) if __name__ == '__main__': logging.basicConfig() BoobankMuninPlugin().run() weboob-0.g/contrib/boobot.py000077500000000000000000000272471217741004600162340ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright(C) 2012 Romain Bignon # # This file is part of weboob. # # weboob is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # weboob is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . import logging import re import os import sys import codecs from threading import Thread, Event from math import log import urlparse import urllib from irc.bot import SingleServerIRCBot import mechanize from mechanize import _headersutil as headersutil from mechanize._html import EncodingFinder from weboob.core import Weboob from weboob.tools.browser import StandardBrowser, BrowserUnavailable from weboob.tools.misc import get_backtrace from weboob.tools.misc import to_unicode from weboob.tools.storage import StandardStorage IRC_CHANNELS = os.getenv('BOOBOT_CHANNELS', '#weboob').split(',') IRC_NICKNAME = os.getenv('BOOBOT_NICKNAME', 'boobot') IRC_SERVER = os.getenv('BOOBOT_SERVER', 'chat.freenode.net') IRC_IGNORE = [re.compile(i) for i in os.getenv('BOOBOT_IGNORE', '!~?irker@').split(',')] STORAGE_FILE = os.getenv('BOOBOT_STORAGE', 'boobot.storage') def fixurl(url): url = to_unicode(url) # remove javascript crap url = url.replace('/#!/', '/') # parse it parsed = urlparse.urlsplit(url) # divide the netloc further userpass, at, hostport = parsed.netloc.rpartition('@') user, colon1, pass_ = userpass.partition(':') host, colon2, port = hostport.partition(':') # encode each component scheme = parsed.scheme.encode('utf8') user = urllib.quote(user.encode('utf8')) colon1 = colon1.encode('utf8') pass_ = urllib.quote(pass_.encode('utf8')) at = at.encode('utf8') host = host.encode('idna') colon2 = colon2.encode('utf8') port = port.encode('utf8') path = '/'.join(pce.encode('utf8') for pce in parsed.path.split('/')) # while valid, it is most likely an error path = path.replace('//', '/') query = parsed.query.encode('utf8') fragment = parsed.fragment.encode('utf8') # put it back together netloc = ''.join((user, colon1, pass_, at, host, colon2, port)) return urlparse.urlunsplit((scheme, netloc, path, query, fragment)) class HeadRequest(mechanize.Request): def get_method(self): return "HEAD" class BoobotBrowser(StandardBrowser): ENCODING = None DEFAULT_TIMEOUT = 3 def urlinfo(self, url, maxback=2): if urlparse.urlsplit(url).netloc == 'mobile.twitter.com': url = url.replace('mobile.twitter.com', 'twitter.com', 1) try: r = self.openurl(HeadRequest(url), _tries=2, _delay=0.2) body = False except BrowserUnavailable as e: if u'HTTP Error 501' in unicode(e) or u'HTTP Error 405' in unicode(e): r = self.openurl(url, _tries=2, _delay=0.2) body = True elif u'HTTP Error 404' in unicode(e) \ and maxback and not url[-1].isalnum(): return self.urlinfo(url[:-1], maxback-1) else: raise e headers = r.info() content_type = headers.get('Content-Type') try: size = int(headers.get('Content-Length')) hsize = self.human_size(size) except TypeError: size = None hsize = None is_html = headersutil.is_html([content_type], url, True) title = None if is_html: if not body: r = self.openurl(url, _tries=2, _delay=0.2) # update size has we might not have it from headers size = len(r.read()) hsize = self.human_size(size) r.seek(0) encoding = EncodingFinder('windows-1252').encoding(r).lower() try: h = self.get_document(r, parser='lxml', encoding=encoding) for meta in h.xpath('//head/meta'): # meta http-equiv=content-type content=... if meta.attrib.get('http-equiv', '').lower() == 'content-type': for k, v in headersutil.split_header_words([meta.attrib.get('content', '')]): if k == 'charset': encoding = v # meta charset=... encoding = meta.attrib.get('charset', encoding).lower() except Exception as e: print e finally: r.seek(0) if encoding == 'iso-8859-1' or not encoding: encoding = 'windows-1252' try: codecs.lookup(encoding) except LookupError: encoding = 'windows-1252' try: h = self.get_document(r, parser='lxml', encoding=encoding) for title in h.xpath('//head/title'): title = to_unicode(title.text_content()).strip() title = ' '.join(title.split()) if urlparse.urlsplit(url).netloc.endswith('twitter.com'): for title in h.getroot().cssselect('.permalink-tweet .tweet-text'): title = to_unicode(title.text_content()).strip() title = ' '.join(title.splitlines()) except AssertionError as e: # invalid HTML print e return content_type, hsize, title def human_size(self, size): if size: units = ('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB') exponent = int(log(size, 1024)) return "%.1f %s" % (float(size) / pow(1024, exponent), units[exponent]) return '0 B' class MyThread(Thread): daemon = True def __init__(self, bot): Thread.__init__(self) self.weboob = Weboob(storage=StandardStorage(STORAGE_FILE)) self.weboob.load_backends() self.bot = bot self.bot.weboob = self.weboob def run(self): for ev in self.bot.joined.itervalues(): ev.wait() self.weboob.repeat(300, self.check_board) self.weboob.repeat(600, self.check_dlfp) self.weboob.loop() def find_keywords(self, text): for word in [ 'weboob', 'videoob', 'havesex', 'havedate', 'monboob', 'boobmsg', 'flatboob', 'boobill', 'pastoob', 'radioob', 'translaboob', 'traveloob', 'handjoob', 'boobathon', 'boobank', 'boobtracker', 'comparoob', 'wetboobs', 'webcontentedit', 'weboorrents', u'sàt', u'salut à toi', 'assnet', 'budget insight', 'budget-insight', 'budgetinsight', 'budgea']: if word in text.lower(): return word return None def check_dlfp(self): for backend, msg in self.weboob.do('iter_unread_messages', backends=['dlfp']): word = self.find_keywords(msg.content) if word is not None: url = msg.signature[msg.signature.find('https://linuxfr'):] self.bot.send_message('[DLFP] %s talks about %s: %s' % ( msg.sender, word, url)) backend.set_message_read(msg) def check_board(self): def iter_messages(backend): with backend.browser: return backend.browser.iter_new_board_messages() for backend, msg in self.weboob.do(iter_messages, backends=['dlfp']): word = self.find_keywords(msg.message) if word is not None and msg.login != 'moules': message = msg.message.replace(word, '\002%s\002' % word) self.bot.send_message('[DLFP] <%s> %s' % (msg.login, message)) def stop(self): self.weboob.want_stop() self.weboob.deinit() class Boobot(SingleServerIRCBot): def __init__(self, channels, nickname, server, port=6667): SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname) # self.connection.add_global_handler('pubmsg', self.on_pubmsg) self.connection.add_global_handler('join', self.on_join) self.connection.add_global_handler('welcome', self.on_welcome) self.mainchannel = channels[0] self.joined = dict() for channel in channels: self.joined[channel] = Event() self.weboob = None def on_welcome(self, c, event): for channel in self.joined.keys(): c.join(channel) def on_join(self, c, event): # irclib 5.0 compatibility if callable(event.target): channel = event.target() else: channel = event.target self.joined[channel].set() def send_message(self, msg, channel=None): for m in msg.splitlines(): self.connection.privmsg(channel or self.mainchannel, m) def on_pubmsg(self, c, event): # irclib 5.0 compatibility if callable(event.arguments): text = ' '.join(event.arguments()) channel = event.target() nick = event.source() else: text = ' '.join(event.arguments) channel = event.target nick = event.source for ignore in IRC_IGNORE: if ignore.search(nick): return for m in re.findall('([\w\d_\-]+@\w+)', text): for msg in self.on_boobid(m): self.send_message(msg, channel) for m in re.findall(u'(https?://[^\s\xa0+]+)', text): for msg in self.on_url(m): self.send_message(msg, channel) def on_boobid(self, boobid): _id, backend_name = boobid.split('@', 1) if backend_name in self.weboob.backend_instances: backend = self.weboob.backend_instances[backend_name] for cap in backend.iter_caps(): func = 'obj_info_%s' % cap.__name__[4:].lower() if hasattr(self, func): try: for msg in getattr(self, func)(backend, _id): yield msg except Exception as e: print get_backtrace() yield 'Oops: [%s] %s' % (type(e).__name__, e) break def on_url(self, url): url = fixurl(url) try: content_type, hsize, title = BoobotBrowser().urlinfo(url) if title: yield u'URL: %s' % title elif hsize: yield u'URL (file): %s, %s' % (content_type, hsize) else: yield u'URL (file): %s' % content_type except BrowserUnavailable as e: yield u'URL (error): %s' % e except Exception as e: print get_backtrace() yield 'Oops: [%s] %s' % (type(e).__name__, e) def obj_info_video(self, backend, id): v = backend.get_video(id) if v: yield u'Video: %s (%s)' % (v.title, v.duration) def obj_info_housing(self, backend, id): h = backend.get_housing(id) if h: yield u'Housing: %s (%sm² / %s%s)' % (h.title, h.area, h.cost, h.currency) def main(): logging.basicConfig(level=logging.DEBUG) bot = Boobot(IRC_CHANNELS, IRC_NICKNAME, IRC_SERVER) thread = MyThread(bot) thread.start() try: bot.start() except KeyboardInterrupt: print "Stopped." thread.stop() if __name__ == "__main__": sys.exit(main()) weboob-0.g/contrib/downloadboob/000077500000000000000000000000001217741004600170305ustar00rootroot00000000000000weboob-0.g/contrib/downloadboob/README000066400000000000000000000014411217741004600177100ustar00rootroot00000000000000This script can be used to automatically download videos matching some criteria. To avoid to download a video twice, all videos are stored in an unique way : .files//.avi For each entry in the configuration file, the script : - check for new video - download the new videos - create a link from /.avi to .files//