From 021be1287d428e3a241a9f615c68feeab8a3c41b Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 4 Dec 2023 19:10:22 +0800 Subject: [PATCH 01/49] version --- LICENSE | 674 ------------------ README.md | 29 - SimpleError/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 130 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 128 bytes SimpleError/__pycache__/error.cpython-310.pyc | Bin 0 -> 477 bytes SimpleError/__pycache__/error.cpython-39.pyc | Bin 0 -> 473 bytes SimpleError/error.py | 3 + api/__init__.py | 0 api/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 120 bytes api/__pycache__/api_all.cpython-39.pyc | Bin 0 -> 5255 bytes api/api_all.py | 230 ++++++ basic_info/user.txt | 12 - basic_info/week_diary | 223 ------ config/__init__.py | 0 config/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 125 bytes config/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 123 bytes config/__pycache__/info.cpython-310.pyc | Bin 0 -> 657 bytes config/__pycache__/info.cpython-39.pyc | Bin 0 -> 1564 bytes config/info.py | 39 + createSign/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 127 bytes createSign/__pycache__/sign.cpython-39.pyc | Bin 0 -> 373 bytes createSign/sign.py | 7 + decryptencrypt/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 131 bytes .../__pycache__/encrypt.cpython-39.pyc | Bin 0 -> 504 bytes .../__pycache__/encrypt_md5.cpython-39.pyc | Bin 0 -> 351 bytes decryptencrypt/decryot.py | 17 + decryptencrypt/encrypt.py | 14 + decryptencrypt/encrypt_md5.py | 9 + local_clock.py | 306 -------- main.py | 71 ++ requirement.txt | 3 - tast.py | 0 textHandle/__init__.py | 0 textHandle/count.py | 28 + user_config.json | 1 + 38 files changed, 419 insertions(+), 1247 deletions(-) delete mode 100644 LICENSE delete mode 100644 README.md create mode 100644 SimpleError/__init__.py create mode 100644 SimpleError/__pycache__/__init__.cpython-310.pyc create mode 100644 SimpleError/__pycache__/__init__.cpython-39.pyc create mode 100644 SimpleError/__pycache__/error.cpython-310.pyc create mode 100644 SimpleError/__pycache__/error.cpython-39.pyc create mode 100644 SimpleError/error.py create mode 100644 api/__init__.py create mode 100644 api/__pycache__/__init__.cpython-39.pyc create mode 100644 api/__pycache__/api_all.cpython-39.pyc create mode 100644 api/api_all.py delete mode 100644 basic_info/user.txt delete mode 100644 basic_info/week_diary create mode 100644 config/__init__.py create mode 100644 config/__pycache__/__init__.cpython-310.pyc create mode 100644 config/__pycache__/__init__.cpython-39.pyc create mode 100644 config/__pycache__/info.cpython-310.pyc create mode 100644 config/__pycache__/info.cpython-39.pyc create mode 100644 config/info.py create mode 100644 createSign/__init__.py create mode 100644 createSign/__pycache__/__init__.cpython-39.pyc create mode 100644 createSign/__pycache__/sign.cpython-39.pyc create mode 100644 createSign/sign.py create mode 100644 decryptencrypt/__init__.py create mode 100644 decryptencrypt/__pycache__/__init__.cpython-39.pyc create mode 100644 decryptencrypt/__pycache__/encrypt.cpython-39.pyc create mode 100644 decryptencrypt/__pycache__/encrypt_md5.cpython-39.pyc create mode 100644 decryptencrypt/decryot.py create mode 100644 decryptencrypt/encrypt.py create mode 100644 decryptencrypt/encrypt_md5.py delete mode 100644 local_clock.py create mode 100644 main.py delete mode 100644 requirement.txt create mode 100644 tast.py create mode 100644 textHandle/__init__.py create mode 100644 textHandle/count.py create mode 100644 user_config.json diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 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 General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is 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. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - 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. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - 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 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. Use with the GNU Affero General Public License. - - 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 Affero 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 special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 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 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 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 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - 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 GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/README.md b/README.md deleted file mode 100644 index c90d744..0000000 --- a/README.md +++ /dev/null @@ -1,29 +0,0 @@ -``` -工学云&蘑菇钉支持任意地区打卡,周报提交,以及本月打卡补签,以及周报补交。 -``` -**2022-12-7** - 新增的自动登录 -## 下载配置 -先将文件下载到本地,执行pip install -r requirement.txt安装需要的库 - -配置:basic_info文件夹下user.txt - -模板: -{"phone":"138 xxxx xxxx", \ -"password":"123456",\ -"地址全称":"北京市 xxx xxx xxx",\ -"经度":"23.xxxxx",\ -"纬度":"114.xxxxx",\ -"start_time":"08",\ -"end_time":"20", - buqian:false ,//若为true,则会补签**本月**所有未签到的日期,!!!是所有(只支持补签上班或下班) - weekly:false,//若为true,则提交当前周周报 - remedy:false, //是否补交周报(只有weekly为true的时候才能用,同时本周周报也会提交) - requirement_week_num:5,//需要补交前几周周报的数量, - } -默认是早8和晚8打卡,可以自行跟改,是否提交周报默认false -经纬度可以用 https://api.map.baidu.com/lbsapi/getpoint/ 来获取 - -## 使用 -运行**local_clock.py** -week_diary中可以添加周报的内容,里面有默认配置 diff --git a/SimpleError/__init__.py b/SimpleError/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/SimpleError/__pycache__/__init__.cpython-310.pyc b/SimpleError/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06c0c778ba20a377858b14b702d92401f1038576 GIT binary patch literal 130 zcmd1j<>g`kf;*=(Q$h4&5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!Hji&ac|eqMS- zX=-I@UQBRiZb43}Yf({tQA~V%W?p7Ve7s&kg`kf;*=(Q$h4&5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!Hji&ac|eqMS- xX=-I@UQBRiZb43}Yf({tQA~V%W?p7Ve7s&kS5S~p^O{;+(a`fb_mp*`qh*-RN=`93?kZeO_^W$yz^!?^y7#S5S~p^O{)P9J$mxiOCLZ)L@eIC^cDg`NVXxe`EfUaR=l;)lfFma#V6RS zkKoOdGf9y+@XgNb>^I-HaS%*^;{7w1DV<;348x=5j$o#g9wCKP>5mo$Bs-}OKp9`yv!R!y7G)vE9=ENGY4VEh>41gK|H|E)x&j^Rb{qr<)$s8 zfp#R>!MxsRcF)3w6NuO8;MM$3X2g@~Z5v2mEdm^R0i=8@S~q-vsytbQx*` literal 0 HcmV?d00001 diff --git a/SimpleError/error.py b/SimpleError/error.py new file mode 100644 index 0000000..e629f44 --- /dev/null +++ b/SimpleError/error.py @@ -0,0 +1,3 @@ +class SimpleError(BaseException): + def __init__(self, *args): + super().__init__(*args) diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/__pycache__/__init__.cpython-39.pyc b/api/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfba9395bddf7da82d440ef2cf888f9cd9e36620 GIT binary patch literal 120 zcmYe~<>g`kf~y@FsUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2DO#VRH}KQFza pG_|rcFD9`dGbTPhGcU6wK3=b&@)n0pZhlH>PO2S9+h-tV0051C7}Wp( literal 0 HcmV?d00001 diff --git a/api/__pycache__/api_all.cpython-39.pyc b/api/__pycache__/api_all.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..030a1030c91bb256dbea8ef7027476913131affc GIT binary patch literal 5255 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 DAfQrJ literal 0 HcmV?d00001 diff --git a/api/api_all.py b/api/api_all.py new file mode 100644 index 0000000..cae5da6 --- /dev/null +++ b/api/api_all.py @@ -0,0 +1,230 @@ +import calendar +import json +import logging +import random +import time +from functools import wraps + +import requests + +from SimpleError.error import SimpleError +from createSign.sign import create_sign +from decryptencrypt.encrypt import aes_encrypt +from textHandle.count import count_day + +# info api log +logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, + datefmt="%Y-%m-%d %I:%M:%S") +api_module_log = logging.getLogger("api_module") +headers = { + 'Host': 'api.moguding.net:9000', + 'accept-language': 'zh-CN,zh;q=0.8', + 'user-agent': 'Mozilla/5.0 (Linux; U; Android 9; zh-cn; SM-G977N Build/LMY48Z) AppleWebKit/533.1 (KHTML, like Gecko) Version/5.0 Mobile Safari/533.1', + 'authorization': "", + 'rolekey': "", + 'content-type': 'application/json; charset=UTF-8', + 'content-length': '161', + 'accept-encoding': 'gzip', + 'cache-control': 'no-cache' +} +# basic url +basic_url = "https://api.moguding.net:9000/" + + +# save token +def save_token(user_login_info): + user_login_info.to_save_local(user_login_info.__dict__) + + +# repeat +def repeat_api(func): + @wraps(func) + def repeat(*args, **kwargs): + try: + func(*args, **kwargs) + except SimpleError as e: + api_module_log.error(e) + get_token_userid(*args, **kwargs) + api_module_log.info('token 刷新成功') + func(*args) + + return repeat + + +# login +def get_token_userid(user_info): + url = 'session/user/v3/login' + # param + data = {"password": aes_encrypt(user_info.password), "loginType": "android", + "t": aes_encrypt(int(time.time() * 1000)), "uuid": "", "phone": aes_encrypt(user_info.phone)} + try: + rsp = requests.post(headers=headers, url=basic_url + url, data=json.dumps(data)).json() + except Exception as f: + api_module_log.error(f) + raise SimpleError("大概率ip被拉黑了(deny),当前环境可能存在问题(处于服务器上或开了代理,非国内代理)") + data = rsp['data'] + user_info.token = data["token"] + user_info.user_id = data['userId'] + + +@repeat_api +# get plan +def get_plan(user_login_info) -> None: + url = 'practice/plan/v3/getPlanByStu' + # params + data = {"state": ''} + # add header + headers['sign'] = create_sign(user_login_info.user_id, 'student') + headers['authorization'] = user_login_info.token + # return rsp + rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() + # check response + handle_response(rsp) + # response success + plan_id = rsp["data"][0]['planId'] + user_login_info.plan_id = plan_id + # save plan id + user_login_info.to_save_local(user_login_info.__dict__) + + +@repeat_api +# clock in +def clock_in(user_login_info) -> None: + url = 'attendence/clock/v2/save' + # judge clock in + now = time.strftime('%H', time.localtime()) + upload_type = "START" + if now == user_login_info.start_time or now == user_login_info.end_time: + upload_type = "START" if int(now) <= 12 else "END" + else: + api_module_log.info('未到打卡时间,已退出') + return + # exit(-1) + api_module_log.info("开始打卡") + # params + data = {"device": "Android", + "address": user_login_info.address, + "t": aes_encrypt(int(time.time() * 1000)), + "description": "", + "country": "中国", + "longitude": user_login_info.longitude, + "city": user_login_info.city, + "latitude": user_login_info.latitude, + "planId": user_login_info.plan_id, + "province": user_login_info.province, + "type": upload_type} + # change header + # "Android" + state + plan_id + user_id + address + headers['sign'] = create_sign("Android", upload_type, user_login_info.plan_id, user_login_info.user_id, + user_login_info.address) + headers['authorization'] = user_login_info.token + rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) + # save token + save_token(user_login_info) + + +@repeat_api +# repeat clock in +def repeat_clock_in(user_login_info, date): + url = 'attendence/attendanceReplace/v2/save' + data = {"device": "Android", + "address": user_login_info.address, + "t": aes_encrypt(int(time.time() * 1000)), + "description": "", + "country": "中国", + "longitude": user_login_info.longitude, + # no verify + 'createTime': f'{date} 0{random.randint(8, 9)}:{random.randint(10, 59)}:{random.randint(10, 59)}', + "city": user_login_info.city, + "latitude": user_login_info.latitude, + "planId": user_login_info.plan_id, + "province": user_login_info.province, + "type": "START"} + headers['sign'] = create_sign("Android", "START", user_login_info.plan_id, user_login_info.user_id, + user_login_info.address) + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) + + +@repeat_api +# get previous clock in log +def get_previous_month_data(user_login_info): + year, now_month, now_day = [int(i) for i in time.strftime('%Y:%m:%d', time.localtime()).split(':')] + url = 'attendence/clock/v1/listSynchro' + api_module_log.info('获取上个月打卡日期') + # handle year and month + year = year if now_month != 1 else year - 1 + previous_month = now_month - 1 if now_month > 1 else 12 + previous_month_day_end = calendar.monthrange(year, previous_month)[1] + previous_month_data = {"endTime": f"{year}-{previous_month}-{previous_month_day_end} 23:59:59", + "startTime": f"{year}-{previous_month}-1 00:00:00"} + # sign exist + if headers.get('sign'): + headers.pop('sign') + # update token + headers['authorization'] = user_login_info.token + rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(previous_month_data)).json() + handle_response(rsp) + # clock in count + day_set = count_day(rsp) + # 上个月能打卡的天数 + previous_day = set([day for day in range(calendar.monthrange(year, previous_month)[1])][-(31 - now_day):]) + # 未打卡日期 + empty_day = day_set ^ previous_day + api_module_log.info("上月补签阻塞3~15秒") + for day in empty_day: + time.sleep(random.randint(3, 15)) + api_module_log.info(f'补签:{previous_month}-{day}') + repeat_clock_in(user_login_info, date=f"{year}-{previous_month}-{day}") + api_module_log.info("上个月补签已完成") + + +@repeat_api +# get clock in log +def get_attendance_log(user_login_info): + api_module_log.info("开始获取考勤记录") + url = 'attendence/clock/v1/listSynchro' + # get now month clock in log + year, now_month, now_day = [int(i) for i in time.strftime('%Y:%m:%d', time.localtime()).split(':')] + now_month_day_end = calendar.monthrange(year, now_month)[1] + data = {"endTime": f"{year}-{now_month}-{now_month_day_end} 23:59:59", + "startTime": f"{year}-{now_month}-1 00:00:00"} + # sign exist + if headers.get('sign'): + headers.pop('sign') + # update token + headers['authorization'] = user_login_info.token + api_module_log.info("获取本月考勤日期") + rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) + # save token + save_token(user_login_info) + # handle text + day_set = count_day(dict(rsp)) + empty_day = day_set ^ set(range(1, now_day + 1)) + # repeat clock in + api_module_log.info("本月补签阻塞3~15秒") + for day in empty_day: + time.sleep(random.randint(3, 15)) + api_module_log.info(f'补签:{now_month}-{day}') + day = '0' + day if 10 > day else day + repeat_clock_in(user_login_info, date=f'{year}-{now_month}-{day} ') + # day > 30 + if 31 - now_day > 0: + get_previous_month_data(user_login_info) + # save token + save_token(user_login_info) + + +# check response +def handle_response(rsp: dict) -> None: + response_code = rsp['code'] + if response_code == 401: + raise SimpleError(f"token expire {rsp}") + elif response_code == 200: + api_module_log.info(f"成功:{rsp}") + else: + api_module_log.info(f'请检测请求带的参数或发送issues 错误信息:{rsp}') + api_module_log.info("其他错误,已退出") + exit() diff --git a/basic_info/user.txt b/basic_info/user.txt deleted file mode 100644 index 1f09419..0000000 --- a/basic_info/user.txt +++ /dev/null @@ -1,12 +0,0 @@ -{"phone":"13888888888", -"password":"123.comxxxxxx", -"地址全称":"山咔咔里", -"纬度":"23.xxxxxx", -"经度":"114.xxxxxxx", -"start_time":"08", -"end_time":"20", -"weekly":false, -"buqian": false, -"remedy": false, -"requirement_week_num":5 -} \ No newline at end of file diff --git a/basic_info/week_diary b/basic_info/week_diary deleted file mode 100644 index 1a6cf5b..0000000 --- a/basic_info/week_diary +++ /dev/null @@ -1,223 +0,0 @@ - - { - "content": "这是我实习的第一周,感觉到周围陌生的人都在打量自\n我,有些微的紧张,对自我工作的岗位还是比较模糊,刚进\n来就有点无所适从。这周慢慢的适应公司的节奏,跟随前辈\n的脚步对公司有了更多的了解,可是应当做一些什么事情有\n大概的了解,感觉应当不难。\n因为是刚刚加入公司, 对环境还不熟悉, 人也比较陌生,\n所以在工作中就是上司戳一下动一下,没有自我的想法。这\n一周的工作并不繁重,可能是照顾新人,任务比较简单,同\n事也挺好相处,并没有发生什么大的事故。在完成任务时因\n为手脚慢,可是仔细的做好每一个细节,可是没人催促,我\n感觉到放松,渐渐放开自我。经过几天的相处,慢慢大着胆\n子向同事请教问题,从与他们的交流中吸收知识,逐渐熟悉\n工作的流程,了解工作的意义,明白我应当要做到什么样的\n程度才能合格。\n" - }, - { - "content": "经过一周实习,熟悉了环境,对同事也有必须的了解,\n更重要的是慢慢增加的工作量表示我已经开始跟上脚步,给\n予我相当大的自信心。其实我找的工作与专业不太相关,没\n有经过足够的了解,可是经过一周的实习,我对做这份工作\n已经有了心理准备。刚刚开始都是最基础的杂活,从这一周\n开始,接下来的几周会断断续续给实习生做一个培训,了解\n公司的业务范围,我们又该做些什么,又能做些什么。\n在这一周的工作我明白了作为一名员工要多做多问少\n抱怨。对于不懂的进取寻找解决的办法,在自我份内的事情\n要做好,另外就是每个人都有状态不好的时候,不要将颓废\n的心境带入到工作中来, 调节好自我的心理状态, 避免失误。\n我努力适应着工作与人群,实习与正式的工作在时间的流逝\n中没有什么不一样了。\n" - }, - { - "content": "时间过得真快啊!这一周可能是注意到我的工作完成不\n错,每一次很仔细,于是我接到了我人生中第一份正式的工\n作任务,不再是给同事前辈打下手,我相信我必须会完成的\n很出色。指导我的师傅说,自从我来到公司之后一向仔细观\n察学习,做杂事也进取的完成,并且都没有大的错误,如果\n这一次能圆满完成就减少我打杂的时间,慢慢开始正式的工\n作,我意识到这是一次考验,如果我将这段时间学习的成果\n都体此刻这次任务中,会看见我的努力。我想说我必须不会\n辜负师傅您的期望,完美的完成任务。\n在接下来的日子里,我陷入了忙碌之中,查询资料,安\n排时间进行实践,在这个过程中,因为我是新人,不可避免\n的出现了一些错误,还有知识盲点。在师傅指导下,我还是\n顺利的将工作完成了。在这几天的学习中,我感到了自我的\n缺陷与不足,同时对一些约定俗成的规矩规范不够了解,没\n有成功的将理论与实际相结合。\n" - }, - { - "content": "不知不觉已经过半个月,已经慢慢适应了这样的生活,\n每一天都没有什么不一样, 按部就班的工作。 在这半个月里,\n我更加会利用时间,合理安排工作,除了学习本专业的知识\n一步步完成自我的毕业论文之外,还寻找与工作相关的专业\n知识来进行学习,不让自我拖同事后腿,希冀自我能够有一\n点用处,能够帮上忙。\n经过一段时间的实习生活,我已经渐渐改掉了以前日夜\n颠倒的作息习惯, 在学校的时候, 上课的时间并不是排满的,\n于是学生晚上就有时间玩手机到很晚,早上不起床,仅有上\n课才能打起精神。工作时有固定的上下班时间,不能迟到或\n早退,这就意味着要准时起床,保证充足的睡眠时间才能在\n工作中不偷懒。此刻我已经养成了早睡早起的好习惯,提前\n一点去往公司,准备一天的工作。\n" - }, - { - "content": "最终任务得到了师傅的夸奖,认可了这一段时间我的努\n力。我满怀信心踏上了新的征程,在师傅与同事的帮忙下深\n入学习本岗位知识,从最基础的规范开始,慢慢升级到各种\n工作相关需要记忆的知识,将大学里面学习到与工作相关的\n知识也捡起来。经过几天时间的刻苦钻研,大学里面学习到\n的一些知识有了用武之地,基本掌握了理论方面的知识,只\n剩下实际操作方面需要指导。\n在这一周我又领到了师傅分给我的任务,虽然只是他任\n务中比较边缘的一部分,可是就是一步步的向前进,慢慢深\n入才吸引人。工作中收获到的成就感,获得赞扬的满足感让\n人上瘾,不舍得放弃,攻下难关那一瞬间的喜悦,想让人一\n向一向做下去。在工作的过程中,我开始体会到师傅告诉我\n说,对工作充满期待是什么意思,就像在学生时代攻克一道\n难题时的成就感就算没有分数的显示也是高兴的,可是比之\n那还要让我觉得高兴。享受工作带给自我的欢乐,一样也是\n体验生活带给自我的乐趣。\n" - }, - { - "content": "经过不断地修改和完善,又仔仔细细的检查有没有错误\n和不到位的地方,总算能够提交任务了,并且比预定的时间\n还要早,我抑制不住自我的兴奋之情,一向徘徊在师傅的办\n公室门口,等待师傅的检查,以及听到他的肯定。\n等待的时间格外漫长,直到师傅进来,我整理好行装,\n佯装淡定的向他汇报工作完成的情景。师傅打断我的喋喋不\n休,微微颔首说明白了,等会我会看的,你先去做点其他事\n情。我多少有点沮丧,这种不上不下感觉真的不好受,就像\n等待判决的犯人,不明白自我做的是对是错,也不明白有没\n有下一次。走回自我的座位,我思考了良久才整理好自我的\n思绪,可是却又好像回到刚实习的时候,无所事事,没有干\n劲与动力。想想这样不行,打起精神鼓励了自我一番,不能\n就因为这一件事情否定自我,就算是失败了也积累了经验,\n对自我实习以来也做了一个总结,自我已经做了能够做得到\n的,为这一个月的实习生活交了一份满意的答卷。\n" - }, - { - "content": "俗话说的好,“一日之计在于晨。”每一天早起之后开\n始享受清晨的时光,每一天都是变化的,坚持一个好的心境\n去上班。简便安排好一天的时间,又开始了新的工作,将上\n一周的任务继续完成, 再仔细地检查, 交给师傅与同僚检验。\n过去的的这一个半月多,有无尽的感慨还有对接下来实习生\n涯的期待,每一天都有新的挑战。步入工作的正轨之后,不\n像之前那样,就算能规矩的做好一天的杂事,但心里总是着\n急的,在被考验的时候,还很担心自我是不是完成不好,是\n不是立刻就会被公司赶走,被师傅叱骂。在过程中对自我本\n事的质疑,没有自信心,在这一次次磨练中,我找到了自我\n的长处,也对之前的担心有一丝丝羞赧,是我自我太过杞人\n忧天。\n在这七周的工作中,我在师傅的调教下慢慢成长,我也\n领会到了他的意思。在工作时,要对自我充满信心,不自信\n就会被别人牵着鼻子走,跟着别人的思路完成属于自我的任\n务,没有主见在最终的作品中也会呈现出来。\n" - }, - { - "content": "学习是永无止境的,在这一个星期里,我学到了不仅仅\n在工作中要认真观察师傅与同事们是怎样应对紧急情景,并\n且迅速完美的处理掉之外,我还学到了平时生活中他们的一\n举一动有什么样做人的道理,每个人的性情就在这事件的处\n理中得以让人看清,每一个人都值得当上我人生的导师。\n在与人交往的过程中,在学校里与同学交流时、在公司\n里与同事交流时、与客户交谈时,每一个的度要靠自我把握\n好,怎样样将一些敏感的话题带入到话语中却又不引起人们\n的反感,再一个怎样与人的交谈中有效的提取信息,这都是\n我还要努力学习的。在观察中学习,在之后我请教师傅该如\n何做好这些事情,又该如何掌握好表达技巧,他笑了笑说:\n“刚开始肯定是什么都不懂一头乱撞,可是慢慢在实践中就\n会体会到该怎样说,这是一种只能意会不能言传的东西。”\n我并没有听太懂,可能这就是经验带给他的财富吧。\n" - }, - { - "content": "对自我有了信心之后,我的精神面貌发生了很大的改\n变,这是同事说的,不再紧张,跟着更加有条不紊,与人辩\n论也更加有说服力。我其实没有察觉自我的改变,可是这是\n在向好的方向发展,我还是很高兴的。这一周是第八周,我\n的实习生活也有两个月了,这是我长这么大以来第一次在外\n面独自的工作与生活,没有人仔细地照顾,没有人在身边排\n解情绪,也就这样过了两个月,交了新的朋友,开始了新生\n活。\n这么长的时间了,也足够我对同事的了解加深,在公司\n里面两个月的工作,让我感触最深的是公司员工之间的情\n感。在遇到困难时同心协力一齐奋斗, 成功时一齐分享喜悦,\n但更多是在平时隐藏在一举一动之中。天气冷了注意防寒,\n及时添加衣物,工作困难时,走到身边不经意的说出一句话\n就是一个点拨,让我茅塞顿开。\n" - }, - { - "content": "实习的时间长了,学到的东西多了,自我的生活也渐渐\n好了,每一天都有新鲜的趣事,想起实习前的茫然无措,此\n刻我也能从容的开始新生活。人可能往往就是如此,因为未\n知所以感到恐惧,因为从未尝试,所以不敢尝试,可是如果\n没有第一个吃螃蟹的人,谁又能明白螃蟹多么鲜美呢?\n在第十周,我突然就有了这样的感慨,因为师父又给了\n我一个新的任务,接任务时突然想起在对找工作的胆怯,害\n怕失败,只想缩在安全的乌龟壳里,可我还是勇敢的跨出了\n第一步。有了第一次的尝试,无论成功或者失败,第二次就\n不会太远。\n因为有了一次次失败的经验,我最终得到了成功。我也\n从中明白了一个道理,不要胆怯,也不要害怕失败,就算是\n完完全全陌生的事情,努力尝试过才明白自我有没有那个本\n事,仅有在尝试、失败、积累经验中不断提升自我,才会获\n得成功。\n" - }, - { - "content": "由于与老员工之间相处的越来越好,于是在工作上也给\n我带来了很多的便利。他们很耐心的给我讲解了一些工作上\n的注意事项,以及他们多年来的工作经验。我们不得不承认\n好的人际关系对我们自身的反正来说存在着重要的意义。不\n仅仅是个人也好还是企业也好,仅有在良好的人际关系下才\n会有良好的合作。良好的合作往往有助于我们工作的高效完\n成。能让我们事半功倍而不是事倍功半。这些体会都是在实\n习过程中所得到的,我最终明白在我们真正踏入社会之前为\n什么要进行实习。因为学校所教与我们的知识毕竟有限,仅\n有在实际的工作中我们才能学到更多的知识及体验。而这些\n体验是我们花再多的钱也不能购买的。因为这是只属于我们\n自我的,不会随着时间的流逝而被遗忘。" - }, - { - "content": "工作中,我们难免会犯错所以挨骂也是在所难免的。当\n这件事发生在我的身上的时候我才深刻体会到解释就是找\n理由,据理力争是没有用的。你对领导解释得越多结果就会\n变得更糟,所以主动承认错误是关键。由于认错态度良好于\n是领导也就随便骂骂也就算了。我们常常会做错事,也常常\n会被误解。在工作中不管我们是犯错还是被误解,我们首先\n要做的不是跟上级阐述我们犯错的理由首先要做的是承认\n错误。当被误解的时候我们不要忙着去解释,当领导处于愤\n怒之时,过多的争论只会让事情往更加恶劣的情景发展,倒\n不如听他说完然后道个歉。其实对于我们来说认错只可是是\n一件很简单的事情。并且关于误解,总会随着时间的的推移\n而水落石出的。所以没必要和上级激励力争,因为你们之间\n本来就是不平等的!\n" - }, - { - "content": "幸好上次的错误没有给领导留下太多的坏的印象,由于\n这阵子的工作完成的还算是比较好,于是领导在大家面前夸\n奖了我,也算是这阵子辛勤工作的回报吧。所以下班的时候\n觉得心境异常舒畅。我想这也许就是为什么马斯洛把自我价\n值的实现放在人类需要的最顶端的原因吧。每个人都需要自\n身的价值被肯定,当我们的价值得到实现的时候我们就会觉\n得愉悦,而当我们的不能得到他人的认可的时候我们就觉得\n难过。虽然这只是一个小小的夸奖, 但对于一个实习生来说,\n能在众多的老员工之间得到夸奖也算是小有成就感吧。因为\n不是我们所做的努力都是能够被人们所认可的,这就是为什\n么那么多人不能得志的原因。可是我相信上帝都是公平的,\n我们的努力必须能够得到回报的除非我们所做的努力还不\n够多。所以,不要放弃的太早不走下去你不明白你接下来遇\n到的是什么。\n" - }, - { - "content": "这一周我们的工作比较忙,大部分的时间里我们都是在\n加班。加班的时间多了工人的工资也就比较高了。虽然很累\n可是大部分的员工还是很高兴,也许对于我们这些刚出社会\n的人来说不太能够理解。在加班的过程中和一位老员工闲\n聊,在闲聊的过程中我得知原先他已经在这个厂里面工作了\n7、8 年。我很冒昧的问了他一个问题:为什么,在那里工作\n了那么多年还是一个普通员工。他没有责备我如此唐突。而\n是跟我说:那也没办法大字都不认识几个呢,怎样能去做那\n些工作呢?我突然觉得知识是多么的重要,虽然我们不能说\n一个人的学时就代表了一个人的本事,可是在如此功力、竞\n争如此大的社会。在必须的程度上一个人的学历代表着一个\n人的水平。因为没有企业有时间、并且愿意花时间去验证你\n到底有没有本事。所以只能经过一个人的学历来确定了。第\n一次觉得原先知识是那么的重要。" - }, - { - "content": "相比上一周,这一周的工作就稍微简便一点了也没有忙\n了。所以下班以后我们就有了更多的时间做自我的事情了,\n一般在下班的时候我们都会选择去运动运动。尽管上班也有\n点累了,可是至少能做一些自我喜欢做的事情也算是一种放\n松的方法。突然在运动中觉得学校的生活已经离我们越来越\n远了,好好像从来没有如此的怀念过我们的学校生活。当我\n们还在学校的时候我们曾拼命的想要逃离我们的学校生活\n可是真正步入社会以后才能明白,学校的生活是我们一生中\n最完美的时光。在上学的时候我们常常觉得压力很大,可是\n此刻才明白原先上学所带给我们的压力是人一生中所有的\n压力中最小的一部分。不得不说一句很俗的话:每个人都是\n这样,仅有在失去的时候才会觉得可贵" - }, - { - "content": "由于学校还有一些重要的事情要做的的原因,这个星期\n我们领导给我们批了几天假让我们回去学校处理一些事情。\n当我们走进学校,那种熟悉的感觉迎面而来。这种熟悉的感\n觉让我们每一个人都觉得心境异常的愉悦。虽然以后还不明\n白还有多少次机会踏进我们的学校,可是每个人都要成长,\n而成长中总伴随着得到与失去。所以我们不应当只看到自我\n失去的那部分,而忽略了自我得到的那一部分。还记得刚上\n大学的时候对这个学校的种种嫌弃。突然想起一句话:学校\n就是自我在心里骂一千遍但不允许别人骂一遍的地方。对\n啊,我们总是对我们的母校带着如此复杂的感情。我们很快\n就办完事情在学校多呆了一天以后我们就回到了工作的地\n方。不明白为什么的,从学校回来突然觉得好像觉得没有那\n么的累了⋯⋯\n" - }, - { - "content": "不知不觉中,来那里实习已经快两个月了,虽然时间已\n接近两个月,对工作也是越来越熟悉,可是有时还是会觉得\n力不从心。并且也失去了刚开始来实习的那种兴奋与好奇,\n觉得心境总是处在低谷当中,总是振奋不起来。在和领导的\n偶然闲聊的时候他很友好的跟我说:只要我用心地做,就会\n左右逢源。越做越觉乐趣,越做越起劲。听他说完顿时觉得\n茅塞顿开。有人说过:凡职业都具趣味味的,只要你肯干下\n去,趣味自然会发生。切忌不要粗心大意,马虎了事,心浮\n气躁。做任何事都一样,需要有恒心、细心和毅力,那才会\n到达成功的彼岸!对啊,每个职业都会有它的趣味所在的,\n像我之前所说的不走下去,我们不明白接下来会遇到什么。\n所以耐心等候吧。\n" - }, - { - "content": "在上一周和领导的闲聊之后,在这一周我反省了一下这\n阵子的工作状态。我突然意识到与其自怨自艾还不如干些别\n的事情来充实自我,于是我主动要求在空闲的时间去帮帮别\n的部门的忙。一方面我能够打发打发自我的时间,让自我变\n得充实而不至于自我的觉得生活无趣。另一方面,既然我们\n实习是为了学到更多的知识那就趁着实习的期间尽可能的\n去不一样的部门感受一下不一样部门的工作。也许这样对我\n们真正踏上社会的时候也是有所帮忙的。即使是生活无趣,\n其实我们也是可\n以让它变得趣味的。其实大部分的原因不在于生活,而\n是取决于我们带着怎样样的心态去看待生活。" - }, - { - "content": "由于这一周领导批准了我提出的要去别的部门帮忙的\n请求,在这一周我也正式到别的部门去帮忙了。所以会比以\n往更加的,忙碌一点。虽然如此,可是和以往的生活相比我\n倒是更加喜欢此刻的生活忙忙碌碌的。经过在别的部门帮\n忙,我发现每个部门的工作都是紧密相连的,而每个部门的\n价值也是相同的,仅有在每个部门的互补之中才能使整个企\n业的利润到达最大化。相反的只要任何一个部门稍有差池都\n会让整个企业的利益有所下降。所以,我觉得不管是哪一个\n企业都好,都应当加强企业个部门之间的联系,才能让企业\n在这个竞争强烈的社会生存下去。才能让企业立于不败之\n地。\n" - }, - { - "content": "慢慢的在别的部门的帮忙工作也慢慢熟悉了,得到了上\n级领导的好评及赞扬。相比刚进入这个公司的时候不管是在\n为人处世上还是在工作的处理本事上也有所提高了,慢慢觉\n得一个人不管工作本事有多强要是不懂得怎样去和别人相\n处一切都是空谈的。这个实习教给我们最多的不是让我们去\n如何运用我们的专业知识,不是让我们去获得更多的知识,\n而是让我们明白何如去生活。相信没有一个人不懂的如何生\n活,可是却不是所有人都懂得如何在这个社会上生活。经过\n在那里的观察我发现一般个性太强烈的人都不会再那里呆\n的太久,反倒是一些较为平和的人留了下来。我想了很久,\n也许是因为较为平和的人更加适应这个社会的发展趋势吧。" - }, - { - "content": "在这一个星期里,我还是像往常一样工作一样下班。没\n有什么异常的事情发生。有时候没有什么事情发生也是一件\n很好的事情。虽然生活没有什么惊喜可是却也是至少没有什\n么不好的事情。突然回过头去想在那里的那么多个日子,慢\n慢的好像已经很习惯。习惯那里的生活、那里的工作。日子\n好像也比之前想的要过的快一点,刚开始的时候以往想过要\n快点结束此刻也觉得还好。有时候我们觉得可能会很艰难的\n日子其实也是很快就过去了。所以我们总要对生活充满期\n望。\n" - }, - { - "content": "这个星期又犯了点小小的错。虽然领导没有过多的责备\n可是心里还是觉得又些许的过意不去。人都是这个样貌难免\n会有过错,首先要自我学会原谅自我。如果自我一向处于纠\n结之中不愿意给自我宽恕,那么别人又怎样来宽恕你呢?我\n们能够犯错可是不能一错再错。于是我这样安慰自我。在这\n样想之后自我也觉得心里好受一点,既然过去的事情已经不\n能再挽回了,那至少从此刻开始我们还能够好好把握,避免\n下一个错误的发生。也许生活没有必要太过于纠结。\n" - }, - { - "content": "我们都说社会这趟水太深。有时候和朋友闲聊都说说起\n诸如此类的事情,比如上级的什么亲戚被提升为了什么什\n么⋯⋯经过在这个企业那么长时间的实习,我不得不承认:\n不管是在任何一个地方都会有太多的潜规则。可是即使是这\n样我们还是不能被潜规则。我始终坚信只要是你有本事,只\n要是你能让企业有所发展,利益有所提高,不管是什么潜规\n则都会给你让步。与其抱怨还不如让自我更强一点,强大到\n有一天你会被别人看到为止⋯⋯\n" - }, - { - "content": "离实习结束的日子不远了,而实习结束了也就意味着我\n们很快就要真正踏入社会了。其实我在想在这段时间的实习\n过程中进入这个社会的各方面的准备呢?我想也许我已经\n做好了大部分的准备了,不管是心态上也好、生活上、工作\n上也好。在这个实习的过程中我们每一个人都在不知不觉中\n做好了准备。也许我们从来也没有发觉到这一点。我想这也\n许就是我们实习最大的意义吧。对于每一个刚出校门的我\n们,身上有太多的锐气以及娇气。我们就像是刚出山上开凿\n下来的石头,有太多的棱角。而这实习的几个月就像是刻石\n把我们打磨得更加的圆滑。仅有这样貌才能让我们更好的去\n适应这个社会。而不被社会所淘汰。我感激这个实习来得恰\n到好处,让我能够及时明白:怎样样的人才是这个社会真正\n需要的人。\n" - }, - { - "content": "到此刻为止我的实习工作就要接近尾声,我也即将结束\n在那里的实习工作。在这几个月里面带给我的感触太多太\n多,连自我也觉得奇怪到最终竟然有点舍不得,可是生活是\n向前的我们必须要忘前走。也许以后我们不再需要做如此艰\n辛的工作,也能够脱离低层的工作。可是我不会忘记这一段\n时间的实习所带与我的感受,不会忘记自我的原先的样貌。\n也许以后的路不会比此刻更加顺畅,可是我坚信,这几个月\n的实习都挺过来了那么以后的路上还有什么可怕的呢。我相\n信只要努力未来必须会越来越完美的。“实践是检验真理的\n唯一标准” ,经过这次实习, 我也发觉自我有许多不足之处,\n可是所谓真诚所至,金石为开。在今后的生活中,我会朝着\n自我的目标, 不断努力学习, 弥补不足, 为自我的梦想而奋。\n" - }, - { - "content": "图是弄好了,接下来是开始进行生产,调试。真是毛病\n重重,错误多多啊!产品刚出来进行调试微出现这样那样的\n毛病。之后才清楚明白是怎样一回事。可是经过这件事能够\n学到不少在学校所学不到的知识与经验,原先在设计绘图,\n这个零件是研究的并不单单是把图绘出来,还要了解一些关\n于市场方面的信息,比如说价格,一些常用的毛坯,怎样做\n起来才方便简洁,如何把他设计成又好又方便的产品。还要\n研究在加工过程中出现的误差,还有一些热处理方面的知识\n等等。如果不想到这些结果会是难以想象的,浪费时间上其\n次的,最重要的是公司经济的损失。\n" - }, - { - "content": "经过一个多月的实习,虽然对公司不是那么的太了解,\n可是多少不等也有所了解。天天做着一样的事,感觉得无比\n的枯燥仅有自我一个人坐在电脑面前一整天,仅有电脑从早\n到晚的陪者我,觉得好孤独,没有了以前在学校的那种欢声\n笑语,没有在学校的那种简便悠闲自在了,有的只是空虚和\n寂寞。有些时候闲下来就坐在电脑面前发呆, 不明白做什么。\n就这样一天一天的耗着,感觉除了工作以外,自我的生活中\n就没有其他的新鲜的事情, 或者是值得人去回忆, 留念的了,\n没有了色彩斑斓的生活,有的只是枯燥的工作有些时候都有\n点冲动想不干了,去换换别的工作,想给累积更多的社会知\n识和经验,可是想了想还没有那么的冲动,还是在原先的地\n方老实的待着。\n" - }, - { - "content": "虽然时间是过的那么的艰苦,可是还是有欢乐的时光\n的,那天我和师傅出去吃饭了,在饭桌上,师傅没有以前那\n一脸的严肃,让我感觉到自我和他们就像兄弟一样,并没有\n那么的陌生。在吃饭的时候叫我注意一些细节方面,并不象\n在学校大家在一齐吃饭那么的随便,要有必须的规矩和礼\n数。叫我如何去喝酒,虽然我不会喝,他们就让我少喝点,\n意思一下,叫怎样在那里结交新朋友,也好为自我以后在社\n会混多一条路,多见见世面。那天我们吃的很高兴,也很开\n心,我第一次感觉这样无拘无束。回到厂里的宿舍,呼吸着\n外面的空气,感觉到无比的舒畅,来到厂里最终有了一次真\n正的放松,心理觉得乐滋滋的。\n" - }, - { - "content": "经过了一段时间的工作,又开始踏上了新的征程,进行\n新的锻炼。经过一段时间的匆匆忙碌后,最终有了能够闲下\n来的一点时间。能够稍微的偷懒一下,好好的享受一下工作\n之余的欢乐。在这以后才上体验生活那种家庭生活的开始,\n开始我的新的工作:学习怎样做好日常生活中的细事,比如\n说说是挖排水沟,看似一件简单事,可是实际哂纳感做起来\n就显得的十分的棘手,对于我们刚步入社会的新大学生来说\n无疑是一个重大的考验,虽然我并不明白怎样去弄,更不明\n白如何弄好,可是我还是在其中努力的学习,领悟其中的心\n得。这些活原先在家里并要自我去做,但我在那里能够亲身\n的体验到家人的辛苦与劳累。仅有自我亲身经历,才能深刻\n体会。\n" - }, - { - "content": "上一周的劳累与辛苦使我牢记心理,可是这一周又学到\n新的东西,虽然简单可是也很容易出错,我和我一个师傅去\n浇水泥板, 在浇焊一块铁架子, 放在里面来增加的它的强度,\n以防被什么大型机器从上头走的时候压坏了,我看着师傅\n做,便好奇的问你为什么不做成和扳子一样大的架子呢?师\n傅起初并没有告诉我为什么这样做,我一向带着这样的疑\n问。之后和他一齐浇的时候才发现,如果和它弄成一样大的\n话结果就放不进去,或者说以后弄出来,边上就会不平齐,\n不仅仅外观上头不怎样好看,并且有些时候不注意的话,他\n人从它旁边经过的会弄伤其他人。这个虽然简单,也许在书\n上的时候大家都会说,但你一旦在真正实践的时候就会想不\n到,仅有实践了,才能更深的体会。\n" - }, - { - "content": "锻炼远不止这些,丛中学到东西才是最重要的。又有一\n件事情是我记忆犹新,那天天阴着,风吹着,冷极了。老板\n叫我们去刷树,这些简单的东西对于我来说都是没做过,不\n怎样会做。我都不怎样情愿去做,老板说了不得不做,正所\n谓在别人的屋檐下吃饭,不得不低头。硬着头皮拿着家伙干\n了起来,起初上一脸不愿意,慢慢做起来觉得里面还是有必\n须的学问,比如说一般树干要刷多高,才能到达保护树的最\n佳效果,书皮上头一般刷成什么样貌才能最好,怎样样刷才\n能使多有的白色在同意高度,怎样样刷才能让人看上去更加\n的美观舒服等等,从臆见小的事情上就能学到很多,只是有\n些时候自我并没有发现而已。" - }, - { - "content": "学习总是永无止境的,正所谓活到老学到老。公司是搞\n二手摊铺机的维修,这一次家里来个大家伙,要进行大修,\n这下好了一忙就大伙给忙坏了,大家一天到晚就开始为着这\n个大家伙弄来弄去,开始天天加班。一天从早到晚都干个不\n停,晚上还要加班,那几天真是一个尽的叫累啊!恨不得一\n下就过去, 事实是不可能的, 只能一天又一天在忙碌中度过。\n回头想想这几个星期感觉自我尝到人间的酸甜苦辣,感觉时\n光是度日如年,十分的难熬。有些时候整个人早上都不怎样\n想起来,盼望着什么时候能够放假休息一下,好好的放松个\n一天两天,最终结束了一个星期的劳累生活,回过头在想想\n这个星期的点点滴滴,不禁的笑了起来。" - }, - { - "content": "时间过的真是快啊!不知不觉的将近两个多月了。对于\n刚出学校的我来说生活的点滴都是一个学习的过程,比如说\n自我的日常生活,从学校出来了,什么都要靠自我,刚来厂\n里的时候,自我连做饭都不怎样会,有些时候都煮的不熟,\n正所谓在家里过惯了那中衣来伸手,反来张口的生活。开始\n几次都没做好,可是之后慢慢的适应了,越做越好了,同时\n自我也开始慢慢的学习做菜了,虽然做的不怎样好,可是自\n我还是每一天坚持的去做,相信总有一天会做好的,正所谓\n功夫不负有心人,我坚信总有一天会弄好的。离开了学校,\n怎样样去搞好自我的生活也是一个重要的过程。也是有很多\n地方值得自我去学习的,生活中处处能够学习,只要你去用\n心。\n" - }, - { - "content": "到了这一周说说我的感想最深刻的还是交际方面的。像\n我一个人在外面, 生活确实不容易。 俗话说的好在家靠家人,\n出门靠朋友。 出来交朋友是十分重要的, 而看准人, 看好人,\n交好人是更重要的,在结交新朋友之前要研究好这个人是否\n值得自我去交,看准人是交朋友的一个重要条件,看好人则\n是交朋友的一个中心环节,交好人则是最简单的了。我的公\n司虽然不怎样大,可是有几个人就有几种不一样的社会形\n态。有些时候我都会不禁的发出感慨,也许正因为社会上有\n这些不一样的人,不一样事,不用的物体才能构成这个复杂\n而又无奇不有的社会。社会真是让我感慨万千,如果说社会\n是大海,那我就是一滴水,终究会随着时间的流逝而滚入滔\n滔的大海随波逐流。\n" - }, - { - "content": "实习过半,真是实习时间多多,接触社会多多,学到的\n经验和社会知识更加的多多。 新鲜的事更是说不尽, 道不完。\n在工厂中发生的趣事,幽默的事也算不少。但这个星期我想\n说的是有些发生我们身边看上去不怎样起眼的事,可是当你\n亲手做起来的时候就会发现自我并不是像想象好做,那么的\n容易简单,这可能也就是我们平常所说的眼高手底吧!真是\n不做不明白,一做吓一跳。有些时候我都怎样敢相信自我会\n这么的差劲,可是事实就在眼前,事实是证明一切强有力的\n证据,我不得不相信这一切。这些虽然是小事,但能真正的\n反映一个人在处理这些事方面的本事,事实胜于雄辩,也许\n从这些事中我们能够学习到在处理小事方面应当谦虚谨慎\n一点。\n" - }, - { - "content": "人往往都是这样,没有经历过的话,永远都不明白事情\n到底是怎样一个样貌, 是真的那么难, 还是并非如此, 所以,\n不管怎样样,即使是自我完全陌生的事情,只要有机会,都\n必须要去尝试,努力去做好。因为没有经验,那么就需要做\n更多的准备工作。另外就是不要害怕失败,只要用心去做就\n能够了。等到熟练了,那么成功将是水到渠成的事情。比如\n我的第一次做那些不起眼的小事时,虽然我做得不够好,或\n者能够说失败了,但经过这次的尝试,却令我获益匪浅,对\n我之后的几次任务的成功都起到了极大的推动作用。自我也\n经过不断的经历和尝试检验了自身的水平和适应本事。仅有\n经过不断的努力,不断的尝试,不断的积累经验,才能够发\n现自我的不足,然后在弥补不足的时候,我们便实实在在的\n提高了自我。所以,不管怎样,努力去做吧,告诉自我,只\n要用心,就能做得更好,更舒心。" - }, - { - "content": "时间过得真是飞快, 实习近三个多月了。 在这中间有苦,\n有甜,有累,有欢乐。实习期间真是感慨万千,总是有说不\n完的事,道不完的情,怎样说也说不完,每一天虽然都是我\n们这几个人可是,总会有不一样事在我们身边发生。经验总\n是藏在这些平常的事中,需要我们去发现,把它挖出来,化\n成自我的经验,仅有这样不断的积累,不段的学习,才能拥\n有更多,更好的宝贵的经验。有了这些经验才能在社会上占\n有有利的位置,才能在社会上站稳脚跟。也为以后在生活奠\n定坚实的基础,这周虽然没学到什么东西,可是回忆过去三\n个月的实习,总是那么令我难忘,毕竟这是我的第一次独自\n一人在外面工作生活,一个在笼子生活了十几年的小鸟,最\n终飞出父母的怀抱,在外独自奋斗。\n" - }, - { - "content": "有了自我的第一份工作,在除了不变的上班下班,其中\n还潜藏危机,要在实习中不段的学习,跟着节奏的发展,不\n能停滞在原地,要居安思危。要在实习中不断的提高,如果\n有本事的话,还要有超前意识,要把自我的潜在本事开掘出\n来,仅有不段的开动自我的大脑, 才能创造更好的物质生活。\n自我的命运掌握在自我的手里,需要去寻找,去探索。有些\n时候外部环境对于一个人的发展走向起到重要的影响,好的\n外部环境能够造就一个人,坏的环境也能够毁了一个人。所\n以不管在工作,或者以后在工作的时候就要研究好这些方面\n的因素,仅有在找工作前做一切准备才能把握自我的那块\n金。正所谓做到知己知彼才能在仗场上取得胜利,这样的道\n理同样适用于我们此刻,这样也算在为自我适应复杂的环境\n奠定基础。\n" - }, - { - "content": "一个星期的实习下来,总是有很多经验,有很多认识,\n自我总是有很多的感慨。也许在实习的这些天中,我也在逐\n渐的成长。在认识学习逐渐的成熟。每个人都会在时间潮流\n中不断认识自我,只可是是时间的长短的问题。所以待人要\n真诚,时时为人着想, 处处为人行事。 能够把自我溶入群体,\n而不耻向工人群众学习。要想在如今的社会中生存,就要吸\n收新的思想与知识,不断更新观念,趋于完善。这样才有利\n于思想与实际行动真正地结合,仅有在思想演练,才能在最\n短的时间里把自我要从事的行业中处于领先的地位进而起\n着不可替代的作用,因为我将会为它比其他人付出更多创造\n更多价值。我也应当得到我应得到的报酬与珍贵的经验。\n" - }, - { - "content": "这么长时间下来了,让我感触最深的还是一个情字,俗\n话说的好人非草木孰能无情,处处都有人情在。比如说当你\n独自一个人在搬一样重东西的时候,他会自动来帮你搭上一\n把,每次和他一齐做事的时候,他总会默默的承受的更多,\n不会因为我的不娴熟而责怪我,而是慢慢的在等待我,当我\n遇到不会做的事的时候,他总是会悄悄的走到我的身旁,细\n心的指导我, 让我渐渐的步入轨道, 当天渐渐的转冷的时候,\n他会不时的提醒你要多穿点衣服,在工作方面他是我的师\n傅,在生活方面他如同我的父母。 休息时间有时我们聊聊天,\n他在我生活中亦师益友。让我感觉到背加的温暖,虽说社会\n是残酷的,可是在每个角落还是存在着温暖。\n" - }, - { - "content": "在外面工作有苦,有甜,有辛酸,有欢乐。但总的来说\n对自我还上一个不错的锻炼。失败是成功之母,要想有成功\n就必定会有失败,要能承受住失败的打击,从失败中总结出\n经验,把它化成自我的知识为以后遇到同样的事或者是类似\n的事就不会出同样的错误,感觉每周还是多接触接触一些\n事,对我们的成长是有好处的,关键还是在于自我平时对一\n些事情的处理和总结,不管自我以后走到那里这个都是必须\n的,在工作的时候可是分的依靠师傅而自我不去动手,不去\n想。如果是这样的话,你永远不会得到提高,只能在社会的\n竞争中被淘汰,在工作中要不断的学习积累,完善自我,而\n不是得过且过。 要能做别人不能做的事, 吃别人不能吃的苦,\n有苦以后才能有甜。\n" - }, - { - "content": "记对于刚出来的我们来说,刚步入社会年轻好胜,心理\n比较浮躁都是在难免的,因为我们刚从学校里出来什么都不\n明白,不明白社会是个什么样貌,总是怀着好奇的心理去接\n触一下,总是想现实会像想象中的那么的好,可是往往会出\n乎人的意料,什么样的事情都会发生。什么样的结果都是难\n以预料的,自我的前途仍旧是一片黑暗,而我感觉到有种认\n识最可悲的,那就是出来不能够正确的认识自我的地位,拿\n不定主张, 没有主见的人, 往往经受不一点诱惑或者是打击。\n这样的人在处理事上头优柔寡断,到最终往往受伤最重的还\n是自我,正所谓当断不断,反受其乱。这就需要我们在以后\n的人生的道路上把握住方向,选择自我想要,所感兴趣的。" - }, - { - "content": "每个星期都有不一样事在我的身边发生,回头想想那些\n事,总是有些值得自我去学习回忆的,也许这些东西会和我\n在一齐,永远埋在我的脑海里。当年纪老的时候说不定想起\n这些事,那时候就会茫然的一笑,感觉那时候的我真的很幼\n稚,年轻,跟本就不明白什么,就明白成天在外面瞎混。说\n到这些感觉自我此刻有些远了,还是说此刻的我吧!自我已\n经出了学校,不在像以前那样的单纯了,感觉到自我的肩上\n的担子好重,在往后接踵而来的不仅仅是工作上的烦恼,生\n活上,家庭里的就慢慢的累积到自我的身上。也就是说在不\n知不觉中自我已经长大了不在以前那个动不动就爱哭,流鼻\n涕的那个小男孩了。也许这就是我在实习中的认识,要是没\n有这样的经历,估计我还没有那么深刻的认识。" - }, - { - "content": "时间过的真快啊!一转眼几个月的实习时间快过了。快\n要回学校了,我真是期待了好久,好想回学校重温一下那时\n在学校的感觉。天渐渐的冷了,但我热情仍旧没减,我对工\n作的热心仍旧还在。干了一段时间多少不等对自我此刻的工\n作也有些了解。不管此刻也好将来也罢,最重要的还是自我\n对工作的心态,如何控制好自我的心态是一个重要的问题。\n初此之外,还要靠自我的努力,自我能多学一点是一点,呀\n哦居安思危,要不断的独立思考,去发现问题,解决问题,\n提高自我的本事,发展自我的潜能,争取做到别人不会做的\n事,自我能够做出来。还要勤奋的动手,多亲手去做做,提\n高自我的实战经验。这样才能在社会上立于不败之地。\n" - }, - { - "content": "经过这次的实习,我对自我的专业有了更为详而深刻的\n了解,并且把它结合实际的经济生活中。应对许多十分棘手\n又无奈的问题,经过过去大学里所积累知识的,是远远不够\n的,因为那只是理论而已,我体会到了实际的工作与所学知\n识是有必须距离的,与应用知识的距离就更为遥远。今后需\n要针对处于实际环境进一步学习相关的知识。异常关注此刻\n的趋势,也许别人机会当作陷阱,可是自我必须要理智。我\n感到对自我感触最深的是, 提高自我交际本事, 跟别人合作。\n这段的实习时间虽然暂时的告一个段落,可是它留在我的是\n宝贵的经验,而不是一个简单的实习而已。我也会深深的感\n激学校能在毕业之前能够有一次这样的实习机会。" - }, - { - "content": "这周又恢复了平静,刚交了图,师傅也简便了一下,今\n日就看着没那么忙了,我就赶紧问了问师傅上一套住宅楼的\n关于防雷接地的一些我不明白的地方。师傅给我做了耐心的\n讲解。我顿时有种豁然开朗的感觉,自我看了好几天都不明\n白的问题,经师傅一点就明白了。真是感触颇深啊!我也要\n好好努力。\n" - }, - { - "content": "这周因为前两套图还没有彻底弄明白,师傅没有给我新\n的图纸,说让我这两天把前两套图纸都好好整理一下,把不\n明白的地方都统一做好标记或写在本上。明天给我集中处理\n一下,让我必须要认真看,尽量详细。于是在周末我开始了\n一天的看图,总结,记录问题工作。\n" - }, - { - "content": "我最终明白什么叫看着容易做起来难,我昨日画了一天\n的图,结果也没画多少,总是画了改,改了画,画了再改。\n前段时间看图纸的时候觉得都挺简单的,感觉要让我画肯定\n没问题,结果自我一动手就明白根本不是那么回事,看来这\n是一个大工程啊!\n" - }, - { - "content": "实习就快要结束了,今日是这张图的最终一部分,弱电\n的设计,由于设计院对弱电的要求都不高,都只是布一些信\n息点和信息插座什么的,具体的都是施工时视情景而定。所\n以弱电的图纸要求也不太高,师傅就只让我简单的做了整体\n设计。没有很详细。\n" - }, - { - "content": "经过这次综合实训的操作,使我比较系统地了解了制图\n基本程序和具体方法,加强了我在实习岗位上的实际操作本\n事,对所学的专业知识进行综合检验。同时也学会了人际交\n往,沟通方式及相关礼节方面的资料。这段实习时间,虽然\n很快就过去了,但学到的东西可不少,如何快速的适应公司\n的环境,融入企业的团体,如何更好的跟同事沟通,更好的\n完成既定的任务,这些都不是信手拈来的,都需要一个逐步\n的从点到面的认识,今日我学到的所有这些都是书本课堂上\n学不到的。\n“千里之行,始于足下”,这短暂而又充实的实习,我\n认为对我走向社会起到了一个桥梁的作用,过渡的作用,是\n人生的一段重要的经历,也是一个重要步骤,对将来走上工\n作岗位也有着很大帮忙。向他人虚心求教,与人礼貌交往等\n一些做人处世的基本原则都要在实际生活中认真的贯彻,好\n的习惯也要在实际生活中不断培养。这一段时间所学到的经\n验和知识是我一生中的一笔宝贵财富。这次实习也让我深刻\n了解到,和团体坚持良好的关系是很重要的。做事首先要学\n做人,要明白做人的道理,如何与人相处是现代社会的做人\n的一个最基本的问题。对于自我这样一个即将步入社会的人\n来说,需要学习的东西很多,他们就是最好的教师,正所谓\n“三人行,必有我师”,我们能够向他们学习很多知识、道\n理。\n实践是学生接触社会,了解社会,服务社会,运用所学\n知识实践自我的最好途径。亲身实践,而不是闭门造车。实\n现了从理论到实践再到理论的飞跃。增强了认识问题,分析\n问题,解决问题的本事。为认识社会,了解社会,步入社会\n打下了良好的基础。同时还需我们在以后的学习中用知识武\n装自我,用书本充实自我,为以后服务社会打下更坚固的基\n础!" - }, - { - "content": "到了这一周说说我的感想最深刻的还是交际方面的。像\n我一个人在外面, 生活确实不容易。 俗话说的好在家靠家人,\n出门靠朋友。 出来交朋友是十分重要的, 而看准人, 看好人,\n交好人是更重要的,在结交新朋友之前要研究好这个人是否\n值得自我去交,看准人是交朋友的一个重要条件,看好人则\n是交朋友的一个中心环节,交好人则是最简单的了。我的公\n司虽然不怎样大,可是有几个人就有几种不一样的社会形\n态。有些时候我都会不禁的发出感慨,也许正因为社会上有\n这些不一样的人,不一样事,不用的物体才能构成这个复杂\n而又无奇不有的社会。社会真是让我感慨万千,如果说社会\n是大海,那我就是一滴水,终究会随着时间的流逝而滚入滔\n滔的大海随波逐流。\n" - }, - { - "content": "时间过的真是快啊!不知不觉的将近两个多月了。对于\n刚出学校的我来说生活的点滴都是一个学习的过程,比如说\n自我的日常生活,从学校出来了,什么都要靠自我,刚来厂\n里的时候,自我连做饭都不怎样会,有些时候都煮的不熟,\n正所谓在家里过惯了那中衣来伸手,反来张口的生活。开始\n几次都没做好,可是之后慢慢的适应了,越做越好了,同时\n自我也开始慢慢的学习做菜了,虽然做的不怎样好,可是自\n我还是每一天坚持的去做,相信总有一天会做好的,正所谓\n功夫不负有心人,我坚信总有一天会弄好的。离开了学校,\n怎样样去搞好自我的生活也是一个重要的过程。也是有很多\n地方值得自我去学习的,生活中处处能够学习,只要你去用\n心。\n" - }, - { - "content": "铁架子,放在里面来增加的它的强度,以防被什么大型\n机器从上头走的时候压坏了,我看着师傅做,便好奇的问你\n为什么不做成和扳子一样大的架子呢?师傅起初并没有告\n诉我为什么这样做,我一向带着这样的疑问。之后和他一齐\n浇的时候才发现,如果和它弄成一样大的话结果就放不进\n去,或者说以后弄出来,边上就会不平齐,不仅仅外观上头\n不怎样好看,并且有些时候不注意的话,他人从它旁边经过\n的会弄伤其他人。这个虽然简单,也许在书上的时候大家都\n会说,但你一旦在真正实践的时候就会想不到, 仅有实践了,\n才能更深的体会。\n" - }, - { - "content": "实习的时间长了,学到的东西多了,自我的生活也渐渐\n好了,每一天都有新鲜的趣事,想起实习前的茫然无措,此\n刻我也能从容的开始新生活。人可能往往就是如此,因为未\n知所以感到恐惧,因为从未尝试,所以不敢尝试,可是如果\n没有第一个吃螃蟹的人,谁又能明白螃蟹多么鲜美呢?\n在第十周,我突然就有了这样的感慨,因为师父又给了\n我一个新的任务,接任务时突然想起在对找工作的胆怯,害\n怕失败,只想缩在安全的乌龟壳里,可我还是勇敢的跨出了\n第一步。有了第一次的尝试,无论成功或者失败,第二次就\n不会太远。\n因为有了一次次失败的经验,我最终得到了成功。我也\n从中明白了一个道理,不要胆怯,也不要害怕失败,就算是\n完完全全陌生的事情,努力尝试过才明白自我有没有那个本\n事,仅有在尝试、失败、积累经验中不断提升自我,才会获\n得成功。\n" - }, - { - "content": "由于与老员工之间相处的越来越好,于是在工作上也给\n我带来了很多的便利。他们很耐心的给我讲解了一些工作上\n的注意事项,以及他们多年来的工作经验。我们不得不承认\n好的人际关系对我们自身的反正来说存在着重要的意义。不\n仅仅是个人也好还是企业也好,仅有在良好的人际关系下才\n会有良好的合作。良好的合作往往有助于我们工作的高效完\n成。能让我们事半功倍而不是事倍功半。这些体会都是在实\n习过程中所得到的,我最终明白在我们真正踏入社会之前为\n什么要进行实习。因为学校所教与我们的知识毕竟有限,仅\n有在实际的工作中我们才能学到更多的知识及体验。而这些\n体验是我们花再多的钱也不能购买的。因为这是只属于我们\n自我的,不会随着时间的流逝而被遗忘。" - }, - { - "content": "工作中,我们难免会犯错所以挨骂也是在所难免的。当\n这件事发生在我的身上的时候我才深刻体会到解释就是找\n理由,据理力争是没有用的。你对领导解释得越多结果就会\n变得更糟,所以主动承认错误是关键。由于认错态度良好于\n是领导也就随便骂骂也就算了。我们常常会做错事,也常常\n会被误解。在工作中不管我们是犯错还是被误解,我们首先\n要做的不是跟上级阐述我们犯错的理由首先要做的是承认\n错误。当被误解的时候我们不要忙着去解释,当领导处于愤\n怒之时,过多的争论只会让事情往更加恶劣的情景发展,倒\n不如听他说完然后道个歉。其实对于我们来说认错只可是是\n一件很简单的事情。并且关于误解,总会随着时间的的推移\n而水落石出的。所以没必要和上级激励力争,因为你们之间\n本来就是不平等的!\n" - }, - { - "content": "幸好上次的错误没有给领导留下太多的坏的印象,由于\n这阵子的工作完成的还算是比较好,于是领导在大家面前夸\n奖了我,也算是这阵子辛勤工作的回报吧。所以下班的时候\n觉得心境异常舒畅。我想这也许就是为什么马斯洛把自我价\n值的实现放在人类需要的最顶端的原因吧。每个人都需要自\n身的价值被肯定,当我们的价值得到实现的时候我们就会觉\n得愉悦,而当我们的不能得到他人的认可的时候我们就觉得\n难过。虽然这只是一个小小的夸奖, 但对于一个实习生来说,\n能在众多的老员工之间得到夸奖也算是小有成就感吧。因为\n不是我们所做的努力都是能够被人们所认可的,这就是为什\n么那么多人不能得志的原因。可是我相信上帝都是公平的,\n我们的努力必须能够得到回报的除非我们所做的努力还不\n够多。所以,不要放弃的太早不走下去你不明白你接下来遇\n到的是什么。\n" - }, - { - "content": "这一周我们的工作比较忙,大部分的时间里我们都是在\n加班。加班的时间多了工人的工资也就比较高了。虽然很累\n可是大部分的员工还是很高兴,也许对于我们这些刚出社会\n的人来说不太能够理解。在加班的过程中和一位老员工闲\n聊,在闲聊的过程中我得知原先他已经在这个厂里面工作了\n7、8 年。我很冒昧的问了他一个问题:为什么,在那里工作\n了那么多年还是一个普通员工。他没有责备我如此唐突。而\n是跟我说:那也没办法大字都不认识几个呢,怎样能去做那\n些工作呢?我突然觉得知识是多么的重要,虽然我们不能说\n一个人的学时就代表了一个人的本事,可是在如此功力、竞\n争如此大的社会。在必须的程度上一个人的学历代表着一个\n人的水平。因为没有企业有时间、并且愿意花时间去验证你\n到底有没有本事。所以只能经过一个人的学历来确定了。第\n一次觉得原先知识是那么的重要。" - }, - { - "content": "相比上一周,这一周的工作就稍微简便一点了也没有忙\n了。所以下班以后我们就有了更多的时间做自我的事情了,\n一般在下班的时候我们都会选择去运动运动。尽管上班也有\n点累了,可是至少能做一些自我喜欢做的事情也算是一种放\n松的方法。突然在运动中觉得学校的生活已经离我们越来越\n远了,好好像从来没有如此的怀念过我们的学校生活。当我\n们还在学校的时候我们曾拼命的想要逃离我们的学校生活\n可是真正步入社会以后才能明白,学校的生活是我们一生中\n最完美的时光。在上学的时候我们常常觉得压力很大,可是\n此刻才明白原先上学所带给我们的压力是人一生中所有的\n压力中最小的一部分。不得不说一句很俗的话:每个人都是\n这样,仅有在失去的时候才会觉得可贵" - }, - { - "content": "由于学校还有一些重要的事情要做的的原因,这个星期\n我们领导给我们批了几天假让我们回去学校处理一些事情。\n当我们走进学校,那种熟悉的感觉迎面而来。这种熟悉的感\n觉让我们每一个人都觉得心境异常的愉悦。虽然以后还不明\n白还有多少次机会踏进我们的学校,可是每个人都要成长,\n而成长中总伴随着得到与失去。所以我们不应当只看到自我\n失去的那部分,而忽略了自我得到的那一部分。还记得刚上\n大学的时候对这个学校的种种嫌弃。突然想起一句话:学校\n就是自我在心里骂一千遍但不允许别人骂一遍的地方。对\n啊,我们总是对我们的母校带着如此复杂的感情。我们很快\n就办完事情在学校多呆了一天以后我们就回到了工作的地\n方。不明白为什么的,从学校回来突然觉得好像觉得没有那\n么的累了⋯⋯\n" - }, - { - "content": "不知不觉中,来那里实习已经快两个月了,虽然时间已\n接近两个月,对工作也是越来越熟悉,可是有时还是会觉得\n力不从心。并且也失去了刚开始来实习的那种兴奋与好奇,\n觉得心境总是处在低谷当中,总是振奋不起来。在和领导的\n偶然闲聊的时候他很友好的跟我说:只要我用心地做,就会\n左右逢源。越做越觉乐趣,越做越起劲。听他说完顿时觉得\n茅塞顿开。有人说过:凡职业都具趣味味的,只要你肯干下\n去,趣味自然会发生。切忌不要粗心大意,马虎了事,心浮\n气躁。做任何事都一样,需要有恒心、细心和毅力,那才会\n到达成功的彼岸!对啊,每个职业都会有它的趣味所在的,\n像我之前所说的不走下去,我们不明白接下来会遇到什么。\n所以耐心等候吧。\n" - }, - { - "content": "在上一周和领导的闲聊之后,在这一周我反省了一下这\n阵子的工作状态。我突然意识到与其自怨自艾还不如干些别\n的事情来充实自我,于是我主动要求在空闲的时间去帮帮别\n的部门的忙。一方面我能够打发打发自我的时间,让自我变\n得充实而不至于自我的觉得生活无趣。另一方面,既然我们\n实习是为了学到更多的知识那就趁着实习的期间尽可能的\n去不一样的部门感受一下不一样部门的工作。也许这样对我\n们真正踏上社会的时候也是有所帮忙的。即使是生活无趣,\n其实我们也是可\n以让它变得趣味的。其实大部分的原因不在于生活,而\n是取决于我们带着怎样样的心态去看待生活。" - }, -{ - "text": "未来的路太长总有一段路需要自己独行。专升本之路也是如此,通过最近几周的学习逐渐感受到升本之路的艰辛,不过没关系,坚持就是胜利,升本人加油呀! " -}, -{ - "text": "最近看的一本书写到:白发无凭吾老矣!青春不再汝知乎?年将弱冠非童子,学不成名岂丈夫? 这更加使我坚定了专升本的决心和毅力,新的一周又开始了 大家加油! " -}, -{ - "text": "一转眼又到了写周记的时候了,还是送上一句话:青春啊,永远是美好的,可是真正的青春,只属于这些力争上游的人,永远忘我劳动的人,永远谦虚的人。保证自己永远的谦逊,然后多学习,在升本途中,能够锻炼自己自学的能力,也能够提升自己的学历,这是双赢,未来希望能成为更好的自己。 " -}, -{ - "text": "这一周的学习任务其实并没有之前那么的难了,到目前为止现在已经是第三轮复习了,这句话送给大家:任何新生事物在开始时都不过是一株幼苗,一切新生事物之可贵,就因为在这新生的幼苗中,有无限的活力在成长,成长为巨人成长为力量。 " -}, -{ - "text": "吾人在世,不可厌“今”而徒回思“过去”,梦想“将来”以耗误“现在”的努力。又不可以“今”境自足,毫不拿出“现在”的努力,谋“将来”的发展。宜善用“今”,以努力为“将来”之创造。 " -}, -{ - "text": "共勉:愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。能做事的做事,能发声的发声。有一分热,发一分光。就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。 " -}, -{ - "text": "年轻要有朝气,青年的朝气倘若消失,前进的好奇心衰退,人生就没有意义。坚持就是胜利~ 一起加油吧 " -}, -{ - "text": "青春并不是生命中一段时光,它是心灵上的一种状况。它跟丰润的面颊,殷红的嘴唇,柔滑的膝盖无关。它是一种沉静的意志,想象的能力,感情的活力,它更是生命之泉的新血液。 " -}, -{ - "text": "真正希望过“很宽阔、很美好的生活”,就创造它吧,和那些正在英勇地建立空前未有的、宏伟的事业的人手携手地去工作吧。在生活中,堆积了许多美好的、实际的工作,这些工作会使我们的土地富饶,会把人从偏颇、成见和迷信的可耻的俘虏中解放出来。 " -}, -{ - "text": "没有狂风和暴雨的吹打,哪来果实的的成熟;没有刺骨的寒风,哪来坚韧的松柏;没有冰天雪地;哪来傲骨的梅花。彼得逊说过:人生中,经常有无数来自外部的打击,但这些打击究竟会对你产生怎样的影响,最终的决定权在你自己手中。 " -}, -{ - "text": "有些话,适合藏在心里,有些痛苦,适合无声无息的忘记。当经历过,你成长了,自己知道就好。很多改变,不需要你自己说,别人会看得到。 " -}, -{ - "text": "也许你听过一首歌,歌词是“不抛弃,不放弃”;也许你攻克难题时,老师会对你说:“快解出来了,不要放弃”;也许在长跑时,你会对自己说:“坚持一下就到终点了,不能放弃”。但是,我要告诉你,学会放弃不需要的东西。加油啊!!! " -} \ No newline at end of file diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/__pycache__/__init__.cpython-310.pyc b/config/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4da91f9eb869fe04bbb78f664ce97bdb85d0fc40 GIT binary patch literal 125 zcmd1j<>g`k0@mJ)R1p0bL?8o3AjbiSi&=m~3PUi1CZpd2KczG$)efYymg`k0@mJ)R1p0bL?8o3AjbiSi&=m~3PUi1CZpd2KczG$)efZdGY~TX0ExmGNdN!< literal 0 HcmV?d00001 diff --git a/config/__pycache__/info.cpython-310.pyc b/config/__pycache__/info.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e6f8d7f9711941d93b77cf3947b08ac06895c03 GIT binary patch literal 657 zcmYjP!HU#C5UuKT);Mlf-QyzO6myvm5D`Ha5o9iN5W_$-Bt0>ZNn$5qc7|OM*UREz zFNz4O%w7Z!vfdQgfAHQ{nc#eaUbH%+l7cR(Uv<5HRo$8Ec7W{Xw^%+zfbVA0Hj6g5 zXcd>qg%Dx_WAqW>E`%(!o2+wl%=w|N|)3J zFY2SOi^I?L{B&`8xP1BM$H~dH#h3T>(ZTZVyZY6q#mCp4cSc*0EVW&fD$bQnh1!bK zQmvWj?DkF|^D@p-Wg7A<%?p`~6gNp6eE{WB^y|`{>w_puqn%1lt8@@#=_rl{W)9ta zsvSWiiAy02d9gw60y5mf4Rp|X%6`vWGrjJ=Q$5c%CFyW1h0q-###vY;CSDifaWzc- zW_TC}r8-Y^jfj>rS12=dBeO8hflX|Xo@eklLUq`CkA literal 0 HcmV?d00001 diff --git a/config/__pycache__/info.cpython-39.pyc b/config/__pycache__/info.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0eee6757bda135bf235b556fa45b12c63b1758ce GIT binary patch literal 1564 zcmZux&u<$=6rR~1-u2o}lN^wM5`w@ei_|EUI8+v@A{7diz#K}2;s%Yjp0U|6> z8<(1cOHIDqywPfY)N0<0T~p~5a*$}_+hr!;i59(q?$mB6Az8P`duhLmF3%SiI_uEX z+W>-eC?_3<(~c`V?i^9P$br}Kxz8&Hq*DQF0M?LK!5Z)gu2D1Ijl5Tkm)>n{_KUo~ zGZMR_d~@{F>FSm$@|c<^EBa~9QkdO!z};EFGho=SK~sMMOz0FsJEK!NBNM`$@shPT z|5;q^O~{tJPbvA7M{%%gmo*`_a@8|o$3)6rkX*dOByMiNX<|_CKNd@nXikxA~%6eL&{As%n}Gaj~9*G z7a$U)Wjd4r97Toz#!Yi=s_*S|#Zae3ZWc8 z=sb0x%|VTzE?Gnt(K^&|1EsinwysNY&69#0n^l#@BlN0Eh;iZBb6S!`%n&;TwC-#F;u8 z6g~APp!t1hsA^6;sQd7UQ%7Cg=Sam9GW z5ONQ{TQ|vAFU^GUw`Hn@ap9cC!{5>Pd^8xU*e$QR3@4K>BVb<6UAmzQrjmOo0NCtx z7*rTLLKo?H(O&+U3GFz-_Qfc%uNh;q30oMCr(G?VfJ%(1d<)^J zf6FlP5?@_Zn!-qi)N|$*L(f{{K(2tz1fWlNTl%JUCsAqlntklxVQOFh*i=F9AHp!` g_63-0*ZrRx6TVZ5{VK{tp`b$=x)F6ASDeWG7oJ6q5&!@I literal 0 HcmV?d00001 diff --git a/config/info.py b/config/info.py new file mode 100644 index 0000000..d9ef3f8 --- /dev/null +++ b/config/info.py @@ -0,0 +1,39 @@ +import json +import logging + +# log basic +logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, + datefmt="%Y-%m-%d %I:%M:%S") +config_module_log = logging.getLogger("User_config") + + +class Info: + + def __init__(self, login_info, path): + self.password = login_info.get("password").strip() + try: + self.phone = login_info.get("phone").strip() + int(self.phone) + except Exception as f: + config_module_log.info("手机号格式错误(带有非数字)") + config_module_log.error(f) + exit(-1) + self.address = login_info["address"] + self.latitude = login_info["latitude"] + self.longitude = login_info['longitude'] + self.start_time = login_info['start_time'] + self.end_time = login_info["end_time"] + self.token = login_info.get("token") + self.user_id = login_info.get("user_id") + self.plan_id = login_info.get("plan_id") + self.city = login_info['city'] + self.province = login_info['province'] + self.path = path + + def __str__(self): + return "user config" + + # save local + def to_save_local(self, arg: dict): + with open(self.path, 'w', encoding="UTF_8") as f: + f.write(str(json.dumps(arg))) diff --git a/createSign/__init__.py b/createSign/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/createSign/__pycache__/__init__.cpython-39.pyc b/createSign/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2a3222979a2e232b3d2e10d4634f31977c4fe6d3 GIT binary patch literal 127 zcmYe~<>g`k0;y+NsUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2D7#VRH}KQFza wG_|rcFDAJtHL)Z$I5RyjCO$qhFS8^*Uaz3?7Kcr4eoARhsvSu8XCP((05PB&OaK4? literal 0 HcmV?d00001 diff --git a/createSign/__pycache__/sign.cpython-39.pyc b/createSign/__pycache__/sign.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b08d05e65fe6a9712076ab5ebce5bb568b8decc7 GIT binary patch literal 373 zcmYjMu};G<5Vd1d3Z)AR5(6q@mJ%r~DF`73B(^TyqDYaGbE87zRCXc}sT+I-18ne1 zS(*3+CeCS*deXh~JD=bAiGKf(U|gI($xp1`mh1*Ya))Wo5P$$(lAMN=66t{RMu7o; zE!)l!slw#Zau5QeL|>1}$k<@Q6yiV><05T`B=PeHamwswZw8l%O{US>+& YPPZF(pob%7 literal 0 HcmV?d00001 diff --git a/createSign/sign.py b/createSign/sign.py new file mode 100644 index 0000000..b96a8be --- /dev/null +++ b/createSign/sign.py @@ -0,0 +1,7 @@ +from decryptencrypt.encrypt_md5 import md5_encrypt + + +def create_sign(*args) -> str: + return md5_encrypt(''.join(args) + "3478cbbc33f84bd00d75d7dfa69e0daa") + + diff --git a/decryptencrypt/__init__.py b/decryptencrypt/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/decryptencrypt/__pycache__/__init__.cpython-39.pyc b/decryptencrypt/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b01d3a5b81eae43e1a6e4d3738249dcd349546fd GIT binary patch literal 131 zcmYe~<>g`kf@z%@sUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2D5#VRH}KQFza wG_|rcFD4~5xu~+BBsC9A#l**F=4F<|$LkeT-r}&y%}*)KNwou+@EM310LzpeXaE2J literal 0 HcmV?d00001 diff --git a/decryptencrypt/__pycache__/encrypt.cpython-39.pyc b/decryptencrypt/__pycache__/encrypt.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2dee54ae469d2d0692d7b92ebc757bab78fa179 GIT binary patch literal 504 zcmYjOO;5r=5Z#X!5WyG^o;);OOg&(N!9!z=3M2%hL5Y`!gp}^45NK((OF|8t@Mn0? zqkpMaPyPi@&bHMs$-K?Z$9uE0PPJM_V5`F^?_z|$)MeW!T&}^RV*rL2o*^IG7$Zh( z!YQL~m}yLZ)ohIw`p7JPLme`4a&Xh`x0|=UyJo-9a~PWhp1of`Z;j+*=c)dDKk8ig zU8pMvE*BzjLHys8s0Q8ykB$H&l9=HQS>qLcCz7tv27ll+SrL#VFK1-~%nBXh_y%*N zV`YJi+A?4ig9omNLzyNLI_67L69lLeI_0rl%+m>tq%disDHgkuM~5;Fxm}TbDTjIJ z6NwUZ|D3d}fj1Al<$}kHV8D2)k{1o~vlhn5uEV3h=7M^c0;HGm9v12g9!%XnRW;$% zjT$v)=FP=Kj{T^XHoBuMF$}X^rn3tj8igWCDbk6yUC&IG#f)F61xISD6{68! DxMh43 literal 0 HcmV?d00001 diff --git a/decryptencrypt/__pycache__/encrypt_md5.cpython-39.pyc b/decryptencrypt/__pycache__/encrypt_md5.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad8e5ad6082df3a57e93cf256392b1ea2d524e73 GIT binary patch literal 351 zcmYjMJxjzu5S`s5Uhd>Ne?U43qMaZ?M9|vC?g$)fW=&4=#by^ShhXE+u*jAErERV3 zt*o4lDeet3Z$5alJ7T$90O9TDMSc)}x#AF|j5y?0nKWRDR0-!y@T zj5(U%@__t~d{k-}*eeVi*`93h_CQL$J6%MCq!mh35ehAm|Avyb~2?n>ybb*_%2=nW?_j yBy*Hbyrx|jZEuf>*Hh1TUw79-pym`~u3R str: + """ + :param data: + :return: AES encrypt + """ + decrypt_type = AESECBPKCS5Padding(key, "hex") + text_decrypt = decrypt_type.decrypt(str(data)) + return text_decrypt + + +if __name__ == '__main__': + print(aes_decrypt('')) diff --git a/decryptencrypt/encrypt.py b/decryptencrypt/encrypt.py new file mode 100644 index 0000000..fd9f26f --- /dev/null +++ b/decryptencrypt/encrypt.py @@ -0,0 +1,14 @@ +from aes_pkcs5.algorithms.aes_ecb_pkcs5_padding import AESECBPKCS5Padding + +key = '23DbtQHR2UMbH6mJ' + + +def aes_encrypt(data) -> str: + """ + :param data: + :return: AES encrypt + """ + encrypt_type = AESECBPKCS5Padding(key, "hex") + text_encrypt = encrypt_type.encrypt(str(data)) + return text_encrypt + diff --git a/decryptencrypt/encrypt_md5.py b/decryptencrypt/encrypt_md5.py new file mode 100644 index 0000000..e30ca45 --- /dev/null +++ b/decryptencrypt/encrypt_md5.py @@ -0,0 +1,9 @@ +import hashlib + + +def md5_encrypt(data): + """ + :param data: + :return: md5 + """ + return hashlib.md5(data.encode("utf-8")).hexdigest() diff --git a/local_clock.py b/local_clock.py deleted file mode 100644 index d747aad..0000000 --- a/local_clock.py +++ /dev/null @@ -1,306 +0,0 @@ -import calendar -import copy -import hashlib -import json -import random -import time - -import requests -from aes_pkcs5.algorithms.aes_ecb_pkcs5_padding import AESECBPKCS5Padding - -""" -author:rsp -""" -headers = { - 'Host': 'api.moguding.net:9000', - 'accept-language': 'zh-CN,zh;q=0.8', - 'user-agent': 'Mozilla/5.0 (Linux; U; Android 9; zh-cn; SM-G977N Build/LMY48Z) AppleWebKit/533.1 (KHTML, like Gecko) Version/5.0 Mobile Safari/533.1', - 'authorization': "", - 'rolekey': "", - 'content-type': 'application/json; charset=UTF-8', - 'content-length': '161', - 'accept-encoding': 'gzip', - 'cache-control': 'no-cache' -} - -with open('./basic_info/user.txt', 'r', encoding='utf-8') as f: - user_info = f.read() - user_info_json = json.loads(user_info) - phone = user_info_json['phone'] - password = user_info_json['password'] - local_all = user_info_json["地址全称"] - latitude = user_info_json["纬度"] - longitude = user_info_json["经度"] - start_time = user_info_json["start_time"] - buqian = user_info_json["buqian"] - requirement_week_num = user_info_json["requirement_week_num"] - weekly = user_info_json["weekly"] - remedy = user_info_json["remedy"] - end_time = user_info_json["end_time"] - province = local_all[:local_all.find('省') + 1] - city = local_all[local_all.find('省') + 1:local_all.find('市') + 1] -print(phone, password, local_all, latitude, longitude, province, city, "\n早上打卡时间{}".format(start_time), - "\n晚上打卡时间{}".format(end_time), "\n是缶提交周报{}".format(weekly)) - - -def time_shift(date): - """ - :param time: - :return: 将时间转成时间戳 - """ - time_array = time.strptime(date, "%Y-%m-%d %H:%M:%S") - time_stamp = int(time.mktime(time_array)) - return time_stamp - - -def aes_encrypt(data): - """ - :param data: - :return: AES encrypt - """ - key = '23DbtQHR2UMbH6mJ' - encrypt_type = AESECBPKCS5Padding(key, "hex") - text_encrypt = encrypt_type.encrypt(str(data)) - return text_encrypt - - -def md5_encrypt(data): - """ - :param data: - :return: md5 - """ - return hashlib.md5(data.encode("utf-8")).hexdigest() - - -def this_month_conunt(planid): - """ - :param planid: - :return: 未打卡的日期 - """ - # 深拷贝 - header = copy.deepcopy(headers) - header.pop("sign") - # 获取当前月的起始和结尾 - - month = time.strftime("%Y-%m-", time.localtime()) - start_time = month + '01' - print(month.split("-")[0]) - end_time = month + str(calendar.monthrange(int(month.split("-")[0]), int(month.split("-")[1]))[1]) - print(start_time, end_time) - data = { - "pageSize": "10", - "planId": planid, - "endTime": f"{end_time} 23:59:59", - "startTime": f"{start_time} 00:00:00", - "currPage": "1" - } - rsp = requests.post('https://api.moguding.net:9000/attendence/clock/v1/list', headers=headers, - data=json.dumps(data)).json() - login = rsp["data"] - clock_in_count = [] - for i in login: - date = int(i["dateYmd"].split("-")[-1]) - if clock_in_count.count(date) > 0: - continue - else: - clock_in_count.append(date) - print(clock_in_count) - day = int(time.strftime("%d", time.localtime())) - not_clock_in_day = day - len(clock_in_count) - print(time.strftime("%m", time.localtime()) + f"月您有{not_clock_in_day}天未签到") - not_clock_in_date = [i for i in range(1, day + 1) if clock_in_count.count(i) == 0] - try: - # 去除今天 - not_clock_in_date.remove(day) - except ValueError: - pass - return not_clock_in_date - - -def get_week_count(plan_id, user_id): - """ - :param plan_id: - :return: 提交周报次数 - """ - sign = md5_encrypt(user_id + 'studentweek' + "3478cbbc33f84bd00d75d7dfa69e0daa") - headers.update({"sign": sign}) - data = {"reportType": "week", "currPage": "1", "pageSize": "10", "planId": plan_id} - rsp = requests.post(url='https://api.moguding.net:9000/practice/paper/v2/listByStu', headers=headers, - data=json.dumps(data)).json() - return int(rsp['flag']) - - -def get_weeks(plan_id): - """ - 获取去年该月到该月周的时间段 - :param plan_id: - :return: 当前周和前19周的时间段 - """ - rsp = requests.post(url="https://api.moguding.net:9000" + '/practice/paper/v1/getWeeks1', headers=headers, - data=json.dumps({"planId": plan_id})).json() - return rsp['data'][:20] - - -def submit_week(url, plan_id, user_id): - """ - 提交周报 - :param url: - :param plan_id: - :param user_id: - :return: - """ - # week_end = datetime.datetime.now() - # week_start = (week_end - datetime.timedelta(days=6)).date() - # 上面comment的为备用方案,防止API挂了 - weeks = get_weeks(plan_id) - week_start = weeks[0]["startTime"] - week_end = weeks[0]["endTime"] - # # 已提交周报个数 - total = get_week_count(plan_id, user_id) - # # 第几周的周报 - nowweek = total + 1 - with open(r'./basic_info/week_diary', 'r', - encoding="utf-8") as f: - text = f.read() - division = text.split(',') - content = json.loads(division[int(nowweek) - 1])["content"] - data = { - "yearmonth": "", - "address": "", - "t": aes_encrypt(int(str(time_shift(week_end)) + "000") - 3600), - "title": "周报", - "longitude": "0.0", - "latitude": "0.0", - "weeks": f'第{str(nowweek)}周', - "endTime": f"{str(week_end)}", - "startTime": f"{str(week_start)}", - "planId": plan_id, - "reportType": "week", - "content": content - } - week_sign = user_id + "week" + plan_id + "周报" + "3478cbbc33f84bd00d75d7dfa69e0daa" - if remedy: - # 补交周报 - not_submit_week = weeks[:requirement_week_num + 1] - not_submit_week.reverse() - for i in not_submit_week: - time.sleep(30) - after_week = get_week_count(plan_id, user_id) + 1 - headers.update({'sign': md5_encrypt(week_sign)}) - week_end = i["endTime"] - data["t"] = aes_encrypt(time_shift(week_end) - 36000 + 1000) - data["startTime"] = i['startTime'] - data["endTime"] = week_end - data["weeks"] = f'第{str(after_week)}周' - data["content"] = json.loads(division[int(nowweek) - 1])["content"] - rsp = requests.post(url="https://api.moguding.net:9000" + url, headers=headers, data=json.dumps(data)) - print(rsp.text) - else: - headers.update({'sign': md5_encrypt(week_sign)}) - print("开始写周报") - rsp = requests.post(url="https://api.moguding.net:9000" + url, headers=headers, data=json.dumps(data)) - print(rsp.text) - - -def clock_in(url, plan_id, user_id, state): - """ - 阻塞10-30s后打卡 - """ - print('开始打卡') - time.sleep(random.randint(10, 30)) - local_all = user_info_json["地址全称"] - address = local_all - province = local_all[:local_all.find('省') + 1] - city = local_all[local_all.find('省') + 1:local_all.find('市') + 1] - post_sign = "Android" + state + plan_id + user_id + address + "3478cbbc33f84bd00d75d7dfa69e0daa" - headers.update({'sign': md5_encrypt(post_sign)}) - data2 = {"device": "Android", "address": address, - "description": "", "country": "中国", "longitude": user_info_json["经度"], "city": city, - "latitude": user_info_json["纬度"], - "t": aes_encrypt(int(time.time() * 1000)), - "planId": plan_id, "province": province, "type": state} - if buqian: - for i in this_month_conunt(plan_id): - # 单数日期前面加0如09,08 - if i < 10: - i = "0" + str(i) - time.sleep(random.randint(20, 40)) - # 深copy 不影响正常打卡 - buqian_data = copy.deepcopy(data2) - buqian_data.update({"createTime": f'{time.strftime(f"%Y-%m-{i} %H:%M:%S", time.localtime())}'}) - # buqian_data.update({"createTime": f'2022-10-01 08:25:55'}) - rsp = requests.post(url="https://api.moguding.net:9000/attendence/attendanceReplace/v2/save", - headers=headers, data=json.dumps(buqian_data)) - print(rsp.text) - rsp = requests.post(url="https://api.moguding.net:9000/" + url, headers=headers, data=json.dumps(data2)) - print(rsp.text) - if weekly: - submit_week("/practice/paper/v2/save", plan_id, user_id) - - -def get_plan(url, user_id): - data = { - 'state': '' - } - rsp = requests.post(url="https://api.moguding.net:9000/" + url, headers=headers, data=json.dumps(data)).json() - if rsp.get("code") > 400: - print(rsp) - data = rsp["data"][0] - plan_id = data["planId"] - # 早晚打卡,判断是否为设置的打卡时间 - if time.strftime("%H", time.localtime()) == start_time: - clock_in("attendence/clock/v2/save", plan_id, user_id, "START") - elif time.strftime("%H", time.localtime()) == end_time: - clock_in("attendence/clock/v2/save", plan_id, user_id, "END") - else: - print("还没到打卡时间,请修改配置参数") - - -def save_token(): - """ - 将token和userid存到配置文件中 - :return: - """ - with open("./basic_info/user.txt", 'w', encoding="utf-8") as file: - file.write(json.dumps(user_info_json)) - - -def main(log_url): - auto_login = user_info_json.get("token") - if not auto_login: - # 请求体 - print('手动登录') - data = { - "phone": aes_encrypt(phone), - "password": aes_encrypt(password), - "t": aes_encrypt(int(time.time() * 1000)), - "loginType": "android", - "uuid": "", - } - rsp = requests.post(url=log_url, headers=headers, data=json.dumps(data)).json() - data = rsp["data"] - token = data["token"] - user_id = data["userId"] - user_info_json.setdefault("token", token) - user_info_json.setdefault("user_id", user_id) - # 保存token - save_token() - plan_sign = user_id + "student" + "3478cbbc33f84bd00d75d7dfa69e0daa" - headers.update({"authorization": token, "rolekey": "student", 'sign': md5_encrypt(plan_sign)}) - get_plan('practice/plan/v3/getPlanByStu', user_id) - else: - # 提取userid 加密sign - print('自动登录') - user_id = user_info_json["user_id"] - plan_sign = user_id + "student" + "3478cbbc33f84bd00d75d7dfa69e0daa" - headers.update({"authorization": user_info_json["token"], "rolekey": "student", 'sign': md5_encrypt(plan_sign)}) - try: - get_plan('practice/plan/v3/getPlanByStu', user_id) - except Exception: - user_info_json.pop("token") - main(url) - - -if __name__ == '__main__': - url = 'https://api.moguding.net:9000/session/user/v3/login' - main(url) diff --git a/main.py b/main.py new file mode 100644 index 0000000..f915733 --- /dev/null +++ b/main.py @@ -0,0 +1,71 @@ +import json +import logging +import os + +from api.api_all import get_token_userid, get_plan, clock_in, get_attendance_log +from config.info import Info + +# print log config +logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, + datefmt="%Y-%m-%d %I:%M:%S") +main_module_log = logging.getLogger("main_module") +# user config file place +config_file = "./user_config.json" +path = os.path.dirname(__file__) + + +# get info login info +def load_login_info() -> Info: + with open(config_file, encoding="utf-8") as f: + user_info = json.load(f) + return Info(user_info, os.path.join(path, 'user_config.json')) + + +# save token +def save_token_user_id(config: Info, token: str, user_id) -> None: + config.token = token + config.user_id = user_id + with open(config_file, 'w', encoding="UTF_8") as f: + f.write(str(json.dumps(config.__dict__))) + + +def login(user_login_info: Info) -> None: + # exist token + if not user_login_info.token: + main_module_log.info("获取 token") + get_token_userid(user_login_info) + # save token user_id + user_login_info.to_save_local(user_login_info.__dict__) + main_module_log.info("登录成功") + else: + main_module_log.info("使用本地token") + + +def plan_id(user_login_info: Info) -> None: + # get plan + if not user_login_info.plan_id: + main_module_log.info("获取plan id") + get_plan(user_login_info) + else: + main_module_log.info("使用本地plan id") + + +def run(): + main_module_log.info('检测配置文件') + # get user login info + user_login_info = load_login_info() + # login + main_module_log.info("开始登录") + login(user_login_info) + # get plan_id + plan_id(user_login_info) + # clock in + clock_in(user_login_info) + # repeat clock in + main_module_log.info("开始补签") + get_attendance_log(user_login_info) + + +if __name__ == '__main__': + main_module_log.info("开始") + run() diff --git a/requirement.txt b/requirement.txt deleted file mode 100644 index d2bf920..0000000 --- a/requirement.txt +++ /dev/null @@ -1,3 +0,0 @@ -requests -aes_pkcs5 -hashlib \ No newline at end of file diff --git a/tast.py b/tast.py new file mode 100644 index 0000000..e69de29 diff --git a/textHandle/__init__.py b/textHandle/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/textHandle/count.py b/textHandle/count.py new file mode 100644 index 0000000..755b88d --- /dev/null +++ b/textHandle/count.py @@ -0,0 +1,28 @@ +import logging + +# log config +logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, + datefmt="%Y-%m-%d %I:%M:%S") +text_handle_log = logging.getLogger("text_handle_module") + + +def count_day(datas: dict) -> set: + """ + :param datas: response data + :return: clock in date + """ + text_handle_log.info("处理考勤文本") + result = set() + for data in datas['data']: + # data["dateYmd"] = '2023-12-04' + date = int(data['dateYmd'].split("-")[-1]) + result.add(date) + return result + + +def run(arg): + print(count_day(arg)) + + +if __name__ == '__main__': + run('') diff --git a/user_config.json b/user_config.json new file mode 100644 index 0000000..06e1234 --- /dev/null +++ b/user_config.json @@ -0,0 +1 @@ +{"password": "14yhl9TTt", "phone": "13797424039", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", "start_time": "08", "end_time": "21", "token": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJtb2d1ZGluZy11c2VyIiwic3ViIjoie1wibG9naW5UeXBlXCI6XCJhbmRyb2lkXCIsXCJ1c2VySWRcIjoxMDM4MTc1NTJ9IiwiYXVkIjoibW9ndWRpbmciLCJleHAiOjIwMTczMDIwMzMsIm5iZiI6MTcwMTY4MTkzMywiaWF0IjoxNzAxNjgyODMzfQ.ZFyfCUusfCnW5vc-3Q5PFttsjGCHjpilesTPoOZ4fplMJPZO7V7Ptu1xQu_9Gytzy_2wGqNE7J5XmmxceM17dQ", "user_id": "103817552", "plan_id": "5e4cda2cab725f3c60d46c2dae3740bd", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701"} \ No newline at end of file From b7f092aed5bd285ce142a788b9c9380d8f1c0d0a Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 4 Dec 2023 19:21:05 +0800 Subject: [PATCH 02/49] version --- user_config.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/user_config.json b/user_config.json index 06e1234..6f3df0b 100644 --- a/user_config.json +++ b/user_config.json @@ -1 +1,11 @@ -{"password": "14yhl9TTt", "phone": "13797424039", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", "start_time": "08", "end_time": "21", "token": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJtb2d1ZGluZy11c2VyIiwic3ViIjoie1wibG9naW5UeXBlXCI6XCJhbmRyb2lkXCIsXCJ1c2VySWRcIjoxMDM4MTc1NTJ9IiwiYXVkIjoibW9ndWRpbmciLCJleHAiOjIwMTczMDIwMzMsIm5iZiI6MTcwMTY4MTkzMywiaWF0IjoxNzAxNjgyODMzfQ.ZFyfCUusfCnW5vc-3Q5PFttsjGCHjpilesTPoOZ4fplMJPZO7V7Ptu1xQu_9Gytzy_2wGqNE7J5XmmxceM17dQ", "user_id": "103817552", "plan_id": "5e4cda2cab725f3c60d46c2dae3740bd", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701"} \ No newline at end of file +{ + "password": "lihua", + "phone": "137xxxx", + "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", + "latitude": "34.830624", + "longitude": "115.545005", + "start_time": "08", + "end_time": "21", + "city": "\u66f9\u53bf", + "province": "\u5c71\u4e1c\u7701" +} \ No newline at end of file From 2c9348edc61ffa3fb4885bf19ae4b6de7d765a85 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 4 Dec 2023 19:59:29 +0800 Subject: [PATCH 03/49] explain --- README.MD | 33 +++++++++++++++++++++++++++++++++ user_config.json | 3 ++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 README.MD diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..6307e51 --- /dev/null +++ b/README.MD @@ -0,0 +1,33 @@ +## 当前功能 +2023-12-4 +1. 打卡 +2. 补签(补前未30天打卡) +## 声明 + +**仅供学习交流使用**,项目遵循GPL协议,请勿拿来盈利、诈骗和违法之事! + +项目产生的所有结果皆由使用者负责,本项目仅提供Python学习参考价值,本人不进行任何运行和调试。 + +- [x] 运行和调试本项目则表示为默认同意以上声明 + +## 基本使用 + +> 配置 user_config.json 文件 + +```angular2html +"password": "li hua", +"phone": "1111xxxx", +"address": "山东省菏泽市曹县某某街道", +"latitude": "34.830624", \\ 纬度 +"longitude": "115.545005", \\ 经度 +"start_time": "08", \\ 打卡开始时间 +"end_time": "21", \\ 打卡结束位置 +"city": "菏泽市", +"province": "山东省", +"is_repeat_clock_in": false \\ 默认不补签 +``` + +## **补签说明**: +1. 默认补签前30天的数据(只能补签到前30天的) +2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 +3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 \ No newline at end of file diff --git a/user_config.json b/user_config.json index 6f3df0b..ec41e3b 100644 --- a/user_config.json +++ b/user_config.json @@ -7,5 +7,6 @@ "start_time": "08", "end_time": "21", "city": "\u66f9\u53bf", - "province": "\u5c71\u4e1c\u7701" + "province": "\u5c71\u4e1c\u7701", + "is_repeat_clock_in": false } \ No newline at end of file From dc477d7301b8cbd17ce61586b56d7a034ec95dba Mon Sep 17 00:00:00 2001 From: rsp <76271031+github123666@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:01:11 +0800 Subject: [PATCH 04/49] Update README.MD --- README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 6307e51..595c75f 100644 --- a/README.MD +++ b/README.MD @@ -30,4 +30,4 @@ ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) 2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 -3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 \ No newline at end of file +3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行看请求代码 From 40ff5d4f5ce2404bf5188cb9e717284b8c2d8d9c Mon Sep 17 00:00:00 2001 From: rsp <76271031+github123666@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:06:01 +0800 Subject: [PATCH 05/49] Update README.MD --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index 595c75f..5c7cf6b 100644 --- a/README.MD +++ b/README.MD @@ -26,6 +26,7 @@ "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 ``` +运行 main.py 文件 ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) From 468c9a7cca45f040563bd9c9f69c5a0a4d464a2f Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 4 Dec 2023 20:14:40 +0800 Subject: [PATCH 06/49] pack --- requirements.txt | Bin 0 -> 330 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5af1d75bf3d5a60443eed0b6d33a258217663880 GIT binary patch literal 330 zcmX|-%?^Sv5QOJ!;-hG6Q9SuDl^-FZVp|US@Z#(i8nUExrr!*me+~@-b{KI-#nlNH zJ_dUnI2K!MxZl7dqDRXS-BPtE=rHOvI4{mNdxT+7Dk)JqIC27Mk%>>d`1Ro4K8^Nc&GxEWO)%>4%zk6yJ1{3? Xy;%6teq#2ZO|NX1?m+%e?n(4N1(h(I literal 0 HcmV?d00001 From 45c6925ba24300d248bc1aef73388ed481903f5a Mon Sep 17 00:00:00 2001 From: rsp <76271031+github123666@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:20:02 +0800 Subject: [PATCH 07/49] Update README.MD --- README.MD | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 5c7cf6b..5ad37f2 100644 --- a/README.MD +++ b/README.MD @@ -11,7 +11,9 @@ - [x] 运行和调试本项目则表示为默认同意以上声明 ## 基本使用 - +``` +pip install -r requirements.txt +``` > 配置 user_config.json 文件 ```angular2html From 4afa538fc00f0d0e3fe21a5eb9838707964bffc1 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 5 Dec 2023 11:00:16 +0800 Subject: [PATCH 08/49] modified --- api/api_all.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/api/api_all.py b/api/api_all.py index cae5da6..0335156 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -169,7 +169,7 @@ def get_previous_month_data(user_login_info): # clock in count day_set = count_day(rsp) # 上个月能打卡的天数 - previous_day = set([day for day in range(calendar.monthrange(year, previous_month)[1])][-(31 - now_day):]) + previous_day = set([day for day in range(1, calendar.monthrange(year, previous_month)[1] + 1)][-(31 - now_day):]) # 未打卡日期 empty_day = day_set ^ previous_day api_module_log.info("上月补签阻塞3~15秒") @@ -200,9 +200,9 @@ def get_attendance_log(user_login_info): handle_response(rsp) # save token save_token(user_login_info) - # handle text + # handle response text day_set = count_day(dict(rsp)) - empty_day = day_set ^ set(range(1, now_day + 1)) + empty_day = day_set ^ set(range(1, now_day)) # repeat clock in api_module_log.info("本月补签阻塞3~15秒") for day in empty_day: @@ -217,6 +217,25 @@ def get_attendance_log(user_login_info): save_token(user_login_info) +# submit weekly +def submit_weekly(user_login_info): + pass + + +@repeat_api +def submit_daily(user_login_info, daily): + api_module_log.info('提交日报') + url = 'practice/paper/v2/save' + headers['sign'] = create_sign(user_login_info.user_id, "day", user_login_info.plan_id, "日报") + data = {"yearmonth": "", "address": "", "t": aes_encrypt(int(time.time() * 1000)), "title": "日报", + "longitude": "0.0", + "latitude": "0.0", "planId": "5e4cda2cab725f3c60d46c2dae3740bd", "reportType": "day", + "content": daily.get_daily()['data']} + print(data) + print('') + rsp = requests.post() + + # check response def handle_response(rsp: dict) -> None: response_code = rsp['code'] From da0065a25c2c4d9a28ba90b9b94be00701277669 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 5 Dec 2023 11:16:17 +0800 Subject: [PATCH 09/49] modified --- api/api_all.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/api/api_all.py b/api/api_all.py index 0335156..53cdc30 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -171,8 +171,11 @@ def get_previous_month_data(user_login_info): # 上个月能打卡的天数 previous_day = set([day for day in range(1, calendar.monthrange(year, previous_month)[1] + 1)][-(31 - now_day):]) # 未打卡日期 - empty_day = day_set ^ previous_day - api_module_log.info("上月补签阻塞3~15秒") + empty_day = [] + for day in previous_day: + if day not in day_set: + empty_day.append(day) + api_module_log.info("上月补签阻塞3~15秒后打卡") for day in empty_day: time.sleep(random.randint(3, 15)) api_module_log.info(f'补签:{previous_month}-{day}') @@ -204,7 +207,7 @@ def get_attendance_log(user_login_info): day_set = count_day(dict(rsp)) empty_day = day_set ^ set(range(1, now_day)) # repeat clock in - api_module_log.info("本月补签阻塞3~15秒") + api_module_log.info("本月补签阻塞3~15秒后打卡") for day in empty_day: time.sleep(random.randint(3, 15)) api_module_log.info(f'补签:{now_month}-{day}') From c9ff4371bd18461d1c8abbc8a6b5ba45c029e6f0 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Sat, 9 Dec 2023 19:49:48 +0800 Subject: [PATCH 10/49] modefied --- .idea/.gitignore | 8 + .idea/gongxueyun.iml | 8 + .idea/inspectionProfiles/Project_Default.xml | 30 +++ .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + README.MD | 7 +- api/__pycache__/api_all.cpython-39.pyc | Bin 5255 -> 9049 bytes api/api_all.py | 80 ++++++-- config/__pycache__/info.cpython-39.pyc | Bin 1564 -> 1713 bytes config/info.py | 4 + .../__pycache__/encrypt.cpython-39.pyc | Bin 504 -> 566 bytes .../__pycache__/encrypt_md5.cpython-39.pyc | Bin 351 -> 404 bytes decryptencrypt/encrypt.py | 2 + decryptencrypt/encrypt_md5.py | 4 + main.py | 91 +++++++-- tast.py | 3 + textFile/daily.json | 68 +++++++ textFile/submit_time.json | 5 + textFile/weekly.json | 188 ++++++++++++++++++ .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 127 bytes textHandle/__pycache__/count.cpython-39.pyc | Bin 0 -> 879 bytes .../__pycache__/get_daily.cpython-39.pyc | Bin 0 -> 715 bytes .../__pycache__/get_weekly.cpython-39.pyc | Bin 0 -> 722 bytes .../handle_weeks_date.cpython-39.pyc | Bin 0 -> 730 bytes .../__pycache__/submitTime.cpython-39.pyc | Bin 0 -> 1124 bytes textHandle/get_daily.py | 12 ++ textHandle/get_weekly.py | 9 + textHandle/handle_weeks_date.py | 10 + textHandle/submitTime.py | 19 ++ user_config.json | 23 ++- util/__init__.py | 0 util/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 121 bytes util/__pycache__/tomorrow.cpython-39.pyc | Bin 0 -> 767 bytes util/tomorrow.py | 23 +++ 35 files changed, 564 insertions(+), 48 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/gongxueyun.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 textFile/daily.json create mode 100644 textFile/submit_time.json create mode 100644 textFile/weekly.json create mode 100644 textHandle/__pycache__/__init__.cpython-39.pyc create mode 100644 textHandle/__pycache__/count.cpython-39.pyc create mode 100644 textHandle/__pycache__/get_daily.cpython-39.pyc create mode 100644 textHandle/__pycache__/get_weekly.cpython-39.pyc create mode 100644 textHandle/__pycache__/handle_weeks_date.cpython-39.pyc create mode 100644 textHandle/__pycache__/submitTime.cpython-39.pyc create mode 100644 textHandle/get_daily.py create mode 100644 textHandle/get_weekly.py create mode 100644 textHandle/handle_weeks_date.py create mode 100644 textHandle/submitTime.py create mode 100644 util/__init__.py create mode 100644 util/__pycache__/__init__.cpython-39.pyc create mode 100644 util/__pycache__/tomorrow.cpython-39.pyc create mode 100644 util/tomorrow.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/gongxueyun.iml b/.idea/gongxueyun.iml new file mode 100644 index 0000000..66e3f99 --- /dev/null +++ b/.idea/gongxueyun.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..353c5ac --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,30 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..d2e2098 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..de95842 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/README.MD b/README.MD index 5ad37f2..6307e51 100644 --- a/README.MD +++ b/README.MD @@ -11,9 +11,7 @@ - [x] 运行和调试本项目则表示为默认同意以上声明 ## 基本使用 -``` -pip install -r requirements.txt -``` + > 配置 user_config.json 文件 ```angular2html @@ -28,9 +26,8 @@ pip install -r requirements.txt "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 ``` -运行 main.py 文件 ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) 2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 -3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行看请求代码 +3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 \ No newline at end of file diff --git a/api/__pycache__/api_all.cpython-39.pyc b/api/__pycache__/api_all.cpython-39.pyc index 030a1030c91bb256dbea8ef7027476913131affc..d3133a2076ea750996c6f37da07fd41251ededf5 100644 GIT binary patch literal 9049 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 delta 2835 zcmb7GUu;`f89(Rv{`cQFPVBU45;skQ8O>6<43_-Oy8;=@=QeY4eQnM? z-rDFIGa9in(Xw$RkXWWU5+D`vFoaO|v_~`^dE`nUAuWNvAR+cN0pt6Q)1=D-61MN} zeD^#5zVrS09slvES8BONHtP`h*o$rN<;v^1Y4!nm{Zk7A=4)-;)hXeGQ{Qk6Xj8t~ zwp>f;G~aGJuA^k#Pq#B}h7yl$WVr#D<0iLmrBE}>b9r`SiASgSwN4np1p6Y07+-&%xLV z^i=ujZ33gFyb~~Qeuwchd|_L2PjdPdQac-ehpzqR_w-pt^YN5+E?b3jhYU|o#aMi) zT!}Ze^Me$;qf2Jt34MUA;!P5f7K!N3=xs{Lb0oN;5lOCJrKHa&*;tSMSzNA{}-Jywg zwHGu+9xM|DfW#19*K5c{v^NJp7^6j+qYll*J!5g@1gOMG1T|+0B{k6*O{_P%t+SvE z4FEz7nzO}p{0HL$>cqb@e@o}%$U1R$2KtgzE0BpMTWwFw;kzZgZ}q%ThKbhggi=)F zyVhc%2wh?vK|?qb{~hL^MsXe>Nr|wV(5oYB4v!&9(6tOhkt1 zh-_rgiSeK8r2&Sq+a|mkO z8I;g*;u8opgij(o1d!xkXawB%>cR`VognlQv+EBULA}LA1_xyUYPvw5kM_pniH8wB zgP_iKc)-M3_hcO{xeT2lI*Ft-X0ZZw*oN>6hO+Z5jnO|l;aUC6PcH#;Y6hE zQl7h&8kTlRUzd}Segkv396=FbWkWvZY3_wh(dx=pCrE6+6Rfu|WQpZBq>{u641-*{-u1)XM9s#IT z1g2wRK|)={T*LXzh9B=|P7W4uluED(lvWYYMdERUH3a4R|0mGmQJgjgP&1CA>866t zOK!T?^*aq-S9Z>mufjkT;N!7vf{B~;R`4}gCBziM*cPZpOLUSsRAUaSP)04#uzwk5 zj%puSpr4@@6Hfs5lxC5LRFJVYIqg#kkvoh7i|^(Z2Q``$F^d{fdI4_)O|R~E)@$s@ z>f=e5KdABh_FaR;Lo7=ImWU^z{aChPUYqbJLxA6a=7w}cVVw2jcPADH+>Epe;nt@1 z8WpbU2ZE;r64BYz#MiN{kbv=YUkAe1wuv;jBh8@|u}I%#+?gWWDU%!QG90gOM8;^v zG?^lOlV>9hR`~_bNjn0@FT+Za*4IF9g8p4Tzz*}E!|a<8dxP+Nlv1bx7Tz=tbh^@+ zfMahOaNDrHC7sApIi4P7`1me`BjjXym_-?m0F@)tyabh!hng8vm6Ddl;do?0rA$Dj z6d#3Bu_K#Lg0&8}c-b$tOZ_xVPDi#{dg7p+d?0+4xLTf}Tk+e)x!5XRSi$tEQGwZf zhb3%jIiaoNp>x*!Rw$dDcK70UVcb7S{8ss)%UjmM^Q#N()dl_`UA>2_ERZgG$Y+1M zeRuDNKi=Q@)&9=Sy&wJH{dZn{|D9ig{MVmu@BifId$+%L4~L4!FyG=Yj?WB^vKRw? z%mDEe=w3nn(*XCd+!MO|Aw9Qc&wcvB>dIsA195qIRsCwrH6balK*73pC>uhec&xS) zt=Zuoq_NTMiq;^IwekbijAbt_B76=v)5EUcl8G)F!8$MpPyi;qaGiE1kS~n1DIkeN zhqVH@eQ;6=>LW>YJ6-WV$z41Pg9i^(e&(o#TJ)5S$Ac7m(b4!%PZ_hohi)TO^|6{IHzV{wT zJ-oN}zaQ`2+TFkT+TN>gt;Xf*H_soEYNC19TJrv4M>eWtQHCO44oUp$YGoP4+O+sG zH0tI|OdzE7R?@`b@PB~12E`L7 zAw{XvB^qxv None: # response success plan_id = rsp["data"][0]['planId'] user_login_info.plan_id = plan_id - # save plan id - user_login_info.to_save_local(user_login_info.__dict__) @repeat_api @@ -120,8 +125,6 @@ def clock_in(user_login_info) -> None: headers['authorization'] = user_login_info.token rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) - # save token - save_token(user_login_info) @repeat_api @@ -211,32 +214,67 @@ def get_attendance_log(user_login_info): for day in empty_day: time.sleep(random.randint(3, 15)) api_module_log.info(f'补签:{now_month}-{day}') - day = '0' + day if 10 > day else day + day = '0' + str(day) if 10 > day else day repeat_clock_in(user_login_info, date=f'{year}-{now_month}-{day} ') # day > 30 if 31 - now_day > 0: get_previous_month_data(user_login_info) - # save token - save_token(user_login_info) +@repeat_api +# submit log +def submit_log(user_login_info) -> dict: + url = 'statistics/stu/practice/v1/find' + data = {"t": aes_encrypt(int(time.time() * 1000)), "planId": user_login_info.plan_id} + # update token + headers['authorization'] = user_login_info.token + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) + api_module_log.info("获取提交记录成功") + return rsp['data'] + + +# get weeks +def get_weeks_date(user_login_info) -> dict: + url = 'practice/paper/v1/getWeeks1' + data = {'planId': user_login_info.plan_id} + headers['sign'] = '' + headers['authorization'] = user_login_info.token + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) + api_module_log.info('获取一年内周报日期成功') + return rsp + + +@repeat_api # submit weekly -def submit_weekly(user_login_info): - pass +def submit_weekly(user_login_info, week, weekly): + url = "practice/paper/v2/save" + data = {"yearmonth": "", "address": "", "title": "周报", "longitude": "0.0", "latitude": "0.0", + "weeks": f"第{week['weeks']}周", + "endTime": week["endTime"], "startTime": week["startTime"], + "planId": user_login_info.plan_id, "reportType": "week", "content": weekly, "attachments": "", + } + headers['authorization'] = user_login_info.token + headers['sign'] = create_sign(user_login_info.user_id, "week", user_login_info.plan_id, '周报') + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) @repeat_api -def submit_daily(user_login_info, daily): +def submit_daily(user_login_info, daily, day): api_module_log.info('提交日报') url = 'practice/paper/v2/save' - headers['sign'] = create_sign(user_login_info.user_id, "day", user_login_info.plan_id, "日报") - data = {"yearmonth": "", "address": "", "t": aes_encrypt(int(time.time() * 1000)), "title": "日报", + title = f"第{day}天日报" + headers['sign'] = create_sign(user_login_info.user_id, "day", user_login_info.plan_id, title) + # update token + headers['authorization'] = user_login_info.token + data = {"yearmonth": "", "address": "", "t": aes_encrypt(int(time.time() * 1000)), "title": title, "longitude": "0.0", - "latitude": "0.0", "planId": "5e4cda2cab725f3c60d46c2dae3740bd", "reportType": "day", + "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "day", "content": daily.get_daily()['data']} - print(data) - print('') - rsp = requests.post() + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) # check response @@ -244,8 +282,8 @@ def handle_response(rsp: dict) -> None: response_code = rsp['code'] if response_code == 401: raise SimpleError(f"token expire {rsp}") - elif response_code == 200: - api_module_log.info(f"成功:{rsp}") + elif response_code <= 300: + api_module_log.info(f"成功: {rsp}") else: api_module_log.info(f'请检测请求带的参数或发送issues 错误信息:{rsp}') api_module_log.info("其他错误,已退出") diff --git a/config/__pycache__/info.cpython-39.pyc b/config/__pycache__/info.cpython-39.pyc index 0eee6757bda135bf235b556fa45b12c63b1758ce..56fbcbb60233cfd5abc6f3eb14bcc8ba4a6fc817 100644 GIT binary patch delta 705 zcmY*X&u`N(7`1CBO{=yW?KUVNZR^&FP?$I(ao{k9;D#6o5eZo#c8j$vi5xSSRN%lk zaX`q|?ZA;E2hNE90{MU7#Elc5(`kUCyzjm5$BS*{sP(1YiQDZaf^~dPizoia&d>Xo zK?xLLj-ndJymp8p!U?AksqnaWgt^b_hcxneu!F*erFXM&o)G79vM5C7x&?39!sZ>m zfr5m1z;{XR7Dg7aS})SON&CrKL#6Q8UdaGJ~CsbF~Zwi^rdl8km%f{1)hP z(;Snvb_+M*@hfbaZ)9tI;9Rg;fuJ0p!5T1IXAJhq*wAdy_bZY2@WE|%J;XK;S(0;^ zO+w$&ybxLSMe~DRyjt08IGfc|ugbMDZ0nqr@xEYii*Xv7Rd0an=9V|yUU%I?086<{ uwA%cC`qV;sP;mcA>FzG51^s|lxv;LTn6KXG`~^4Zy8b!MY~1|z27drw6r>>l delta 594 zcmZWlJ#Q2-5VhAIyScDe9DyQ)BoLxx6N!RQM4%Vu{i~;*=;VgJUd-q=z(Rl1YAuQVwhgY$RuZ4Q1y(N@gA1)p<2pyuH&eDqXxB zt5;*)AJ@u=tkQW|Tzy(sI>D|ptcp^L60)DT&RO5iE!g!>WcTomtpKCRdc!}5 zl6=7!K@`0X+Gs}7_rN?tkC8-gg13S0Oi%kAr(7cFDYj37qjO2mkwP_&)r~1fCIod8 z**@8^pUB!=LL9BtFgF}{hx4z&<_WWJ$!ISY{Q_D(pe=-T_oJmYNWIuJsS)~UJjLG`=)G^BT(w7{~E{S`1z<# z$kb%nn_M_`YCT)KxT!=vc%eiqwgMS71wgomC%s*J!p`Ez{$i{5R)KU>mRVyKAv8-K rHaz?r;8fNyc<{epM*tC~LAMvtmQ6ylZtwEV`SZTk=lv&OkND+38~2Ew diff --git a/config/info.py b/config/info.py index d9ef3f8..599cef8 100644 --- a/config/info.py +++ b/config/info.py @@ -29,6 +29,10 @@ def __init__(self, login_info, path): self.city = login_info['city'] self.province = login_info['province'] self.path = path + self.is_repeat_clock_in = login_info['is_repeat_clock_in'] + self.is_submit_daily = login_info['is_submit_daily'] + self.is_submit_weekly = login_info['is_submit_weekly'] + self.submit_weekly_time = login_info['submit_weekly_time'] def __str__(self): return "user config" diff --git a/decryptencrypt/__pycache__/encrypt.cpython-39.pyc b/decryptencrypt/__pycache__/encrypt.cpython-39.pyc index e2dee54ae469d2d0692d7b92ebc757bab78fa179..37f52445fd53841e0496ae2547031c9f29e25589 100644 GIT binary patch delta 121 zcmeytyp4r7k(ZZ?0SID_6sC4h7Qyb|z&G L7N9~NCKhG@Z$1j! diff --git a/decryptencrypt/__pycache__/encrypt_md5.cpython-39.pyc b/decryptencrypt/__pycache__/encrypt_md5.cpython-39.pyc index ad8e5ad6082df3a57e93cf256392b1ea2d524e73..6d9211b575084a656bdf55ebc631f4fe5a44bfae 100644 GIT binary patch delta 153 zcmcc5G=(`Lk(ZZ?0SID_6sFz)(vLwLWWWsMH~?|629QW$NMX!jh+;@#N?~qch+<4- zN@2-nDpE;hPGwACZDwp{WCW@RX3%7t=<-bS7Ds%1ZenI$eEcm2O_m}ipaDgkKmsJ5 emzbLh6lX0c%FHX7Y{sa}#Rin&VCLZ9U<3fC+#ezU delta 100 zcmbQje4oiBk(ZZ?0SM~9WTnml(vLwLWWWUEH~?|62#`o&NMX!jh+;@#N?~qch+<4( e3}(<|nHcemN0X@tq_T(;NK8&=RAvM5IG6!7#19ex diff --git a/decryptencrypt/encrypt.py b/decryptencrypt/encrypt.py index fd9f26f..8aeb1cb 100644 --- a/decryptencrypt/encrypt.py +++ b/decryptencrypt/encrypt.py @@ -12,3 +12,5 @@ def aes_encrypt(data) -> str: text_encrypt = encrypt_type.encrypt(str(data)) return text_encrypt +if __name__ == '__main__': + print(aes_encrypt('103817552')) diff --git a/decryptencrypt/encrypt_md5.py b/decryptencrypt/encrypt_md5.py index e30ca45..106a154 100644 --- a/decryptencrypt/encrypt_md5.py +++ b/decryptencrypt/encrypt_md5.py @@ -7,3 +7,7 @@ def md5_encrypt(data): :return: md5 """ return hashlib.md5(data.encode("utf-8")).hexdigest() + + +if __name__ == '__main__': + print(md5_encrypt('')) diff --git a/main.py b/main.py index f915733..1912427 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,16 @@ import json import logging import os +import time -from api.api_all import get_token_userid, get_plan, clock_in, get_attendance_log +from api.api_all import get_token_userid, get_plan, clock_in, get_attendance_log, submit_daily, get_weeks_date, \ + submit_weekly, submit_log from config.info import Info +from textHandle.get_daily import Daily +from textHandle.get_weekly import Weekly +from textHandle.handle_weeks_date import WeeksDate +from textHandle.submitTime import SubmitTime +from util.tomorrow import tomorrow_1_clock, next_week_submit_time # print log config logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, @@ -14,21 +21,27 @@ path = os.path.dirname(__file__) -# get info login info +# get daily file +def load_daily_file() -> Daily: + with open(os.path.join(path, r'textFile\daily.json'), 'r', encoding="UTF-8") as f: + daily = json.load(f) + return Daily(daily) + + +# load local file +def load_weekly_file() -> Weekly: + with open(os.path.join(path, 'textFile/weekly.json'), 'r', encoding="UTf-8") as f: + weekly = json.load(f) + return Weekly(weekly) + + +# load login info def load_login_info() -> Info: with open(config_file, encoding="utf-8") as f: user_info = json.load(f) return Info(user_info, os.path.join(path, 'user_config.json')) -# save token -def save_token_user_id(config: Info, token: str, user_id) -> None: - config.token = token - config.user_id = user_id - with open(config_file, 'w', encoding="UTF_8") as f: - f.write(str(json.dumps(config.__dict__))) - - def login(user_login_info: Info) -> None: # exist token if not user_login_info.token: @@ -41,6 +54,7 @@ def login(user_login_info: Info) -> None: main_module_log.info("使用本地token") +# get plan def plan_id(user_login_info: Info) -> None: # get plan if not user_login_info.plan_id: @@ -50,6 +64,10 @@ def plan_id(user_login_info: Info) -> None: main_module_log.info("使用本地plan id") +def load_weeks_info(data) -> WeeksDate: + return WeeksDate(data) + + def run(): main_module_log.info('检测配置文件') # get user login info @@ -59,11 +77,60 @@ def run(): login(user_login_info) # get plan_id plan_id(user_login_info) + # get submit log + main_module_log.info('获取提交记录') + submit_all = submit_log(user_login_info) # clock in + main_module_log.info("启动打卡") clock_in(user_login_info) # repeat clock in - main_module_log.info("开始补签") - get_attendance_log(user_login_info) + if user_login_info.is_repeat_clock_in: + main_module_log.info("开始补签") + get_attendance_log(user_login_info) + # get local file + # get submit time + submit_time = SubmitTime(path) + # submit daily + if user_login_info.is_submit_daily: + main_module_log.info("判断今天是否提交日报") + if not submit_time.daily_next_submit_Time or int(time.time()) > submit_time.daily_next_submit_Time: + main_module_log.info('载入日报文件') + daily = load_daily_file() + main_module_log.info('载入成功') + main_module_log.info("提交日报") + submit_daily(user_login_info, daily=daily, day=submit_all['dayReportNum']) + # set next submit time + submit_time.daily_next_submit_Time = tomorrow_1_clock() + submit_time.to_save_local() + else: + main_module_log.error("今天已提交日报了,不会重复提交") + + # submit weekly + # is user config week + now_week = int(time.strftime("%w", time.localtime())) + 1 + if now_week == user_login_info.submit_weekly_time: + if user_login_info.is_submit_weekly: + main_module_log.info('判断今天是否提交过周报') + if not submit_time.weekly_next_submit_Time or int(time.time()) > submit_time.weekly_next_submit_Time: + weeks_dict = get_weeks_date(user_login_info) + weeks_date = load_weeks_info(weeks_dict) + now_week = weeks_date.get_now_week_date() + main_module_log.info("从本地文件获取周报") + weekly = load_weekly_file() + main_module_log.info("开始提交周报") + # + weeks = submit_all['weekReportNum'] + main_module_log.info(f'提交第{weeks}周周报') + # add weeks + now_week['weeks'] = weeks + submit_weekly(user_login_info, week=now_week, weekly=weekly.get_now_weekly(weeks)) + # set next submit time + submit_time.weekly_next_submit_Time = next_week_submit_time() + submit_time.to_save_local() + else: + main_module_log.error('已提交周报,不会重复提交') + else: + main_module_log.info("未到提交周报时间") if __name__ == '__main__': diff --git a/tast.py b/tast.py index e69de29..03d778a 100644 --- a/tast.py +++ b/tast.py @@ -0,0 +1,3 @@ +for i in 'af': + b =1 +print(b) \ No newline at end of file diff --git a/textFile/daily.json b/textFile/daily.json new file mode 100644 index 0000000..15ddb66 --- /dev/null +++ b/textFile/daily.json @@ -0,0 +1,68 @@ +[ + { + "data": "今天的实习工作中,我主要参与了项目Y的开发过程。在团队的协作下,我们成功解决了一些前期遇到的技术难题,推动了项目的顺利进行。我的任务包括编写代码、进行单元测试以及参与团队讨论。通过这些工作,我不仅提高了技术能力,还更深入地了解了软件开发的流程。与团队的良好沟通使得整个过程更加高效。" + }, + { + "data": "今天的实习中,我参与了客户会议,负责解释项目进展和回答客户的疑问。这次经历让我更好地理解了与客户沟通的重要性,并学到了如何以更清晰的方式传达技术信息。在整个会议过程中,我收到了一些建设性的反馈,这对于我的职业发展是非常宝贵的。明天,我计划将这些建议融入我的工作中,进一步提升自己的沟通技巧。" + }, + { + "data": "今天,我在团队中负责了一项数据分析任务。通过清理、整理和分析大量数据,我成功地提取出了一些关键信息,为团队提供了有力的决策支持。这次经验让我深刻体会到数据在业务决策中的价值。同时,我也学到了更多关于数据可视化和报告撰写的技能,这将对我的职业生涯产生积极影响。在明天的工作中,我计划进一步完善这项分析,并分享我的发现与团队。" + }, + { + "data": "今天我主要参与了项目X的推进工作。在与团队成员紧密合作的过程中,我们成功完成了某个关键阶段的任务。我的职责包括整理数据、制定计划并协助进行实验。这使我更深入地了解了项目的具体要求和实施步骤。" + }, + { + "data": "我发现在一个高效的团队中工作是一种愉悦的经历。我们通过定期的会议和信息分享,保持了良好的沟通。同事们对我的问题给予耐心解答,也提供了许多实用的建议,这对我的学习和工作都有所裨益。" + }, + { + "data": "今天,我利用业余时间学习了一些与工作相关的新技能。通过在线培训和阅读文档,我更深入地了解了公司所使用的一些工具和技术。这让我感到很兴奋,因为我知道这将对我的未来发展产生积极的影响。" + }, + { + "data": "在项目推进的过程中,我遇到了一些挑战,例如数据分析中的某些复杂问题。然而,通过与同事们的合作和向导师请教,我成功地克服了这些困难。这让我意识到在解决问题的过程中,团队的力量是无可替代的。" + }, + { + "data": "在今天的实习中,我深感自己的不足之处,但也更加坚定了学习和进步的决心。明天,我将继续努力提升自己的技能,更好地融入团队,为项目的成功做出更大的贡献。" + }, + { + "data": "今天的工作主要包括项目进展分析、数据清洗整理和会议参与。学到了更多的数据处理技能和沟通能力,成功解决了一些难题。明天计划继续推进项目,参加培训并与同事讨论解决方案。" + }, + { + "data": "今天的实习让我受益匪浅,我期待着未来更多的学习和成长机会。感谢团队的支持与指导,让我能够在这个实践中不断进步。" + }, + { + "data": "未来的路太长总有一段路需要自己独行。专升本之路也是如此,通过最近几周的学习逐渐感受到升本之路的艰辛,不过没关系,坚持就是胜利,升本人加油呀" + }, + { + "data": "最近看的一本书写到:白发无凭吾老矣!青春不再汝知乎?年将弱冠非童子,学不成名岂丈夫? 这更加使我坚定了专升本的决心和毅力,新的一周又开始了 大家加油" + }, + { + "data": "一转眼又到了写日记的时候了,还是送上一句话:青春啊,永远是美好的,可是真正的青春,只属于这些力争上游的人,永远忘我劳动的人,永远谦虚的人。保证自己永远的谦逊,然后多学习,在升本途中,能够锻炼自己自学的能力,也能够提升自己的学历,这是双赢,未来希望能成为更好的自己。" + }, + { + "data": "这一周的学习任务其实并没有之前那么的难了,到目前为止现在已经是第三轮复习了,这句话送给大家:任何新生事物在开始时都不过是一株幼苗,一切新生事物之可贵,就因为在这新生的幼苗中,有无限的活力在成长,成长为巨人成长为力量。" + }, + { + "data": "吾人在世,不可厌“今”而徒回思“过去”,梦想“将来”以耗误“现在”的努力。又不可以“今”境自足,毫不拿出“现在”的努力,谋“将来”的发展。宜善用“今”,以努力为“将来”之创造。" + }, + { + "data": "共勉:愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话。能做事的做事,能发声的发声。有一分热,发一分光。就令萤火一般,也可以在黑暗里发一点光,不必等候炬火。" + }, + { + "data": "年轻要有朝气,青年的朝气倘若消失,前进的好奇心衰退,人生就没有意义。坚持就是胜利~ " + }, + { + "data": "青春并不是生命中一段时光,它是心灵上的一种状况。它跟丰润的面颊,殷红的嘴唇,柔滑的膝盖无关。它是一种沉静的意志,想象的能力,感情的活力,它更是生命之泉的新血液." + }, + { + "data": "真正希望过“很宽阔、很美好的生活”,就创造它吧,和那些正在英勇地建立空前未有的、宏伟的事业的人手携手地去工作吧。在生活中,堆积了许多美好的、实际的工作,这些工作会使我们的土地富饶,会把人从偏颇、成见和迷信的可耻的俘虏中解放出来。" + }, + { + "data": "没有狂风和暴雨的吹打,哪来果实的的成熟;没有刺骨的寒风,哪来坚韧的松柏;没有冰天雪地;哪来傲骨的梅花。彼得逊说过:人生中,经常有无数来自外部的打击,但这些打击究竟会对你产生怎样的影响,最终的决定权在你自己手中。" + }, + { + "data": "有些话,适合藏在心里,有些痛苦,适合无声无息的忘记。当经历过,你成长了,自己知道就好。很多改变,不需要你自己说,别人会看得到。" + }, + { + "data": "也许你听过一首歌,歌词是“不抛弃,不放弃”;也许你攻克难题时,老师会对你说:“快解出来了,不要放弃”;也许在长跑时,你会对自己说:“坚持一下就到终点了,不能放弃”。但是,我要告诉你,学会放弃不需要的东西。加油啊!" + } +] \ No newline at end of file diff --git a/textFile/submit_time.json b/textFile/submit_time.json new file mode 100644 index 0000000..ad0e417 --- /dev/null +++ b/textFile/submit_time.json @@ -0,0 +1,5 @@ +{ + "daily_next_submit_Time": "", + "weekly_next_submit_Time": "", + "month_next_submit_Report": "" +} \ No newline at end of file diff --git a/textFile/weekly.json b/textFile/weekly.json new file mode 100644 index 0000000..3ef42ea --- /dev/null +++ b/textFile/weekly.json @@ -0,0 +1,188 @@ +[ + { + "content": "这是我实习的第一周,感觉到周围陌生的人都在打量自我,有些微的紧张,对自我工作的岗位还是比较模糊,刚进来就有点无所适从。这周慢慢的适应公司的节奏,跟随前辈的脚步对公司有了更多的了解,可是应当做一些什么事情有大概的了解,感觉应当不难。因为是刚刚加入公司, 对环境还不熟悉, 人也比较陌生,所以在工作中就是上司戳一下动一下,没有自我的想法。这一周的工作并不繁重,可能是照顾新人,任务比较简单,同事也挺好相处,并没有发生什么大的事故。在完成任务时因为手脚慢,可是仔细的做好每一个细节,可是没人催促,我感觉到放松,渐渐放开自我。经过几天的相处,慢慢大着胆子向同事请教问题,从与他们的交流中吸收知识,逐渐熟悉工作的流程,了解工作的意义,明白我应当要做到什么样的程度才能合格。" + }, + { + "content": "经过一周实习,熟悉了环境,对同事也有必须的了解,更重要的是慢慢增加的工作量表示我已经开始跟上脚步,给予我相当大的自信心。其实我找的工作与专业不太相关,没有经过足够的了解,可是经过一周的实习,我对做这份工作已经有了心理准备。刚刚开始都是最基础的杂活,从这一周开始,接下来的几周会断断续续给实习生做一个培训,了解公司的业务范围,我们又该做些什么,又能做些什么。在这一周的工作我明白了作为一名员工要多做多问少抱怨。对于不懂的进取寻找解决的办法,在自我份内的事情要做好,另外就是每个人都有状态不好的时候,不要将颓废的心境带入到工作中来, 调节好自我的心理状态, 避免失误。我努力适应着工作与人群,实习与正式的工作在时间的流逝中没有什么不一样了。" + }, + { + "content": "时间过得真快啊!这一周可能是注意到我的工作完成不错,每一次很仔细,于是我接到了我人生中第一份正式的工作任务,不再是给同事前辈打下手,我相信我必须会完成的很出色。指导我的师傅说,自从我来到公司之后一向仔细观察学习,做杂事也进取的完成,并且都没有大的错误,如果这一次能圆满完成就减少我打杂的时间,慢慢开始正式的工作,我意识到这是一次考验,如果我将这段时间学习的成果都体此刻这次任务中,会看见我的努力。我想说我必须不会辜负师傅您的期望,完美的完成任务。在接下来的日子里,我陷入了忙碌之中,查询资料,安排时间进行实践,在这个过程中,因为我是新人,不可避免的出现了一些错误,还有知识盲点。在师傅指导下,我还是顺利的将工作完成了。在这几天的学习中,我感到了自我的缺陷与不足,同时对一些约定俗成的规矩规范不够了解,没有成功的将理论与实际相结合。" + }, + { + "content": "不知不觉已经过半个月,已经慢慢适应了这样的生活,每一天都没有什么不一样, 按部就班的工作。 在这半个月里,我更加会利用时间,合理安排工作,除了学习本专业的知识一步步完成自我的毕业论文之外,还寻找与工作相关的专业知识来进行学习,不让自我拖同事后腿,希冀自我能够有一点用处,能够帮上忙。经过一段时间的实习生活,我已经渐渐改掉了以前日夜颠倒的作息习惯, 在学校的时候, 上课的时间并不是排满的,于是学生晚上就有时间玩手机到很晚,早上不起床,仅有上课才能打起精神。工作时有固定的上下班时间,不能迟到或早退,这就意味着要准时起床,保证充足的睡眠时间才能在工作中不偷懒。此刻我已经养成了早睡早起的好习惯,提前一点去往公司,准备一天的工作。" + }, + { + "content": "最终任务得到了师傅的夸奖,认可了这一段时间我的努力。我满怀信心踏上了新的征程,在师傅与同事的帮忙下深入学习本岗位知识,从最基础的规范开始,慢慢升级到各种工作相关需要记忆的知识,将大学里面学习到与工作相关的知识也捡起来。经过几天时间的刻苦钻研,大学里面学习到的一些知识有了用武之地,基本掌握了理论方面的知识,只剩下实际操作方面需要指导。在这一周我又领到了师傅分给我的任务,虽然只是他任务中比较边缘的一部分,可是就是一步步的向前进,慢慢深入才吸引人。工作中收获到的成就感,获得赞扬的满足感让人上瘾,不舍得放弃,攻下难关那一瞬间的喜悦,想让人一向一向做下去。在工作的过程中,我开始体会到师傅告诉我说,对工作充满期待是什么意思,就像在学生时代攻克一道难题时的成就感就算没有分数的显示也是高兴的,可是比之那还要让我觉得高兴。享受工作带给自我的欢乐,一样也是体验生活带给自我的乐趣。" + }, + { + "content": "经过不断地修改和完善,又仔仔细细的检查有没有错误和不到位的地方,总算能够提交任务了,并且比预定的时间还要早,我抑制不住自我的兴奋之情,一向徘徊在师傅的办公室门口,等待师傅的检查,以及听到他的肯定。等待的时间格外漫长,直到师傅进来,我整理好行装,佯装淡定的向他汇报工作完成的情景。师傅打断我的喋喋不休,微微颔首说明白了,等会我会看的,你先去做点其他事情。我多少有点沮丧,这种不上不下感觉真的不好受,就像等待判决的犯人,不明白自我做的是对是错,也不明白有没有下一次。走回自我的座位,我思考了良久才整理好自我的思绪,可是却又好像回到刚实习的时候,无所事事,没有干劲与动力。想想这样不行,打起精神鼓励了自我一番,不能就因为这一件事情否定自我,就算是失败了也积累了经验,对自我实习以来也做了一个总结,自我已经做了能够做得到的,为这一个月的实习生活交了一份满意的答卷。" + }, + { + "content": "俗话说的好,“一日之计在于晨。”每一天早起之后开始享受清晨的时光,每一天都是变化的,坚持一个好的心境去上班。简便安排好一天的时间,又开始了新的工作,将上一周的任务继续完成, 再仔细地检查, 交给师傅与同僚检验。过去的的这一个半月多,有无尽的感慨还有对接下来实习生涯的期待,每一天都有新的挑战。步入工作的正轨之后,不像之前那样,就算能规矩的做好一天的杂事,但心里总是着急的,在被考验的时候,还很担心自我是不是完成不好,是不是立刻就会被公司赶走,被师傅叱骂。在过程中对自我本事的质疑,没有自信心,在这一次次磨练中,我找到了自我的长处,也对之前的担心有一丝丝羞赧,是我自我太过杞人忧天。在这七周的工作中,我在师傅的调教下慢慢成长,我也领会到了他的意思。在工作时,要对自我充满信心,不自信就会被别人牵着鼻子走,跟着别人的思路完成属于自我的任务,没有主见在最终的作品中也会呈现出来。" + }, + { + "content": "学习是永无止境的,在这一个星期里,我学到了不仅仅在工作中要认真观察师傅与同事们是怎样应对紧急情景,并且迅速完美的处理掉之外,我还学到了平时生活中他们的一举一动有什么样做人的道理,每个人的性情就在这事件的处理中得以让人看清,每一个人都值得当上我人生的导师。在与人交往的过程中,在学校里与同学交流时、在公司里与同事交流时、与客户交谈时,每一个的度要靠自我把握好,怎样样将一些敏感的话题带入到话语中却又不引起人们的反感,再一个怎样与人的交谈中有效的提取信息,这都是我还要努力学习的。在观察中学习,在之后我请教师傅该如何做好这些事情,又该如何掌握好表达技巧,他笑了笑说:“刚开始肯定是什么都不懂一头乱撞,可是慢慢在实践中就会体会到该怎样说,这是一种只能意会不能言传的东西。”我并没有听太懂,可能这就是经验带给他的财富吧。" + }, + { + "content": "对自我有了信心之后,我的精神面貌发生了很大的改变,这是同事说的,不再紧张,跟着更加有条不紊,与人辩论也更加有说服力。我其实没有察觉自我的改变,可是这是在向好的方向发展,我还是很高兴的。这一周是第八周,我的实习生活也有两个月了,这是我长这么大以来第一次在外面独自的工作与生活,没有人仔细地照顾,没有人在身边排解情绪,也就这样过了两个月,交了新的朋友,开始了新生活。这么长的时间了,也足够我对同事的了解加深,在公司里面两个月的工作,让我感触最深的是公司员工之间的情感。在遇到困难时同心协力一齐奋斗, 成功时一齐分享喜悦,但更多是在平时隐藏在一举一动之中。天气冷了注意防寒,及时添加衣物,工作困难时,走到身边不经意的说出一句话就是一个点拨,让我茅塞顿开。" + }, + { + "content": "实习的时间长了,学到的东西多了,自我的生活也渐渐好了,每一天都有新鲜的趣事,想起实习前的茫然无措,此刻我也能从容的开始新生活。人可能往往就是如此,因为未知所以感到恐惧,因为从未尝试,所以不敢尝试,可是如果没有第一个吃螃蟹的人,谁又能明白螃蟹多么鲜美呢?在第十周,我突然就有了这样的感慨,因为师父又给了我一个新的任务,接任务时突然想起在对找工作的胆怯,害怕失败,只想缩在安全的乌龟壳里,可我还是勇敢的跨出了第一步。有了第一次的尝试,无论成功或者失败,第二次就不会太远。因为有了一次次失败的经验,我最终得到了成功。我也从中明白了一个道理,不要胆怯,也不要害怕失败,就算是完完全全陌生的事情,努力尝试过才明白自我有没有那个本事,仅有在尝试、失败、积累经验中不断提升自我,才会获得成功。" + }, + { + "content": "由于与老员工之间相处的越来越好,于是在工作上也给我带来了很多的便利。他们很耐心的给我讲解了一些工作上的注意事项,以及他们多年来的工作经验。我们不得不承认好的人际关系对我们自身的反正来说存在着重要的意义。不仅仅是个人也好还是企业也好,仅有在良好的人际关系下才会有良好的合作。良好的合作往往有助于我们工作的高效完成。能让我们事半功倍而不是事倍功半。这些体会都是在实习过程中所得到的,我最终明白在我们真正踏入社会之前为什么要进行实习。因为学校所教与我们的知识毕竟有限,仅有在实际的工作中我们才能学到更多的知识及体验。而这些体验是我们花再多的钱也不能购买的。因为这是只属于我们自我的,不会随着时间的流逝而被遗忘。" + }, + { + "content": "工作中,我们难免会犯错所以挨骂也是在所难免的。当这件事发生在我的身上的时候我才深刻体会到解释就是找理由,据理力争是没有用的。你对领导解释得越多结果就会变得更糟,所以主动承认错误是关键。由于认错态度良好于是领导也就随便骂骂也就算了。我们常常会做错事,也常常会被误解。在工作中不管我们是犯错还是被误解,我们首先要做的不是跟上级阐述我们犯错的理由首先要做的是承认错误。当被误解的时候我们不要忙着去解释,当领导处于愤怒之时,过多的争论只会让事情往更加恶劣的情景发展,倒不如听他说完然后道个歉。其实对于我们来说认错只可是是一件很简单的事情。并且关于误解,总会随着时间的的推移而水落石出的。所以没必要和上级激励力争,因为你们之间本来就是不平等的!" + }, + { + "content": "幸好上次的错误没有给领导留下太多的坏的印象,由于这阵子的工作完成的还算是比较好,于是领导在大家面前夸奖了我,也算是这阵子辛勤工作的回报吧。所以下班的时候觉得心境异常舒畅。我想这也许就是为什么马斯洛把自我价值的实现放在人类需要的最顶端的原因吧。每个人都需要自身的价值被肯定,当我们的价值得到实现的时候我们就会觉得愉悦,而当我们的不能得到他人的认可的时候我们就觉得难过。虽然这只是一个小小的夸奖, 但对于一个实习生来说,能在众多的老员工之间得到夸奖也算是小有成就感吧。因为不是我们所做的努力都是能够被人们所认可的,这就是为什么那么多人不能得志的原因。可是我相信上帝都是公平的,我们的努力必须能够得到回报的除非我们所做的努力还不够多。所以,不要放弃的太早不走下去你不明白你接下来遇到的是什么。" + }, + { + "content": "这一周我们的工作比较忙,大部分的时间里我们都是在加班。加班的时间多了工人的工资也就比较高了。虽然很累可是大部分的员工还是很高兴,也许对于我们这些刚出社会的人来说不太能够理解。在加班的过程中和一位老员工闲聊,在闲聊的过程中我得知原先他已经在这个厂里面工作了7、8 年。我很冒昧的问了他一个问题:为什么,在那里工作了那么多年还是一个普通员工。他没有责备我如此唐突。而是跟我说:那也没办法大字都不认识几个呢,怎样能去做那些工作呢?我突然觉得知识是多么的重要,虽然我们不能说一个人的学时就代表了一个人的本事,可是在如此功力、竞争如此大的社会。在必须的程度上一个人的学历代表着一个人的水平。因为没有企业有时间、并且愿意花时间去验证你到底有没有本事。所以只能经过一个人的学历来确定了。第一次觉得原先知识是那么的重要。" + }, + { + "content": "相比上一周,这一周的工作就稍微简便一点了也没有忙了。所以下班以后我们就有了更多的时间做自我的事情了,一般在下班的时候我们都会选择去运动运动。尽管上班也有点累了,可是至少能做一些自我喜欢做的事情也算是一种放松的方法。突然在运动中觉得学校的生活已经离我们越来越远了,好好像从来没有如此的怀念过我们的学校生活。当我们还在学校的时候我们曾拼命的想要逃离我们的学校生活可是真正步入社会以后才能明白,学校的生活是我们一生中最完美的时光。在上学的时候我们常常觉得压力很大,可是此刻才明白原先上学所带给我们的压力是人一生中所有的压力中最小的一部分。不得不说一句很俗的话:每个人都是这样,仅有在失去的时候才会觉得可贵" + }, + { + "content": "由于学校还有一些重要的事情要做的的原因,这个星期我们领导给我们批了几天假让我们回去学校处理一些事情。当我们走进学校,那种熟悉的感觉迎面而来。这种熟悉的感觉让我们每一个人都觉得心境异常的愉悦。虽然以后还不明白还有多少次机会踏进我们的学校,可是每个人都要成长,而成长中总伴随着得到与失去。所以我们不应当只看到自我失去的那部分,而忽略了自我得到的那一部分。还记得刚上大学的时候对这个学校的种种嫌弃。突然想起一句话:学校就是自我在心里骂一千遍但不允许别人骂一遍的地方。对啊,我们总是对我们的母校带着如此复杂的感情。我们很快就办完事情在学校多呆了一天以后我们就回到了工作的地方。不明白为什么的,从学校回来突然觉得好像觉得没有那么的累了⋯⋯" + }, + { + "content": "不知不觉中,来那里实习已经快两个月了,虽然时间已接近两个月,对工作也是越来越熟悉,可是有时还是会觉得力不从心。并且也失去了刚开始来实习的那种兴奋与好奇,觉得心境总是处在低谷当中,总是振奋不起来。在和领导的偶然闲聊的时候他很友好的跟我说:只要我用心地做,就会左右逢源。越做越觉乐趣,越做越起劲。听他说完顿时觉得茅塞顿开。有人说过:凡职业都具趣味味的,只要你肯干下去,趣味自然会发生。切忌不要粗心大意,马虎了事,心浮气躁。做任何事都一样,需要有恒心、细心和毅力,那才会到达成功的彼岸!对啊,每个职业都会有它的趣味所在的,像我之前所说的不走下去,我们不明白接下来会遇到什么。所以耐心等候吧。" + }, + { + "content": "在上一周和领导的闲聊之后,在这一周我反省了一下这阵子的工作状态。我突然意识到与其自怨自艾还不如干些别的事情来充实自我,于是我主动要求在空闲的时间去帮帮别的部门的忙。一方面我能够打发打发自我的时间,让自我变得充实而不至于自我的觉得生活无趣。另一方面,既然我们实习是为了学到更多的知识那就趁着实习的期间尽可能的去不一样的部门感受一下不一样部门的工作。也许这样对我们真正踏上社会的时候也是有所帮忙的。即使是生活无趣,其实我们也是可以让它变得趣味的。其实大部分的原因不在于生活,而是取决于我们带着怎样样的心态去看待生活。" + }, + { + "content": "由于这一周领导批准了我提出的要去别的部门帮忙的请求,在这一周我也正式到别的部门去帮忙了。所以会比以往更加的,忙碌一点。虽然如此,可是和以往的生活相比我倒是更加喜欢此刻的生活忙忙碌碌的。经过在别的部门帮忙,我发现每个部门的工作都是紧密相连的,而每个部门的价值也是相同的,仅有在每个部门的互补之中才能使整个企业的利润到达最大化。相反的只要任何一个部门稍有差池都会让整个企业的利益有所下降。所以,我觉得不管是哪一个企业都好,都应当加强企业个部门之间的联系,才能让企业在这个竞争强烈的社会生存下去。才能让企业立于不败之地。" + }, + { + "content": "慢慢的在别的部门的帮忙工作也慢慢熟悉了,得到了上级领导的好评及赞扬。相比刚进入这个公司的时候不管是在为人处世上还是在工作的处理本事上也有所提高了,慢慢觉得一个人不管工作本事有多强要是不懂得怎样去和别人相处一切都是空谈的。这个实习教给我们最多的不是让我们去如何运用我们的专业知识,不是让我们去获得更多的知识,而是让我们明白何如去生活。相信没有一个人不懂的如何生活,可是却不是所有人都懂得如何在这个社会上生活。经过在那里的观察我发现一般个性太强烈的人都不会再那里呆的太久,反倒是一些较为平和的人留了下来。我想了很久,也许是因为较为平和的人更加适应这个社会的发展趋势吧。" + }, + { + "content": "在这一个星期里,我还是像往常一样工作一样下班。没有什么异常的事情发生。有时候没有什么事情发生也是一件很好的事情。虽然生活没有什么惊喜可是却也是至少没有什么不好的事情。突然回过头去想在那里的那么多个日子,慢慢的好像已经很习惯。习惯那里的生活、那里的工作。日子好像也比之前想的要过的快一点,刚开始的时候以往想过要快点结束此刻也觉得还好。有时候我们觉得可能会很艰难的日子其实也是很快就过去了。所以我们总要对生活充满期望。" + }, + { + "content": "这个星期又犯了点小小的错。虽然领导没有过多的责备可是心里还是觉得又些许的过意不去。人都是这个样貌难免会有过错,首先要自我学会原谅自我。如果自我一向处于纠结之中不愿意给自我宽恕,那么别人又怎样来宽恕你呢?我们能够犯错可是不能一错再错。于是我这样安慰自我。在这样想之后自我也觉得心里好受一点,既然过去的事情已经不能再挽回了,那至少从此刻开始我们还能够好好把握,避免下一个错误的发生。也许生活没有必要太过于纠结。" + }, + { + "content": "我们都说社会这趟水太深。有时候和朋友闲聊都说说起诸如此类的事情,比如上级的什么亲戚被提升为了什么什么⋯⋯经过在这个企业那么长时间的实习,我不得不承认:不管是在任何一个地方都会有太多的潜规则。可是即使是这样我们还是不能被潜规则。我始终坚信只要是你有本事,只要是你能让企业有所发展,利益有所提高,不管是什么潜规则都会给你让步。与其抱怨还不如让自我更强一点,强大到有一天你会被别人看到为止⋯⋯" + }, + { + "content": "离实习结束的日子不远了,而实习结束了也就意味着我们很快就要真正踏入社会了。其实我在想在这段时间的实习过程中进入这个社会的各方面的准备呢?我想也许我已经做好了大部分的准备了,不管是心态上也好、生活上、工作上也好。在这个实习的过程中我们每一个人都在不知不觉中做好了准备。也许我们从来也没有发觉到这一点。我想这也许就是我们实习最大的意义吧。对于每一个刚出校门的我们,身上有太多的锐气以及娇气。我们就像是刚出山上开凿下来的石头,有太多的棱角。而这实习的几个月就像是刻石把我们打磨得更加的圆滑。仅有这样貌才能让我们更好的去适应这个社会。而不被社会所淘汰。我感激这个实习来得恰到好处,让我能够及时明白:怎样样的人才是这个社会真正需要的人。" + }, + { + "content": "到此刻为止我的实习工作就要接近尾声,我也即将结束在那里的实习工作。在这几个月里面带给我的感触太多太多,连自我也觉得奇怪到最终竟然有点舍不得,可是生活是向前的我们必须要忘前走。也许以后我们不再需要做如此艰辛的工作,也能够脱离低层的工作。可是我不会忘记这一段时间的实习所带与我的感受,不会忘记自我的原先的样貌。也许以后的路不会比此刻更加顺畅,可是我坚信,这几个月的实习都挺过来了那么以后的路上还有什么可怕的呢。我相信只要努力未来必须会越来越完美的。“实践是检验真理的唯一标准” ,经过这次实习, 我也发觉自我有许多不足之处,可是所谓真诚所至,金石为开。在今后的生活中,我会朝着自我的目标, 不断努力学习, 弥补不足, 为自我的梦想而奋。" + }, + { + "content": "图是弄好了,接下来是开始进行生产,调试。真是毛病重重,错误多多啊!产品刚出来进行调试微出现这样那样的毛病。之后才清楚明白是怎样一回事。可是经过这件事能够学到不少在学校所学不到的知识与经验,原先在设计绘图,这个零件是研究的并不单单是把图绘出来,还要了解一些关于市场方面的信息,比如说价格,一些常用的毛坯,怎样做起来才方便简洁,如何把他设计成又好又方便的产品。还要研究在加工过程中出现的误差,还有一些热处理方面的知识等等。如果不想到这些结果会是难以想象的,浪费时间上其次的,最重要的是公司经济的损失。" + }, + { + "content": "经过一个多月的实习,虽然对公司不是那么的太了解,可是多少不等也有所了解。天天做着一样的事,感觉得无比的枯燥仅有自我一个人坐在电脑面前一整天,仅有电脑从早到晚的陪者我,觉得好孤独,没有了以前在学校的那种欢声笑语,没有在学校的那种简便悠闲自在了,有的只是空虚和寂寞。有些时候闲下来就坐在电脑面前发呆, 不明白做什么。就这样一天一天的耗着,感觉除了工作以外,自我的生活中就没有其他的新鲜的事情, 或者是值得人去回忆, 留念的了,没有了色彩斑斓的生活,有的只是枯燥的工作有些时候都有点冲动想不干了,去换换别的工作,想给累积更多的社会知识和经验,可是想了想还没有那么的冲动,还是在原先的地方老实的待着。" + }, + { + "content": "虽然时间是过的那么的艰苦,可是还是有欢乐的时光的,那天我和师傅出去吃饭了,在饭桌上,师傅没有以前那一脸的严肃,让我感觉到自我和他们就像兄弟一样,并没有那么的陌生。在吃饭的时候叫我注意一些细节方面,并不象在学校大家在一齐吃饭那么的随便,要有必须的规矩和礼数。叫我如何去喝酒,虽然我不会喝,他们就让我少喝点,意思一下,叫怎样在那里结交新朋友,也好为自我以后在社会混多一条路,多见见世面。那天我们吃的很高兴,也很开心,我第一次感觉这样无拘无束。回到厂里的宿舍,呼吸着外面的空气,感觉到无比的舒畅,来到厂里最终有了一次真正的放松,心理觉得乐滋滋的。" + }, + { + "content": "经过了一段时间的工作,又开始踏上了新的征程,进行新的锻炼。经过一段时间的匆匆忙碌后,最终有了能够闲下来的一点时间。能够稍微的偷懒一下,好好的享受一下工作之余的欢乐。在这以后才上体验生活那种家庭生活的开始,开始我的新的工作:学习怎样做好日常生活中的细事,比如说说是挖排水沟,看似一件简单事,可是实际哂纳感做起来就显得的十分的棘手,对于我们刚步入社会的新大学生来说无疑是一个重大的考验,虽然我并不明白怎样去弄,更不明白如何弄好,可是我还是在其中努力的学习,领悟其中的心得。这些活原先在家里并要自我去做,但我在那里能够亲身的体验到家人的辛苦与劳累。仅有自我亲身经历,才能深刻体会。" + }, + { + "content": "上一周的劳累与辛苦使我牢记心理,可是这一周又学到新的东西,虽然简单可是也很容易出错,我和我一个师傅去浇水泥板, 在浇焊一块铁架子, 放在里面来增加的它的强度,以防被什么大型机器从上头走的时候压坏了,我看着师傅做,便好奇的问你为什么不做成和扳子一样大的架子呢?师傅起初并没有告诉我为什么这样做,我一向带着这样的疑问。之后和他一齐浇的时候才发现,如果和它弄成一样大的话结果就放不进去,或者说以后弄出来,边上就会不平齐,不仅仅外观上头不怎样好看,并且有些时候不注意的话,他人从它旁边经过的会弄伤其他人。这个虽然简单,也许在书上的时候大家都会说,但你一旦在真正实践的时候就会想不到,仅有实践了,才能更深的体会。" + }, + { + "content": "锻炼远不止这些,丛中学到东西才是最重要的。又有一件事情是我记忆犹新,那天天阴着,风吹着,冷极了。老板叫我们去刷树,这些简单的东西对于我来说都是没做过,不怎样会做。我都不怎样情愿去做,老板说了不得不做,正所谓在别人的屋檐下吃饭,不得不低头。硬着头皮拿着家伙干了起来,起初上一脸不愿意,慢慢做起来觉得里面还是有必须的学问,比如说一般树干要刷多高,才能到达保护树的最佳效果,书皮上头一般刷成什么样貌才能最好,怎样样刷才能使多有的白色在同意高度,怎样样刷才能让人看上去更加的美观舒服等等,从臆见小的事情上就能学到很多,只是有些时候自我并没有发现而已。" + }, + { + "content": "学习总是永无止境的,正所谓活到老学到老。公司是搞二手摊铺机的维修,这一次家里来个大家伙,要进行大修,这下好了一忙就大伙给忙坏了,大家一天到晚就开始为着这个大家伙弄来弄去,开始天天加班。一天从早到晚都干个不停,晚上还要加班,那几天真是一个尽的叫累啊!恨不得一下就过去, 事实是不可能的, 只能一天又一天在忙碌中度过。回头想想这几个星期感觉自我尝到人间的酸甜苦辣,感觉时光是度日如年,十分的难熬。有些时候整个人早上都不怎样想起来,盼望着什么时候能够放假休息一下,好好的放松个一天两天,最终结束了一个星期的劳累生活,回过头在想想这个星期的点点滴滴,不禁的笑了起来。" + }, + { + "content": "时间过的真是快啊!不知不觉的将近两个多月了。对于刚出学校的我来说生活的点滴都是一个学习的过程,比如说自我的日常生活,从学校出来了,什么都要靠自我,刚来厂里的时候,自我连做饭都不怎样会,有些时候都煮的不熟,正所谓在家里过惯了那中衣来伸手,反来张口的生活。开始几次都没做好,可是之后慢慢的适应了,越做越好了,同时自我也开始慢慢的学习做菜了,虽然做的不怎样好,可是自我还是每一天坚持的去做,相信总有一天会做好的,正所谓功夫不负有心人,我坚信总有一天会弄好的。离开了学校,怎样样去搞好自我的生活也是一个重要的过程。也是有很多地方值得自我去学习的,生活中处处能够学习,只要你去用心。" + }, + { + "content": "到了这一周说说我的感想最深刻的还是交际方面的。像我一个人在外面, 生活确实不容易。 俗话说的好在家靠家人,出门靠朋友。 出来交朋友是十分重要的, 而看准人, 看好人,交好人是更重要的,在结交新朋友之前要研究好这个人是否值得自我去交,看准人是交朋友的一个重要条件,看好人则是交朋友的一个中心环节,交好人则是最简单的了。我的公司虽然不怎样大,可是有几个人就有几种不一样的社会形态。有些时候我都会不禁的发出感慨,也许正因为社会上有这些不一样的人,不一样事,不用的物体才能构成这个复杂而又无奇不有的社会。社会真是让我感慨万千,如果说社会是大海,那我就是一滴水,终究会随着时间的流逝而滚入滔滔的大海随波逐流。" + }, + { + "content": "实习过半,真是实习时间多多,接触社会多多,学到的经验和社会知识更加的多多。 新鲜的事更是说不尽, 道不完。在工厂中发生的趣事,幽默的事也算不少。但这个星期我想说的是有些发生我们身边看上去不怎样起眼的事,可是当你亲手做起来的时候就会发现自我并不是像想象好做,那么的容易简单,这可能也就是我们平常所说的眼高手底吧!真是不做不明白,一做吓一跳。有些时候我都怎样敢相信自我会这么的差劲,可是事实就在眼前,事实是证明一切强有力的证据,我不得不相信这一切。这些虽然是小事,但能真正的反映一个人在处理这些事方面的本事,事实胜于雄辩,也许从这些事中我们能够学习到在处理小事方面应当谦虚谨慎一点。" + }, + { + "content": "人往往都是这样,没有经历过的话,永远都不明白事情到底是怎样一个样貌, 是真的那么难, 还是并非如此, 所以,不管怎样样,即使是自我完全陌生的事情,只要有机会,都必须要去尝试,努力去做好。因为没有经验,那么就需要做更多的准备工作。另外就是不要害怕失败,只要用心去做就能够了。等到熟练了,那么成功将是水到渠成的事情。比如我的第一次做那些不起眼的小事时,虽然我做得不够好,或者能够说失败了,但经过这次的尝试,却令我获益匪浅,对我之后的几次任务的成功都起到了极大的推动作用。自我也经过不断的经历和尝试检验了自身的水平和适应本事。仅有经过不断的努力,不断的尝试,不断的积累经验,才能够发现自我的不足,然后在弥补不足的时候,我们便实实在在的提高了自我。所以,不管怎样,努力去做吧,告诉自我,只要用心,就能做得更好,更舒心。" + }, + { + "content": "时间过得真是飞快, 实习近三个多月了。 在这中间有苦,有甜,有累,有欢乐。实习期间真是感慨万千,总是有说不完的事,道不完的情,怎样说也说不完,每一天虽然都是我们这几个人可是,总会有不一样事在我们身边发生。经验总是藏在这些平常的事中,需要我们去发现,把它挖出来,化成自我的经验,仅有这样不断的积累,不段的学习,才能拥有更多,更好的宝贵的经验。有了这些经验才能在社会上占有有利的位置,才能在社会上站稳脚跟。也为以后在生活奠定坚实的基础,这周虽然没学到什么东西,可是回忆过去三个月的实习,总是那么令我难忘,毕竟这是我的第一次独自一人在外面工作生活,一个在笼子生活了十几年的小鸟,最终飞出父母的怀抱,在外独自奋斗。" + }, + { + "content": "有了自我的第一份工作,在除了不变的上班下班,其中还潜藏危机,要在实习中不段的学习,跟着节奏的发展,不能停滞在原地,要居安思危。要在实习中不断的提高,如果有本事的话,还要有超前意识,要把自我的潜在本事开掘出来,仅有不段的开动自我的大脑, 才能创造更好的物质生活。自我的命运掌握在自我的手里,需要去寻找,去探索。有些时候外部环境对于一个人的发展走向起到重要的影响,好的外部环境能够造就一个人,坏的环境也能够毁了一个人。所以不管在工作,或者以后在工作的时候就要研究好这些方面的因素,仅有在找工作前做一切准备才能把握自我的那块金。正所谓做到知己知彼才能在仗场上取得胜利,这样的道理同样适用于我们此刻,这样也算在为自我适应复杂的环境奠定基础。" + }, + { + "content": "一个星期的实习下来,总是有很多经验,有很多认识,自我总是有很多的感慨。也许在实习的这些天中,我也在逐渐的成长。在认识学习逐渐的成熟。每个人都会在时间潮流中不断认识自我,只可是是时间的长短的问题。所以待人要真诚,时时为人着想, 处处为人行事。 能够把自我溶入群体,而不耻向工人群众学习。要想在如今的社会中生存,就要吸收新的思想与知识,不断更新观念,趋于完善。这样才有利于思想与实际行动真正地结合,仅有在思想演练,才能在最短的时间里把自我要从事的行业中处于领先的地位进而起着不可替代的作用,因为我将会为它比其他人付出更多创造更多价值。我也应当得到我应得到的报酬与珍贵的经验。" + }, + { + "content": "这么长时间下来了,让我感触最深的还是一个情字,俗话说的好人非草木孰能无情,处处都有人情在。比如说当你独自一个人在搬一样重东西的时候,他会自动来帮你搭上一把,每次和他一齐做事的时候,他总会默默的承受的更多,不会因为我的不娴熟而责怪我,而是慢慢的在等待我,当我遇到不会做的事的时候,他总是会悄悄的走到我的身旁,细心的指导我, 让我渐渐的步入轨道, 当天渐渐的转冷的时候,他会不时的提醒你要多穿点衣服,在工作方面他是我的师傅,在生活方面他如同我的父母。 休息时间有时我们聊聊天,他在我生活中亦师益友。让我感觉到背加的温暖,虽说社会是残酷的,可是在每个角落还是存在着温暖。" + }, + { + "content": "在外面工作有苦,有甜,有辛酸,有欢乐。但总的来说对自我还上一个不错的锻炼。失败是成功之母,要想有成功就必定会有失败,要能承受住失败的打击,从失败中总结出经验,把它化成自我的知识为以后遇到同样的事或者是类似的事就不会出同样的错误,感觉每周还是多接触接触一些事,对我们的成长是有好处的,关键还是在于自我平时对一些事情的处理和总结,不管自我以后走到那里这个都是必须的,在工作的时候可是分的依靠师傅而自我不去动手,不去想。如果是这样的话,你永远不会得到提高,只能在社会的竞争中被淘汰,在工作中要不断的学习积累,完善自我,而不是得过且过。 要能做别人不能做的事, 吃别人不能吃的苦,有苦以后才能有甜。" + }, + { + "content": "记对于刚出来的我们来说,刚步入社会年轻好胜,心理比较浮躁都是在难免的,因为我们刚从学校里出来什么都不明白,不明白社会是个什么样貌,总是怀着好奇的心理去接触一下,总是想现实会像想象中的那么的好,可是往往会出乎人的意料,什么样的事情都会发生。什么样的结果都是难以预料的,自我的前途仍旧是一片黑暗,而我感觉到有种认识最可悲的,那就是出来不能够正确的认识自我的地位,拿不定主张, 没有主见的人, 往往经受不一点诱惑或者是打击。这样的人在处理事上头优柔寡断,到最终往往受伤最重的还是自我,正所谓当断不断,反受其乱。这就需要我们在以后的人生的道路上把握住方向,选择自我想要,所感兴趣的。" + }, + { + "content": "每个星期都有不一样事在我的身边发生,回头想想那些事,总是有些值得自我去学习回忆的,也许这些东西会和我在一齐,永远埋在我的脑海里。当年纪老的时候说不定想起这些事,那时候就会茫然的一笑,感觉那时候的我真的很幼稚,年轻,跟本就不明白什么,就明白成天在外面瞎混。说到这些感觉自我此刻有些远了,还是说此刻的我吧!自我已经出了学校,不在像以前那样的单纯了,感觉到自我的肩上的担子好重,在往后接踵而来的不仅仅是工作上的烦恼,生活上,家庭里的就慢慢的累积到自我的身上。也就是说在不知不觉中自我已经长大了不在以前那个动不动就爱哭,流鼻涕的那个小男孩了。也许这就是我在实习中的认识,要是没有这样的经历,估计我还没有那么深刻的认识。" + }, + { + "content": "时间过的真快啊!一转眼几个月的实习时间快过了。快要回学校了,我真是期待了好久,好想回学校重温一下那时在学校的感觉。天渐渐的冷了,但我热情仍旧没减,我对工作的热心仍旧还在。干了一段时间多少不等对自我此刻的工作也有些了解。不管此刻也好将来也罢,最重要的还是自我对工作的心态,如何控制好自我的心态是一个重要的问题。初此之外,还要靠自我的努力,自我能多学一点是一点,呀哦居安思危,要不断的独立思考,去发现问题,解决问题,提高自我的本事,发展自我的潜能,争取做到别人不会做的事,自我能够做出来。还要勤奋的动手,多亲手去做做,提高自我的实战经验。这样才能在社会上立于不败之地。" + }, + { + "content": "经过这次的实习,我对自我的专业有了更为详而深刻的了解,并且把它结合实际的经济生活中。应对许多十分棘手又无奈的问题,经过过去大学里所积累知识的,是远远不够的,因为那只是理论而已,我体会到了实际的工作与所学知识是有必须距离的,与应用知识的距离就更为遥远。今后需要针对处于实际环境进一步学习相关的知识。异常关注此刻的趋势,也许别人机会当作陷阱,可是自我必须要理智。我感到对自我感触最深的是, 提高自我交际本事, 跟别人合作。这段的实习时间虽然暂时的告一个段落,可是它留在我的是宝贵的经验,而不是一个简单的实习而已。我也会深深的感激学校能在毕业之前能够有一次这样的实习机会。" + }, + { + "content": "这周又恢复了平静,刚交了图,师傅也简便了一下,今日就看着没那么忙了,我就赶紧问了问师傅上一套住宅楼的关于防雷接地的一些我不明白的地方。师傅给我做了耐心的讲解。我顿时有种豁然开朗的感觉,自我看了好几天都不明白的问题,经师傅一点就明白了。真是感触颇深啊!我也要好好努力。" + }, + { + "content": "这周因为前两套图还没有彻底弄明白,师傅没有给我新的图纸,说让我这两天把前两套图纸都好好整理一下,把不明白的地方都统一做好标记或写在本上。明天给我集中处理一下,让我必须要认真看,尽量详细。于是在周末我开始了一天的看图,总结,记录问题工作。" + }, + { + "content": "我最终明白什么叫看着容易做起来难,我昨日画了一天的图,结果也没画多少,总是画了改,改了画,画了再改。前段时间看图纸的时候觉得都挺简单的,感觉要让我画肯定没问题,结果自我一动手就明白根本不是那么回事,看来这是一个大工程啊!" + }, + { + "content": "实习就快要结束了,今日是这张图的最终一部分,弱电的设计,由于设计院对弱电的要求都不高,都只是布一些信息点和信息插座什么的,具体的都是施工时视情景而定。所以弱电的图纸要求也不太高,师傅就只让我简单的做了整体设计。没有很详细。" + }, + { + "content": "经过这次综合实训的操作,使我比较系统地了解了制图基本程序和具体方法,加强了我在实习岗位上的实际操作本事,对所学的专业知识进行综合检验。同时也学会了人际交往,沟通方式及相关礼节方面的资料。这段实习时间,虽然很快就过去了,但学到的东西可不少,如何快速的适应公司的环境,融入企业的团体,如何更好的跟同事沟通,更好的完成既定的任务,这些都不是信手拈来的,都需要一个逐步的从点到面的认识,今日我学到的所有这些都是书本课堂上学不到的。“千里之行,始于足下”,这短暂而又充实的实习,我认为对我走向社会起到了一个桥梁的作用,过渡的作用,是人生的一段重要的经历,也是一个重要步骤,对将来走上工作岗位也有着很大帮忙。向他人虚心求教,与人礼貌交往等一些做人处世的基本原则都要在实际生活中认真的贯彻,好的习惯也要在实际生活中不断培养。这一段时间所学到的经验和知识是我一生中的一笔宝贵财富。这次实习也让我深刻了解到,和团体坚持良好的关系是很重要的。做事首先要学做人,要明白做人的道理,如何与人相处是现代社会的做人的一个最基本的问题。对于自我这样一个即将步入社会的人来说,需要学习的东西很多,他们就是最好的教师,正所谓“三人行,必有我师”,我们能够向他们学习很多知识、道理。实践是学生接触社会,了解社会,服务社会,运用所学知识实践自我的最好途径。亲身实践,而不是闭门造车。实现了从理论到实践再到理论的飞跃。增强了认识问题,分析问题,解决问题的本事。为认识社会,了解社会,步入社会打下了良好的基础。同时还需我们在以后的学习中用知识武装自我,用书本充实自我,为以后服务社会打下更坚固的基础!" + }, + { + "content": "到了这一周说说我的感想最深刻的还是交际方面的。像我一个人在外面, 生活确实不容易。 俗话说的好在家靠家人,出门靠朋友。 出来交朋友是十分重要的, 而看准人, 看好人,交好人是更重要的,在结交新朋友之前要研究好这个人是否值得自我去交,看准人是交朋友的一个重要条件,看好人则是交朋友的一个中心环节,交好人则是最简单的了。我的公司虽然不怎样大,可是有几个人就有几种不一样的社会形态。有些时候我都会不禁的发出感慨,也许正因为社会上有这些不一样的人,不一样事,不用的物体才能构成这个复杂而又无奇不有的社会。社会真是让我感慨万千,如果说社会是大海,那我就是一滴水,终究会随着时间的流逝而滚入滔滔的大海随波逐流。" + }, + { + "content": "时间过的真是快啊!不知不觉的将近两个多月了。对于刚出学校的我来说生活的点滴都是一个学习的过程,比如说自我的日常生活,从学校出来了,什么都要靠自我,刚来厂里的时候,自我连做饭都不怎样会,有些时候都煮的不熟,正所谓在家里过惯了那中衣来伸手,反来张口的生活。开始几次都没做好,可是之后慢慢的适应了,越做越好了,同时自我也开始慢慢的学习做菜了,虽然做的不怎样好,可是自我还是每一天坚持的去做,相信总有一天会做好的,正所谓功夫不负有心人,我坚信总有一天会弄好的。离开了学校,怎样样去搞好自我的生活也是一个重要的过程。也是有很多地方值得自我去学习的,生活中处处能够学习,只要你去用心。" + }, + { + "content": "铁架子,放在里面来增加的它的强度,以防被什么大型机器从上头走的时候压坏了,我看着师傅做,便好奇的问你为什么不做成和扳子一样大的架子呢?师傅起初并没有告诉我为什么这样做,我一向带着这样的疑问。之后和他一齐浇的时候才发现,如果和它弄成一样大的话结果就放不进去,或者说以后弄出来,边上就会不平齐,不仅仅外观上头不怎样好看,并且有些时候不注意的话,他人从它旁边经过的会弄伤其他人。这个虽然简单,也许在书上的时候大家都会说,但你一旦在真正实践的时候就会想不到, 仅有实践了,才能更深的体会。" + }, + { + "content": "实习的时间长了,学到的东西多了,自我的生活也渐渐好了,每一天都有新鲜的趣事,想起实习前的茫然无措,此刻我也能从容的开始新生活。人可能往往就是如此,因为未知所以感到恐惧,因为从未尝试,所以不敢尝试,可是如果没有第一个吃螃蟹的人,谁又能明白螃蟹多么鲜美呢?在第十周,我突然就有了这样的感慨,因为师父又给了我一个新的任务,接任务时突然想起在对找工作的胆怯,害怕失败,只想缩在安全的乌龟壳里,可我还是勇敢的跨出了第一步。有了第一次的尝试,无论成功或者失败,第二次就不会太远。因为有了一次次失败的经验,我最终得到了成功。我也从中明白了一个道理,不要胆怯,也不要害怕失败,就算是完完全全陌生的事情,努力尝试过才明白自我有没有那个本事,仅有在尝试、失败、积累经验中不断提升自我,才会获得成功。" + }, + { + "content": "由于与老员工之间相处的越来越好,于是在工作上也给我带来了很多的便利。他们很耐心的给我讲解了一些工作上的注意事项,以及他们多年来的工作经验。我们不得不承认好的人际关系对我们自身的反正来说存在着重要的意义。不仅仅是个人也好还是企业也好,仅有在良好的人际关系下才会有良好的合作。良好的合作往往有助于我们工作的高效完成。能让我们事半功倍而不是事倍功半。这些体会都是在实习过程中所得到的,我最终明白在我们真正踏入社会之前为什么要进行实习。因为学校所教与我们的知识毕竟有限,仅有在实际的工作中我们才能学到更多的知识及体验。而这些体验是我们花再多的钱也不能购买的。因为这是只属于我们自我的,不会随着时间的流逝而被遗忘。" + }, + { + "content": "工作中,我们难免会犯错所以挨骂也是在所难免的。当这件事发生在我的身上的时候我才深刻体会到解释就是找理由,据理力争是没有用的。你对领导解释得越多结果就会变得更糟,所以主动承认错误是关键。由于认错态度良好于是领导也就随便骂骂也就算了。我们常常会做错事,也常常会被误解。在工作中不管我们是犯错还是被误解,我们首先要做的不是跟上级阐述我们犯错的理由首先要做的是承认错误。当被误解的时候我们不要忙着去解释,当领导处于愤怒之时,过多的争论只会让事情往更加恶劣的情景发展,倒不如听他说完然后道个歉。其实对于我们来说认错只可是是一件很简单的事情。并且关于误解,总会随着时间的的推移而水落石出的。所以没必要和上级激励力争,因为你们之间本来就是不平等的!" + }, + { + "content": "幸好上次的错误没有给领导留下太多的坏的印象,由于这阵子的工作完成的还算是比较好,于是领导在大家面前夸奖了我,也算是这阵子辛勤工作的回报吧。所以下班的时候觉得心境异常舒畅。我想这也许就是为什么马斯洛把自我价值的实现放在人类需要的最顶端的原因吧。每个人都需要自身的价值被肯定,当我们的价值得到实现的时候我们就会觉得愉悦,而当我们的不能得到他人的认可的时候我们就觉得难过。虽然这只是一个小小的夸奖, 但对于一个实习生来说,能在众多的老员工之间得到夸奖也算是小有成就感吧。因为不是我们所做的努力都是能够被人们所认可的,这就是为什么那么多人不能得志的原因。可是我相信上帝都是公平的,我们的努力必须能够得到回报的除非我们所做的努力还不够多。所以,不要放弃的太早不走下去你不明白你接下来遇到的是什么。" + }, + { + "content": "这一周我们的工作比较忙,大部分的时间里我们都是在加班。加班的时间多了工人的工资也就比较高了。虽然很累可是大部分的员工还是很高兴,也许对于我们这些刚出社会的人来说不太能够理解。在加班的过程中和一位老员工闲聊,在闲聊的过程中我得知原先他已经在这个厂里面工作了7、8 年。我很冒昧的问了他一个问题:为什么,在那里工作了那么多年还是一个普通员工。他没有责备我如此唐突。而是跟我说:那也没办法大字都不认识几个呢,怎样能去做那些工作呢?我突然觉得知识是多么的重要,虽然我们不能说一个人的学时就代表了一个人的本事,可是在如此功力、竞争如此大的社会。在必须的程度上一个人的学历代表着一个人的水平。因为没有企业有时间、并且愿意花时间去验证你到底有没有本事。所以只能经过一个人的学历来确定了。第一次觉得原先知识是那么的重要。" + }, + { + "content": "相比上一周,这一周的工作就稍微简便一点了也没有忙了。所以下班以后我们就有了更多的时间做自我的事情了,一般在下班的时候我们都会选择去运动运动。尽管上班也有点累了,可是至少能做一些自我喜欢做的事情也算是一种放松的方法。突然在运动中觉得学校的生活已经离我们越来越远了,好好像从来没有如此的怀念过我们的学校生活。当我们还在学校的时候我们曾拼命的想要逃离我们的学校生活可是真正步入社会以后才能明白,学校的生活是我们一生中最完美的时光。在上学的时候我们常常觉得压力很大,可是此刻才明白原先上学所带给我们的压力是人一生中所有的压力中最小的一部分。不得不说一句很俗的话:每个人都是这样,仅有在失去的时候才会觉得可贵" + }, + { + "content": "由于学校还有一些重要的事情要做的的原因,这个星期我们领导给我们批了几天假让我们回去学校处理一些事情。当我们走进学校,那种熟悉的感觉迎面而来。这种熟悉的感觉让我们每一个人都觉得心境异常的愉悦。虽然以后还不明白还有多少次机会踏进我们的学校,可是每个人都要成长,而成长中总伴随着得到与失去。所以我们不应当只看到自我失去的那部分,而忽略了自我得到的那一部分。还记得刚上大学的时候对这个学校的种种嫌弃。突然想起一句话:学校就是自我在心里骂一千遍但不允许别人骂一遍的地方。对啊,我们总是对我们的母校带着如此复杂的感情。我们很快就办完事情在学校多呆了一天以后我们就回到了工作的地方。不明白为什么的,从学校回来突然觉得好像觉得没有那么的累了⋯⋯" + }, + { + "content": "不知不觉中,来那里实习已经快两个月了,虽然时间已接近两个月,对工作也是越来越熟悉,可是有时还是会觉得力不从心。并且也失去了刚开始来实习的那种兴奋与好奇,觉得心境总是处在低谷当中,总是振奋不起来。在和领导的偶然闲聊的时候他很友好的跟我说:只要我用心地做,就会左右逢源。越做越觉乐趣,越做越起劲。听他说完顿时觉得茅塞顿开。有人说过:凡职业都具趣味味的,只要你肯干下去,趣味自然会发生。切忌不要粗心大意,马虎了事,心浮气躁。做任何事都一样,需要有恒心、细心和毅力,那才会到达成功的彼岸!对啊,每个职业都会有它的趣味所在的,像我之前所说的不走下去,我们不明白接下来会遇到什么。所以耐心等候吧。" + }, + { + "content": "在上一周和领导的闲聊之后,在这一周我反省了一下这阵子的工作状态。我突然意识到与其自怨自艾还不如干些别的事情来充实自我,于是我主动要求在空闲的时间去帮帮别的部门的忙。一方面我能够打发打发自我的时间,让自我变得充实而不至于自我的觉得生活无趣。另一方面,既然我们实习是为了学到更多的知识那就趁着实习的期间尽可能的去不一样的部门感受一下不一样部门的工作。也许这样对我们真正踏上社会的时候也是有所帮忙的。即使是生活无趣,其实我们也是可以让它变得趣味的。其实大部分的原因不在于生活,而是取决于我们带着怎样样的心态去看待生活。" + } + ] \ No newline at end of file diff --git a/textHandle/__pycache__/__init__.cpython-39.pyc b/textHandle/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7360f5e30003cf2ab4faeca15e09df514afec93b GIT binary patch literal 127 zcmYe~<>g`k0ym}HR1p0bL?8o3AjbiSi&=m~3PUi1CZpd2KczG$)efZlGY~TX0PhqU!vFvP literal 0 HcmV?d00001 diff --git a/textHandle/__pycache__/count.cpython-39.pyc b/textHandle/__pycache__/count.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..415d586bba93b027d8a9466ad0007eae89cde0ba GIT binary patch literal 879 zcmY*Y&ui2`6rRbi&8AzeRn*=h7-$X^yathCi&&^t=&5T<7nO^7w2dKRFZ zo*e%8^zP@u==8(M+2{9XM_;vLiUHT~-9||@UO2x1i9LPw^58|4X(#9XO52htZRZ@A zl7k`#n@}1%!i;SAkaeL%%Q&Vo`+|gN{OitgvYAyp+o{=Z%{NW$Ck>~Yy{hKw-e6a^ z8!M$`w+$Jx0}8nT_Hf6#i91-_0RKOx4eK_XhUpnF6jH$M2scZDfH%Bm?rIvaeX7TL+TNj=c*fUpr H$H#vFApquf literal 0 HcmV?d00001 diff --git a/textHandle/__pycache__/get_daily.cpython-39.pyc b/textHandle/__pycache__/get_daily.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..890e6e1324978f1ad16bc8904efccae076aba9cf GIT binary patch literal 715 zcmZWmy-ve05VrH*(v+Qvg&_=m0E7?{m0-%!EvjTiv1x~NoU{rv+uk69Q%HsfPK8=;uCiC12ZAJ1}{%w;e^wSMC6umgPU8z&1WN` zoK8q!eF09w1lN7*-k-y%AaI*RhA=sOrMiX{S={3GmP9spxC^_(J*d}H_Bc+nRYR4{ zF-VNPvKXV^fR{MHhHeOh{wAcMp+wTaP*y3jduc(^5b479eKx+B&We1tti`I%rd0H`M!=q9Y)AdmIGisrP0@fPF=(-;y)S4LK+Mnz4@>JK> zO*B+Ga6`wt#e-D2jFpvS43n19Zz(nMj}gbzi~|TN@&+0_81L{K68jEJS5Z=vyOItzk(2GYQm*QDO1O+|i;z0<7C1%$WO*eIu&{lf0kKqgSalGzH z@DaRuawcg*BRDX#^FLp{ME!o3fP5U!#3#I880?D)!6j&Z2KaLSD}2~A;f^PO^w+iNSdg~J_)T<$^S@(%3lYUf^v=X4p#*<7=7NuC0a$JZ-aT`gVit$7gtR5WA zmfB@3FBD@2E=NP?>!1cP+Lks{+c=QNRULak&_}IMA&o1#A`CbJY&1|VWPC#*T;-u@ zpeY+d?J<_fq+krA-Qk1ga9xA%a%4Gu5bFQa1DIctCpbR@VupAgsBz;=7D5&+9EkES zjsemkv-y@1gt|j>v_;eI2z(F0%V;VX(_O}<881`xdyKu5QCe4&1DmwPlekbFbj<|N o^x6n2PLKe#`^PzsdDJrpW|a$kTD^O)n<4F;*S9Zl`Wuw|0-f!ULI3~& literal 0 HcmV?d00001 diff --git a/textHandle/__pycache__/handle_weeks_date.cpython-39.pyc b/textHandle/__pycache__/handle_weeks_date.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71a684cccf15cd8028f15edc7b05ab01d70c3e17 GIT binary patch literal 730 zcmZWm%}&BV5Z-MI6apl2BOdgMi9CQY#zYc5_2R*#A(=GHifAdgZNpEv$z%8eyi%{8 zJbUxx%p#?PNoHqeXJ@{zUxP-YCdky;R9RApFD{B^Q*lckx9GSRC{V7+KP+FM^(Z>_ zfbI`0pSYlFC47m(x0H?YQ=*0T+VLH9u(TF_3CmcaSVosNRkP}oQg3lDNYqAVwHX(H zR1K^G0O#y?=oI=0nJ3D<|09wFe|xZk)3lZVn|ViIwFow;yxPA7j{T zq~^BCw?~=EtO5`x8h{D!Fi(n@rh5dL%h9B{m3SrCHvOG8OJaMOL$JX&wS-YeyPPpZ z0r_O85{M=G!~%6QX_RxXx3D)n{X;JP0GG~_IRF3v literal 0 HcmV?d00001 diff --git a/textHandle/__pycache__/submitTime.cpython-39.pyc b/textHandle/__pycache__/submitTime.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebf29e059332e0b3613eab41679618fc02a90f91 GIT binary patch literal 1124 zcmZuwPfrvv6z`kq><$a7h!G)rAjX)CiKrK2j4?(DdT|eeF>Xkjaa)(c+3DKp3T&1W zT#a7=j$HjXy?XNE2jJv;9fGsbPWt-V_y7Igr0sT#;rji?sviMkKj~6mAzq&2E^i@` zOhV4O)d^jA#bhAEBPPScpc_coU_pn6bqMm+78xJ!=2M-DpUR_P5^a@{{=2{>M={F9*)JUP3w z_GGKCi~in7?T?BrtM=^cw2-;lsthU8>TusRg($5NqCo*Da|Yvuzsangi+f%~Vq6p@ z#_f}`$XK=m$H4?7oCFglz=jiip@vERE&P7-Ah7&6ngl0+(#CsiD#!0I1Xj#HWaWzo zSR;KOaHC~IM$34Lrso@;k3HY?{ETGOw9a^$%39BIb-yY~SgLBL)P)0c7QNeCzxVhQ zT&#+omRZqvi!#mfeNmv9I5(k2xa+%0eg2!=QBejd+tV(QKEz0z(61ncBIXUtJ&aleyQmwuz zwNBC???pOLLb#R?11(26@pD3a8Krq8F*MF*k;skd&^`%jv7r_bQ<82BaTv$`4Ut(O Y`6VKxR7?EA+Qm<+$j|8S^of&;KM~IT8~^|S literal 0 HcmV?d00001 diff --git a/textHandle/get_daily.py b/textHandle/get_daily.py new file mode 100644 index 0000000..83ed8a4 --- /dev/null +++ b/textHandle/get_daily.py @@ -0,0 +1,12 @@ +import random + + +class Daily: + def __init__(self, daily: dict): + self.daily = daily + + def __str__(self): + return "handler daily" + + def get_daily(self): + return random.choice(self.daily) diff --git a/textHandle/get_weekly.py b/textHandle/get_weekly.py new file mode 100644 index 0000000..c8c0c3a --- /dev/null +++ b/textHandle/get_weekly.py @@ -0,0 +1,9 @@ +class Weekly: + def __str__(self): + return "weekly" + + def __init__(self, weeks: dict): + self.weeks = weeks + + def get_now_weekly(self, number: int): + return self.weeks[number]['content'] diff --git a/textHandle/handle_weeks_date.py b/textHandle/handle_weeks_date.py new file mode 100644 index 0000000..417756e --- /dev/null +++ b/textHandle/handle_weeks_date.py @@ -0,0 +1,10 @@ +class WeeksDate: + def __init__(self, weeks_date: dict): + self.weeks_date = weeks_date + + def __str__(self): + return 'weeks date' + + # get now week date + def get_now_week_date(self): + return self.weeks_date['data'][0] diff --git a/textHandle/submitTime.py b/textHandle/submitTime.py new file mode 100644 index 0000000..6b92515 --- /dev/null +++ b/textHandle/submitTime.py @@ -0,0 +1,19 @@ +import json +import os + + +class SubmitTime: + def __str__(self): + return "submit log" + + def __init__(self, path): + self.path = os.path.join(path, 'textFile/submit_time.json') + with open(self.path, 'r', encoding="UTF-8") as f: + self.submit_time = json.load(f) + self.daily_next_submit_Time = self.submit_time['daily_next_submit_Time'] + self.weekly_next_submit_Time = self.submit_time['weekly_next_submit_Time'] + self.month_next_submit_Report = self.submit_time['month_next_submit_Report'] + + def to_save_local(self): + with open(self.path, 'w', encoding="UTF-8") as f: + f.write(str(self.__dict__)) diff --git a/user_config.json b/user_config.json index ec41e3b..afca75e 100644 --- a/user_config.json +++ b/user_config.json @@ -1,12 +1,15 @@ { - "password": "lihua", - "phone": "137xxxx", - "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", - "latitude": "34.830624", - "longitude": "115.545005", - "start_time": "08", - "end_time": "21", - "city": "\u66f9\u53bf", - "province": "\u5c71\u4e1c\u7701", - "is_repeat_clock_in": false + "password": "li hua", + "phone": "1010101010010101", + "address": "山东菏泽市曹县蔡徐村", + "latitude": "34.830624", + "longitude": "115.545005", + "start_time": "11", + "end_time": "21", + "city": "\u66f9\u53bf", + "province": "\u5c71\u4e1c\u7701", + "is_repeat_clock_in": true, + "is_submit_daily": true, + "is_submit_weekly": true, + "submit_weekly_time": 1 } \ No newline at end of file diff --git a/util/__init__.py b/util/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/util/__pycache__/__init__.cpython-39.pyc b/util/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6260b4a18b80d8aaa7ad9bbfe693a55b9351c807 GIT binary patch literal 121 zcmYe~<>g`kg6UEvsUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2DG#VRH}KQFza qG_|rcFQ&94GbbiKJ~J<~BtBlRpz;=nO>TZlX-=vgNZ)55W&i+Zh8Vg4 literal 0 HcmV?d00001 diff --git a/util/__pycache__/tomorrow.cpython-39.pyc b/util/__pycache__/tomorrow.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da4e25e9bbf1d823969fbf324c80ef7e884a7972 GIT binary patch literal 767 zcmbtRv2NQi5Iu^LOdGJ9rU<$fLN^yhfGi!1A_$s}ZI^C_0fIG&RJAA>6a~jYGP!I2 zphGhHm$-KFC$v-Vml#xb}+uiqhP(5wIp zQ?P8x7??;$Kbht_{vJ>HzbMfuMzKkBZxOk3lN!E(4Q6Zc8OHq`)`4*pgjU}8+?voQ z)TZ!i%tGpnZ(KR2tj@46=%HVt*KZI!+_ML`!|yG8i_kfGteM7sHmOhW#DB2oaL0Ul z%kFy*$dBCd&8tC%<||t{SFN(MQ)RO`(YN=LJ@=#yb_|Ie!Ip(st988cDapQpRPqmxdrzWFaErEKbc)s<<)g#)=fEUd|u4D zoYUnx9Cd*_lk=jQFJk?L#0@bsS|;o2S%DY<#w&R?2qpRJ5pWOeh!=01B| zCYN9%txP*wk)sx!Ab3JR!|vf2PvL~BN~$XNRV7s&;nU%4CzL9rv??#9{50;hy0-$m qAr++IU6)lVYorXx(xLVTge`T;D&E>kH-$N;ZPwJ>5g!dkLa@IYjjmMy literal 0 HcmV?d00001 diff --git a/util/tomorrow.py b/util/tomorrow.py new file mode 100644 index 0000000..32805e6 --- /dev/null +++ b/util/tomorrow.py @@ -0,0 +1,23 @@ +from datetime import datetime, timedelta + + +def tomorrow_1_clock() -> int: + """ + tomorrow 1.am ctime + :return: + """ + now = datetime.now() + tomorrow = datetime(now.year, now.month, now.day, 1, 0, 0) + timedelta(days=1) + return int(tomorrow.timestamp()) + + +def next_week_submit_time() -> int: + """ + next week submit time + :return: + """ + now = datetime.now() + tomorrow = datetime(now.year, now.month, now.day, 1, 0, 0) + timedelta(days=7) + return int(tomorrow.timestamp()) +if __name__ == '__main__': + print(tomorrow_1_clock()) \ No newline at end of file From fd9dd4ef989003378ace6c23f2d8a9a415ccdb6f Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Sat, 9 Dec 2023 20:02:51 +0800 Subject: [PATCH 11/49] readme --- README.MD | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/README.MD b/README.MD index 6307e51..5a70c73 100644 --- a/README.MD +++ b/README.MD @@ -1,5 +1,9 @@ ## 当前功能 -2023-12-4 +**2023-12-9** ++ 1 新增提交日报 ++ 2 新增提交周报 + +**2023-12-4** 1. 打卡 2. 补签(补前未30天打卡) ## 声明 @@ -15,8 +19,8 @@ > 配置 user_config.json 文件 ```angular2html -"password": "li hua", -"phone": "1111xxxx", +"password": "li hua", \\ 密码 +"phone": "1111xxxx", \\ 手机号 "address": "山东省菏泽市曹县某某街道", "latitude": "34.830624", \\ 纬度 "longitude": "115.545005", \\ 经度 @@ -25,9 +29,19 @@ "city": "菏泽市", "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 +"is_submit_daily": false, \\ 默认不提交日报 +"is_submit_weekly": false,\\ 默认不提交周报 +"submit_weekly_time": 1 \\ 星期几提交周报 ``` ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) 2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 -3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 \ No newline at end of file +3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 +### 自动打卡 +验证该环境能否打卡最简单的方法,看该环境能不能登录网页版 +**某鱼上有几块一个月的移某云,可以用安卓模拟器的(不是打广告,我也不是卖云服务器的)** +买代理(有点贵),免费的代理不太稳定(频繁切换ip好像会封号) +某讯和某里的云服务器大概率不行(deny了) +有条件上**树莓派**挂寝室里 +没条件买**挂机宝**,**云手机**也可以 \ No newline at end of file From d0580773ffae5fc640688c4d94074c79d47e2f17 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Sat, 9 Dec 2023 20:03:36 +0800 Subject: [PATCH 12/49] change config --- user_config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user_config.json b/user_config.json index afca75e..25f7815 100644 --- a/user_config.json +++ b/user_config.json @@ -8,8 +8,8 @@ "end_time": "21", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", - "is_repeat_clock_in": true, - "is_submit_daily": true, - "is_submit_weekly": true, + "is_repeat_clock_in": false, + "is_submit_daily": false, + "is_submit_weekly": false, "submit_weekly_time": 1 } \ No newline at end of file From 4d34e409ed8651de74b86c9553478bb78b1b15f6 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Sun, 10 Dec 2023 14:52:49 +0800 Subject: [PATCH 13/49] add start chart --- README.MD | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index 5a70c73..7e53606 100644 --- a/README.MD +++ b/README.MD @@ -15,8 +15,9 @@ - [x] 运行和调试本项目则表示为默认同意以上声明 ## 基本使用 +>1.pip install -r requirements.txt -> 配置 user_config.json 文件 +>2.配置 user_config.json 文件 ```angular2html "password": "li hua", \\ 密码 @@ -44,4 +45,6 @@ 买代理(有点贵),免费的代理不太稳定(频繁切换ip好像会封号) 某讯和某里的云服务器大概率不行(deny了) 有条件上**树莓派**挂寝室里 -没条件买**挂机宝**,**云手机**也可以 \ No newline at end of file +没条件买**挂机宝**,**云手机**也可以 +## start +[![Stargazers over time](https://starchart.cc/github123666/gonxueyun.svg)](https://starchart.cc/github123666/gonxueyun) From 7f72ebadca34cd70da6a2bcd0c3f61c9cb9a69e7 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 14:30:03 +0800 Subject: [PATCH 14/49] modify --- README.MD | 27 +++++---------------------- api/api_all.py | 19 +++++++++++++++++-- main.py | 3 ++- textFile/submit_time.json | 10 ++++++++-- textHandle/submitTime.py | 2 +- user_config.json | 16 +--------------- 6 files changed, 34 insertions(+), 43 deletions(-) diff --git a/README.MD b/README.MD index 7e53606..6307e51 100644 --- a/README.MD +++ b/README.MD @@ -1,9 +1,5 @@ ## 当前功能 -**2023-12-9** -+ 1 新增提交日报 -+ 2 新增提交周报 - -**2023-12-4** +2023-12-4 1. 打卡 2. 补签(补前未30天打卡) ## 声明 @@ -15,13 +11,12 @@ - [x] 运行和调试本项目则表示为默认同意以上声明 ## 基本使用 ->1.pip install -r requirements.txt ->2.配置 user_config.json 文件 +> 配置 user_config.json 文件 ```angular2html -"password": "li hua", \\ 密码 -"phone": "1111xxxx", \\ 手机号 +"password": "li hua", +"phone": "1111xxxx", "address": "山东省菏泽市曹县某某街道", "latitude": "34.830624", \\ 纬度 "longitude": "115.545005", \\ 经度 @@ -30,21 +25,9 @@ "city": "菏泽市", "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 -"is_submit_daily": false, \\ 默认不提交日报 -"is_submit_weekly": false,\\ 默认不提交周报 -"submit_weekly_time": 1 \\ 星期几提交周报 ``` ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) 2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 -3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 -### 自动打卡 -验证该环境能否打卡最简单的方法,看该环境能不能登录网页版 -**某鱼上有几块一个月的移某云,可以用安卓模拟器的(不是打广告,我也不是卖云服务器的)** -买代理(有点贵),免费的代理不太稳定(频繁切换ip好像会封号) -某讯和某里的云服务器大概率不行(deny了) -有条件上**树莓派**挂寝室里 -没条件买**挂机宝**,**云手机**也可以 -## start -[![Stargazers over time](https://starchart.cc/github123666/gonxueyun.svg)](https://starchart.cc/github123666/gonxueyun) +3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 \ No newline at end of file diff --git a/api/api_all.py b/api/api_all.py index 60399f5..ebb0209 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -36,6 +36,13 @@ def save_token(user_login_info): user_login_info.to_save_local(user_login_info.__dict__) +# special case +def special_code(func, response): + if response['code'] == 500: + response['code'] = 200 + func(response) + + # repeat def repeat_api(func): @wraps(func) @@ -258,10 +265,12 @@ def submit_weekly(user_login_info, week, weekly): headers['authorization'] = user_login_info.token headers['sign'] = create_sign(user_login_info.user_id, "week", user_login_info.plan_id, '周报') rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() - handle_response(rsp) + # code equal 500 is allow + special_code(handle_response, rsp) @repeat_api +# submit daily def submit_daily(user_login_info, daily, day): api_module_log.info('提交日报') url = 'practice/paper/v2/save' @@ -274,7 +283,13 @@ def submit_daily(user_login_info, daily, day): "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "day", "content": daily.get_daily()['data']} rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() - handle_response(rsp) + # code equal 500 is allow + special_code(handle_response, rsp) + + +# submit month report +def submit_month_report(user_login_info): + pass # check response diff --git a/main.py b/main.py index 1912427..8a5cf72 100644 --- a/main.py +++ b/main.py @@ -107,7 +107,8 @@ def run(): # submit weekly # is user config week - now_week = int(time.strftime("%w", time.localtime())) + 1 + now_week = int(time.strftime("%w", time.localtime())) + now_week = now_week if now_week != 0 else 7 if now_week == user_login_info.submit_weekly_time: if user_login_info.is_submit_weekly: main_module_log.info('判断今天是否提交过周报') diff --git a/textFile/submit_time.json b/textFile/submit_time.json index ad0e417..a523e51 100644 --- a/textFile/submit_time.json +++ b/textFile/submit_time.json @@ -1,5 +1,11 @@ { - "daily_next_submit_Time": "", - "weekly_next_submit_Time": "", + "path": "D:\\gongxueyun\\textFile/submit_time.json", + "submit_time": { + "daily_next_submit_Time": "", + "weekly_next_submit_Time": "", + "month_next_submit_Report": "" + }, + "daily_next_submit_Time": 1702314000, + "weekly_next_submit_Time": 1702832400, "month_next_submit_Report": "" } \ No newline at end of file diff --git a/textHandle/submitTime.py b/textHandle/submitTime.py index 6b92515..ca7867a 100644 --- a/textHandle/submitTime.py +++ b/textHandle/submitTime.py @@ -16,4 +16,4 @@ def __init__(self, path): def to_save_local(self): with open(self.path, 'w', encoding="UTF-8") as f: - f.write(str(self.__dict__)) + f.write(json.dumps(self.__dict__)) diff --git a/user_config.json b/user_config.json index 25f7815..58dd387 100644 --- a/user_config.json +++ b/user_config.json @@ -1,15 +1 @@ -{ - "password": "li hua", - "phone": "1010101010010101", - "address": "山东菏泽市曹县蔡徐村", - "latitude": "34.830624", - "longitude": "115.545005", - "start_time": "11", - "end_time": "21", - "city": "\u66f9\u53bf", - "province": "\u5c71\u4e1c\u7701", - "is_repeat_clock_in": false, - "is_submit_daily": false, - "is_submit_weekly": false, - "submit_weekly_time": 1 -} \ No newline at end of file +{"password": "14yhl9TTt", "phone": "13797424039", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", "start_time": "11", "end_time": "21", "token": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJtb2d1ZGluZy11c2VyIiwic3ViIjoie1wibG9naW5UeXBlXCI6XCJhbmRyb2lkXCIsXCJ1c2VySWRcIjoxMDM4MTc1NTJ9IiwiYXVkIjoibW9ndWRpbmciLCJleHAiOjIwMTc3NDE0MTAsIm5iZiI6MTcwMjEyMTMxMCwiaWF0IjoxNzAyMTIyMjEwfQ.cIPHfPayUNYjZ-nYReyZzp9Oqu7820HCF9n8w3UezZC8hjk61tid059WPZF455c8dbpSFvNr2tRcuPXopP89HA", "user_id": "103817552", "plan_id": "5e4cda2cab725f3c60d46c2dae3740bd", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", "path": "D:\\gongxueyun\\user_config.json", "is_repeat_clock_in": true, "is_submit_daily": true, "is_submit_weekly": true, "submit_weekly_time": 1} \ No newline at end of file From aa105b733f8c09cb7261af8ac88272adc42786af Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 14:33:15 +0800 Subject: [PATCH 15/49] change bug --- textFile/submit_time.json | 10 ++-------- user_config.json | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/textFile/submit_time.json b/textFile/submit_time.json index a523e51..ad0e417 100644 --- a/textFile/submit_time.json +++ b/textFile/submit_time.json @@ -1,11 +1,5 @@ { - "path": "D:\\gongxueyun\\textFile/submit_time.json", - "submit_time": { - "daily_next_submit_Time": "", - "weekly_next_submit_Time": "", - "month_next_submit_Report": "" - }, - "daily_next_submit_Time": 1702314000, - "weekly_next_submit_Time": 1702832400, + "daily_next_submit_Time": "", + "weekly_next_submit_Time": "", "month_next_submit_Report": "" } \ No newline at end of file diff --git a/user_config.json b/user_config.json index 58dd387..0681b93 100644 --- a/user_config.json +++ b/user_config.json @@ -1 +1,16 @@ -{"password": "14yhl9TTt", "phone": "13797424039", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", "start_time": "11", "end_time": "21", "token": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJtb2d1ZGluZy11c2VyIiwic3ViIjoie1wibG9naW5UeXBlXCI6XCJhbmRyb2lkXCIsXCJ1c2VySWRcIjoxMDM4MTc1NTJ9IiwiYXVkIjoibW9ndWRpbmciLCJleHAiOjIwMTc3NDE0MTAsIm5iZiI6MTcwMjEyMTMxMCwiaWF0IjoxNzAyMTIyMjEwfQ.cIPHfPayUNYjZ-nYReyZzp9Oqu7820HCF9n8w3UezZC8hjk61tid059WPZF455c8dbpSFvNr2tRcuPXopP89HA", "user_id": "103817552", "plan_id": "5e4cda2cab725f3c60d46c2dae3740bd", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", "path": "D:\\gongxueyun\\user_config.json", "is_repeat_clock_in": true, "is_submit_daily": true, "is_submit_weekly": true, "submit_weekly_time": 1} \ No newline at end of file +{ + "password": "li hua", + "phone": "111111111111111111", + "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", + "latitude": "34.830624", + "longitude": "115.545005", + "start_time": "11", + "end_time": "21", , + "city": "\u66f9\u53bf", + "province": "\u5c71\u4e1c\u7701", + "path": "D:\\gongxueyun\\user_config.json", + "is_repeat_clock_in": true, + "is_submit_daily": true, + "is_submit_weekly": true, + "submit_weekly_time": 1 +} \ No newline at end of file From a00e44759108dfa637f8baeded150cdd695e69fe Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 14:37:52 +0800 Subject: [PATCH 16/49] log --- README.MD | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/README.MD b/README.MD index 6307e51..558bd9e 100644 --- a/README.MD +++ b/README.MD @@ -1,5 +1,13 @@ ## 当前功能 -2023-12-4 +**2023-12-11** ++ 修改bug ++ 完善日报和周报 + +**2023-12-9** ++ 1 新增提交日报 ++ 2 新增提交周报 + +**2023-12-4** 1. 打卡 2. 补签(补前未30天打卡) ## 声明 @@ -11,12 +19,13 @@ - [x] 运行和调试本项目则表示为默认同意以上声明 ## 基本使用 +>1.pip install -r requirements.txt -> 配置 user_config.json 文件 +>2.配置 user_config.json 文件 ```angular2html -"password": "li hua", -"phone": "1111xxxx", +"password": "li hua", \\ 密码 +"phone": "1111xxxx", \\ 手机号 "address": "山东省菏泽市曹县某某街道", "latitude": "34.830624", \\ 纬度 "longitude": "115.545005", \\ 经度 @@ -25,9 +34,21 @@ "city": "菏泽市", "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 +"is_submit_daily": false, \\ 默认不提交日报 +"is_submit_weekly": false,\\ 默认不提交周报 +"submit_weekly_time": 1 \\ 星期几提交周报 ``` ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) 2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 -3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 \ No newline at end of file +3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 +### 自动打卡 +验证该环境能否打卡最简单的方法,看该环境能不能登录网页版 +**某鱼上有几块一个月的移某云,可以用安卓模拟器的(不是打广告,我也不是卖云服务器的)** +买代理(有点贵),免费的代理不太稳定(频繁切换ip好像会封号) +某讯和某里的云服务器大概率不行(deny了) +有条件上**树莓派**挂寝室里 +没条件买**挂机宝**,**云手机**也可以 +## start +[![Stargazers over time](https://starchart.cc/github123666/gonxueyun.svg)](https://starchart.cc/github123666/gonxueyun) From 996cd7bdf5e4944be5203df69018854d44d81a61 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 14:48:55 +0800 Subject: [PATCH 17/49] log --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index 558bd9e..5cb2021 100644 --- a/README.MD +++ b/README.MD @@ -1,4 +1,5 @@ ## 当前功能 +## 有问题issues **2023-12-11** + 修改bug + 完善日报和周报 From 37204a237947e6b5711b0e7ebd5ef9ab93213765 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 15:55:19 +0800 Subject: [PATCH 18/49] add tip --- README.MD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 5cb2021..0e58898 100644 --- a/README.MD +++ b/README.MD @@ -31,7 +31,7 @@ "latitude": "34.830624", \\ 纬度 "longitude": "115.545005", \\ 经度 "start_time": "08", \\ 打卡开始时间 -"end_time": "21", \\ 打卡结束位置 +"end_time": "21", \\ 打卡结束时间 注意是24小时时间 "city": "菏泽市", "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 From 4395160ce86e174c491ebb5d14b840433edf7d16 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 16:18:54 +0800 Subject: [PATCH 19/49] change bug and add function --- api/api_all.py | 11 ++++++++++- config/info.py | 1 + main.py | 14 ++++++++++++++ tast.py | 6 +++--- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/api/api_all.py b/api/api_all.py index ebb0209..01cfced 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -215,6 +215,9 @@ def get_attendance_log(user_login_info): save_token(user_login_info) # handle response text day_set = count_day(dict(rsp)) + # remove now clock in log + day_set.discard(int(time.strftime("%d", time.localtime()))) + # no clock in day empty_day = day_set ^ set(range(1, now_day)) # repeat clock in api_module_log.info("本月补签阻塞3~15秒后打卡") @@ -287,9 +290,15 @@ def submit_daily(user_login_info, daily, day): special_code(handle_response, rsp) +@repeat_api # submit month report def submit_month_report(user_login_info): - pass + url = 'practice/paper/v2/save' + data = {"yearmonth": "2023-12", "address": "", "t": "57e77d248294eca392dcda799b213cf9", "title": "12月的月报", + "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "month", + "content": "aaa"} + # upada token + headers['authorization'] = user_login_info.token # check response diff --git a/config/info.py b/config/info.py index 599cef8..857d4b7 100644 --- a/config/info.py +++ b/config/info.py @@ -33,6 +33,7 @@ def __init__(self, login_info, path): self.is_submit_daily = login_info['is_submit_daily'] self.is_submit_weekly = login_info['is_submit_weekly'] self.submit_weekly_time = login_info['submit_weekly_time'] + self.submit_month_report_time = login_info['submit_month_report_time'] def __str__(self): return "user config" diff --git a/main.py b/main.py index 8a5cf72..f66c3f6 100644 --- a/main.py +++ b/main.py @@ -35,6 +35,12 @@ def load_weekly_file() -> Weekly: return Weekly(weekly) +# load local file +def load_month_report(): + with open(os.path.join(path, 'textFile/weekly.json'), 'r', encoding="UTf-8") as f: + pass + + # load login info def load_login_info() -> Info: with open(config_file, encoding="utf-8") as f: @@ -132,6 +138,14 @@ def run(): main_module_log.error('已提交周报,不会重复提交') else: main_module_log.info("未到提交周报时间") + # submit month report + day = int(time.strftime("%d", time.localtime())) + if day == user_login_info.submit_month_report_time: + main_module_log.info("开始提交月报") + main_module_log.info('读取月报内容.....') + pass + else: + main_module_log.info("未到提交月报时间") if __name__ == '__main__': diff --git a/tast.py b/tast.py index 03d778a..3b26619 100644 --- a/tast.py +++ b/tast.py @@ -1,3 +1,3 @@ -for i in 'af': - b =1 -print(b) \ No newline at end of file +a = {1,2,3} +a.discard(3) +print(a) \ No newline at end of file From 822f64d36a6ac6a7d6e1ad711c0fd239f6a4485f Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 16:23:24 +0800 Subject: [PATCH 20/49] add readme --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index 0e58898..2c725d9 100644 --- a/README.MD +++ b/README.MD @@ -39,6 +39,7 @@ "is_submit_weekly": false,\\ 默认不提交周报 "submit_weekly_time": 1 \\ 星期几提交周报 ``` +最后**运行main.py** ## **补签说明**: 1. 默认补签前30天的数据(只能补签到前30天的) From 200d99d1e4f89f054321d4a9ab7ef3141e3874f0 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 19:09:41 +0800 Subject: [PATCH 21/49] add --- api/api_all.py | 6 ++++-- textFile/submit_time.json | 10 ++++++++-- user_config.json | 9 +++++---- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/api/api_all.py b/api/api_all.py index 01cfced..aa11384 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -292,13 +292,15 @@ def submit_daily(user_login_info, daily, day): @repeat_api # submit month report -def submit_month_report(user_login_info): +def submit_month_report(user_login_info, date): url = 'practice/paper/v2/save' - data = {"yearmonth": "2023-12", "address": "", "t": "57e77d248294eca392dcda799b213cf9", "title": "12月的月报", + data = {"yearmonth": "2023-12", "address": "", "t": aes_encrypt(int(time.time() * 1000)), "title": f"{}月的月报", "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "month", "content": "aaa"} # upada token headers['authorization'] = user_login_info.token + headers['sign'] = create_sign() + rsp = requests.post(basic_url + url, headers=headers) # check response diff --git a/textFile/submit_time.json b/textFile/submit_time.json index ad0e417..a523e51 100644 --- a/textFile/submit_time.json +++ b/textFile/submit_time.json @@ -1,5 +1,11 @@ { - "daily_next_submit_Time": "", - "weekly_next_submit_Time": "", + "path": "D:\\gongxueyun\\textFile/submit_time.json", + "submit_time": { + "daily_next_submit_Time": "", + "weekly_next_submit_Time": "", + "month_next_submit_Report": "" + }, + "daily_next_submit_Time": 1702314000, + "weekly_next_submit_Time": 1702832400, "month_next_submit_Report": "" } \ No newline at end of file diff --git a/user_config.json b/user_config.json index 0681b93..b854cf1 100644 --- a/user_config.json +++ b/user_config.json @@ -1,16 +1,17 @@ { "password": "li hua", - "phone": "111111111111111111", + "phone": "11111111111111", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", "start_time": "11", - "end_time": "21", , + "end_time": "15", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", - "path": "D:\\gongxueyun\\user_config.json", + "path": "D:/gongxueyun\\user_config.json", "is_repeat_clock_in": true, "is_submit_daily": true, "is_submit_weekly": true, - "submit_weekly_time": 1 + "submit_weekly_time": 1, + "submit_month_report_time": 1 } \ No newline at end of file From cd26aba2eb54de9f1eb311fa68e737813520bc0b Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 19:12:47 +0800 Subject: [PATCH 22/49] recover --- textFile/submit_time.json | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/textFile/submit_time.json b/textFile/submit_time.json index a523e51..ad0e417 100644 --- a/textFile/submit_time.json +++ b/textFile/submit_time.json @@ -1,11 +1,5 @@ { - "path": "D:\\gongxueyun\\textFile/submit_time.json", - "submit_time": { - "daily_next_submit_Time": "", - "weekly_next_submit_Time": "", - "month_next_submit_Report": "" - }, - "daily_next_submit_Time": 1702314000, - "weekly_next_submit_Time": 1702832400, + "daily_next_submit_Time": "", + "weekly_next_submit_Time": "", "month_next_submit_Report": "" } \ No newline at end of file From 4ec243be01728b5f06dac20788bc22530a150f71 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 22:29:38 +0800 Subject: [PATCH 23/49] add submit month report --- api/api_all.py | 14 +++++++++----- main.py | 30 +++++++++++++++++++++--------- tast.py | 7 ++++--- user_config.json | 8 ++++---- util/tomorrow.py | 16 +++++++++++++++- 5 files changed, 53 insertions(+), 22 deletions(-) diff --git a/api/api_all.py b/api/api_all.py index aa11384..1f30835 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -292,15 +292,19 @@ def submit_daily(user_login_info, daily, day): @repeat_api # submit month report -def submit_month_report(user_login_info, date): +def submit_month_report(user_login_info, date, month_report): url = 'practice/paper/v2/save' - data = {"yearmonth": "2023-12", "address": "", "t": aes_encrypt(int(time.time() * 1000)), "title": f"{}月的月报", + title = f"{date.tm_mon}月的月报" + data = {"yearmonth": f"{date.tm_year}-{date.tm_mon}", "address": "", "t": aes_encrypt(int(time.time() * 1000)), + "title": title, "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "month", - "content": "aaa"} + "content": month_report} # upada token + print(data) headers['authorization'] = user_login_info.token - headers['sign'] = create_sign() - rsp = requests.post(basic_url + url, headers=headers) + headers['sign'] = create_sign(user_login_info.user_id + "month" + user_login_info.plan_id + title) + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + handle_response(rsp) # check response diff --git a/main.py b/main.py index f66c3f6..c959d01 100644 --- a/main.py +++ b/main.py @@ -4,13 +4,14 @@ import time from api.api_all import get_token_userid, get_plan, clock_in, get_attendance_log, submit_daily, get_weeks_date, \ - submit_weekly, submit_log + submit_weekly, submit_log, submit_month_report from config.info import Info from textHandle.get_daily import Daily +from textHandle.get_month_report import MonthReport from textHandle.get_weekly import Weekly from textHandle.handle_weeks_date import WeeksDate from textHandle.submitTime import SubmitTime -from util.tomorrow import tomorrow_1_clock, next_week_submit_time +from util.tomorrow import tomorrow_1_clock, next_week_submit_time,next_submit_month_time # print log config logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, @@ -36,9 +37,9 @@ def load_weekly_file() -> Weekly: # load local file -def load_month_report(): - with open(os.path.join(path, 'textFile/weekly.json'), 'r', encoding="UTf-8") as f: - pass +def load_month_report() -> MonthReport: + with open(os.path.join(path, 'textFile/month_report.json'), 'r', encoding="UTf-8") as f: + return MonthReport(json.load(f)) # load login info @@ -139,11 +140,22 @@ def run(): else: main_module_log.info("未到提交周报时间") # submit month report - day = int(time.strftime("%d", time.localtime())) + date = time.localtime() + day = date.tm_mday + # is user set time if day == user_login_info.submit_month_report_time: - main_module_log.info("开始提交月报") - main_module_log.info('读取月报内容.....') - pass + # is submit month report + if submit_time.month_next_submit_Report == "" or int(time.time()) > submit_time.month_next_submit_Report: + main_module_log.info('读取月报内容.....') + month_report = load_month_report() + main_module_log.info("开始提交月报") + submit_month_report(user_login_info, date=date, month_report=month_report.get_month_report()) + submit_time.month_next_submit_Report = next_submit_month_time() + # sava local file + submit_time.to_save_local() + else: + main_module_log.info('今天已提交月报,不在重复提交') + else: main_module_log.info("未到提交月报时间") diff --git a/tast.py b/tast.py index 3b26619..8ce5e4c 100644 --- a/tast.py +++ b/tast.py @@ -1,3 +1,4 @@ -a = {1,2,3} -a.discard(3) -print(a) \ No newline at end of file +import random +a = [{i: 0} for i in range(10)] +print(a) +print(random.choice(a)) \ No newline at end of file diff --git a/user_config.json b/user_config.json index b854cf1..95b9016 100644 --- a/user_config.json +++ b/user_config.json @@ -1,14 +1,14 @@ { - "password": "li hua", + "password": "Li hua", "phone": "11111111111111", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", - "start_time": "11", - "end_time": "15", + "start_time": "09", + "end_time": "21", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", - "path": "D:/gongxueyun\\user_config.json", + "path": "D:\\gongxueyun\\user_config.json", "is_repeat_clock_in": true, "is_submit_daily": true, "is_submit_weekly": true, diff --git a/util/tomorrow.py b/util/tomorrow.py index 32805e6..567e76b 100644 --- a/util/tomorrow.py +++ b/util/tomorrow.py @@ -19,5 +19,19 @@ def next_week_submit_time() -> int: now = datetime.now() tomorrow = datetime(now.year, now.month, now.day, 1, 0, 0) + timedelta(days=7) return int(tomorrow.timestamp()) + + +def next_submit_month_time() -> int: + """ + next submit month report time + :return: + """ + now = datetime.now() + if now.month == 12: + return int(datetime(now.year + 1, 1, 1).timestamp()) + else: + return int(datetime(now.year, now.year + 1, 1).timestamp()) + + if __name__ == '__main__': - print(tomorrow_1_clock()) \ No newline at end of file + print(tomorrow_1_clock()) From f4a128dad443f0aca7c5bc45b9c9824e1497259d Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 22:31:23 +0800 Subject: [PATCH 24/49] reduce --- api/api_all.py | 1 - 1 file changed, 1 deletion(-) diff --git a/api/api_all.py b/api/api_all.py index 1f30835..763503e 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -300,7 +300,6 @@ def submit_month_report(user_login_info, date, month_report): "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "month", "content": month_report} # upada token - print(data) headers['authorization'] = user_login_info.token headers['sign'] = create_sign(user_login_info.user_id + "month" + user_login_info.plan_id + title) rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() From f31f07ec31ede6714c5f1ebbadbe8e563ffe0cb7 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 22:35:00 +0800 Subject: [PATCH 25/49] readme --- README.MD | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.MD b/README.MD index 2c725d9..6ced8ab 100644 --- a/README.MD +++ b/README.MD @@ -1,8 +1,9 @@ ## 当前功能 ## 有问题issues **2023-12-11** -+ 修改bug -+ 完善日报和周报 ++ 1修改bug ++ 2完善日报和周报 ++ 3新增提交月报 **2023-12-9** + 1 新增提交日报 @@ -37,7 +38,9 @@ "is_repeat_clock_in": false \\ 默认不补签 "is_submit_daily": false, \\ 默认不提交日报 "is_submit_weekly": false,\\ 默认不提交周报 -"submit_weekly_time": 1 \\ 星期几提交周报 +"submit_weekly_time": 1 ,\\ 星期几提交周报 +"submit_month_report_time": 1 \\ 每个月的几号提交月报 + ``` 最后**运行main.py** From 01512ead74f36803a87c217a3bc6176ef6b67c3a Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 11 Dec 2023 23:35:09 +0800 Subject: [PATCH 26/49] readme add --- textFile/month_report.json | 11 +++++++++++ textHandle/get_month_report.py | 12 ++++++++++++ user_config.json | 6 +++--- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 textFile/month_report.json create mode 100644 textHandle/get_month_report.py diff --git a/textFile/month_report.json b/textFile/month_report.json new file mode 100644 index 0000000..e4c895e --- /dev/null +++ b/textFile/month_report.json @@ -0,0 +1,11 @@ +[ + { + "content": "在本月的实习中,我深刻地体会到了市场调研和用户需求分析对产品开发的重要性。通过与团队密切合作,我学到了如何从用户的角度出发,改进产品设计,并且对于产品发展方向有了更清晰的认识。" + }, + { + "content": "在这个月的实习中,我不仅深化了对产品测试和市场活动策划的了解,更加深入地理解了团队协作的重要性。同时,能够参与产品未来方向的讨论,使我对产品规划和发展有了更系统的思考。" + }, + { + "content": "在这个月的实习中,我最大的收获是能够参与到公司业务决策的过程中,并通过自己的努力为公司带来了实实在在的业务价值。同时,在项目评审会议中,我学到了如何从更宏观的角度去思考问题,对我的职业发展有了很大的启发。" + } +] \ No newline at end of file diff --git a/textHandle/get_month_report.py b/textHandle/get_month_report.py new file mode 100644 index 0000000..267e8e1 --- /dev/null +++ b/textHandle/get_month_report.py @@ -0,0 +1,12 @@ +import random + + +class MonthReport: + def __str__(self): + return "month content" + + def __init__(self, month_report: list): + self.month_report = month_report + + def get_month_report(self) -> str: + return random.choice(self.month_report)['content'] diff --git a/user_config.json b/user_config.json index 95b9016..36bd4f7 100644 --- a/user_config.json +++ b/user_config.json @@ -9,9 +9,9 @@ "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", "path": "D:\\gongxueyun\\user_config.json", - "is_repeat_clock_in": true, - "is_submit_daily": true, - "is_submit_weekly": true, + "is_repeat_clock_in": false, + "is_submit_daily": false, + "is_submit_weekly": false, "submit_weekly_time": 1, "submit_month_report_time": 1 } \ No newline at end of file From 82a60f333eb5a396484c22b61564dd9366f91134 Mon Sep 17 00:00:00 2001 From: rsp <76271031+github123666@users.noreply.github.com> Date: Tue, 12 Dec 2023 10:32:59 +0800 Subject: [PATCH 27/49] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a500877 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 rsp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From c64686e064b90762350f1d58b58ac05b717ce035 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 10:41:50 +0800 Subject: [PATCH 28/49] add explain --- README.MD | 13 +++++++------ main.py | 1 + requirements.txt | Bin 330 -> 76 bytes 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/README.MD b/README.MD index 6ced8ab..e9a6630 100644 --- a/README.MD +++ b/README.MD @@ -1,5 +1,8 @@ ## 当前功能 ## 有问题issues +**2023-12-12** ++ 基本功能已完善 + **2023-12-11** + 1修改bug + 2完善日报和周报 @@ -14,12 +17,7 @@ 2. 补签(补前未30天打卡) ## 声明 -**仅供学习交流使用**,项目遵循GPL协议,请勿拿来盈利、诈骗和违法之事! - -项目产生的所有结果皆由使用者负责,本项目仅提供Python学习参考价值,本人不进行任何运行和调试。 - -- [x] 运行和调试本项目则表示为默认同意以上声明 - +**仅供学习交流使用**,项目遵循MIT协议 ## 基本使用 >1.pip install -r requirements.txt @@ -42,6 +40,9 @@ "submit_month_report_time": 1 \\ 每个月的几号提交月报 ``` +**说明:** +对日报和月报说明:月报文件里面只有3篇,日报只有20多篇,请自行补充.且都是采用**随机取的方式提交**. + 最后**运行main.py** ## **补签说明**: diff --git a/main.py b/main.py index c959d01..c10877f 100644 --- a/main.py +++ b/main.py @@ -163,3 +163,4 @@ def run(): if __name__ == '__main__': main_module_log.info("开始") run() + main_module_log.info("运行结束") diff --git a/requirements.txt b/requirements.txt index 5af1d75bf3d5a60443eed0b6d33a258217663880..eac67df1e42521037981b789f0cb2f10ef0a5bfa 100644 GIT binary patch delta 12 TcmX@bX-ZA}|Du literal 330 zcmX|-%?^Sv5QOJ!;-hG6Q9SuDl^-FZVp|US@Z#(i8nUExrr!*me+~@-b{KI-#nlNH zJ_dUnI2K!MxZl7dqDRXS-BPtE=rHOvI4{mNdxT+7Dk)JqIC27Mk%>>d`1Ro4K8^Nc&GxEWO)%>4%zk6yJ1{3? Xy;%6teq#2ZO|NX1?m+%e?n(4N1(h(I From 128bb9a3c99ea2ce770ba1e19d1ab16246b0de89 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 10:44:52 +0800 Subject: [PATCH 29/49] add explain --- .idea/vcs.xml | 6 ++++++ README.MD | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.MD b/README.MD index e9a6630..1b5abc6 100644 --- a/README.MD +++ b/README.MD @@ -37,7 +37,7 @@ "is_submit_daily": false, \\ 默认不提交日报 "is_submit_weekly": false,\\ 默认不提交周报 "submit_weekly_time": 1 ,\\ 星期几提交周报 -"submit_month_report_time": 1 \\ 每个月的几号提交月报 +"submit_month_report_time": 1 \\ 每个月的几号提交月报,不要写28,29,30或31!!! ``` **说明:** From 50e0399fd9cb5beecad5970bdf245d76dc662904 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 13:39:53 +0800 Subject: [PATCH 30/49] add proxy --- README.MD | 58 ++++++++++++++++++++++++++++------- api/api_all.py | 63 +++++++++++++++++++++++++++++++-------- config/info.py | 1 + main.py | 34 +++++++++++++++++++-- requirements.txt | Bin 330 -> 76 bytes tast.py | 12 ++++++-- textHandle/submitTime.py | 2 +- util/tomorrow.py | 16 +++++++++- 8 files changed, 155 insertions(+), 31 deletions(-) diff --git a/README.MD b/README.MD index 7e53606..c9d8daa 100644 --- a/README.MD +++ b/README.MD @@ -1,23 +1,49 @@ ## 当前功能 -**2023-12-9** + +## 有问题issues + +**2023-12-12** + ++ 新增添加代理选项 ++ 基本功能已完善 + +**2023-12-11** + ++ 1修改bug ++ 2完善日报和周报 ++ 3新增提交月报 + +**2023-12-9** + + 1 新增提交日报 + 2 新增提交周报 - + **2023-12-4** + 1. 打卡 2. 补签(补前未30天打卡) + ## 声明 -**仅供学习交流使用**,项目遵循GPL协议,请勿拿来盈利、诈骗和违法之事! +**仅供学习交流使用**,项目遵循MIT协议 + +## 代理配置 -项目产生的所有结果皆由使用者负责,本项目仅提供Python学习参考价值,本人不进行任何运行和调试。 +在api/api_all.py下配置 -- [x] 运行和调试本项目则表示为默认同意以上声明 +```angular2html +li_hua.proxies = { +# 配置你的代理,建议验证代理是否可用 +# "http": "http://117.160.250.163:8828", +# "https": "http://10.10.1.10:1080", +} +``` ## 基本使用 ->1.pip install -r requirements.txt ->2.配置 user_config.json 文件 +> 1.pip install -r requirements.txt + +> 2.配置 user_config.json 文件 ```angular2html "password": "li hua", \\ 密码 @@ -26,25 +52,37 @@ "latitude": "34.830624", \\ 纬度 "longitude": "115.545005", \\ 经度 "start_time": "08", \\ 打卡开始时间 -"end_time": "21", \\ 打卡结束位置 +"end_time": "21", \\ 打卡结束时间 注意是24小时时间 "city": "菏泽市", "province": "山东省", "is_repeat_clock_in": false \\ 默认不补签 "is_submit_daily": false, \\ 默认不提交日报 "is_submit_weekly": false,\\ 默认不提交周报 -"submit_weekly_time": 1 \\ 星期几提交周报 +"submit_weekly_time": 1 ,\\ 星期几提交周报 +"submit_month_report_time": 1 \\ 每个月的几号提交月报,不要写28,29,30或31!!! + ``` +**说明:** +对日报和月报说明:月报文件里面只有3篇,日报只有20多篇,请自行补充.且都是采用**随机取的方式提交**. + +最后**运行main.py** + ## **补签说明**: + 1. 默认补签前30天的数据(只能补签到前30天的) 2. 默认只补签上班(app默认只支持上班,保存和app统一原则),若学校有要求只需要修改请求的type改END,变成打下班卡 3. 补签时间说明,默认是早上8或9点随机时间,随机秒打卡,若修改则自行修改 + ### 自动打卡 + 验证该环境能否打卡最简单的方法,看该环境能不能登录网页版 **某鱼上有几块一个月的移某云,可以用安卓模拟器的(不是打广告,我也不是卖云服务器的)** 买代理(有点贵),免费的代理不太稳定(频繁切换ip好像会封号) 某讯和某里的云服务器大概率不行(deny了) 有条件上**树莓派**挂寝室里 -没条件买**挂机宝**,**云手机**也可以 +没条件买**挂机宝**,**云手机**也可以 + ## start + [![Stargazers over time](https://starchart.cc/github123666/gonxueyun.svg)](https://starchart.cc/github123666/gonxueyun) diff --git a/api/api_all.py b/api/api_all.py index 60399f5..1144c9f 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -30,12 +30,27 @@ # basic url basic_url = "https://api.moguding.net:9000/" +# proxy +li_hua = requests.Session() +li_hua.proxies = { + # 配置你的代理,建议验证代理是否可用 + # "http": "http://117.160.250.163:8828", + # "https": "http://10.10.1.10:1080", +} + # save token def save_token(user_login_info): user_login_info.to_save_local(user_login_info.__dict__) +# special case +def special_code(func, response): + if response['code'] == 500: + response['code'] = 200 + func(response) + + # repeat def repeat_api(func): @wraps(func) @@ -50,7 +65,7 @@ def repeat(*args, **kwargs): # save token save_token(*args) return func(*args, **kwargs) - except requests.exceptions.SSLError as r: + except requests.exceptions.SSLError: api_module_log.error('请关闭代理,或当前ip已经被deny(拉黑了)') api_module_log.info("程序已退出") exit(-1) @@ -65,10 +80,11 @@ def get_token_userid(user_info): data = {"password": aes_encrypt(user_info.password), "loginType": "android", "t": aes_encrypt(int(time.time() * 1000)), "uuid": "", "phone": aes_encrypt(user_info.phone)} try: - rsp = requests.post(headers=headers, url=basic_url + url, data=json.dumps(data)).json() + rsp = li_hua.post(headers=headers, url=basic_url + url, data=json.dumps(data)).json() except Exception as f: api_module_log.error(f) raise SimpleError("大概率ip被拉黑了(deny),当前环境可能存在问题(处于服务器上或开了代理,非国内代理)") + api_module_log.info(data) data = rsp['data'] user_info.token = data["token"] user_info.user_id = data['userId'] @@ -84,7 +100,7 @@ def get_plan(user_login_info) -> None: headers['sign'] = create_sign(user_login_info.user_id, 'student') headers['authorization'] = user_login_info.token # return rsp - rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() # check response handle_response(rsp) # response success @@ -98,7 +114,6 @@ def clock_in(user_login_info) -> None: url = 'attendence/clock/v2/save' # judge clock in now = time.strftime('%H', time.localtime()) - upload_type = "START" if now == user_login_info.start_time or now == user_login_info.end_time: upload_type = "START" if int(now) <= 12 else "END" else: @@ -123,7 +138,7 @@ def clock_in(user_login_info) -> None: headers['sign'] = create_sign("Android", upload_type, user_login_info.plan_id, user_login_info.user_id, user_login_info.address) headers['authorization'] = user_login_info.token - rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) @@ -146,7 +161,7 @@ def repeat_clock_in(user_login_info, date): "type": "START"} headers['sign'] = create_sign("Android", "START", user_login_info.plan_id, user_login_info.user_id, user_login_info.address) - rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) @@ -167,7 +182,7 @@ def get_previous_month_data(user_login_info): headers.pop('sign') # update token headers['authorization'] = user_login_info.token - rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(previous_month_data)).json() + rsp = li_hua.post(url=basic_url + url, headers=headers, data=json.dumps(previous_month_data)).json() handle_response(rsp) # clock in count day_set = count_day(rsp) @@ -202,12 +217,15 @@ def get_attendance_log(user_login_info): # update token headers['authorization'] = user_login_info.token api_module_log.info("获取本月考勤日期") - rsp = requests.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(url=basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) # save token save_token(user_login_info) # handle response text day_set = count_day(dict(rsp)) + # remove now clock in log + day_set.discard(int(time.strftime("%d", time.localtime()))) + # no clock in day empty_day = day_set ^ set(range(1, now_day)) # repeat clock in api_module_log.info("本月补签阻塞3~15秒后打卡") @@ -228,7 +246,7 @@ def submit_log(user_login_info) -> dict: data = {"t": aes_encrypt(int(time.time() * 1000)), "planId": user_login_info.plan_id} # update token headers['authorization'] = user_login_info.token - rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) api_module_log.info("获取提交记录成功") return rsp['data'] @@ -240,7 +258,7 @@ def get_weeks_date(user_login_info) -> dict: data = {'planId': user_login_info.plan_id} headers['sign'] = '' headers['authorization'] = user_login_info.token - rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) api_module_log.info('获取一年内周报日期成功') return rsp @@ -257,11 +275,13 @@ def submit_weekly(user_login_info, week, weekly): } headers['authorization'] = user_login_info.token headers['sign'] = create_sign(user_login_info.user_id, "week", user_login_info.plan_id, '周报') - rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() - handle_response(rsp) + rsp = li_hua.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + # code equal 500 is allow + special_code(handle_response, rsp) @repeat_api +# submit daily def submit_daily(user_login_info, daily, day): api_module_log.info('提交日报') url = 'practice/paper/v2/save' @@ -273,7 +293,24 @@ def submit_daily(user_login_info, daily, day): "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "day", "content": daily.get_daily()['data']} - rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + rsp = li_hua.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + # code equal 500 is allow + special_code(handle_response, rsp) + + +@repeat_api +# submit month report +def submit_month_report(user_login_info, date, month_report): + url = 'practice/paper/v2/save' + title = f"{date.tm_mon}月的月报" + data = {"yearmonth": f"{date.tm_year}-{date.tm_mon}", "address": "", "t": aes_encrypt(int(time.time() * 1000)), + "title": title, + "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "month", + "content": month_report} + # upada token + headers['authorization'] = user_login_info.token + headers['sign'] = create_sign(user_login_info.user_id + "month" + user_login_info.plan_id + title) + rsp = li_hua.post(basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) diff --git a/config/info.py b/config/info.py index 599cef8..857d4b7 100644 --- a/config/info.py +++ b/config/info.py @@ -33,6 +33,7 @@ def __init__(self, login_info, path): self.is_submit_daily = login_info['is_submit_daily'] self.is_submit_weekly = login_info['is_submit_weekly'] self.submit_weekly_time = login_info['submit_weekly_time'] + self.submit_month_report_time = login_info['submit_month_report_time'] def __str__(self): return "user config" diff --git a/main.py b/main.py index 1912427..c10877f 100644 --- a/main.py +++ b/main.py @@ -4,13 +4,14 @@ import time from api.api_all import get_token_userid, get_plan, clock_in, get_attendance_log, submit_daily, get_weeks_date, \ - submit_weekly, submit_log + submit_weekly, submit_log, submit_month_report from config.info import Info from textHandle.get_daily import Daily +from textHandle.get_month_report import MonthReport from textHandle.get_weekly import Weekly from textHandle.handle_weeks_date import WeeksDate from textHandle.submitTime import SubmitTime -from util.tomorrow import tomorrow_1_clock, next_week_submit_time +from util.tomorrow import tomorrow_1_clock, next_week_submit_time,next_submit_month_time # print log config logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, @@ -35,6 +36,12 @@ def load_weekly_file() -> Weekly: return Weekly(weekly) +# load local file +def load_month_report() -> MonthReport: + with open(os.path.join(path, 'textFile/month_report.json'), 'r', encoding="UTf-8") as f: + return MonthReport(json.load(f)) + + # load login info def load_login_info() -> Info: with open(config_file, encoding="utf-8") as f: @@ -107,7 +114,8 @@ def run(): # submit weekly # is user config week - now_week = int(time.strftime("%w", time.localtime())) + 1 + now_week = int(time.strftime("%w", time.localtime())) + now_week = now_week if now_week != 0 else 7 if now_week == user_login_info.submit_weekly_time: if user_login_info.is_submit_weekly: main_module_log.info('判断今天是否提交过周报') @@ -131,8 +139,28 @@ def run(): main_module_log.error('已提交周报,不会重复提交') else: main_module_log.info("未到提交周报时间") + # submit month report + date = time.localtime() + day = date.tm_mday + # is user set time + if day == user_login_info.submit_month_report_time: + # is submit month report + if submit_time.month_next_submit_Report == "" or int(time.time()) > submit_time.month_next_submit_Report: + main_module_log.info('读取月报内容.....') + month_report = load_month_report() + main_module_log.info("开始提交月报") + submit_month_report(user_login_info, date=date, month_report=month_report.get_month_report()) + submit_time.month_next_submit_Report = next_submit_month_time() + # sava local file + submit_time.to_save_local() + else: + main_module_log.info('今天已提交月报,不在重复提交') + + else: + main_module_log.info("未到提交月报时间") if __name__ == '__main__': main_module_log.info("开始") run() + main_module_log.info("运行结束") diff --git a/requirements.txt b/requirements.txt index 5af1d75bf3d5a60443eed0b6d33a258217663880..eac67df1e42521037981b789f0cb2f10ef0a5bfa 100644 GIT binary patch delta 12 TcmX@bX-ZA}|Du literal 330 zcmX|-%?^Sv5QOJ!;-hG6Q9SuDl^-FZVp|US@Z#(i8nUExrr!*me+~@-b{KI-#nlNH zJ_dUnI2K!MxZl7dqDRXS-BPtE=rHOvI4{mNdxT+7Dk)JqIC27Mk%>>d`1Ro4K8^Nc&GxEWO)%>4%zk6yJ1{3? Xy;%6teq#2ZO|NX1?m+%e?n(4N1(h(I diff --git a/tast.py b/tast.py index 03d778a..37bd212 100644 --- a/tast.py +++ b/tast.py @@ -1,3 +1,9 @@ -for i in 'af': - b =1 -print(b) \ No newline at end of file +import requests + +proxies = { + # "http": "http://117.160.250.163:8828", +} +li_hua = requests.Session() +li_hua.proxies = proxies +a = li_hua.get(url='http://httpbin.org/ip') +print(a.text) diff --git a/textHandle/submitTime.py b/textHandle/submitTime.py index 6b92515..ca7867a 100644 --- a/textHandle/submitTime.py +++ b/textHandle/submitTime.py @@ -16,4 +16,4 @@ def __init__(self, path): def to_save_local(self): with open(self.path, 'w', encoding="UTF-8") as f: - f.write(str(self.__dict__)) + f.write(json.dumps(self.__dict__)) diff --git a/util/tomorrow.py b/util/tomorrow.py index 32805e6..567e76b 100644 --- a/util/tomorrow.py +++ b/util/tomorrow.py @@ -19,5 +19,19 @@ def next_week_submit_time() -> int: now = datetime.now() tomorrow = datetime(now.year, now.month, now.day, 1, 0, 0) + timedelta(days=7) return int(tomorrow.timestamp()) + + +def next_submit_month_time() -> int: + """ + next submit month report time + :return: + """ + now = datetime.now() + if now.month == 12: + return int(datetime(now.year + 1, 1, 1).timestamp()) + else: + return int(datetime(now.year, now.year + 1, 1).timestamp()) + + if __name__ == '__main__': - print(tomorrow_1_clock()) \ No newline at end of file + print(tomorrow_1_clock()) From 9e5ae883b042b7ad9e057723f2b94aa42bd6cc7f Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 13:55:12 +0800 Subject: [PATCH 31/49] add proxy --- .idea/vcs.xml | 6 ++++++ LICENSE | 21 +++++++++++++++++++++ textFile/month_report.json | 11 +++++++++++ textHandle/get_month_report.py | 12 ++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 .idea/vcs.xml create mode 100644 LICENSE create mode 100644 textFile/month_report.json create mode 100644 textHandle/get_month_report.py diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a500877 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 rsp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/textFile/month_report.json b/textFile/month_report.json new file mode 100644 index 0000000..e4c895e --- /dev/null +++ b/textFile/month_report.json @@ -0,0 +1,11 @@ +[ + { + "content": "在本月的实习中,我深刻地体会到了市场调研和用户需求分析对产品开发的重要性。通过与团队密切合作,我学到了如何从用户的角度出发,改进产品设计,并且对于产品发展方向有了更清晰的认识。" + }, + { + "content": "在这个月的实习中,我不仅深化了对产品测试和市场活动策划的了解,更加深入地理解了团队协作的重要性。同时,能够参与产品未来方向的讨论,使我对产品规划和发展有了更系统的思考。" + }, + { + "content": "在这个月的实习中,我最大的收获是能够参与到公司业务决策的过程中,并通过自己的努力为公司带来了实实在在的业务价值。同时,在项目评审会议中,我学到了如何从更宏观的角度去思考问题,对我的职业发展有了很大的启发。" + } +] \ No newline at end of file diff --git a/textHandle/get_month_report.py b/textHandle/get_month_report.py new file mode 100644 index 0000000..267e8e1 --- /dev/null +++ b/textHandle/get_month_report.py @@ -0,0 +1,12 @@ +import random + + +class MonthReport: + def __str__(self): + return "month content" + + def __init__(self, month_report: list): + self.month_report = month_report + + def get_month_report(self) -> str: + return random.choice(self.month_report)['content'] From f10e2ae82ae71147123931cf91dd9a37b4307053 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 15:36:02 +0800 Subject: [PATCH 32/49] change user info --- user_config.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/user_config.json b/user_config.json index 25f7815..f61095e 100644 --- a/user_config.json +++ b/user_config.json @@ -1,15 +1,17 @@ { "password": "li hua", - "phone": "1010101010010101", - "address": "山东菏泽市曹县蔡徐村", + "phone": "11111111111111111111111111111", + "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", - "start_time": "11", + "start_time": "09", "end_time": "21", "city": "\u66f9\u53bf", "province": "\u5c71\u4e1c\u7701", + "path": "C:\\Users\\haha\\Desktop\\test\\gonxueyun\\user_config.json", "is_repeat_clock_in": false, "is_submit_daily": false, "is_submit_weekly": false, - "submit_weekly_time": 1 + "submit_weekly_time": 1, + "submit_month_report_time": 1 } \ No newline at end of file From 1662f9dece6661d0e93d82d72686657793947c38 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 15:39:09 +0800 Subject: [PATCH 33/49] change readme --- README.MD | 1 - 1 file changed, 1 deletion(-) diff --git a/README.MD b/README.MD index c9d8daa..1ed91d4 100644 --- a/README.MD +++ b/README.MD @@ -60,7 +60,6 @@ li_hua.proxies = { "is_submit_weekly": false,\\ 默认不提交周报 "submit_weekly_time": 1 ,\\ 星期几提交周报 "submit_month_report_time": 1 \\ 每个月的几号提交月报,不要写28,29,30或31!!! - ``` **说明:** From 9a234aae2d0daba700d64d52f17643a3bd939cfc Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 16:29:19 +0800 Subject: [PATCH 34/49] change api --- api/api_all.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/api/api_all.py b/api/api_all.py index 420c946..f23ea42 100644 --- a/api/api_all.py +++ b/api/api_all.py @@ -57,7 +57,7 @@ def repeat(*args, **kwargs): # save token save_token(*args) return func(*args, **kwargs) - except requests.exceptions.SSLError: + except requests.exceptions.SSLError as r: api_module_log.error('请关闭代理,或当前ip已经被deny(拉黑了)') api_module_log.info("程序已退出") exit(-1) @@ -76,6 +76,7 @@ def get_token_userid(user_info): except Exception as f: api_module_log.error(f) raise SimpleError("大概率ip被拉黑了(deny),当前环境可能存在问题(处于服务器上或开了代理,非国内代理)") + api_module_log.info(rsp) data = rsp['data'] user_info.token = data["token"] user_info.user_id = data['userId'] @@ -215,6 +216,9 @@ def get_attendance_log(user_login_info): save_token(user_login_info) # handle response text day_set = count_day(dict(rsp)) + # remove now clock in log + day_set.discard(int(time.strftime("%d", time.localtime()))) + # no clock in day empty_day = day_set ^ set(range(1, now_day)) # repeat clock in api_module_log.info("本月补签阻塞3~15秒后打卡") @@ -265,10 +269,12 @@ def submit_weekly(user_login_info, week, weekly): headers['authorization'] = user_login_info.token headers['sign'] = create_sign(user_login_info.user_id, "week", user_login_info.plan_id, '周报') rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() - handle_response(rsp) + # code equal 500 is allow + special_code(handle_response, rsp) @repeat_api +# submit daily def submit_daily(user_login_info, daily, day): api_module_log.info('提交日报') url = 'practice/paper/v2/save' @@ -281,6 +287,23 @@ def submit_daily(user_login_info, daily, day): "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "day", "content": daily.get_daily()['data']} rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() + # code equal 500 is allow + special_code(handle_response, rsp) + + +@repeat_api +# submit month report +def submit_month_report(user_login_info, date, month_report): + url = 'practice/paper/v2/save' + title = f"{date.tm_mon}月的月报" + data = {"yearmonth": f"{date.tm_year}-{date.tm_mon}", "address": "", "t": aes_encrypt(int(time.time() * 1000)), + "title": title, + "longitude": "0.0", "latitude": "0.0", "planId": user_login_info.plan_id, "reportType": "month", + "content": month_report} + # upada token + headers['authorization'] = user_login_info.token + headers['sign'] = create_sign(user_login_info.user_id + "month" + user_login_info.plan_id + title) + rsp = requests.post(basic_url + url, headers=headers, data=json.dumps(data)).json() handle_response(rsp) From 7ce033fa89ac2c66e10c67bd00ed4769cdd16d9a Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 12 Dec 2023 17:17:14 +0800 Subject: [PATCH 35/49] add deploy --- README.MD | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.MD b/README.MD index 1ed91d4..c4c9ba1 100644 --- a/README.MD +++ b/README.MD @@ -6,6 +6,7 @@ + 新增添加代理选项 + 基本功能已完善 ++ 新增打卡环境(免费) **2023-12-11** @@ -23,6 +24,11 @@ 1. 打卡 2. 补签(补前未30天打卡) +## 部署 + +1.google 云端硬盘可以部署 https://drive.google.com/drive/home +教程更新中.... + ## 声明 **仅供学习交流使用**,项目遵循MIT协议 From f838fd65e9a68ca51247fa7f3125fd82b72f16f0 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Wed, 13 Dec 2023 10:59:31 +0800 Subject: [PATCH 36/49] add deploy img --- README.MD | 6 ++++-- img/success.png | Bin 0 -> 215977 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 img/success.png diff --git a/README.MD b/README.MD index c4c9ba1..155a9e6 100644 --- a/README.MD +++ b/README.MD @@ -26,8 +26,10 @@ ## 部署 -1.google 云端硬盘可以部署 https://drive.google.com/drive/home -教程更新中.... +1.google 云端硬盘可以部署 https://drive.google.com/drive/home +存在一定风险,应为是国外ip +![img](./img/success.png) +教程更新中.... ## 声明 diff --git a/img/success.png b/img/success.png new file mode 100644 index 0000000000000000000000000000000000000000..e95deebc378730435c5ba77553fc12382895d034 GIT binary patch literal 215977 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

+`W6VOh>bQizM(VtHHygZ(a_~QKti0vjTtd>SO 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 Date: Wed, 13 Dec 2023 11:01:36 +0800 Subject: [PATCH 37/49] update start img --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index 155a9e6..3078391 100644 --- a/README.MD +++ b/README.MD @@ -92,4 +92,5 @@ li_hua.proxies = { ## start + [![Stargazers over time](https://starchart.cc/github123666/gonxueyun.svg)](https://starchart.cc/github123666/gonxueyun) From 7f5d95b61e94b00d0fac50bccc6706e069e33eee Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 16:32:44 +0800 Subject: [PATCH 38/49] update readme --- README.MD | 12 +++++++++++- decryptencrypt/decryot.py | 2 +- decryptencrypt/encrypt.py | 2 +- main.py | 4 ++-- tast.py | 11 ++--------- textFile/submit_time.json | 6 +----- user_config.json | 33 ++++++++++++++++++--------------- 7 files changed, 36 insertions(+), 34 deletions(-) diff --git a/README.MD b/README.MD index 3078391..6b6fb5c 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,14 @@ ## 当前功能 -## 有问题issues +## 有问题可以issues +**2024-01-08** ++ 看了一下最新版,有如下变动(作者使用的老版本,不存在以下限制) + - 抓包上做了一些限制 + - 做了指纹验证(封号大多数与这有关) ++ 没变动的 + - 加密 +

+代码日志 **2023-12-12** @@ -23,6 +31,8 @@ 1. 打卡 2. 补签(补前未30天打卡) +>
+ ## 部署 diff --git a/decryptencrypt/decryot.py b/decryptencrypt/decryot.py index af4dc30..85a269a 100644 --- a/decryptencrypt/decryot.py +++ b/decryptencrypt/decryot.py @@ -14,4 +14,4 @@ def aes_decrypt(data) -> str: if __name__ == '__main__': - print(aes_decrypt('')) + print(aes_decrypt("23bd07ced818b143fa46532b88c27ee427353ad3ec862f4a83a4038f2fe4a68ea70aa3c2b8feca27d4a6b2a66f4b01a62072bc87064abe93b7898e11cd52a73e0e403a48589ff1de1c216806e45cc1d799e86231b4f07b2857b97762627fc6361925be1e316a7cbc459b998e26f6117a9007ff0b3319b17992fdafa5c0d40ea288d4077f98807139f743223a836efc5393581b0c9568a46e312ee1430f7f84df62a3059504e7b6cba002e7d241b7b2693a8dfe8658ff83921eecf5536eae7cec799dcb6c58f1640eccc06da354e7206780d1b523c798bde40ea17662ae2eaacd485474c9c8ae49f8f83a5ba8e7a911e1aaddb145b9837ea45751947f57374ca98f1912d852a13020733afb4a3f0a32665881b6f9abcfe28c575021671337780303c8794828024a9c5829835b7a3c6f536677c439d719e589a849187c06f37c1e150d5c4e7dff106fb2f7b7b4a09f8603a23957e3d6233e37dc9f1e24f438093a4f940f702387a64f31e207c6bd275bdee2140e6972ea8b44aca759ec01a83a9bdb1151c0dfff8d12fc1446575e2910c7107542f39cdbfdee67ab588744f870b0ca9ca017036133f36c73ca850a90c32c5e2d45caf250935db194e93137a0ba2fa4de4cd1bbc2d4865ee6e4691b92afe2bcf3aa1474c9496bb40ca1d1863fa2d8a8364acfe689023333d03cedddd4453696088725c5b5499cd96af035234f03d2d063694e7b356e0fff041d77d1d0cfa4c4cef9fabc4db820f59a3c0a739affb599dc58e4d38b051ae9a9a53e61d54336d10df90336dcf2b0d7f3b1fb8eec33a755a7d05da8a90c4abcbb2f5f76f2fb75d1f04c2398392fb0c67c617fd9b4f621d2d34b81185ae1259836a56af652bb73ff3e6cfea6389716743beb15c9048e49631511cc83a503b71150e69492c438383f57a2101c364cf23a3bf5a85f03d0afac5f725daf36fb59f5858bf07321422f54cd17ae06d3a19b8ab79a960bc81f22a1b6df903036ec7a96977c7229d8d349f9d82c8493b598bd3bae09dbe202c4d71de26081e53abe0895a734196312b5b0ec2e31cd44c73f1f4d7cf2a6f77c4c67eda3e6f0f3b9264ad6cbbc5d04338061cb6dd85fb9aa9b9b99d77293bc6ac7b19a2177c532f0071f8638f74959374c0afb474bd9051f28b437735db8532edfe7c1bc6e8e9304c9f439975ba91e1e4a88c8ba183b641f94ba1576471f06385f6e1f9127242b83d2d39cee356225a7ce1318891d4c167b2d6363ea6a6e6dcb1945d667f3bbb297a18ab303034bbf70a994620a1446463e4f599813e23b5ffa45e2f087f459cf91b0cc96917ce7fc33e17380aadba3e21710e50bba6c71970f25e2ef94633107cc56575a33572a114caceb979c807a0770053b35680d0a7cd292708fcfafd748abd36cd1b135729d81be97483031276eeab5af4b8665d157c179c434c2165bbb0a513e79510dcd9ab1f6463b4a4feaee461609125478d47aab49d5304bff753a3ee271f6b40a60f7a368d8030b9319680dfcd92038d1e9dcb71021093f2dbbb12314b73a4a11d09656104a7723556e310de5d9e4624955ebd49916ce7862c6396bd0c195a6f15dc47233dc8a9c11a1efb4019858eabe3b002c2c64ca4799d48cb5010cec3344fdba29a5248ce075dfb8aa985272712ac0d5b5e7a38a4c89f153ef3fca7cb26ab5aaf75fec49a4c62ca126896301a681e03c94c87cec1f565690d0ccd54cc077269e3e70125d5f7cf113b1e436685b1cd37c79dc23db003b44aa012b4d9832e357314b832baab8f7c368ee67d8938c4a7b3680ffcb4f84ecbaaa543b56a08c0262d5d5d6590e1738145a137460e5f0f4678e65aedf1a4477c1e093d308bf25be58d7a516d56cac14e39b2542eb150ed9989e6a6caa910fc3cd2131c00f892464549a16da67")) diff --git a/decryptencrypt/encrypt.py b/decryptencrypt/encrypt.py index 8aeb1cb..23eb4cf 100644 --- a/decryptencrypt/encrypt.py +++ b/decryptencrypt/encrypt.py @@ -13,4 +13,4 @@ def aes_encrypt(data) -> str: return text_encrypt if __name__ == '__main__': - print(aes_encrypt('103817552')) + print(aes_encrypt('13797424039')) diff --git a/main.py b/main.py index c10877f..92c91a1 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,7 @@ from textHandle.get_weekly import Weekly from textHandle.handle_weeks_date import WeeksDate from textHandle.submitTime import SubmitTime -from util.tomorrow import tomorrow_1_clock, next_week_submit_time,next_submit_month_time +from util.tomorrow import tomorrow_1_clock, next_week_submit_time, next_submit_month_time # print log config logging.basicConfig(format="[%(asctime)s] %(name)s %(levelname)s: %(message)s", level=logging.INFO, @@ -85,7 +85,7 @@ def run(): # get plan_id plan_id(user_login_info) # get submit log - main_module_log.info('获取提交记录') + main_module_log.info('获取提交记录') # 补签使用 submit_all = submit_log(user_login_info) # clock in main_module_log.info("启动打卡") diff --git a/tast.py b/tast.py index 37bd212..34e6447 100644 --- a/tast.py +++ b/tast.py @@ -1,9 +1,2 @@ -import requests - -proxies = { - # "http": "http://117.160.250.163:8828", -} -li_hua = requests.Session() -li_hua.proxies = proxies -a = li_hua.get(url='http://httpbin.org/ip') -print(a.text) +import threading +print(f"我是主线程{threading.current_thread().name}") diff --git a/textFile/submit_time.json b/textFile/submit_time.json index ad0e417..a59315c 100644 --- a/textFile/submit_time.json +++ b/textFile/submit_time.json @@ -1,5 +1 @@ -{ - "daily_next_submit_Time": "", - "weekly_next_submit_Time": "", - "month_next_submit_Report": "" -} \ No newline at end of file +{"path": "D:\\gongxueyun\\textFile/submit_time.json", "submit_time": {"daily_next_submit_Time": "", "weekly_next_submit_Time": "", "month_next_submit_Report": ""}, "daily_next_submit_Time": 1703523600, "weekly_next_submit_Time": "", "month_next_submit_Report": ""} \ No newline at end of file diff --git a/user_config.json b/user_config.json index f61095e..1034af5 100644 --- a/user_config.json +++ b/user_config.json @@ -1,17 +1,20 @@ { - "password": "li hua", - "phone": "11111111111111111111111111111", - "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", - "latitude": "34.830624", - "longitude": "115.545005", - "start_time": "09", - "end_time": "21", - "city": "\u66f9\u53bf", - "province": "\u5c71\u4e1c\u7701", - "path": "C:\\Users\\haha\\Desktop\\test\\gonxueyun\\user_config.json", - "is_repeat_clock_in": false, - "is_submit_daily": false, - "is_submit_weekly": false, - "submit_weekly_time": 1, - "submit_month_report_time": 1 + "password": "14yhl9TTt", + "phone": "13797424039", + "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", + "latitude": "34.830624", + "longitude": "115.545005", + "start_time": "09", + "end_time": "16", + "token": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJtb2d1ZGluZy11c2VyIiwic3ViIjoie1wibG9naW5UeXBlXCI6XCJhbmRyb2lkXCIsXCJ1c2VySWRcIjoxMDM4MTc1NTJ9IiwiYXVkIjoibW9ndWRpbmciLCJleHAiOjIwMTkxMTAzODMsIm5iZiI6MTcwMzQ5MDI4MywiaWF0IjoxNzAzNDkxMTgzfQ.1YxhoAxA_7z5poRMN6XApIKAfP2mkThHdkpniS084k5GvCBrnjS3LMZIS9TFeA2zcHgpHQ-5DwW1QrMY8NdOCA", + "user_id": "103817552", + "plan_id": null, + "city": "\u66f9\u53bf", + "province": "\u5c71\u4e1c\u7701", + "path": "D:\\gongxueyun\\user_config.json", + "is_repeat_clock_in": false, + "is_submit_daily": true, + "is_submit_weekly": false, + "submit_weekly_time": 1, + "submit_month_report_time": 1 } \ No newline at end of file From 037203851f409e3b4cc55ebe1d08839dc1954a11 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 16:34:25 +0800 Subject: [PATCH 39/49] update readme1 --- user_config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user_config.json b/user_config.json index 1034af5..fdb6118 100644 --- a/user_config.json +++ b/user_config.json @@ -1,6 +1,6 @@ { - "password": "14yhl9TTt", - "phone": "13797424039", + "password": "111", + "phone": "1111", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", @@ -13,7 +13,7 @@ "province": "\u5c71\u4e1c\u7701", "path": "D:\\gongxueyun\\user_config.json", "is_repeat_clock_in": false, - "is_submit_daily": true, + "is_submit_daily": false, "is_submit_weekly": false, "submit_weekly_time": 1, "submit_month_report_time": 1 From 5883d0ce7a35f6fe2dc309dbbc8c0c1bde33f60c Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 16:39:15 +0800 Subject: [PATCH 40/49] update readme --- README.MD | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 3078391..6b6fb5c 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,14 @@ ## 当前功能 -## 有问题issues +## 有问题可以issues +**2024-01-08** ++ 看了一下最新版,有如下变动(作者使用的老版本,不存在以下限制) + - 抓包上做了一些限制 + - 做了指纹验证(封号大多数与这有关) ++ 没变动的 + - 加密 +
+代码日志 **2023-12-12** @@ -23,6 +31,8 @@ 1. 打卡 2. 补签(补前未30天打卡) +>
+ ## 部署 From ea6d2dd00a57a5669cbeeb8b0594a8e06b6ec5ce Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 16:44:09 +0800 Subject: [PATCH 41/49] update readme --- README.MD | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 3078391..6b6fb5c 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,14 @@ ## 当前功能 -## 有问题issues +## 有问题可以issues +**2024-01-08** ++ 看了一下最新版,有如下变动(作者使用的老版本,不存在以下限制) + - 抓包上做了一些限制 + - 做了指纹验证(封号大多数与这有关) ++ 没变动的 + - 加密 +
+代码日志 **2023-12-12** @@ -23,6 +31,8 @@ 1. 打卡 2. 补签(补前未30天打卡) +>
+ ## 部署 From 3c652c5c6e49a6092943f948876756349cf4757d Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 16:49:13 +0800 Subject: [PATCH 42/49] update readme --- user_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_config.json b/user_config.json index f61095e..c0d3f36 100644 --- a/user_config.json +++ b/user_config.json @@ -1,6 +1,6 @@ { "password": "li hua", - "phone": "11111111111111111111111111111", + "phone": "11111111111111111111111111111111", "address": "\u5c71\u4e1c\u83cf\u6cfd\u66f9\u53bf", "latitude": "34.830624", "longitude": "115.545005", From b3097ccbddb2f3d6d53a191d47601b272f78ed14 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 17:02:40 +0800 Subject: [PATCH 43/49] Merge branch 'v2.0' of github.com:github123666/gonxueyun into v2.0 # Conflicts: # user_config.json --- decryptencrypt/decryot.py | 2 +- decryptencrypt/encrypt.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/decryptencrypt/decryot.py b/decryptencrypt/decryot.py index 85a269a..4ac5cd3 100644 --- a/decryptencrypt/decryot.py +++ b/decryptencrypt/decryot.py @@ -14,4 +14,4 @@ def aes_decrypt(data) -> str: if __name__ == '__main__': - print(aes_decrypt("23bd07ced818b143fa46532b88c27ee427353ad3ec862f4a83a4038f2fe4a68ea70aa3c2b8feca27d4a6b2a66f4b01a62072bc87064abe93b7898e11cd52a73e0e403a48589ff1de1c216806e45cc1d799e86231b4f07b2857b97762627fc6361925be1e316a7cbc459b998e26f6117a9007ff0b3319b17992fdafa5c0d40ea288d4077f98807139f743223a836efc5393581b0c9568a46e312ee1430f7f84df62a3059504e7b6cba002e7d241b7b2693a8dfe8658ff83921eecf5536eae7cec799dcb6c58f1640eccc06da354e7206780d1b523c798bde40ea17662ae2eaacd485474c9c8ae49f8f83a5ba8e7a911e1aaddb145b9837ea45751947f57374ca98f1912d852a13020733afb4a3f0a32665881b6f9abcfe28c575021671337780303c8794828024a9c5829835b7a3c6f536677c439d719e589a849187c06f37c1e150d5c4e7dff106fb2f7b7b4a09f8603a23957e3d6233e37dc9f1e24f438093a4f940f702387a64f31e207c6bd275bdee2140e6972ea8b44aca759ec01a83a9bdb1151c0dfff8d12fc1446575e2910c7107542f39cdbfdee67ab588744f870b0ca9ca017036133f36c73ca850a90c32c5e2d45caf250935db194e93137a0ba2fa4de4cd1bbc2d4865ee6e4691b92afe2bcf3aa1474c9496bb40ca1d1863fa2d8a8364acfe689023333d03cedddd4453696088725c5b5499cd96af035234f03d2d063694e7b356e0fff041d77d1d0cfa4c4cef9fabc4db820f59a3c0a739affb599dc58e4d38b051ae9a9a53e61d54336d10df90336dcf2b0d7f3b1fb8eec33a755a7d05da8a90c4abcbb2f5f76f2fb75d1f04c2398392fb0c67c617fd9b4f621d2d34b81185ae1259836a56af652bb73ff3e6cfea6389716743beb15c9048e49631511cc83a503b71150e69492c438383f57a2101c364cf23a3bf5a85f03d0afac5f725daf36fb59f5858bf07321422f54cd17ae06d3a19b8ab79a960bc81f22a1b6df903036ec7a96977c7229d8d349f9d82c8493b598bd3bae09dbe202c4d71de26081e53abe0895a734196312b5b0ec2e31cd44c73f1f4d7cf2a6f77c4c67eda3e6f0f3b9264ad6cbbc5d04338061cb6dd85fb9aa9b9b99d77293bc6ac7b19a2177c532f0071f8638f74959374c0afb474bd9051f28b437735db8532edfe7c1bc6e8e9304c9f439975ba91e1e4a88c8ba183b641f94ba1576471f06385f6e1f9127242b83d2d39cee356225a7ce1318891d4c167b2d6363ea6a6e6dcb1945d667f3bbb297a18ab303034bbf70a994620a1446463e4f599813e23b5ffa45e2f087f459cf91b0cc96917ce7fc33e17380aadba3e21710e50bba6c71970f25e2ef94633107cc56575a33572a114caceb979c807a0770053b35680d0a7cd292708fcfafd748abd36cd1b135729d81be97483031276eeab5af4b8665d157c179c434c2165bbb0a513e79510dcd9ab1f6463b4a4feaee461609125478d47aab49d5304bff753a3ee271f6b40a60f7a368d8030b9319680dfcd92038d1e9dcb71021093f2dbbb12314b73a4a11d09656104a7723556e310de5d9e4624955ebd49916ce7862c6396bd0c195a6f15dc47233dc8a9c11a1efb4019858eabe3b002c2c64ca4799d48cb5010cec3344fdba29a5248ce075dfb8aa985272712ac0d5b5e7a38a4c89f153ef3fca7cb26ab5aaf75fec49a4c62ca126896301a681e03c94c87cec1f565690d0ccd54cc077269e3e70125d5f7cf113b1e436685b1cd37c79dc23db003b44aa012b4d9832e357314b832baab8f7c368ee67d8938c4a7b3680ffcb4f84ecbaaa543b56a08c0262d5d5d6590e1738145a137460e5f0f4678e65aedf1a4477c1e093d308bf25be58d7a516d56cac14e39b2542eb150ed9989e6a6caa910fc3cd2131c00f892464549a16da67")) + print(aes_decrypt("")) diff --git a/decryptencrypt/encrypt.py b/decryptencrypt/encrypt.py index 23eb4cf..a390bfe 100644 --- a/decryptencrypt/encrypt.py +++ b/decryptencrypt/encrypt.py @@ -13,4 +13,4 @@ def aes_encrypt(data) -> str: return text_encrypt if __name__ == '__main__': - print(aes_encrypt('13797424039')) + print(aes_encrypt('11111')) From ebe98124498ade798c8d9c7a8cb15912312bd32c Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 8 Jan 2024 17:07:00 +0800 Subject: [PATCH 44/49] update readme --- README.MD | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.MD b/README.MD index 6b6fb5c..608aca2 100644 --- a/README.MD +++ b/README.MD @@ -7,9 +7,8 @@ - 做了指纹验证(封号大多数与这有关) + 没变动的 - 加密 -
-代码日志 - +
代码日志 + **2023-12-12** + 新增添加代理选项 @@ -31,7 +30,7 @@ 1. 打卡 2. 补签(补前未30天打卡) -
>
+ ## 部署 From 9213adfaa1e8fae5d9b64a4e44ccce050c1d1aa3 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 9 Jan 2024 14:15:14 +0800 Subject: [PATCH 45/49] update readme --- README.MD | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.MD b/README.MD index 608aca2..d334b3c 100644 --- a/README.MD +++ b/README.MD @@ -1,13 +1,16 @@ ## 当前功能 ## 有问题可以issues +**2024-01-09** +用的flutter写的,逆向起来有点麻烦 + **2024-01-08** + 看了一下最新版,有如下变动(作者使用的老版本,不存在以下限制) - 抓包上做了一些限制 - 做了指纹验证(封号大多数与这有关) + 没变动的 - 加密 -
代码日志 +
往年代码日志 **2023-12-12** From 96e567fb13753453db17b6fbad659212b56bdba9 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Thu, 11 Jan 2024 16:55:39 +0800 Subject: [PATCH 46/49] update readme --- README.MD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index d334b3c..e228a02 100644 --- a/README.MD +++ b/README.MD @@ -1,8 +1,8 @@ ## 当前功能 ## 有问题可以issues -**2024-01-09** -用的flutter写的,逆向起来有点麻烦 +**2024-01-011** +新版gxy用的flutter写的,逆向起来有点麻烦。当前版本还能用懒得捣鼓了 **2024-01-08** + 看了一下最新版,有如下变动(作者使用的老版本,不存在以下限制) From baa57c54c04744bb8c0dd49510251da70b88318c Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Mon, 19 Feb 2024 11:03:27 +0800 Subject: [PATCH 47/49] explain --- README.MD | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index e228a02..1f92477 100644 --- a/README.MD +++ b/README.MD @@ -1,7 +1,7 @@ ## 当前功能 ## 有问题可以issues -**2024-01-011** +**2024-01-11** 新版gxy用的flutter写的,逆向起来有点麻烦。当前版本还能用懒得捣鼓了 **2024-01-08** @@ -39,7 +39,7 @@ ## 部署 1.google 云端硬盘可以部署 https://drive.google.com/drive/home -存在一定风险,应为是国外ip +存在一定风险,因为是国外ip ![img](./img/success.png) 教程更新中.... @@ -83,6 +83,7 @@ li_hua.proxies = { ``` **说明:** +经纬度可以用 https://api.map.baidu.com/lbsapi/getpoint/ 来获取 对日报和月报说明:月报文件里面只有3篇,日报只有20多篇,请自行补充.且都是采用**随机取的方式提交**. 最后**运行main.py** From cc0106d5e3e7b2ddf6171915fdb692af175b5774 Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 27 Feb 2024 00:10:47 +0800 Subject: [PATCH 48/49] complete end --- README.MD | 5 ++++- config/info.py | 1 + main.py | 38 ++++++++++++++++++++------------------ tast.py | 12 ++++++++++-- user_config.json | 1 + 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/README.MD b/README.MD index 1f92477..5a90261 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,8 @@ ## 当前功能 ## 有问题可以issues +**2024-02-27** ++ 月报可选提交(之前写了,忘记加了) **2024-01-11** 新版gxy用的flutter写的,逆向起来有点麻烦。当前版本还能用懒得捣鼓了 @@ -78,7 +80,8 @@ li_hua.proxies = { "is_repeat_clock_in": false \\ 默认不补签 "is_submit_daily": false, \\ 默认不提交日报 "is_submit_weekly": false,\\ 默认不提交周报 -"submit_weekly_time": 1 ,\\ 星期几提交周报 +"is_submit_month_report": false, \\ 默认不提交月报 +"submit_weekly_time": 1 ,\\ 星期几提交周报 is_submit_weekly 为true时生效 "submit_month_report_time": 1 \\ 每个月的几号提交月报,不要写28,29,30或31!!! ``` diff --git a/config/info.py b/config/info.py index 857d4b7..7980752 100644 --- a/config/info.py +++ b/config/info.py @@ -32,6 +32,7 @@ def __init__(self, login_info, path): self.is_repeat_clock_in = login_info['is_repeat_clock_in'] self.is_submit_daily = login_info['is_submit_daily'] self.is_submit_weekly = login_info['is_submit_weekly'] + self.is_submit_month_report = login_info['is_submit_month_report'] self.submit_weekly_time = login_info['submit_weekly_time'] self.submit_month_report_time = login_info['submit_month_report_time'] diff --git a/main.py b/main.py index 92c91a1..f5dbe01 100644 --- a/main.py +++ b/main.py @@ -139,25 +139,27 @@ def run(): main_module_log.error('已提交周报,不会重复提交') else: main_module_log.info("未到提交周报时间") - # submit month report - date = time.localtime() - day = date.tm_mday - # is user set time - if day == user_login_info.submit_month_report_time: - # is submit month report - if submit_time.month_next_submit_Report == "" or int(time.time()) > submit_time.month_next_submit_Report: - main_module_log.info('读取月报内容.....') - month_report = load_month_report() - main_module_log.info("开始提交月报") - submit_month_report(user_login_info, date=date, month_report=month_report.get_month_report()) - submit_time.month_next_submit_Report = next_submit_month_time() - # sava local file - submit_time.to_save_local() - else: - main_module_log.info('今天已提交月报,不在重复提交') + # is submit month report + if user_login_info.is_submit_month_report: + # submit month report + date = time.localtime() + day = date.tm_mday + # is user set time + if day == user_login_info.submit_month_report_time: + # is submit month report + if submit_time.month_next_submit_Report == "" or int(time.time()) > submit_time.month_next_submit_Report: + main_module_log.info('读取月报内容.....') + month_report = load_month_report() + main_module_log.info("开始提交月报") + submit_month_report(user_login_info, date=date, month_report=month_report.get_month_report()) + submit_time.month_next_submit_Report = next_submit_month_time() + # sava local file + submit_time.to_save_local() + else: + main_module_log.info('今天已提交月报,不在重复提交') - else: - main_module_log.info("未到提交月报时间") + else: + main_module_log.info("未到提交月报时间") if __name__ == '__main__': diff --git a/tast.py b/tast.py index 34e6447..bf70130 100644 --- a/tast.py +++ b/tast.py @@ -1,2 +1,10 @@ -import threading -print(f"我是主线程{threading.current_thread().name}") +import logging + +logging.basicConfig(format='%(asctime)s %(name)s %(message)s', datefmt="%Y %m %d %I%M%S") +test = logging.getLogger("test") +try: + raise Exception('test') +except Exception as e: + test.info('tessssst', exc_info=True,stack_info=True) +url = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?reflow_source=reflow_page&a_bogus=64745b2b5bdc4e75b720a9a85b19867a&item_ids=7225261112281926947' +url2 = 'www.iesdouyin.com/aweme/v1/play/?ratio=1080p&line=0&video_id=v0d00fg10000ch2kgsrc77ubp2dt6510' \ No newline at end of file diff --git a/user_config.json b/user_config.json index c0d3f36..8c75eed 100644 --- a/user_config.json +++ b/user_config.json @@ -12,6 +12,7 @@ "is_repeat_clock_in": false, "is_submit_daily": false, "is_submit_weekly": false, + "is_submit_month_report": false, "submit_weekly_time": 1, "submit_month_report_time": 1 } \ No newline at end of file From b162d586878f36a17d0ca0983daa8521f98adf2d Mon Sep 17 00:00:00 2001 From: rsp <3288892500@qq.com> Date: Tue, 27 Feb 2024 00:11:12 +0800 Subject: [PATCH 49/49] complete end --- README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/README.MD b/README.MD index 5a90261..c88106d 100644 --- a/README.MD +++ b/README.MD @@ -3,6 +3,7 @@ ## 有问题可以issues **2024-02-27** + 月报可选提交(之前写了,忘记加了) + **2024-01-11** 新版gxy用的flutter写的,逆向起来有点麻烦。当前版本还能用懒得捣鼓了