diff --git a/.github/1 b/.github/1 new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/.github/1 @@ -0,0 +1 @@ + diff --git a/.github/pull.yml b/.github/pull.yml new file mode 100644 index 000000000..a2bbd1a57 --- /dev/null +++ b/.github/pull.yml @@ -0,0 +1,8 @@ +# 使用方法见[@lxk0301](https://raw.githubusercontent.com/lxk0301/scripts/master/githubAction.md) + +version: "1" +rules: # Array of rules + - base: master # Required. Target branch + upstream: Sunert:master # Required. Must be in the same fork network. + mergeMethod: hardreset # Optional, one of [none, merge, squash, rebase, hardreset], Default: none. + mergeUnstable: true # Optional, merge pull request even when the mergeable_state is not clean. Default: false \ No newline at end of file diff --git a/.github/workflows/QQread.yml b/.github/workflows/QQread.yml new file mode 100644 index 000000000..7e7266278 --- /dev/null +++ b/.github/workflows/QQread.yml @@ -0,0 +1,50 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: QQ阅读APP + +on: + workflow_dispatch: + schedule: + - cron: '30 10-23 * * *' + watch: + types: started + +jobs: + build: + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + QQREADAPP_HEADER: ${{ secrets.QQREADAPP_HEADER }} + QQREADAPP_VIDEOHD: ${{ secrets.QQREADAPP_VIDEOHD }} + COOKIES_SPLIT: ${{ secrets.COOKIES_SPLIT }} + + steps: + - name: Checkout + run: | + git clone https://github.com/ziye12/JavaScript.git ~/JavaScript + - name: Use Node.js 12.x + uses: actions/setup-node@v1 + with: + node-version: 12.x + - name: npm install + if: env.QQREADAPP_HEADER + run: | + cd ~/JavaScript + npm install + - name: '运行 【QQ阅读APP】' + if: env.QQREADAPP_HEADER + run: | + cd ~/JavaScript + node Task/QQread.js + env: + + PUSH_KEY: ${{ secrets.PUSH_KEY }} + BARK_PUSH: ${{ secrets.BARK_PUSH }} + TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} + TG_USER_ID: ${{ secrets.TG_USER_ID }} + BARK_SOUND: ${{ secrets.BARK_SOUND }} + DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} + DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} + + diff --git a/.github/workflows/qqreads.yml b/.github/workflows/qqreads.yml new file mode 100644 index 000000000..78e9ae550 --- /dev/null +++ b/.github/workflows/qqreads.yml @@ -0,0 +1,50 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: 企鹅读书 + +on: + workflow_dispatch: + schedule: + - cron: '*/11 * * * *' + watch: + types: started + +jobs: + build: + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + QQREAD_BODY: ${{ secrets.QQREAD_BODY }} + QQREAD_TIMEURL: ${{ secrets.QQREAD_TIMEURL }} + QQREAD_TIMEHD: ${{ secrets.QQREAD_TIMEHD }} + + steps: + - name: Checkout + run: | + git clone https://github.com/ziye12/JavaScript.git ~/JavaScript + - name: Use Node.js 12.x + uses: actions/setup-node@v1 + with: + node-version: 12.x + - name: npm install + if: env.QQREAD_TIMEHD + run: | + cd ~/JavaScript + npm install + - name: '运行 【企鹅读书】' + if: env.QQREAD_TIMEHD + run: | + cd ~/JavaScript + node Task/qqreads.js + env: + + PUSH_KEY: ${{ secrets.PUSH_KEY }} + BARK_PUSH: ${{ secrets.BARK_PUSH }} + TG_BOT_TOKEN: ${{ secrets.TG_BOT_TOKEN }} + TG_USER_ID: ${{ secrets.TG_USER_ID }} + BARK_SOUND: ${{ secrets.BARK_SOUND }} + DD_BOT_TOKEN: ${{ secrets.DD_BOT_TOKEN }} + DD_BOT_SECRET: ${{ secrets.DD_BOT_SECRET }} + + diff --git a/.github/workflows/sync-repo.yml b/.github/workflows/sync-repo.yml new file mode 100644 index 000000000..9b277cf82 --- /dev/null +++ b/.github/workflows/sync-repo.yml @@ -0,0 +1,27 @@ +name: 同步上游仓库 +on: + schedule: + - cron: '0 */2 * * *' + watch: + types: started + repository_dispatch: + types: sync-repo +jobs: + repo-sync: + env: + PAT: ${{ secrets.PAT }} #此处PAT需要申请,教程详见:https://www.jianshu.com/p/bb82b3ad1d11 + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + steps: + - uses: actions/checkout@v2 + with: + persist-credentials: false + + - name: sync ziye12-JavaScript + uses: repo-sync/github-sync@v2 + if: env.PAT + with: + source_repo: "https://github.com/ziye12/JavaScript.git" + source_branch: "master" + destination_branch: "main" + github_token: ${{ secrets.PAT }} diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..dbbe35581 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/Script/1 b/Script/1 new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Script/1 @@ -0,0 +1 @@ +1 diff --git a/Task/QQread.js b/Task/QQread.js new file mode 100644 index 000000000..342d05487 --- /dev/null +++ b/Task/QQread.js @@ -0,0 +1,376 @@ + +/*ziye + +本人github地址 https://github.com/ziye12/JavaScript +转载请备注个名字,谢谢 + +11.28 ⚠️无时长功能,只有签到,视频,宝箱 + +日均0.18收益 + + + + + +⚠️cookie获取方法: + +进 QQ阅读APP 点我的 获取cookie 秘密为 QQREADAPP_HEADER 多账号换行 + +点 免费 福利 日常福利-看视频 获取视频cookie 秘密为 QQREADAPP_VIDEOHD 多账号换行 + + + +⚠️宝箱奖励为60分钟一次,自己根据情况设置定时, + + + +hostname=commontgw6.reader.qq.com,eventv36.reader.qq.com + +############## 圈x + +#QQ阅读APP获取cookie + +https:\/\/commontgw6\.reader\.qq\.com\/v7_5_2\/nativepage\/getAcctInfo url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/QQread.js + +#QQ阅读APP获取视频cookie +https:\/\/eventv36\.reader\.qq\.com\/activity\/pkg11955\/watchVideo url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/QQread.js + +############## loon + +//QQ阅读APP获取cookie +https:\/\/commontgw6\.reader\.qq\.com\/v7_5_2\/nativepage\/getAcctInfo script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/QQreads.js,requires-header=true, tag=QQ阅读APP获取cookie + +//QQ阅读APP获取时长cookie +https:\/\/eventv36\.reader\.qq\.com\/activity\/pkg11955\/watchVideo script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/QQreads.js, requires-header=true, tag=QQ阅读APP获取视频cookie + +############## surge + +//QQ阅读APP获取cookie +QQ阅读APP获取cookie = type=https:\/\/commontgw6\.reader\.qq\.com\/v7_5_2\/nativepage\/getAcctInfo,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/QQreads.js, + +//QQ阅读APP获取视频cookie +QQ阅读APP获取视频cookie = https:\/\/eventv36\.reader\.qq\.com\/activity\/pkg11955\/watchVideo,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/QQreads.js, + + +*/ + +const jsname='QQ阅读APP' +const $ = Env(jsname) +const notify = $.isNode() ? require('./sendNotify') : ''; +var tz=''; +var kz=''; +var task=''; + + +var COOKIES_SPLIT='\n' //自定义多cookie之间连接的分隔符,默认为\n换行分割,不熟悉的不要改动和配置,为了兼容本地node执行 + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval=1 +//0为关闭通知,1为所有通知,2为宝箱领取成功通知, + +const dd=1//单次任务延迟,默认1秒 + + + +let QQreadhdArr = [], QQreadheaderVal = '', +QQreadvideohdArr = [], QQreadvideoheaderVal = '', + QQreadHD = [], QQreadvideoHD = []; + if ($.isNode()) { + if (process.env.COOKIES_SPLIT){ + COOKIES_SPLIT = process.env.COOKIES_SPLIT; + }; + console.log(`============ cookies分隔符为:${COOKIES_SPLIT} =============\n`); + if (process.env.QQREADAPP_HEADER && process.env.QQREADAPP_HEADER.indexOf(COOKIES_SPLIT) > -1) { + QQreadHD = process.env.QQREADAPP_HEADER.split(COOKIES_SPLIT); + } else { + QQreadHD = process.env.QQREADAPP_HEADER.split() + }; + + + + if (process.env.QQREADAPP_VIDEOHD && process.env.QQREADAPP_VIDEOHD.indexOf(COOKIES_SPLIT) > -1) { + QQreadvideoHD = process.env.QQREADAPP_VIDEOHD.split(COOKIES_SPLIT); + } else { + QQreadvideoHD = process.env.QQREADAPP_VIDEOHD.split() + }; + +} + +if ($.isNode()) { + Object.keys(QQreadHD).forEach((item) => { + if (QQreadHD[item]) { + QQreadhdArr.push(QQreadHD[item]) + } + }) + + Object.keys(QQreadvideoHD).forEach((item) => { + if (QQreadvideoHD[item]) { + QQreadvideohdArr.push(QQreadvideoHD[item]) + } + }) + + console.log(`============ 共${QQreadhdArr.length}个QQ阅读APP账号 =============\n`) + console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`) + } else { + QQreadhdArr.push($.getdata('QQreadhd')); + QQreadvideohdArr.push($.getdata('QQreadvideohd')); + +} + + if (isGetCookie = typeof $request !== 'undefined') { + GetCookie(); + $.done(); + } + + + + +function GetCookie() { + if($request &&$request.url.indexOf("getAcctInfo")>=0) { + +const QQreadheaderVal = JSON.stringify($request.headers) + if (QQreadheaderVal) $.setdata(QQreadheaderVal,'QQreadhd') + $.log(`[${jsname}] 获取Cookie: 成功,QQreadheaderVal: ${QQreadheaderVal}`) + $.msg(jsname, `获取cookie: 成功🎉`, ``) + } + + + + if($request &&$request.url.indexOf("watchVideo")>=0) { + +const QQreadvideoheaderVal = JSON.stringify($request.headers) + if (QQreadvideoheaderVal) $.setdata(QQreadvideoheaderVal,'QQreadvideohd') + $.log(`[${jsname}] 获取视频Cookie: 成功,QQreadvideoheaderVal: ${QQreadvideoheaderVal}`) + $.msg(jsname, `获取视频cookie: 成功🎉`, ``) + } + + + +} + + + + +let K = 0; + all() +function all(){ + QQreadheaderVal = QQreadhdArr[K]; + QQreadvideoheaderVal = QQreadvideohdArr[K]; + for(var i=0;i<7;i++) + { (function(i) { + setTimeout(function() { + + if (i==0) +QQreadinfo();//用户名 + +else if (i==1) +QQreadtask();//任务列表 + +else if (i==2) +QQreadboxinfo();//宝箱 + +else if (i==4&& task.data&&task.data.watchVideo.videoCount==0) +QQreadsign();//金币签到 + +else if (i==5&& task.data&&task.data.watchVideo.videoCount<=9) +QQreadvideo();//视频任务 + + + +else if (i == 6 && K < QQreadhdArr.length - 1) { +K += 1; +all(); + } else if (i == 6 && K == QQreadhdArr.length - 1) { + showmsg();//通知 + console.log(tz) + $.done(); + } + }, + + (i + 1) * dd * 1000 + ); + })(i); + } +} + + + +//用户名 +function QQreadinfo() { +return new Promise((resolve, reject) => { + + const toQQreadinfourl = { + + url: 'https://commontgw6.reader.qq.com/v7_5_2/nativepage/getAcctInfo', + headers: JSON.parse(QQreadheaderVal), + timeout:60000}; + $.get(toQQreadinfourl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 用户名: ${data}`) + info =JSON.parse(data) +kz+= +'\n========== 【'+info.nick+'】 ==========\n'; +tz+= +'\n========== 【'+info.nick+'】 ==========\n'; + +resolve() + }) + }) + } + + + + + +//任务列表 +function QQreadtask() { +return new Promise((resolve, reject) => { + + const toQQreadtaskurl ={url: 'https://eventv3.reader.qq.com/activity/pkg11955/initV2', + headers: JSON.parse(QQreadvideoheaderVal), + timeout:60000}; + $.get(toQQreadtaskurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 任务列表: ${data}`) + task =JSON.parse(data) +kz+= + '【现金余额】:'+ + task.data.userBalance.cash+ + '元\n'+ + '【今日收益】:'+ + (task.data.userBalance.coin/30000).toFixed(2)+ + '元\n'; + +tz+= + '【现金余额】:'+ + task.data.userBalance.cash+ + '元\n'+ + '【今日收益】:'+ + (task.data.userBalance.coin/30000).toFixed(2)+ + '元\n'+ + '【签到天数】:'+ + (task.data.userType-1)+ + '天\n'+ + '【已看视频】:'+ + task.data.watchVideo.videoCount+ + '/10次\n' + + +resolve() + + }) + }) + } + + + + + +//金币签到 +function QQreadsign() { +return new Promise((resolve, reject) => { + const toQQreadsignurl ={url: 'https://eventv36.reader.qq.com/activity/pkg11955/punchCard_v2', + headers: JSON.parse(QQreadvideoheaderVal), + timeout:60000}; + $.get(toQQreadsignurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 金币签到: ${data}`) + sign =JSON.parse(data) +if (sign.code==0) + { +tz+= +'【金币签到】:获得'+sign.data.coinNum+'金币\n' + } +resolve() + }) + }) + } + + + +//视频奖励 +function QQreadvideo() { +return new Promise((resolve, reject) => { + const toQQreadvideourl ={url: 'https://eventv36.reader.qq.com/activity/pkg11955/watchVideo', + headers: JSON.parse(QQreadvideoheaderVal), + timeout:60000}; + $.get(toQQreadvideourl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 视频奖励: ${data}`) + video =JSON.parse(data) +if (video.code==0) + { +tz+= +'【视频任务'+video.data.videoCount+'】:获得100金币\n' +} + +resolve() + }) + }) + } + + + + + +//宝箱奖励 + function QQreadboxinfo() { + return new Promise((resolve, reject) => { + const toQQreadboxinfourl ={url: 'https://eventv3.reader.qq.com/activity/pkg11955/queryOpenBoxInfo', + headers: JSON.parse(QQreadvideoheaderVal), + timeout:60000}; + $.get(toQQreadboxinfourl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 宝箱奖励详情: ${data}`) + boxinfo =JSON.parse(data) + var cz=new Date().getTime()-boxinfo.data.openTime + var CZ=3600-(cz/1000).toFixed(0) + if (CZ>=1){ + tz+= + '【宝箱剩余'+boxinfo.data.openNum+'】:差'+CZ+'秒\n'; + kz+= + '【宝箱剩余'+boxinfo.data.openNum+'】:差'+CZ+'秒\n'; + } + + else if(CZ<=0) { + const toQQreadboxurl ={url: 'https://eventv3.reader.qq.com/activity/pkg11955/openBox', + headers: JSON.parse(QQreadvideoheaderVal), + timeout:60000}; + $.get(toQQreadboxurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 宝箱奖励: ${data}`) + box =JSON.parse(data) + if (box.code==0){ + tz+= + '【宝箱剩余'+box.data.openNum+'】:获得'+box.data.coin+'金币\n' + kz+= + '【宝箱剩余'+box.data.openNum+'】:获得'+box.data.coin+'金币\n' + } + + }) + + } + }) + resolve() + + }) + } + + + + +function showmsg() { +tz += `\n\n========= 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} \n\n`; + +let d = new Date(new Date().getTime() + 8 * 60 * 60 * 1000); +if (d.getHours()==12 && d.getMinutes()<=20 ||d.getHours()==23 && d.getMinutes()>=40 ) { + notify.sendNotify(jsname,kz) + } + +if (notifyInterval==1) +$.msg(jsname,'',tz)//显示所有通知 + +else if (notifyInterval==2&&CZ<=0&&boxinfo.data.openNum>0) +$.msg(jsname,'',tz)//宝箱领取成功通知 + + + +} + + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/Task/qqreads.js b/Task/qqreads.js new file mode 100644 index 000000000..3135a16e8 --- /dev/null +++ b/Task/qqreads.js @@ -0,0 +1,692 @@ +/* ziye + +本人github地址 https://github.com/ziye12/JavaScript +转载请备注个名字,谢谢 + +11.25 增加 阅读时长上传,阅读金币,阅读随机金币 +11.25 修复翻倍宝箱不同时领取的问题.增加阅读金币判定 +11.25 修复阅读时长问题,阅读金币问题,请重新获取时长cookie +11.26 随机金币只有一次,故去除,调整修复阅读金币问题,增加时长上传限制 +11.26 增加领取周时长奖励 +11.26 增加结束命令 +11.27 调整通知为,成功开启宝箱再通知 +11.28 修复错误 +11.29 更新 支持action.默认每天21点到21点20通知 +12.2 修复打卡问题 +12.3 缩短运行时间,由于企鹅读书版本更新.请手动进去看一次书 +12.3 调整推送时间为12点和24点左右 +12.6 精简打印通知 +12.7 解决1金币问题,务必重新获取一次更新body + +⚠️cookie获取方法: + +进 https://m.q.qq.com/a/s/d3eacc70120b9a37e46bad408c0c4c2a + +进书库选择一本书,看10秒以下,然后退出,获取时长url和时长header以及更新body,看书一定不能超过10秒 + + + +Secrets对应关系如下,多账号默认换行 + +qqreadbodyVal 👉 QQREAD_BODY +qqreadtimeurlVal 👉 QQREAD_TIMEURL +qqreadtimeheaderVal 👉 QQREAD_TIMEHD + + + +⚠️宝箱奖励为20分钟一次,自己根据情况设置定时,建议设置11分钟一次 + +hostname=mqqapi.reader.qq.com + +############## 圈x + +#企鹅读书获取更新body +https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track url script-request-body https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/qqreads.js + +#企鹅读书获取时长cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/qqreads.js + +############## loon + +//企鹅读书获取更新body +http-request https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/qqreads.js,requires-body=true, tag=企鹅读书获取更新body + +//企鹅读书获取时长cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/qqreads.js, requires-header=true, tag=企鹅读书获取时长cookie + +############## surge + +//企鹅读书获取更新body +企鹅读书获取更新body = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/log\/v4\/mqq\/track,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/qqreads.js, + +//企鹅读书获取时长cookie +企鹅读书获取时长cookie = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/Task/qqreads.js, + + +*/ + +const jsname = "企鹅读书"; +const $ = Env(jsname); +const notify = $.isNode() ? require("./sendNotify") : ""; + +let tz = ""; +let kz = ""; +let task = ""; +let config = ""; + +let COOKIES_SPLIT = "\n"; // 自定义多cookie之间连接的分隔符,默认为\n换行分割,不熟悉的不要改动和配置,为了兼容本地node执行 + +const logs = 0; // 0为关闭日志,1为开启 +const notifyInterval = 3; +// 0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每15次通知一次 + +const dd = 1; // 单次任务延迟,默认1秒 +const TIME = 30; // 单次时长上传限制,默认5分钟 +const maxtime = 12; // 每日上传时长限制,默认12小时 +const wktimess = 1200; // 周奖励领取标准,默认1200分钟 + +const qqreadbdArr = []; +let qqreadbodyVal = ""; +const qqreadtimeurlArr = []; +let qqreadtimeurlVal = ""; +const qqreadtimehdArr = []; +let qqreadtimeheaderVal = ""; +let qqreadBD = []; +let qqreadtimeURL = []; +let qqreadtimeHD = []; +if ($.isNode()) { + if (process.env.COOKIES_SPLIT) { + COOKIES_SPLIT = process.env.COOKIES_SPLIT; + } + console.log( + `============ cookies分隔符为:${JSON.stringify( + COOKIES_SPLIT + )} =============\n` + ); + if ( + process.env.QQREAD_BODY && + process.env.QQREAD_BODY.indexOf(COOKIES_SPLIT) > -1 + ) { + qqreadBD = process.env.QQREAD_BODY.split(COOKIES_SPLIT); + } else { + qqreadBD = process.env.QQREAD_BODY.split(); + } + + if ( + process.env.QQREAD_TIMEURL && + process.env.QQREAD_TIMEURL.indexOf(COOKIES_SPLIT) > -1 + ) { + qqreadtimeURL = process.env.QQREAD_TIMEURL.split(COOKIES_SPLIT); + } else { + qqreadtimeURL = process.env.QQREAD_TIMEURL.split(); + } + + if ( + process.env.QQREAD_TIMEHD && + process.env.QQREAD_TIMEHD.indexOf(COOKIES_SPLIT) > -1 + ) { + qqreadtimeHD = process.env.QQREAD_TIMEHD.split(COOKIES_SPLIT); + } else { + qqreadtimeHD = process.env.QQREAD_TIMEHD.split(); + } +} + +if ($.isNode()) { + Object.keys(qqreadBD).forEach((item) => { + if (qqreadBD[item]) { + qqreadbdArr.push(qqreadBD[item]); + } + }); + Object.keys(qqreadtimeURL).forEach((item) => { + if (qqreadtimeURL[item]) { + qqreadtimeurlArr.push(qqreadtimeURL[item]); + } + }); + Object.keys(qqreadtimeHD).forEach((item) => { + if (qqreadtimeHD[item]) { + qqreadtimehdArr.push(qqreadtimeHD[item]); + } + }); + + console.log( + `============ 共${qqreadtimehdArr.length}个企鹅读书账号 =============\n` + ); + console.log( + `============ 脚本执行-北京时间(UTC+8):${new Date( + new Date().getTime() + 8 * 60 * 60 * 1000 + ).toLocaleString()} =============\n` + ); +} else { + qqreadbdArr.push($.getdata("qqreadbd")); + qqreadtimeurlArr.push($.getdata("qqreadtimeurl")); + qqreadtimehdArr.push($.getdata("qqreadtimehd")); +} + +if ((isGetCookie = typeof $request !== "undefined")) { + GetCookie(); +$.done(); +} + +function GetCookie() { + +if ($request && $request.url.indexOf("addReadTimeWithBid?") >= 0) { + const qqreadtimeurlVal = $request.url; + if (qqreadtimeurlVal) $.setdata(qqreadtimeurlVal, "qqreadtimeurl"); + $.log( + `[${jsname}] 获取时长url: 成功,qqreadtimeurlVal: ${qqreadtimeurlVal}` + ); + $.msg(jsname, `获取时长url: 成功🎉`, ``); + const qqreadtimeheaderVal = JSON.stringify($request.headers); + if (qqreadtimeheaderVal) $.setdata(qqreadtimeheaderVal, "qqreadtimehd"); + $.log( + `[${jsname}] 获取时长header: 成功,qqreadtimeheaderVal: ${qqreadtimeheaderVal}` + ); + $.msg(jsname, `获取时长header: 成功🎉`, ``); + } + else if ($request &&$request.body.indexOf("bookDetail_bottomBar_read_C")>=0&&$request.body.indexOf("bookRead_show_I")>=0&&$request.body.indexOf("topBar_left_back_C")<0&&$request.body.indexOf("bookRead_dropOut_shelfYes_C")<0){ + const qqreadbodyVal = $request.body; + if (qqreadbodyVal) $.setdata(qqreadbodyVal, "qqreadbd"); + $.log( + `[${jsname}] 获取更新body: 成功,qqreadbodyVal: ${qqreadbodyVal}` + ); + $.msg(jsname, `获取更新body: 成功🎉`, ``); + + } + +} + + + +let K = 0; +all(); +function all() { + qqreadbodyVal = qqreadbdArr[K]; + qqreadtimeurlVal = qqreadtimeurlArr[K]; + qqreadtimeheaderVal = qqreadtimehdArr[K]; + for (let i = 0; i < 15; i++) { + (function (i) { + setTimeout( + function () { + if (i == 0) { + qqreadinfo(); // 用户名 + qqreadwktime(); // 周时长查询 + qqreadconfig(); // 时长查询 + } else if (i == 1) qqreadtask(); + else if ( + i == 2) qqreadtrack(); + // 任务列表 + else if ( + i == 3 && + config.data && + config.data.pageParams.todayReadSeconds / 3600 <= maxtime + ) + qqreadtime(); + // 上传时长 + else if (i == 4 && task.data && task.data.taskList[1].doneFlag == 0) + qqreadssr1(); + // 阅读金币1 + else if (i == 5 && task.data && task.data.taskList[2].doneFlag == 0) { + qqreadsign(); // 金币签到 + qqreadtake(); // 阅豆签到 + } else if (i == 6 && task.data && task.data.treasureBox.doneFlag == 0) + qqreadbox(); + // 宝箱 + else if (i == 7 && task.data && task.data.taskList[0].doneFlag == 0) + qqreaddayread(); + // 阅读任务 + else if (i == 8 && task.data && task.data.taskList[1].doneFlag == 0) + qqreadssr2(); + // 阅读金币2 + else if (i == 9) qqreadpick(); + // 领周时长奖励 + else if (i == 10 && task.data && task.data.taskList[3].doneFlag == 0) + qqreadvideo(); + // 视频任务 + else if (i == 11 && task.data && task.data.taskList[2].doneFlag == 0) + qqreadsign2(); + // 签到翻倍 + else if ( + i == 12 && + task.data && + task.data.treasureBox.videoDoneFlag == 0 + ) + qqreadbox2(); + // 宝箱翻倍 + else if (i == 13 && task.data && task.data.taskList[1].doneFlag == 0) + qqreadssr3(); + // 阅读金币3 + else if (i == 14 && K < qqreadbdArr.length - 1) { + K += 1; + all(); + } else if (i == 14 && K == qqreadbdArr.length - 1) { + showmsg(); // 通知 + $.done(); + } + }, + + (i + 1) * dd * 1000 + ); + })(i); + } +} + +// 任务列表 +function qqreadtask() { + return new Promise((resolve, reject) => { + const toqqreadtaskurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=", + headers: JSON.parse(qqreadtimeheaderVal), + + timeout: 60000, + }; + $.get(toqqreadtaskurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 任务列表: ${data}`); + task = JSON.parse(data); + kz += + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【已开宝箱】:${task.data.treasureBox.count}个\n`; + + tz += + `【现金余额】:${(task.data.user.amount / 10000).toFixed(2)}元\n` + + `【第${task.data.invite.issue}期】:时间${task.data.invite.dayRange}\n` + + ` 已邀请${task.data.invite.inviteCount}人,再邀请${task.data.invite.nextInviteConfig.count}人获得${task.data.invite.nextInviteConfig.amount}金币\n` + + `【${task.data.taskList[0].title}】:${task.data.taskList[0].amount}金币,${task.data.taskList[0].actionText}\n` + + `【${task.data.taskList[1].title}】:${task.data.taskList[1].amount}金币,${task.data.taskList[1].actionText}\n` + + `【${task.data.taskList[2].title}】:${task.data.taskList[2].amount}金币,${task.data.taskList[2].actionText}\n` + + `【${task.data.taskList[3].title}】:${task.data.taskList[3].amount}金币,${task.data.taskList[3].actionText}\n` + + `【宝箱任务${task.data.treasureBox.count + 1}】:${ + task.data.treasureBox.tipText + }\n` + + `【${task.data.fans.title}】:${task.data.fans.fansCount}个好友,${task.data.fans.todayAmount}金币\n`; + + resolve(); + }); + }); +} + + +// 更新 +function qqreadtrack() { + return new Promise((resolve, reject) => { + const body = qqreadbodyVal.replace(new RegExp(/"dis":[0-9]{13}/),`"dis":${new Date().getTime()}`) + const toqqreadtrackurl = { + url: "https://mqqapi.reader.qq.com/log/v4/mqq/track", + headers: JSON.parse(qqreadtimeheaderVal), + body: body, + timeout: 60000, + }; + $.post(toqqreadtrackurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 更新: ${data}`); + track = JSON.parse(data); + tz += `【数据更新】:更新${track.msg}\n`; + resolve(); + }); + }); +} + + + + +// 用户名 +function qqreadinfo() { + return new Promise((resolve, reject) => { + const toqqreadinfourl = { + url: "https://mqqapi.reader.qq.com/mqq/user/init", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadinfourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 用户名: ${data}`); + info = JSON.parse(data); + kz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + tz += `\n========== 【${info.data.user.nickName}】 ==========\n`; + + resolve(); + }); + }); +} + +// 阅豆签到 +function qqreadtake() { + return new Promise((resolve, reject) => { + const toqqreadtakeurl = { + url: "https://mqqapi.reader.qq.com/mqq/sign_in/user", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.post(toqqreadtakeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅豆签到: ${data}`); + take = JSON.parse(data); + if (take.data.takeTicket > 0) { + tz += `【阅豆签到】:获得${take.data.takeTicket}豆\n`; + } + + resolve(); + }); + }); +} + +// 阅读时长任务 +function qqreadconfig() { + return new Promise((resolve, reject) => { + const toqqreadconfigurl = { + url: + "https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=", + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadconfigurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长查询: ${data}`); + config = JSON.parse(data); + if (config.code == 0) + tz += `【时长查询】:今日阅读${( + config.data.pageParams.todayReadSeconds / 60 + ).toFixed(0)}分钟\n`; + + resolve(); + }); + }); +} + +// 阅读时长 +function qqreadtime() { + return new Promise((resolve, reject) => { + const toqqreadtimeurl = { + url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadtimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + time = JSON.parse(data); + if (time.code == 0) tz += `【阅读时长】:上传${TIME / 6}分钟\n`; + + resolve(); + }); + }); +} + +// 阅读金币1 +function qqreadssr1() { + return new Promise((resolve, reject) => { + const toqqreadssr1url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 1) { + $.get(toqqreadssr1url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励1: ${data}`); + ssr1 = JSON.parse(data); + if (ssr1.data.amount > 0) + tz += `【阅读金币1】获得${ssr1.data.amount}金币\n`; + + resolve(); + }); + } + }); +} + +// 阅读金币2 +function qqreadssr2() { + return new Promise((resolve, reject) => { + const toqqreadssr2url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 5) { + $.get(toqqreadssr2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励2: ${data}`); + ssr2 = JSON.parse(data); + if (ssr2.data.amount > 0) + tz += `【阅读金币2】获得${ssr2.data.amount}金币\n`; + + resolve(); + }); + } + }); +} + +// 阅读金币3 +function qqreadssr3() { + return new Promise((resolve, reject) => { + const toqqreadssr3url = { + url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + if (config.data && config.data.pageParams.todayReadSeconds / 60 >= 30) { + $.get(toqqreadssr3url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币奖励3: ${data}`); + ssr3 = JSON.parse(data); + if (ssr3.data.amount > 0) + tz += `【阅读金币3】获得${ssr3.data.amount}金币\n`; + + resolve(); + }); + } + }); +} + +// 金币签到 +function qqreadsign() { + return new Promise((resolve, reject) => { + const toqqreadsignurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadsignurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到: ${data}`); + sign = JSON.parse(data); + if (sign.data.videoDoneFlag) { + tz += `【金币签到】:获得${sign.data.todayAmount}金币\n`; + } + resolve(); + }); + }); +} + +// 金币签到翻倍 +function qqreadsign2() { + return new Promise((resolve, reject) => { + const toqqreadsign2url = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadsign2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 金币签到翻倍: ${data}`); + sign2 = JSON.parse(data); + if (sign2.code == 0) { + tz += `【签到翻倍】:获得${sign2.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 每日阅读 +function qqreaddayread() { + return new Promise((resolve, reject) => { + const toqqreaddayreadurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreaddayreadurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 每日阅读: ${data}`); + dayread = JSON.parse(data); + if (dayread.code == 0) { + tz += `【每日阅读】:获得${dayread.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 视频奖励 +function qqreadvideo() { + return new Promise((resolve, reject) => { + const toqqreadvideourl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadvideourl, (error, response, data) => { + if (logs) $.log(`${jsname}, 视频奖励: ${data}`); + video = JSON.parse(data); + if (video.code == 0) { + tz += `【视频奖励】:获得${video.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 宝箱奖励 +function qqreadbox() { + return new Promise((resolve, reject) => { + const toqqreadboxurl = { + url: "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box", + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadboxurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励: ${data}`); + box = JSON.parse(data); + if (box.data.count >= 0) { + tz += `【宝箱奖励${box.data.count}】:获得${box.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 宝箱奖励翻倍 +function qqreadbox2() { + return new Promise((resolve, reject) => { + const toqqreadbox2url = { + url: + "https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video", + + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadbox2url, (error, response, data) => { + if (logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`); + box2 = JSON.parse(data); + if (box2.code == 0) { + tz += `【宝箱翻倍】:获得${box2.data.amount}金币\n`; + } + + resolve(); + }); + }); +} + +// 本周阅读时长 +function qqreadwktime() { + return new Promise((resolve, reject) => { + const toqqreadwktimeurl = { + url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, + headers: JSON.parse(qqreadtimeheaderVal), + }; + $.get(toqqreadwktimeurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 阅读时长: ${data}`); + wktime = JSON.parse(data); + if (wktime.code == 0) + tz += `【本周阅读时长】:${wktime.data.readTime}分钟\n`; + + resolve(); + }); + }); +} + +// 本周阅读时长奖励任务 +function qqreadpick() { + return new Promise((resolve, reject) => { + const toqqreadpickurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackageInit`, + headers: JSON.parse(qqreadtimeheaderVal), + }; + if (wktime.data.readTime >= wktimess && wktime.data.readTime <= 1250) { + $.get(toqqreadpickurl, (error, response, data) => { + if (logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`); + pick = JSON.parse(data); + if (pick.data[7].isPick == true) tz += "【周时长奖励】:已全部领取\n"; + + for (let i = 0; i < pick.data.length; i++) { + setTimeout(() => { + const pickid = pick.data[i].readTime; + const Packageid = [ + "10", + "10", + "20", + "30", + "50", + "80", + "100", + "120", + ]; + const toqqreadPackageurl = { + url: `https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, + headers: JSON.parse(qqreadtimeheaderVal), + timeout: 60000, + }; + $.get(toqqreadPackageurl, (error, response, data) => { + if (logs) $.log(`${jsname}, 领周阅读时长: ${data}`); + Package = JSON.parse(data); + if (Package.code == 0) + tz += `【周时长奖励${i + 1}】:领取${Packageid[i]}阅豆\n`; + }); + }, i * 100); + } + }); + resolve(); + } + }); +} + +function showmsg() { + tz += `\n\n========= 脚本执行-北京时间(UTC+8):${new Date( + new Date().getTime() + 8 * 60 * 60 * 1000 + ).toLocaleString()} \n\n`; + + const d = new Date(new Date().getTime() + 8 * 60 * 60 * 1000); + if ( + (d.getHours() == 12 && d.getMinutes() <= 20) || + (d.getHours() == 23 && d.getMinutes() >= 40) + ) { + notify.sendNotify(jsname, kz); + } + + if (notifyInterval != 1) console.log(tz); // 无通知时,打印通知 + + if (notifyInterval == 1) $.msg(jsname, "", tz); + // 显示所有通知 + else if ( + notifyInterval == 2 && + task.data && + task.data.treasureBox.doneFlag == 0 + ) + $.msg(jsname, "", tz); + // 宝箱领取成功通知 + else if ( + (notifyInterval == 3 && task.data && task.data.treasureBox.count == 0) || + task.data.treasureBox.count == 15 || + task.data.treasureBox.count == 30 || + task.data.treasureBox.count == 45 || + task.data.treasureBox.count == 60 + ) + $.msg(jsname, "", tz); // 宝箱每15次通知一次 +} + + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/Task/sendNotify.js b/Task/sendNotify.js new file mode 100644 index 000000000..b0874bb07 --- /dev/null +++ b/Task/sendNotify.js @@ -0,0 +1,255 @@ +const $ = new Env(); +// =======================================微信server酱通知设置区域=========================================== +//此处填你申请的SCKEY. +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入PUSH_KEY) +let SCKEY = ''; + +// =======================================Bark App通知设置区域=========================================== +//此处填你BarkAPP的信息(IP/设备码,例如:https://api.day.app/XXXXXXXX) +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_PUSH) +let BARK_PUSH = ''; +//BARK app推送铃声,铃声列表去APP查看复制填写 +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_SOUND , Value输入app提供的铃声名称,例如:birdsong) +let BARK_SOUND = ''; + + +// =======================================telegram机器人通知设置区域=========================================== +//此处填你telegram bot 的Token,例如:1077xxx4424:AAFjv0FcqxxxxxxgEMGfi22B4yh15R5uw +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_BOT_TOKEN) +let TG_BOT_TOKEN = ''; +//此处填你接收通知消息的telegram用户的id,例如:129xxx206 +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_USER_ID) +let TG_USER_ID = ''; + +// =======================================钉钉机器人通知设置区域=========================================== +//此处填你钉钉 bot 的webhook,例如:5a544165465465645d0f31dca676e7bd07415asdasd +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入DD_BOT_TOKEN) +let DD_BOT_TOKEN = ''; +//密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 +let DD_BOT_SECRET = ''; + +if (process.env.PUSH_KEY) { + SCKEY = process.env.PUSH_KEY; +} +if (process.env.BARK_PUSH) { + if(process.env.BARK_PUSH.indexOf('https') > -1 || process.env.BARK_PUSH.indexOf('http') > -1) { + //兼容BARK自建用户 + BARK_PUSH = process.env.BARK_PUSH + } else { + BARK_PUSH = `https://api.day.app/${process.env.BARK_PUSH}` + } + if (process.env.BARK_SOUND) { + BARK_SOUND = process.env.BARK_SOUND + } +} else { + if(BARK_PUSH && BARK_PUSH.indexOf('https') === -1 && BARK_PUSH.indexOf('http') === -1) { + //兼容BARK本地用户只填写设备码的情况 + BARK_PUSH = `https://api.day.app/${BARK_PUSH}` + } +} +if (process.env.TG_BOT_TOKEN) { + TG_BOT_TOKEN = process.env.TG_BOT_TOKEN; +} +if (process.env.TG_USER_ID) { + TG_USER_ID = process.env.TG_USER_ID; +} + +if (process.env.DD_BOT_TOKEN) { + DD_BOT_TOKEN = process.env.DD_BOT_TOKEN; + if (process.env.DD_BOT_SECRET) { + DD_BOT_SECRET = process.env.DD_BOT_SECRET; + } +} + +async function sendNotify(text, desp) { + //提供四种通知 + await serverNotify(text, desp); + await BarkNotify(text, desp); + await tgBotNotify(text, desp); + await ddBotNotify(text, desp); +} + +function serverNotify(text, desp) { + return new Promise(resolve => { + if (SCKEY) { + //微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换 + desp = desp.replace(/[\n\r]/g, '\n\n'); + const options = { + url: `https://sc.ftqq.com/${SCKEY}.send`, + body: `text=${text}&desp=${desp}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n发送通知调用API失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errno === 0) { + console.log('\nserver酱发送通知消息成功\n') + } else if (data.errno === 1024) { + console.log('\nPUSH_KEY 错误\n') + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供server酱的SCKEY,取消微信推送消息通知\n'); + resolve() + } + }) +} + +function BarkNotify(text, desp) { + return new Promise(resolve => { + if (BARK_PUSH) { + const options = { + url: `${BARK_PUSH}/${encodeURIComponent(text)}/${encodeURIComponent(desp)}?sound=${BARK_SOUND}`, + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log('\nBark APP发送通知调用API失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.code === 200) { + console.log('\nBark APP发送通知消息成功\n') + } else { + console.log(`\n${data.message}\n`); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }) + } else { + console.log('\n您未提供Bark的APP推送BARK_PUSH,取消Bark推送消息通知\n'); + resolve() + } + }) +} + +function tgBotNotify(text, desp) { + return new Promise(resolve => { + if (TG_BOT_TOKEN && TG_USER_ID) { + const options = { + url: `https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage`, + body: `chat_id=${TG_USER_ID}&text=${text}\n\n${desp}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\ntelegram发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.ok) { + console.log('\nTelegram发送通知消息完成。\n') + } else if (data.error_code === 400) { + console.log('\n请主动给bot发送一条消息并检查接收用户ID是否正确。\n') + } else if (data.error_code === 401){ + console.log('\nTelegram bot token 填写错误。\n') + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供telegram机器人推送所需的TG_BOT_TOKEN和TG_USER_ID,取消telegram推送消息通知\n'); + resolve() + } + }) +} +function ddBotNotify(text, desp) { + return new Promise(resolve => { + const options = { + url: `https://oapi.dingtalk.com/robot/send?access_token=${DD_BOT_TOKEN}`, + json: { + "msgtype": "text", + "text": { + "content": ` ${text}\n\n${desp}` + } + }, + headers: { + 'Content-Type': 'application/json' + } + } + if (DD_BOT_TOKEN && DD_BOT_SECRET) { + const crypto = require('crypto'); + const dateNow = Date.now(); + const hmac = crypto.createHmac('sha256', DD_BOT_SECRET); + hmac.update(`${dateNow}\n${DD_BOT_SECRET}`); + const result = encodeURIComponent(hmac.digest('base64')); + options.url = `${options.url}×tamp=${dateNow}&sign=${result}`; + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n钉钉发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errcode === 0) { + console.log('\n钉钉发送通知消息完成。\n') + } else { + console.log(`\n${data.errmsg}\n`) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else if (DD_BOT_TOKEN) { + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n钉钉发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errcode === 0) { + console.log('\n钉钉发送通知消息完成。\n') + } else { + console.log(`\n${data.errmsg}\n`) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供钉钉机器人推送所需的DD_BOT_TOKEN或者DD_BOT_SECRET,取消钉钉推送消息通知\n'); + resolve() + } + }) +} +module.exports = { + sendNotify, + BarkNotify, + SCKEY, + BARK_PUSH, + TG_BOT_TOKEN, + TG_USER_ID, + DD_BOT_TOKEN, +}//这里导出SCKEY,BARK_PUSH等通知参数是jd_bean_sign.js处需要 +// prettier-ignore +function Env(t,s){return new class{constructor(t,s){this.name=t,this.data=null,this.dataFile="box.dat",this.logs=[],this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,s),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}getScript(t){return new Promise(s=>{$.get({url:t},(t,e,i)=>s(i))})}runScript(t,s){return new Promise(e=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=s&&s.timeout?s.timeout:o;const[h,a]=i.split("@"),r={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":h,Accept:"*/*"}};$.post(r,(t,s,i)=>e(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s);if(!e&&!i)return{};{const i=e?t:s;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s),o=JSON.stringify(this.data);e?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(s,o):this.fs.writeFileSync(t,o)}}lodash_get(t,s,e){const i=s.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return e;return o}lodash_set(t,s,e){return Object(t)!==t?t:(Array.isArray(s)||(s=s.toString().match(/[^.[\]]+/g)||[]),s.slice(0,-1).reduce((t,e,i)=>Object(t[e])===t[e]?t[e]:t[e]=Math.abs(s[i+1])>>0==+s[i+1]?[]:{},t)[s[s.length-1]]=e,t)}getdata(t){let s=this.getval(t);if(/^@/.test(t)){const[,e,i]=/^@(.*?)\.(.*?)$/.exec(t),o=e?this.getval(e):"";if(o)try{const t=JSON.parse(o);s=t?this.lodash_get(t,i,""):s}catch(t){s=""}}return s}setdata(t,s){let e=!1;if(/^@/.test(s)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(s),h=this.getval(i),a=i?"null"===h?null:h||"{}":"{}";try{const s=JSON.parse(a);this.lodash_set(s,o,t),e=this.setval(JSON.stringify(s),i)}catch(s){const h={};this.lodash_set(h,o,t),e=this.setval(JSON.stringify(h),i)}}else e=$.setval(t,s);return e}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,s){return this.isSurge()||this.isLoon()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):this.isNode()?(this.data=this.loaddata(),this.data[s]=t,this.writedata(),!0):this.data&&this.data[s]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,s=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?$httpClient.get(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,s)=>{try{const e=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(e,null),s.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)))}post(t,s=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),delete t.headers["Content-Length"],this.isSurge()||this.isLoon())$httpClient.post(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)});else if(this.isQuanX())t.method="POST",$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t));else if(this.isNode()){this.initGotEnv(t);const{url:e,...i}=t;this.got.post(e,i).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t))}}time(t){let s={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in s)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?s[e]:("00"+s[e]).substr((""+s[e]).length)));return t}msg(s=t,e="",i="",o){const h=t=>!t||!this.isLoon()&&this.isSurge()?t:"string"==typeof t?this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0:"object"==typeof t&&(t["open-url"]||t["media-url"])?this.isLoon()?t["open-url"]:this.isQuanX()?t:void 0:void 0;$.isMute||(this.isSurge()||this.isLoon()?$notification.post(s,e,i,h(o)):this.isQuanX()&&$notify(s,e,i,h(o))),this.logs.push("","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="),this.logs.push(s),e&&this.logs.push(e),i&&this.logs.push(i)}log(...t){t.length>0?this.logs=[...this.logs,...t]:console.log(this.logs.join(this.logSeparator))}logErr(t,s){const e=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();e?$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(s=>setTimeout(s,t))}done(t={}){const s=(new Date).getTime(),e=(s-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,s)} \ No newline at end of file diff --git a/Task/ttwkziye.js b/Task/ttwkziye.js new file mode 100644 index 000000000..4be9d0546 --- /dev/null +++ b/Task/ttwkziye.js @@ -0,0 +1,220 @@ +/*ZIYE 感谢 Sunert 大佬的原js 天天挖矿 + + +js制作时间:2020-10-20 + +https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js + +本脚本仅适用支付宝小程序天天挖矿,支持Actions多账号运行 +获取Cookie方法: +1.将下方[rewrite_local]和[MITM]地址复制的相应的区域下 +2.打开小程序,获取收益cookie,点击挖矿获取签到Cookie,获取后请注释或禁用Cookie +3.挖矿获取Cookie,已经挖矿无法获取 + + +QX 1.0.6+ : +[task_local] +#支付宝天天挖矿 +0 9 * * * https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js +[rewrite_local] +https:\/\/operation-api\.jimistore\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js + +~~~~~~~~~~~~~~~~ + +Loon 2.1.0+ +[Script] +#支付宝天天挖矿 +cron "04 00 * * *" script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js, enabled=true, tag=支付宝天天挖矿 +http-request https:\/\/operation-api\.jimistore\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js + + + + +~~~~~~~~~~~~~~~~ +Surge 4.0 : +[Script] +支付宝天天挖矿 = type=cron,cronexp=35 5 0 * * *,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js,script-update-interval=0 + +支付宝天天挖矿 = type=http-request,pattern=https:\/\/operation-api\.jimistore\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/ttwkziye.js + + + +[MITM] +hostname = operation-api.jimistore.com +~~~~~~~~~~~~~~~~ +*/ + +const $ = new Env('支付宝天天挖矿')//js名字 支付宝天天挖矿 + + +const notify = $.isNode() ? require('./sendNotify') : ''; +let bodyArr = [],headerArr = [];//定义Secret设置 合集 + +if (isGetCookie = typeof $request !==`undefined`) { + GetCookie(); + $.done() //cookie获取判定 +} +//Secret合集循环方式判定,其中 ZFBWK_BODY ZFBWK_HEADER 为git仓库中的Secret合集等同于手机js的ck +if ($.isNode()) { + if (process.env.ZFBWK_BODY && process.env.ZFBWK_BODY.indexOf('#') > -1) { + wkbody = process.env.ZFBWK_BODY.split('#'); + console.log(`您选择的是用"#"隔开\n`) + } + else if (process.env.ZFBWK_BODY && process.env.ZFBWK_BODY.indexOf('\n') > -1) { + wkbody = process.env.ZFBWK_BODY.split('\n'); + console.log(`您选择的是用换行隔开\n`) + } else { + wkbody = process.env.ZFBWK_BODY.split() + }; + //判定读取Secret合集,赋值于bodyArr与headerArr + if (process.env.ZFBWK_HEADER && process.env.ZFBWK_HEADER.indexOf('#') > -1) { + wkheader = process.env.ZFBWK_HEADER.split('#'); + } + else if (process.env.ZFBWK_HEADER && process.env.ZFBWK_HEADER.split('\n').length > 0) { + wkheader = process.env.ZFBWK_HEADER.split('\n'); + } else { + wkheader = process.env.ZFBWK_HEADER.split() + }; + Object.keys(wkbody).forEach((item) => { + if (wkbody[item]) { + bodyArr.push(wkbody[item]) + } + }); + Object.keys(wkheader).forEach((item) => { + if (wkheader[item]) { + headerArr.push(wkheader[item]) + } + }); + console.log(`============ 脚本执行-国际标准时间(UTC):${new Date().toLocaleString()} =============\n`) + console.log(`============ 脚本执行-北京时间(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()} =============\n`) + } else { + bodyArr.push($.getdata('sy_body_wk'))//判定读取ck + headerArr.push($.getdata('sy_header_wk'))//判定读取ck +} + //异步运行 +!(async () => { + if (!bodyArr[0]) { + $.msg($.name, '【提示】请先获取支付宝天天挖矿一cookie') + return; + } + console.log(`------------- 共${bodyArr.length}个账号\n`) + for (let i = 0; i < bodyArr.length; i++) { + if (bodyArr[i]) { + bodyVal = bodyArr[i]; + headerVal = headerArr[i]; + $.index = i + 1; + console.log(`\n开始【天天挖矿${$.index}】`) + await getsign(); + if (headerVal !== undefined){ + await getsy(); + } else { + wksy = `【天天挖矿】❌ 未获取Cooiekie` + }; + $.msg($.name, wksign,wksy)//手机js通知项 wksign headerbag docard + if ($.isNode()) { + await notify.sendNotify($.name+ wksign,wksy)//git通知项 wksign headerbag docard + } + } + } +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()) + + + + + + + + +// Cookie获取 +function GetCookie() { +if ($request && $request.method != 'OPTIONS' && $request.url.match(/createSign/)) { + const signurlVal = $request.url + const bodyVal = $request.body + const headerVal = JSON.stringify($request.headers) + + //const signheaderVal = JSON.stringify($request.headers) + $.log(`bodyVal:${bodyVal}`) + if (bodyVal) $.setdata(bodyVal, 'sy_body_wk') + if (headerVal) $.setdata(headerVal, 'sy_header_wk') + $.msg($.name, `获取天天挖矿Cookie: 成功`, ``) + + + +} +} + + + +//天天挖矿 +function getsign() { + return new Promise((resolve, reject) =>{ + let signurl = { + url: `https://operation-api.jimistore.com/api/mining/v1/sign/createSign`, + headers: JSON.parse(headerVal),body: bodyVal + } + $.post(signurl, async(error, response, data) => { + let result = JSON.parse(data) + if (result.data.success == 'true'){ + wksign = '【天天挖矿】✅ 挖矿成功, 收益:'+result.amount/100+'元💰\n' + } + else if (result.data.success == 'false'){ + wksign = `【天天挖矿】 重复挖矿\n` + } + else if (result.code == 40101){ + wksign = `【天天挖矿】 挖矿失败, 原因:${result.message}\n` + } + else { + wksign = `【天天挖矿】 挖矿失败, 原因:`+result.errmsg + $.msg($.name, wksign, ``) + if ($.isNode()) { + await notify.sendNotify($.name, wksign) + }//git通知项 + return + } + resolve() + }) + }) +} + + + + + + + +//天天挖矿收益 +function getsy() { + return new Promise((resolve, reject) =>{ + let syurl = { + url: `https://operation-api.jimistore.com/api/mining/v1/sign/showSignInfo`, + headers: JSON.parse(headerVal) + } + $.post(syurl, async(error, response, data) => { + let result = JSON.parse(data) + if (result.code == 200){ + wksy = '【挖矿收益】账户总收益:'+result.data.cumulativeMoney/100+`元💰\n【挖矿记录】连续挖矿${result.data.numberInRounds}天,总计挖矿${result.data.cumulativeSignCount}天\n` + } + + else if (result.code == 40101){ + wksy = `【挖矿收益】 挖矿失败, 原因:${result.message}\n` + } + + else { + wksy = `【挖矿收益】 挖矿失败, 原因:`+result.errmsg + $.msg($.name, wksy, ``) + if ($.isNode()) { + await notify.sendNotify($.name, wksy) + }//git通知项 + return + } + resolve() + }) + }) +} + + + + +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/Task/zqdkgit.js b/Task/zqdkgit.js new file mode 100644 index 000000000..66dc0d9b6 --- /dev/null +++ b/Task/zqdkgit.js @@ -0,0 +1,221 @@ + + + + +const $ = new Env("早起打卡") +const jsname="早起打卡" +let notifyInterval=1 +const dkurl = 'https://ph0001.hezyq.com/app/index.php?i=597&t=0&v=1.0.2&from=wxapp&c=entry&a=wxapp&do=distribute&m=bh_rising&sign=2b18eebf989b3a26a9ca677492b74724&action=today&contr=index&token=8ddce1ace72e7b6ac0e8befd789a69be&version=2.0.34 +' + + +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + all() +} + + + + +function GetCookie() { +if ($request && $request.url.match(/i=597&/)) +if ($request && $request.url.match(/action=today&contr=index/)) + { + const dkurl = $request.url + sy.log(`dkurl:${dkurl}`) + if (dkurl) sy.setdata(dkurl, dkurlkey) + sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) +} + +} + + + + + +function all() + + { + + for(var i=0;i<3;i++) + { (function(i) { + setTimeout(function() { + + if(i==0) dktj(i); +else if(i==1) dkxj(i); +else if(i==2) showmsg(i); +}, (i + 1) * 1000); + })(i) + + +}} + + + + + +//统计 + +function dktj() { +return new Promise((resolve, reject) => { + + const Tjurl = { + url: dkurl + }; + $.get(Tjurl,(error, response, data) =>{ + if(logs)$.log(`${jsname}1统计 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ +"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" + }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" + + + + + +cstj1(obj.info.today.clock); + + + + resolve() + }) + }) + } + + +//次数统计 + + +function cstj1(tjtj) +{ +if (tjtj { + + const Xjurl = { + url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) + }; + $.get(Xjurl,(error, response, data) =>{ + if(logs)$.log(`${jsname}1现金 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1) { + + + + + tz +="💵现金余额"+ +obj.info.member.money+"元"+"\n" + + } + + else tz +=sb+"\n"; + + +xjtj1(obj.info.member.money); + + + + resolve() + }) + }) + } + + + + +//自动提现 + +function dktx() { +return new Promise((resolve, reject) => { + + const Txurl = { + url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) + }; + $.get(Txurl,(error, response, data) =>{ + if(logs)$.log(`${jsname}1提现 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1) { + +tz +='提现成功,成功提现'+xj+'元'+"\n" + + } + +if(obj.status == 2) { + +tz +='提现失败,原因:'+obj.info+"\n" + + } + + + + + resolve() + }) + }) + } + + + +//现金统计 + + +function xjtj1(tjtj) +{ +if (tjtj>=xj) +dktx() + +} + + + +//打卡 +function dkdk() { +return new Promise((resolve, reject) => { + + const Dkurl = { + url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) + }; + $.get(Dkurl,(error, response, data) =>{ + if(logs)$.log(`${jsname}1打卡- data: ${data}`) + obj = JSON.parse(data) + + if (obj.status==1){ +tz+='[️打卡任务]:'+'打卡次数+1'+'\n' + + } +else tz +=obj.info+'\n' + + + resolve() + }) + }) + } + + +async function showmsg() { + +console.log(tz) + +if (notifyInterval==1) +$.msg(jsname,'',tz) +} + + + + + + + + + +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/asdkziye.js b/asdkziye.js deleted file mode 100644 index a9b6a46f5..000000000 --- a/asdkziye.js +++ /dev/null @@ -1,338 +0,0 @@ -/*ziye爱尚打卡 - -非常重要!!! - -微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/asdkziye.png 进入小程序,登录获取授权,再启动软件获取ck -建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 - - - -《《《《《《《《《《制作其他打卡js的说明 - -抓包小程序,然后替换以下内容来制作其他打卡js, -需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 - -ph0001.hezyq.com -爱尚打卡 -cs = 20 -xj = 1 -asdkurl -i=971 -asdk - -手动替换 -ph0001\.hezyq\.com - -制作其他打卡js的说明》》》》》》》》》》》 - - - - - - -////////////////////////////////////////正文 - - -使用说明: -一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/asdkziye.png 进入小程序,登录获取授权 - -二,然后将hostname复制粘贴进配置文件 - -三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 - -功能如下: -1.每日打卡,设置了开关,完成任务不再打卡 -2.打卡币统计, -3.现金统计,自动提现 - - - - - -hostname= ph0001.hezyq.com, - -//surge -爱尚打卡 = type=http-request,pattern=^https:\/\/ph0001\.hezyq\.com\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/asdkziye.js - -//圈x -https:\/\/ph0001\.hezyq\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/asdkziye.js - -//loon -http-request ^https:\/\/ph0001\.hezyq\.com\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/asdkziye.js -, requires-body=true, timeout=10, tag=爱尚打卡 - - -*/ - - - -const sy = init()//声明必须 -const notifyInterval = 1; //通知开为1,常关为0 -const logs = 0; // 日志开关 -const jsname = '爱尚打卡' -const jbid =1 -const sb='失败,请先关闭,进入程序获取授权' - -const cs = 20;//小程序打卡次数 -const xj = 1;//提现标准 -var tz='' - -const dkurlkey = 'asdkurl'+jbid -const dkurl = sy.getdata(dkurlkey) - - -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - all() -} - - - -function GetCookie() { -if ($request && $request.url.match(/i=971&/)) -if ($request && $request.url.match(/action=today&contr=index/)) - { - const dkurl = $request.url - sy.log(`dkurl:${dkurl}`) - if (dkurl) sy.setdata(dkurl, dkurlkey) - sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) -} - -} - - -//异步运行 - - -function all() - - { - - for(var i=0;i<3;i++) - { (function(i) { - setTimeout(function() { - - if(i==0) dktj(i); -else if(i==1) dkxj(i); -else if(i==2) showmsg(i); -}, (i + 1) * 1000); - })(i) - - -}} - - - - -//统计 - -function dktj() { -return new Promise((resolve, reject) => { - - const Tjurl = { - url: dkurl - }; - sy.get(Tjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1统计 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ -"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - - - - - -cstj1(obj.info.today.clock); - - - - resolve() - }) - }) - } - - -//次数统计 - - -function cstj1(tjtj) -{ -if (tjtj { - - const Xjurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) - }; - sy.get(Xjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1现金 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - - - - - tz +="💵现金余额"+ -obj.info.member.money+"元"+"\n" - - } - - else tz +=sb+"\n"; - - -xjtj1(obj.info.member.money); - - - - resolve() - }) - }) - } - - - - -//自动提现 - -function dktx() { -return new Promise((resolve, reject) => { - - const Txurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) - }; - sy.get(Txurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1提现 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - -tz +='提现成功,成功提现'+xj+'元'+"\n" - - } - -if(obj.status == 2) { - -tz +='提现失败,原因:'+obj.info+"\n" - - } - - - - - resolve() - }) - }) - } - - - -//现金统计 - - -function xjtj1(tjtj) -{ -if (tjtj>=xj) -dktx() - -} - - - -//打卡 -function dkdk() { -return new Promise((resolve, reject) => { - - const Dkurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) - }; - sy.get(Dkurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1打卡- data: ${data}`) - obj = JSON.parse(data) - - if (obj.status==1){ -tz+='[️打卡任务]:'+'打卡次数+1'+'\n' - - } -else tz +=obj.info+'\n' - - - resolve() - }) - }) - } - - -function showmsg() { - -console.log(tz) - -if (notifyInterval==1) -sy.msg(jsname,'',tz) -} - - -function init() { - isSurge = () => { - return undefined !== this.$httpClient - } - isQuanX = () => { - return undefined !== this.$task - } - getdata = (key) => { - if (isSurge()) return $persistentStore.read(key) - if (isQuanX()) return $prefs.valueForKey(key) - } - setdata = (key, val) => { - if (isSurge()) return $persistentStore.write(key, val) - if (isQuanX()) return $prefs.setValueForKey(key, val) - } - msg = (title, subtitle = '', body = '') => { - if (isSurge()) $notification.post(title, subtitle, body) - if (isQuanX()) $notify(title, subtitle, body) - } - log = (msg) => { - console.log(`${msg}\n`) - } - get = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'GET' - return $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) return $httpClient.get(options, callback) - } - post = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'POST' - $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) $httpClient.post(options, callback) - } - done = (value = {}) => { - $done(value) - } - return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } -} diff --git a/asdkziye.png b/asdkziye.png deleted file mode 100644 index 804647d8e..000000000 Binary files a/asdkziye.png and /dev/null differ diff --git a/diqudaima.txt b/diqudaima.txt new file mode 100644 index 000000000..69701d7d5 --- /dev/null +++ b/diqudaima.txt @@ -0,0 +1,3522 @@ + 全国地区代码,自己用浏览器搜索文字 + + + 110000 北京市 + 110100 市辖区 + 110101 东城区 + 110102 西城区 + 110103 崇文区 + 110104 宣武区 + 110105 朝阳区 + 110106 丰台区 + 110107 石景山区 + 110108 海淀区 + 110109 门头沟区 + 110111 房山区 + 110112 通州区 + 110113 顺义区 + 110114 昌平区 + 110115 大兴区 + 110116 怀柔区 + 110117 平谷区 + 110200 县 + 110228 密云县 + 110229 延庆县 + 120000 天津市 + 120100 市辖区 + 120101 和平区 + 120102 河东区 + 120103 河西区 + 120104 南开区 + 120105 河北区 + 120106 红桥区 + 120107 塘沽区 + 120108 汉沽区 + 120109 大港区 + 120110 东丽区 + 120111 西青区 + 120112 津南区 + 120113 北辰区 + 120114 武清区 + 120115 宝坻区 + 120200 县 + 120221 宁河县 + 120223 静海县 + 120225 蓟县 + 130000 河北省 + 130100 石家庄市 + 130101 市辖区 + 130102 长安区 + 130103 桥东区 + 130104 桥西区 + 130105 新华区 + 130107 井陉矿区 + 130108 裕华区 + 130121 井陉县 + 130123 正定县 + 130124 栾城县 + 130125 行唐县 + 130126 灵寿县 + 130127 高邑县 + 130128 深泽县 + 130129 赞皇县 + 130130 无极县 + 130131 平山县 + 130132 元氏县 + 130133 赵县 + 130181 辛集市 + 130182 藁城市 + 130183 晋州市 + 130184 新乐市 + 130185 鹿泉市 + 130200 唐山市 + 130201 市辖区 + 130202 路南区 + 130203 路北区 + 130204 古冶区 + 130205 开平区 + 130207 丰南区 + 130208 丰润区 + 130223 滦县 + 130224 滦南县 + 130225 乐亭县 + 130227 迁西县 + 130229 玉田县 + 130230 唐海县 + 130281 遵化市 + 130283 迁安市 + 130300 秦皇岛市 + 130301 市辖区 + 130302 海港区 + 130303 山海关区 + 130304 北戴河区 + 130321 青龙满族自治县 + 130322 昌黎县 + 130323 抚宁县 + 130324 卢龙县 + 130400 邯郸市 + 130401 市辖区 + 130402 邯山区 + 130403 丛台区 + 130404 复兴区 + 130406 峰峰矿区 + 130421 邯郸县 + 130423 临漳县 + 130424 成安县 + 130425 大名县 + 130426 涉县 + 130427 磁县 + 130428 肥乡县 + 130429 永年县 + 130430 邱县 + 130431 鸡泽县 + 130432 广平县 + 130433 馆陶县 + 130434 魏县 + 130435 曲周县 + 130481 武安市 + 130500 邢台市 + 130501 市辖区 + 130502 桥东区 + 130503 桥西区 + 130521 邢台县 + 130522 临城县 + 130523 内丘县 + 130524 柏乡县 + 130525 隆尧县 + 130526 任县 + 130527 南和县 + 130528 宁晋县 + 130529 巨鹿县 + 130530 新河县 + 130531 广宗县 + 130532 平乡县 + 130533 威县 + 130534 清河县 + 130535 临西县 + 130581 南宫市 + 130582 沙河市 + 130600 保定市 + 130601 市辖区 + 130602 新市区 + 130603 北市区 + 130604 南市区 + 130621 满城县 + 130622 清苑县 + 130623 涞水县 + 130624 阜平县 + 130625 徐水县 + 130626 定兴县 + 130627 唐县 + 130628 高阳县 + 130629 容城县 + 130630 涞源县 + 130631 望都县 + 130632 安新县 + 130634 曲阳县 + 130635 蠡县 + 130636 顺平县 + 130637 博野县 + 130638 雄县 + 130681 涿州市 + 130682 定州市 + 130683 安国市 + 130684 高碑店市 + 130700 张家口市 + 130701 市辖区 + 130702 桥东区 + 130703 桥西区 + 130705 宣化区 + 130706 下花园区 + 130721 宣化县 + 130722 张北县 + 130723 康保县 + 130724 沽源县 + 130725 尚义县 + 130726 蔚县 + 130727 阳原县 + 130728 怀安县 + 130729 万全县 + 130730 怀来县 + 130731 涿鹿县 + 130732 赤城县 + 130733 崇礼县 + 130800 承德市 + 130801 市辖区 + 130802 双桥区 + 130803 双滦区 + 130804 鹰手营子矿区 + 130821 承德县 + 130822 兴隆县 + 130823 平泉县 + 130824 滦平县 + 130825 隆化县 + 130826 丰宁满族自治县 + 130827 宽城满族自治县 + 130828 围场满族蒙古族自治县 + 130900 沧州市 + 130901 市辖区 + 130902 新华区 + 130903 运河区 + 130921 沧县 + 130922 青县 + 130923 东光县 + 130924 海兴县 + 130925 盐山县 + 130926 肃宁县 + 130927 南皮县 + 130928 吴桥县 + 130929 献县 + 130930 孟村回族自治县 + 130981 泊头市 + 130982 任丘市 + 130983 黄骅市 + 130984 河间市 + 131000 廊坊市 + 131001 市辖区 + 131002 安次区 + 131003 广阳区 + 131022 固安县 + 131023 永清县 + 131024 香河县 + 131025 大城县 + 131026 文安县 + 131028 大厂回族自治县 + 131081 霸州市 + 131082 三河市 + 131100 衡水市 + 131101 市辖区 + 131102 桃城区 + 131121 枣强县 + 131122 武邑县 + 131123 武强县 + 131124 饶阳县 + 131125 安平县 + 131126 故城县 + 131127 景县 + 131128 阜城县 + 131181 冀州市 + 131182 深州市 + 140000 山西省 + 140100 太原市 + 140101 市辖区 + 140105 小店区 + 140106 迎泽区 + 140107 杏花岭区 + 140108 尖草坪区 + 140109 万柏林区 + 140110 晋源区 + 140121 清徐县 + 140122 阳曲县 + 140123 娄烦县 + 140181 古交市 + 140200 大同市 + 140201 市辖区 + 140202 城区 + 140203 矿区 + 140211 南郊区 + 140212 新荣区 + 140221 阳高县 + 140222 天镇县 + 140223 广灵县 + 140224 灵丘县 + 140225 浑源县 + 140226 左云县 + 140227 大同县 + 140300 阳泉市 + 140301 市辖区 + 140302 城区 + 140303 矿区 + 140311 郊区 + 140321 平定县 + 140322 盂县 + 140400 长治市 + 140401 市辖区 + 140402 城区 + 140411 郊区 + 140421 长治县 + 140423 襄垣县 + 140424 屯留县 + 140425 平顺县 + 140426 黎城县 + 140427 壶关县 + 140428 长子县 + 140429 武乡县 + 140430 沁县 + 140431 沁源县 + 140481 潞城市 + 140500 晋城市 + 140501 市辖区 + 140502 城区 + 140521 沁水县 + 140522 阳城县 + 140524 陵川县 + 140525 泽州县 + 140581 高平市 + 140600 朔州市 + 140601 市辖区 + 140602 朔城区 + 140603 平鲁区 + 140621 山阴县 + 140622 应县 + 140623 右玉县 + 140624 怀仁县 + 140700 晋中市 + 140701 市辖区 + 140702 榆次区 + 140721 榆社县 + 140722 左权县 + 140723 和顺县 + 140724 昔阳县 + 140725 寿阳县 + 140726 太谷县 + 140727 祁县 + 140728 平遥县 + 140729 灵石县 + 140781 介休市 + 140800 运城市 + 140801 市辖区 + 140802 盐湖区 + 140821 临猗县 + 140822 万荣县 + 140823 闻喜县 + 140824 稷山县 + 140825 新绛县 + 140826 绛县 + 140827 垣曲县 + 140828 夏县 + 140829 平陆县 + 140830 芮城县 + 140881 永济市 + 140882 河津市 + 140900 忻州市 + 140901 市辖区 + 140902 忻府区 + 140921 定襄县 + 140922 五台县 + 140923 代县 + 140924 繁峙县 + 140925 宁武县 + 140926 静乐县 + 140927 神池县 + 140928 五寨县 + 140929 岢岚县 + 140930 河曲县 + 140931 保德县 + 140932 偏关县 + 140981 原平市 + 141000 临汾市 + 141001 市辖区 + 141002 尧都区 + 141021 曲沃县 + 141022 翼城县 + 141023 襄汾县 + 141024 洪洞县 + 141025 古县 + 141026 安泽县 + 141027 浮山县 + 141028 吉县 + 141029 乡宁县 + 141030 大宁县 + 141031 隰县 + 141032 永和县 + 141033 蒲县 + 141034 汾西县 + 141081 侯马市 + 141082 霍州市 + 141100 吕梁市 + 141101 市辖区 + 141102 离石区 + 141121 文水县 + 141122 交城县 + 141123 兴县 + 141124 临县 + 141125 柳林县 + 141126 石楼县 + 141127 岚县 + 141128 方山县 + 141129 中阳县 + 141130 交口县 + 141181 孝义市 + 141182 汾阳市 + 150000 内蒙古自治区 + 150100 呼和浩特市 + 150101 市辖区 + 150102 新城区 + 150103 回民区 + 150104 玉泉区 + 150105 赛罕区 + 150121 土默特左旗 + 150122 托克托县 + 150123 和林格尔县 + 150124 清水河县 + 150125 武川县 + 150200 包头市 + 150201 市辖区 + 150202 东河区 + 150203 昆都仑区 + 150204 青山区 + 150205 石拐区 + 150206 白云矿区 + 150207 九原区 + 150221 土默特右旗合旗 + 150222 固阳县 + 150223 达尔罕茂明安联 + 150300 乌海市 + 150301 市辖区 + 150302 海勃湾区 + 150303 海南区 + 150304 乌达区 + 150400 赤峰市 + 150401 市辖区 + 150402 红山区 + 150403 元宝山区 + 150404 松山区 + 150421 阿鲁科尔沁旗 + 150422 巴林左旗 + 150423 巴林右旗 + 150424 林西县 + 150425 克什克腾旗 + 150426 翁牛特旗 + 150428 喀喇沁旗 + 150429 宁城县 + 150430 敖汉旗 + 150500 通辽市 + 150501 市辖区 + 150502 科尔沁区 + 150521 科尔沁左翼中旗 + 150522 科尔沁左翼后旗 + 150523 开鲁县 + 150524 库伦旗 + 150525 奈曼旗 + 150526 扎鲁特旗 + 150581 霍林郭勒市 + 150600 鄂尔多斯市 + 150602 东胜区 + 150621 达拉特旗 + 150622 准格尔旗 + 150623 鄂托克前旗 + 150624 鄂托克旗 + 150625 杭锦旗 + 150626 乌审旗 + 150627 伊金霍洛旗 + 150700 呼伦贝尔市 + 150701 市辖区 + 150702 海拉尔区族自治旗 + 150721 阿荣旗 + 150722 莫力达瓦达斡尔 + 150723 鄂伦春自治旗 + 150724 鄂温克族自治旗 + 150725 陈巴尔虎旗 + 150726 新巴尔虎左旗 + 150727 新巴尔虎右旗 + 150781 满洲里市 + 150782 牙克石市 + 150783 扎兰屯市 + 150784 额尔古纳市 + 150785 根河市 + 150800 巴彦淖尔市 + 150801 市辖区 + 150802 临河区 + 150821 五原县 + 150822 磴口县 + 150823 乌拉特前旗 + 150824 乌拉特中旗 + 150825 乌拉特后旗 + 150826 杭锦后旗 + 150900 乌兰察布市 + 150901 市辖区 + 150902 集宁区 + 150921 卓资县 + 150922 化德县 + 150923 商都县 + 150924 兴和县 + 150925 凉城县 + 150926 察哈尔右翼前 + 150927 察哈尔右翼中旗 + 150928 察哈尔右翼后 + 150929 四子王旗 + 150981 丰镇市 + 152200 兴安盟 + 152201 乌兰浩特市 + 152202 阿尔山市 + 152221 科尔沁右翼前旗 + 152222 科尔沁右翼中旗 + 152223 扎赉特旗 + 152224 突泉县 + 152500 锡林郭勒盟 + 152501 二连浩特市 + 152502 锡林浩特市 + 152522 阿巴嘎旗 + 152523 苏尼特左旗 + 152524 苏尼特右旗 + 152525 东乌珠穆沁旗 + 152526 西乌珠穆沁旗 + 152527 太仆寺旗 + 152528 镶黄旗 + 152529 正镶白旗 + 152530 正蓝旗 + 152531 多伦县 + 152600 乌兰察布盟 + 152900 阿拉善盟 + 152921 阿拉善左旗 + 152922 阿拉善右旗 + 152923 额济纳旗 + 210000 辽宁省 + 210100 沈阳市 + 210101 市辖区 + 210102 和平区 + 210103 沈河区 + 210104 大东区 + 210105 皇姑区 + 210106 铁西区 + 210111 苏家屯区 + 210112 东陵区 + 210113 新城子区 + 210114 于洪区 + 210122 辽中县 + 210123 康平县 + 210124 法库县 + 210181 新民市 + 210200 大连市 + 210201 市辖区 + 210202 中山区 + 210203 西岗区 + 210204 沙河口区 + 210211 甘井子区 + 210212 旅顺口区 + 210213 金州区 + 210224 长海县 + 210281 瓦房店市 + 210282 普兰店市 + 210283 庄河市 + 210300 鞍山市 + 210301 市辖区 + 210302 铁东区 + 210303 铁西区 + 210304 立山区 + 210311 千山区 + 210321 台安县 + 210323 岫岩满族自治县 + 210381 海城市 + 210400 抚顺市 + 210401 市辖区 + 210402 新抚区 + 210403 东洲区 + 210404 望花区 + 210411 顺城区 + 210421 抚顺县 + 210422 新宾满族自治县 + 210423 清原满族自治县 + 210500 本溪市 + 210501 市辖区 + 210502 平山区 + 210503 溪湖区 + 210504 明山区 + 210505 南芬区 + 210521 本溪满族自治县 + 210522 桓仁满族自治县 + 210600 丹东市 + 210601 市辖区 + 210602 元宝区 + 210603 振兴区 + 210604 振安区 + 210624 宽甸满族自治县 + 210681 东港市 + 210682 凤城市 + 210700 锦州市 + 210701 市辖区 + 210702 古塔区 + 210703 凌河区 + 210711 太和区 + 210726 黑山县 + 210727 义县 + 210781 凌海市 + 210782 北宁市 + 210800 营口市 + 210801 市辖区 + 210802 站前区 + 210803 西市区 + 210804 鲅鱼圈区 + 210811 老边区 + 210881 盖州市 + 210882 大石桥市 + 210900 阜新市 + 210901 市辖区 + 210902 海州区 + 210903 新邱区 + 210904 太平区 + 210905 清河门区 + 210911 细河区 + 210921 阜新蒙古族自治县 + 210922 彰武县 + 211000 辽阳市 + 211001 市辖区 + 211002 白塔区 + 211003 文圣区 + 211004 宏伟区 + 211005 弓长岭区 + 211011 太子河区 + 211021 辽阳县 + 211081 灯塔市 + 211100 盘锦市 + 211101 市辖区 + 211102 双台子区 + 211103 兴隆台区 + 211121 大洼县 + 211122 盘山县 + 211200 铁岭市 + 211201 市辖区 + 211202 银州区 + 211204 清河区 + 211221 铁岭县 + 211223 西丰县 + 211224 昌图县 + 211281 调兵山市 + 211282 开原市 + 211300 朝阳市 + 211301 市辖区 + 211302 双塔区 + 211303 龙城区 + 211321 朝阳县 + 211322 建平县 + 211324 喀喇沁左翼蒙古族自治县 + 211381 北票市 + 211382 凌源市 + 211400 葫芦岛市 + 211401 市辖区 + 211402 连山区 + 211403 龙港区 + 211404 南票区 + 211421 绥中县 + 211422 建昌县 + 211481 兴城市 + 220000 吉林省 + 220100 长春市 + 220101 市辖区 + 220102 南关区 + 220103 宽城区 + 220104 朝阳区 + 220105 二道区 + 220106 绿园区 + 220112 双阳区 + 220122 农安县 + 220181 九台市 + 220182 榆树市 + 220183 德惠市 + 220200 吉林市 + 220201 市辖区 + 220202 昌邑区 + 220203 龙潭区 + 220204 船营区 + 220211 丰满区 + 220221 永吉县 + 220281 蛟河市 + 220282 桦甸市 + 220283 舒兰市 + 220284 磐石市 + 220300 四平市 + 220301 市辖区 + 220302 铁西区 + 220303 铁东区 + 220322 梨树县 + 220323 伊通满族自治县 + 220381 公主岭市 + 220382 双辽市 + 220400 辽源市 + 220401 市辖区 + 220402 龙山区 + 220403 西安区 + 220421 东丰县 + 220422 东辽县 + 220500 通化市 + 220501 市辖区 + 220502 东昌区 + 220503 二道江区 + 220521 通化县 + 220523 辉南县 + 220524 柳河县 + 220581 梅河口市 + 220582 集安市 + 220600 白山市 + 220601 市辖区 + 220602 八道江区 + 220621 抚松县 + 220622 靖宇县 + 220623 长白朝鲜族自治县 + 220625 江源县 + 220681 临江市 + 220700 松原市 + 220701 市辖区 + 220702 宁江区 + 220721 前郭尔罗斯蒙古族自治县 + 220722 长岭县 + 220723 乾安县 + 220724 扶余县 + 220800 白城市 + 220801 市辖区 + 220802 洮北区 + 220821 镇赉县 + 220822 通榆县 + 220881 洮南市 + 220882 大安市 + 222400 延边朝鲜族自治州 + 222401 延吉市 + 222402 图们市 + 222403 敦化市 + 222404 珲春市 + 222405 龙井市 + 222406 和龙市 + 222424 汪清县 + 222426 安图县 + 230000 黑龙江省 + 230100 哈尔滨市 + 230101 市辖区 + 230102 道里区 + 230103 南岗区 + 230104 道外区 + 230105 太平区 + 230106 香坊区 + 230107 动力区 + 230108 平房区 + 230121 呼兰县 + 230123 依兰县 + 230124 方正县 + 230125 宾县 + 230126 巴彦县 + 230127 木兰县 + 230128 通河县 + 230129 延寿县 + 230181 阿城市 + 230182 双城市 + 230183 尚志市 + 230184 五常市 + 230200 齐齐哈尔市 + 230201 市辖区 + 230202 龙沙区 + 230203 建华区 + 230204 铁锋区 + 230205 昂昂溪区 + 230206 富拉尔基区 + 230207 碾子山区 + 230208 梅里斯达斡尔族区 + 230221 龙江县 + 230223 依安县 + 230224 泰来县 + 230225 甘南县 + 230227 富裕县 + 230229 克山县 + 230230 克东县 + 230231 拜泉县 + 230281 讷河市 + 230300 鸡西市 + 230301 市辖区 + 230302 鸡冠区 + 230303 恒山区 + 230304 滴道区 + 230305 梨树区 + 230306 城子河区 + 230307 麻山区 + 230321 鸡东县 + 230381 虎林市 + 230382 密山市 + 230400 鹤岗市 + 230401 市辖区 + 230402 向阳区 + 230403 工农区 + 230404 南山区 + 230405 兴安区 + 230406 东山区 + 230407 兴山区 + 230421 萝北县 + 230422 绥滨县 + 230500 双鸭山市 + 230501 市辖区 + 230502 尖山区 + 230503 岭东区 + 230505 四方台区 + 230506 宝山区 + 230521 集贤县 + 230522 友谊县 + 230523 宝清县 + 230524 饶河县 + 230600 大庆市 + 230601 市辖区 + 230602 萨尔图区 + 230603 龙凤区 + 230604 让胡路区 + 230605 红岗区 + 230606 大同区 + 230621 肇州县 + 230622 肇源县 + 230623 林甸县 + 230624 杜尔伯特蒙古族自治县 + 230700 伊春市 + 230701 市辖区 + 230702 伊春区 + 230703 南岔区 + 230704 友好区 + 230705 西林区 + 230706 翠峦区 + 230707 新青区 + 230708 美溪区 + 230709 金山屯区 + 230710 五营区 + 230711 乌马河区 + 230712 汤旺河区 + 230713 带岭区 + 230714 乌伊岭区 + 230715 红星区 + 230716 上甘岭区 + 230722 嘉荫县 + 230781 铁力市 + 230800 佳木斯市 + 230801 市辖区 + 230802 永红区 + 230803 向阳区 + 230804 前进区 + 230805 东风区 + 230811 郊区 + 230822 桦南县 + 230826 桦川县 + 230828 汤原县 + 230833 抚远县 + 230881 同江市 + 230882 富锦市 + 230900 七台河市 + 230901 市辖区 + 230902 新兴区 + 230903 桃山区 + 230904 茄子河区 + 230921 勃利县 + 231000 牡丹江市 + 231001 市辖区 + 231002 东安区 + 231003 阳明区 + 231004 爱民区 + 231005 西安区 + 231024 东宁县 + 231025 林口县 + 231081 绥芬河市 + 231083 海林市 + 231084 宁安市 + 231085 穆棱市 + 231100 黑河市 + 231101 市辖区 + 231102 爱辉区 + 231121 嫩江县 + 231123 逊克县 + 231124 孙吴县 + 231181 北安市 + 231182 五大连池市 + 231200 绥化市 + 231201 市辖区 + 231202 北林区 + 231221 望奎县 + 231222 兰西县 + 231223 青冈县 + 231224 庆安县 + 231225 明水县 + 231226 绥棱县 + 231281 安达市 + 231282 肇东市 + 231283 海伦市 + 232700 大兴安岭地区 + 232721 呼玛县 + 232722 塔河县 + 232723 漠河县 + 310000 上海市 + 310100 市辖区 + 310101 黄浦区 + 310103 卢湾区 + 310104 徐汇区 + 310105 长宁区 + 310106 静安区 + 310107 普陀区 + 310108 闸北区 + 310109 虹口区 + 310110 杨浦区 + 310112 闵行区 + 310113 宝山区 + 310114 嘉定区 + 310115 浦东新区 + 310116 金山区 + 310117 松江区 + 310118 青浦区 + 310119 南汇区 + 310120 奉贤区 + 310200 县 + 310230 崇明县 + 320000 江苏省 + 320100 南京市 + 320101 市辖区 + 320102 玄武区 + 320103 白下区 + 320104 秦淮区 + 320105 建邺区 + 320106 鼓楼区 + 320107 下关区 + 320111 浦口区 + 320113 栖霞区 + 320114 雨花台区 + 320115 江宁区 + 320116 六合区 + 320124 溧水县 + 320125 高淳县 + 320200 无锡市 + 320201 市辖区 + 320202 崇安区 + 320203 南长区 + 320204 北塘区 + 320205 锡山区 + 320206 惠山区 + 320211 滨湖区 + 320281 江阴市 + 320282 宜兴市 + 320300 徐州市 + 320301 市辖区 + 320302 鼓楼区 + 320303 云龙区 + 320304 九里区 + 320305 贾汪区 + 320311 泉山区 + 320321 丰县 + 320322 沛县 + 320323 铜山县 + 320324 睢宁县 + 320381 新沂市 + 320382 邳州市 + 320400 常州市 + 320401 市辖区 + 320402 天宁区 + 320404 钟楼区 + 320405 戚墅堰区 + 320411 新北区 + 320412 武进区 + 320481 溧阳市 + 320482 金坛市 + 320500 苏州市 + 320501 市辖区 + 320502 沧浪区 + 320503 平江区 + 320504 金阊区 + 320505 虎丘区 + 320506 吴中区 + 320507 相城区 + 320581 常熟市 + 320582 张家港市 + 320583 昆山市 + 320584 吴江市 + 320585 太仓市 + 320600 南通市 + 320601 市辖区 + 320602 崇川区 + 320611 港闸区 + 320621 海安县 + 320623 如东县 + 320681 启东市 + 320682 如皋市 + 320683 通州市 + 320684 海门市 + 320700 连云港市 + 320701 市辖区 + 320703 连云区 + 320705 新浦区 + 320706 海州区 + 320721 赣榆县 + 320722 东海县 + 320723 灌云县 + 320724 灌南县 + 320800 淮安市 + 320801 市辖区 + 320802 清河区 + 320803 楚州区 + 320804 淮阴区 + 320811 清浦区 + 320826 涟水县 + 320829 洪泽县 + 320830 盱眙县 + 320831 金湖县 + 320900 盐城市 + 320901 市辖区 + 320902 亭湖区 + 320903 盐都区 + 320921 响水县 + 320922 滨海县 + 320923 阜宁县 + 320924 射阳县 + 320925 建湖县 + 320981 东台市 + 320982 大丰市 + 321000 扬州市 + 321001 市辖区 + 321002 广陵区 + 321003 邗江区 + 321011 郊区 + 321023 宝应县 + 321081 仪征市 + 321084 高邮市 + 321088 江都市 + 321100 镇江市 + 321101 市辖区 + 321102 京口区 + 321111 润州区 + 321112 丹徒区 + 321181 丹阳市 + 321182 扬中市 + 321183 句容市 + 321200 泰州市 + 321201 市辖区 + 321202 海陵区 + 321203 高港区 + 321281 兴化市 + 321282 靖江市 + 321283 泰兴市 + 321284 姜堰市 + 321300 宿迁市 + 321301 市辖区 + 321302 宿城区 + 321321 宿豫县 + 321322 沭阳县 + 321323 泗阳县 + 321324 泗洪县 + 330000 浙江省 + 330100 杭州市 + 330101 市辖区 + 330102 上城区 + 330103 下城区 + 330104 江干区 + 330105 拱墅区 + 330106 西湖区 + 330108 滨江区 + 330109 萧山区 + 330110 余杭区 + 330122 桐庐县 + 330127 淳安县 + 330182 建德市 + 330183 富阳市 + 330185 临安市 + 330200 宁波市 + 330201 市辖区 + 330203 海曙区 + 330204 江东区 + 330205 江北区 + 330206 北仑区 + 330211 镇海区 + 330212 鄞州区 + 330225 象山县 + 330226 宁海县 + 330281 余姚市 + 330282 慈溪市 + 330283 奉化市 + 330300 温州市 + 330301 市辖区 + 330302 鹿城区 + 330303 龙湾区 + 330304 瓯海区 + 330322 洞头县 + 330324 永嘉县 + 330326 平阳县 + 330327 苍南县 + 330328 文成县 + 330329 泰顺县 + 330381 瑞安市 + 330382 乐清市 + 330400 嘉兴市 + 330401 市辖区 + 330402 秀城区 + 330411 秀洲区 + 330421 嘉善县 + 330424 海盐县 + 330481 海宁市 + 330482 平湖市 + 330483 桐乡市 + 330500 湖州市 + 330501 市辖区 + 330502 吴兴区 + 330503 南浔区 + 330521 德清县 + 330522 长兴县 + 330523 安吉县 + 330600 绍兴市 + 330601 市辖区 + 330602 越城区 + 330621 绍兴县 + 330624 新昌县 + 330681 诸暨市 + 330682 上虞市 + 330683 嵊州市 + 330700 金华市 + 330701 市辖区 + 330702 婺城区 + 330703 金东区 + 330723 武义县 + 330726 浦江县 + 330727 磐安县 + 330781 兰溪市 + 330782 义乌市 + 330783 东阳市 + 330784 永康市 + 330800 衢州市 + 330801 市辖区 + 330802 柯城区 + 330803 衢江区 + 330822 常山县 + 330824 开化县 + 330825 龙游县 + 330881 江山市 + 330900 舟山市 + 330901 市辖区 + 330902 定海区 + 330903 普陀区 + 330921 岱山县 + 330922 嵊泗县 + 331000 台州市 + 331001 市辖区 + 331002 椒江区 + 331003 黄岩区 + 331004 路桥区 + 331021 玉环县 + 331022 三门县 + 331023 天台县 + 331024 仙居县 + 331081 温岭市 + 331082 临海市 + 331100 丽水市 + 331101 市辖区 + 331102 莲都区 + 331121 青田县 + 331122 缙云县 + 331123 遂昌县 + 331124 松阳县 + 331125 云和县 + 331126 庆元县 + 331127 景宁畲族自治县 + 331181 龙泉市 + 340000 安徽省 + 340100 合肥市 + 340101 市辖区 + 340102 瑶海区 + 340103 庐阳区 + 340104 蜀山区 + 340111 包河区 + 340121 长丰县 + 340122 肥东县 + 340123 肥西县 + 340200 芜湖市 + 340201 市辖区 + 340202 镜湖区 + 340203 马塘区 + 340204 新芜区 + 340207 鸠江区 + 340221 芜湖县 + 340222 繁昌县 + 340223 南陵县 + 340300 蚌埠市 + 340301 市辖区 + 340302 东市区 + 340303 中市区 + 340304 西市区 + 340311 郊区 + 340321 怀远县 + 340322 五河县 + 340323 固镇县 + 340400 淮南市 + 340401 市辖区 + 340402 大通区 + 340403 田家庵区 + 340404 谢家集区 + 340405 八公山区 + 340406 潘集区 + 340421 凤台县 + 340500 马鞍山市 + 340501 市辖区 + 340502 金家庄区 + 340503 花山区 + 340504 雨山区 + 340521 当涂县 + 340600 淮北市 + 340601 市辖区 + 340602 杜集区 + 340603 相山区 + 340604 烈山区 + 340621 濉溪县 + 340700 铜陵市 + 340701 市辖区 + 340702 铜官山区 + 340703 狮子山区 + 340711 郊区 + 340721 铜陵县 + 340800 安庆市 + 340801 市辖区 + 340802 迎江区 + 340803 大观区 + 340811 郊区 + 340822 怀宁县 + 340823 枞阳县 + 340824 潜山县 + 340825 太湖县 + 340826 宿松县 + 340827 望江县 + 340828 岳西县 + 340881 桐城市 + 341000 黄山市 + 341001 市辖区 + 341002 屯溪区 + 341003 黄山区 + 341004 徽州区 + 341021 歙县 + 341022 休宁县 + 341023 黟县 + 341024 祁门县 + 341100 滁州市 + 341101 市辖区 + 341102 琅琊区 + 341103 南谯区 + 341122 来安县 + 341124 全椒县 + 341125 定远县 + 341126 凤阳县 + 341181 天长市 + 341182 明光市 + 341200 阜阳市 + 341201 市辖区 + 341202 颍州区 + 341203 颍东区 + 341204 颍泉区 + 341221 临泉县 + 341222 太和县 + 341225 阜南县 + 341226 颍上县 + 341282 界首市 + 341300 宿州市 + 341301 市辖区 + 341302 墉桥区 + 341321 砀山县 + 341322 萧县 + 341323 灵璧县 + 341324 泗县 + 341400 巢湖市 + 341401 市辖区 + 341402 居巢区 + 341421 庐江县 + 341422 无为县 + 341423 含山县 + 341424 和县 + 341500 六安市 + 341501 市辖区 + 341502 金安区 + 341503 裕安区 + 341521 寿县 + 341522 霍邱县 + 341523 舒城县 + 341524 金寨县 + 341525 霍山县 + 341600 亳州市 + 341601 市辖区 + 341602 谯城区 + 341621 涡阳县 + 341622 蒙城县 + 341623 利辛县 + 341700 池州市 + 341701 市辖区 + 341702 贵池区 + 341721 东至县 + 341722 石台县 + 341723 青阳县 + 341800 宣城市 + 341801 市辖区 + 341802 宣州区 + 341821 郎溪县 + 341822 广德县 + 341823 泾县 + 341824 绩溪县 + 341825 旌德县 + 341881 宁国市 + 350000 福建省 + 350100 福州市 + 350101 市辖区 + 350102 鼓楼区 + 350103 台江区 + 350104 仓山区 + 350105 马尾区 + 350111 晋安区 + 350121 闽侯县 + 350122 连江县 + 350123 罗源县 + 350124 闽清县 + 350125 永泰县 + 350128 平潭县 + 350181 福清市 + 350182 长乐市 + 350200 厦门市 + 350201 市辖区 + 350203 思明区 + 350205 海沧区 + 350206 湖里区 + 350211 集美区 + 350212 同安区 + 350213 翔安区 + 350300 莆田市 + 350301 市辖区 + 350302 城厢区 + 350303 涵江区 + 350304 荔城区 + 350305 秀屿区 + 350322 仙游县 + 350400 三明市 + 350401 市辖区 + 350402 梅列区 + 350403 三元区 + 350421 明溪县 + 350423 清流县 + 350424 宁化县 + 350425 大田县 + 350426 尤溪县 + 350427 沙县 + 350428 将乐县 + 350429 泰宁县 + 350430 建宁县 + 350481 永安市 + 350500 泉州市 + 350501 市辖区 + 350502 鲤城区 + 350503 丰泽区 + 350504 洛江区 + 350505 泉港区 + 350521 惠安县 + 350524 安溪县 + 350525 永春县 + 350526 德化县 + 350527 金门县 + 350581 石狮市 + 350582 晋江市 + 350583 南安市 + 350600 漳州市 + 350601 市辖区 + 350602 芗城区 + 350603 龙文区 + 350622 云霄县 + 350623 漳浦县 + 350624 诏安县 + 350625 长泰县 + 350626 东山县 + 350627 南靖县 + 350628 平和县 + 350629 华安县 + 350681 龙海市 + 350700 南平市 + 350701 市辖区 + 350702 延平区 + 350721 顺昌县 + 350722 浦城县 + 350723 光泽县 + 350724 松溪县 + 350725 政和县 + 350781 邵武市 + 350782 武夷山市 + 350783 建瓯市 + 350784 建阳市 + 350800 龙岩市 + 350801 市辖区 + 350802 新罗区 + 350821 长汀县 + 350822 永定县 + 350823 上杭县 + 350824 武平县 + 350825 连城县 + 350881 漳平市 + 350900 宁德市 + 350901 市辖区 + 350902 蕉城区 + 350921 霞浦县 + 350922 古田县 + 350923 屏南县 + 350924 寿宁县 + 350925 周宁县 + 350926 柘荣县 + 350981 福安市 + 350982 福鼎市 + 360000 江西省 + 360100 南昌市 + 360101 市辖区 + 360102 东湖区 + 360103 西湖区 + 360104 青云谱区 + 360105 湾里区 + 360111 青山湖区 + 360121 南昌县 + 360122 新建县 + 360123 安义县 + 360124 进贤县 + 360200 景德镇市 + 360201 市辖区 + 360202 昌江区 + 360203 珠山区 + 360222 浮梁县 + 360281 乐平市 + 360300 萍乡市 + 360301 市辖区 + 360302 安源区 + 360313 湘东区 + 360321 莲花县 + 360322 上栗县 + 360323 芦溪县 + 360400 九江市 + 360401 市辖区 + 360402 庐山区 + 360403 浔阳区 + 360421 九江县 + 360423 武宁县 + 360424 修水县 + 360425 永修县 + 360426 德安县 + 360427 星子县 + 360428 都昌县 + 360429 湖口县 + 360430 彭泽县 + 360481 瑞昌市 + 360500 新余市 + 360501 市辖区 + 360502 渝水区 + 360521 分宜县 + 360600 鹰潭市 + 360601 市辖区 + 360602 月湖区 + 360622 余江县 + 360681 贵溪市 + 360700 赣州市 + 360701 市辖区 + 360702 章贡区 + 360721 赣县 + 360722 信丰县 + 360723 大余县 + 360724 上犹县 + 360725 崇义县 + 360726 安远县 + 360727 龙南县 + 360728 定南县 + 360729 全南县 + 360730 宁都县 + 360731 于都县 + 360732 兴国县 + 360733 会昌县 + 360734 寻乌县 + 360735 石城县 + 360781 瑞金市 + 360782 南康市 + 360800 吉安市 + 360801 市辖区 + 360802 吉州区 + 360803 青原区 + 360821 吉安县 + 360822 吉水县 + 360823 峡江县 + 360824 新干县 + 360825 永丰县 + 360826 泰和县 + 360827 遂川县 + 360828 万安县 + 360829 安福县 + 360830 永新县 + 360881 井冈山市 + 360900 宜春市 + 360901 市辖区 + 360902 袁州区 + 360921 奉新县 + 360922 万载县 + 360923 上高县 + 360924 宜丰县 + 360925 靖安县 + 360926 铜鼓县 + 360981 丰城市 + 360982 樟树市 + 360983 高安市 + 361000 抚州市 + 361001 市辖区 + 361002 临川区 + 361021 南城县 + 361022 黎川县 + 361023 南丰县 + 361024 崇仁县 + 361025 乐安县 + 361026 宜黄县 + 361027 金溪县 + 361028 资溪县 + 361029 东乡县 + 361030 广昌县 + 361100 上饶市 + 361101 市辖区 + 361102 信州区 + 361121 上饶县 + 361122 广丰县 + 361123 玉山县 + 361124 铅山县 + 361125 横峰县 + 361126 弋阳县 + 361127 余干县 + 361128 鄱阳县 + 361129 万年县 + 361130 婺源县 + 361181 德兴市 + 370000 山东省 + 370100 济南市 + 370101 市辖区 + 370102 历下区 + 370103 市中区 + 370104 槐荫区 + 370105 天桥区 + 370112 历城区 + 370113 长清区 + 370124 平阴县 + 370125 济阳县 + 370126 商河县 + 370181 章丘市 + 370200 青岛市 + 370201 市辖区 + 370202 市南区 + 370203 市北区 + 370205 四方区 + 370211 黄岛区 + 370212 崂山区 + 370213 李沧区 + 370214 城阳区 + 370281 胶州市 + 370282 即墨市 + 370283 平度市 + 370284 胶南市 + 370285 莱西市 + 370300 淄博市 + 370301 市辖区 + 370302 淄川区 + 370303 张店区 + 370304 博山区 + 370305 临淄区 + 370306 周村区 + 370321 桓台县 + 370322 高青县 + 370323 沂源县 + 370400 枣庄市 + 370401 市辖区 + 370402 市中区 + 370403 薛城区 + 370404 峄城区 + 370405 台儿庄区 + 370406 山亭区 + 370481 滕州市 + 370500 东营市 + 370501 市辖区 + 370502 东营区 + 370503 河口区 + 370521 垦利县 + 370522 利津县 + 370523 广饶县 + 370600 烟台市 + 370601 市辖区 + 370602 芝罘区 + 370611 福山区 + 370612 牟平区 + 370613 莱山区 + 370634 长岛县 + 370681 龙口市 + 370682 莱阳市 + 370683 莱州市 + 370684 蓬莱市 + 370685 招远市 + 370686 栖霞市 + 370687 海阳市 + 370700 潍坊市 + 370701 市辖区 + 370702 潍城区 + 370703 寒亭区 + 370704 坊子区 + 370705 奎文区 + 370724 临朐县 + 370725 昌乐县 + 370781 青州市 + 370782 诸城市 + 370783 寿光市 + 370784 安丘市 + 370785 高密市 + 370786 昌邑市 + 370800 济宁市 + 370801 市辖区 + 370802 市中区 + 370811 任城区 + 370826 微山县 + 370827 鱼台县 + 370828 金乡县 + 370829 嘉祥县 + 370830 汶上县 + 370831 泗水县 + 370832 梁山县 + 370881 曲阜市 + 370882 兖州市 + 370883 邹城市 + 370900 泰安市 + 370901 市辖区 + 370902 泰山区 + 370903 岱岳区 + 370921 宁阳县 + 370923 东平县 + 370982 新泰市 + 370983 肥城市 + 371000 威海市 + 371001 市辖区 + 371002 环翠区 + 371081 文登市 + 371082 荣成市 + 371083 乳山市 + 371100 日照市 + 371101 市辖区 + 371102 东港区 + 371121 五莲县 + 371122 莒县 + 371200 莱芜市 + 371201 市辖区 + 371202 莱城区 + 371203 钢城区 + 371300 临沂市 + 371301 市辖区 + 371302 兰山区 + 371311 罗庄区 + 371312 河东区 + 371321 沂南县 + 371322 郯城县 + 371323 沂水县 + 371324 苍山县 + 371325 费县 + 371326 平邑县 + 371327 莒南县 + 371328 蒙阴县 + 371329 临沭县 + 371400 德州市 + 371401 市辖区 + 371402 德城区 + 371421 陵县 + 371422 宁津县 + 371423 庆云县 + 371424 临邑县 + 371425 齐河县 + 371426 平原县 + 371427 夏津县 + 371428 武城县 + 371481 乐陵市 + 371482 禹城市 + 371500 聊城市 + 371501 市辖区 + 371502 东昌府区 + 371521 阳谷县 + 371522 莘县 + 371523 茌平县 + 371524 东阿县 + 371525 冠县 + 371526 高唐县 + 371581 临清市 + 371600 滨州市 + 371601 市辖区 + 371602 滨城区 + 371621 惠民县 + 371622 阳信县 + 371623 无棣县 + 371624 沾化县 + 371625 博兴县 + 371626 邹平县 + 371700 荷泽市 + 371701 市辖区 + 371702 牡丹区 + 371721 曹县 + 371722 单县 + 371723 成武县 + 371724 巨野县 + 371725 郓城县 + 371726 鄄城县 + 371727 定陶县 + 371728 东明县 + 410000 河南省 + 410100 郑州市 + 410101 市辖区 + 410102 中原区 + 410103 二七区 + 410104 管城回族区 + 410105 金水区 + 410106 上街区 + 410108 邙山区 + 410122 中牟县 + 410181 巩义市 + 410182 荥阳市 + 410183 新密市 + 410184 新郑市 + 410185 登封市 + 410200 开封市 + 410201 市辖区 + 410202 龙亭区 + 410203 顺河回族区 + 410204 鼓楼区 + 410205 南关区 + 410211 郊区 + 410221 杞县 + 410222 通许县 + 410223 尉氏县 + 410224 开封县 + 410225 兰考县 + 410300 洛阳市 + 410301 市辖区 + 410302 老城区 + 410303 西工区 + 410304 廛河回族区 + 410305 涧西区 + 410306 吉利区 + 410307 洛龙区 + 410322 孟津县 + 410323 新安县 + 410324 栾川县 + 410325 嵩县 + 410326 汝阳县 + 410327 宜阳县 + 410328 洛宁县 + 410329 伊川县 + 410381 偃师市 + 410400 平顶山市 + 410401 市辖区 + 410402 新华区 + 410403 卫东区 + 410404 石龙区 + 410411 湛河区 + 410421 宝丰县 + 410422 叶县 + 410423 鲁山县 + 410425 郏县 + 410481 舞钢市 + 410482 汝州市 + 410500 安阳市 + 410501 市辖区 + 410502 文峰区 + 410503 北关区 + 410505 殷都区 + 410506 龙安区 + 410522 安阳县 + 410523 汤阴县 + 410526 滑县 + 410527 内黄县 + 410581 林州市 + 410600 鹤壁市 + 410601 市辖区 + 410602 鹤山区 + 410603 山城区 + 410611 淇滨区 + 410621 浚县 + 410622 淇县 + 410700 新乡市 + 410701 市辖区 + 410702 红旗区 + 410703 卫滨区 + 410704 凤泉区 + 410711 牧野区 + 410721 新乡县 + 410724 获嘉县 + 410725 原阳县 + 410726 延津县 + 410727 封丘县 + 410728 长垣县 + 410781 卫辉市 + 410782 辉县市 + 410800 焦作市 + 410801 市辖区 + 410802 解放区 + 410803 中站区 + 410804 马村区 + 410811 山阳区 + 410821 修武县 + 410822 博爱县 + 410823 武陟县 + 410825 温县 + 410881 济源市 + 410882 沁阳市 + 410883 孟州市 + 410900 濮阳市 + 410901 市辖区 + 410902 华龙区 + 410922 清丰县 + 410923 南乐县 + 410926 范县 + 410927 台前县 + 410928 濮阳县 + 411000 许昌市 + 411001 市辖区 + 411002 魏都区 + 411023 许昌县 + 411024 鄢陵县 + 411025 襄城县 + 411081 禹州市 + 411082 长葛市 + 411100 漯河市 + 411101 市辖区 + 411102 源汇区 + 411121 舞阳县 + 411122 临颍县 + 411123 郾城县 + 411200 三门峡市 + 411201 市辖区 + 411202 湖滨区 + 411221 渑池县 + 411222 陕县 + 411224 卢氏县 + 411281 义马市 + 411282 灵宝市 + 411300 南阳市 + 411301 市辖区 + 411302 宛城区 + 411303 卧龙区 + 411321 南召县 + 411322 方城县 + 411323 西峡县 + 411324 镇平县 + 411325 内乡县 + 411326 淅川县 + 411327 社旗县 + 411328 唐河县 + 411329 新野县 + 411330 桐柏县 + 411381 邓州市 + 411400 商丘市 + 411401 市辖区 + 411402 梁园区 + 411403 睢阳区 + 411421 民权县 + 411422 睢县 + 411423 宁陵县 + 411424 柘城县 + 411425 虞城县 + 411426 夏邑县 + 411481 永城市 + 411500 信阳市 + 411501 市辖区 + 411502 师河区 + 411503 平桥区 + 411521 罗山县 + 411522 光山县 + 411523 新县 + 411524 商城县 + 411525 固始县 + 411526 潢川县 + 411527 淮滨县 + 411528 息县 + 411600 周口市 + 411601 市辖区 + 411602 川汇区 + 411621 扶沟县 + 411622 西华县 + 411623 商水县 + 411624 沈丘县 + 411625 郸城县 + 411626 淮阳县 + 411627 太康县 + 411628 鹿邑县 + 411681 项城市 + 411700 驻马店市 + 411701 市辖区 + 411702 驿城区 + 411721 西平县 + 411722 上蔡县 + 411723 平舆县 + 411724 正阳县 + 411725 确山县 + 411726 泌阳县 + 411727 汝南县 + 411728 遂平县 + 411729 新蔡县 + 420000 湖北省 + 420100 武汉市 + 420101 市辖区 + 420102 江岸区 + 420103 江汉区 + 420104 乔口区 + 420105 汉阳区 + 420106 武昌区 + 420107 青山区 + 420111 洪山区 + 420112 东西湖区 + 420113 汉南区 + 420114 蔡甸区 + 420115 江夏区 + 420116 黄陂区 + 420117 新洲区 + 420200 黄石市 + 420201 市辖区 + 420202 黄石港区 + 420203 西塞山区 + 420204 下陆区 + 420205 铁山区 + 420222 阳新县 + 420281 大冶市 + 420300 十堰市 + 420301 市辖区 + 420302 茅箭区 + 420303 张湾区 + 420321 郧县 + 420322 郧西县 + 420323 竹山县 + 420324 竹溪县 + 420325 房县 + 420381 丹江口市 + 420500 宜昌市 + 420501 市辖区 + 420502 西陵区 + 420503 伍家岗区 + 420504 点军区 + 420505 虎亭区 + 420506 夷陵区 + 420525 远安县 + 420526 兴山县 + 420527 秭归县 + 420528 长阳土家族自治县 + 420529 五峰土家族自治县 + 420581 宜都市 + 420582 当阳市 + 420583 枝江市 + 420600 襄樊市 + 420601 市辖区 + 420602 襄城区 + 420606 樊城区 + 420607 襄阳区 + 420624 南漳县 + 420625 谷城县 + 420626 保康县 + 420682 老河口市 + 420683 枣阳市 + 420684 宜城市 + 420700 鄂州市 + 420701 市辖区 + 420702 梁子湖区 + 420703 华容区 + 420704 鄂城区 + 420800 荆门市 + 420801 市辖区 + 420802 东宝区 + 420804 掇刀区 + 420821 京山县 + 420822 沙洋县 + 420881 钟祥市 + 420900 孝感市 + 420901 市辖区 + 420902 孝南区 + 420921 孝昌县 + 420922 大悟县 + 420923 云梦县 + 420981 应城市 + 420982 安陆市 + 420984 汉川市 + 421000 荆州市 + 421001 市辖区 + 421002 沙市区 + 421003 荆州区 + 421022 公安县 + 421023 监利县 + 421024 江陵县 + 421081 石首市 + 421083 洪湖市 + 421087 松滋市 + 421100 黄冈市 + 421101 市辖区 + 421102 黄州区 + 421121 团风县 + 421122 红安县 + 421123 罗田县 + 421124 英山县 + 421125 浠水县 + 421126 蕲春县 + 421127 黄梅县 + 421181 麻城市 + 421182 武穴市 + 421200 咸宁市 + 421201 市辖区 + 421202 咸安区 + 421221 嘉鱼县 + 421222 通城县 + 421223 崇阳县 + 421224 通山县 + 421281 赤壁市 + 421300 随州市 + 421301 市辖区 + 421302 曾都区 + 421381 广水市 + 422800 恩施土家族苗族自治州 + 422801 恩施市 + 422802 利川市 + 422822 建始县 + 422823 巴东县 + 422825 宣恩县 + 422826 咸丰县 + 422827 来凤县 + 422828 鹤峰县 + 429000 省直辖行政单位 + 429004 仙桃市 + 429005 潜江市 + 429006 天门市 + 429021 神农架林区 + 430000 湖南省 + 430100 长沙市 + 430101 市辖区 + 430102 芙蓉区 + 430103 天心区 + 430104 岳麓区 + 430105 开福区 + 430111 雨花区 + 430121 长沙县 + 430122 望城县 + 430124 宁乡县 + 430181 浏阳市 + 430200 株洲市 + 430201 市辖区 + 430202 荷塘区 + 430203 芦淞区 + 430204 石峰区 + 430211 天元区 + 430221 株洲县 + 430223 攸县 + 430224 茶陵县 + 430225 炎陵县 + 430281 醴陵市 + 430300 湘潭市 + 430301 市辖区 + 430302 雨湖区 + 430304 岳塘区 + 430321 湘潭县 + 430381 湘乡市 + 430382 韶山市 + 430400 衡阳市 + 430401 市辖区 + 430405 珠晖区 + 430406 雁峰区 + 430407 石鼓区 + 430408 蒸湘区 + 430412 南岳区 + 430421 衡阳县 + 430422 衡南县 + 430423 衡山县 + 430424 衡东县 + 430426 祁东县 + 430481 耒阳市 + 430482 常宁市 + 430500 邵阳市 + 430501 市辖区 + 430502 双清区 + 430503 大祥区 + 430511 北塔区 + 430521 邵东县 + 430522 新邵县 + 430523 邵阳县 + 430524 隆回县 + 430525 洞口县 + 430527 绥宁县 + 430528 新宁县 + 430529 城步苗族自治县 + 430581 武冈市 + 430600 岳阳市 + 430601 市辖区 + 430602 岳阳楼区 + 430603 云溪区 + 430611 君山区 + 430621 岳阳县 + 430623 华容县 + 430624 湘阴县 + 430626 平江县 + 430681 汨罗市 + 430682 临湘市 + 430700 常德市 + 430701 市辖区 + 430702 武陵区 + 430703 鼎城区 + 430721 安乡县 + 430722 汉寿县 + 430723 澧县 + 430724 临澧县 + 430725 桃源县 + 430726 石门县 + 430781 津市市 + 430800 张家界市 + 430801 市辖区 + 430802 永定区 + 430811 武陵源区 + 430821 慈利县 + 430822 桑植县 + 430900 益阳市 + 430901 市辖区 + 430902 资阳区 + 430903 赫山区 + 430921 南县 + 430922 桃江县 + 430923 安化县 + 430981 沅江市 + 431000 郴州市 + 431001 市辖区 + 431002 北湖区 + 431003 苏仙区 + 431021 桂阳县 + 431022 宜章县 + 431023 永兴县 + 431024 嘉禾县 + 431025 临武县 + 431026 汝城县 + 431027 桂东县 + 431028 安仁县 + 431081 资兴市 + 431100 永州市 + 431101 市辖区 + 431102 芝山区 + 431103 冷水滩区 + 431121 祁阳县 + 431122 东安县 + 431123 双牌县 + 431124 道县 + 431125 江永县 + 431126 宁远县 + 431127 蓝山县 + 431128 新田县 + 431129 江华瑶族自治县 + 431200 怀化市 + 431201 市辖区 + 431202 鹤城区 + 431221 中方县 + 431222 沅陵县 + 431223 辰溪县 + 431224 溆浦县 + 431225 会同县 + 431226 麻阳苗族自治县 + 431227 新晃侗族自治县 + 431228 芷江侗族自治县 + 431229 靖州苗族侗族自治县 + 431230 通道侗族自治县 + 431281 洪江市 + 431300 娄底市 + 431301 市辖区 + 431302 娄星区 + 431321 双峰县 + 431322 新化县 + 431381 冷水江市 + 431382 涟源市 + 433100 湘西土家族苗族自治州 + 433101 吉首市 + 433122 泸溪县 + 433123 凤凰县 + 433124 花垣县 + 433125 保靖县 + 433126 古丈县 + 433127 永顺县 + 433130 龙山县 + 440000 广东省 + 440100 广州市 + 440101 市辖区 + 440102 东山区 + 440103 荔湾区 + 440104 越秀区 + 440105 海珠区 + 440106 天河区 + 440107 芳村区 + 440111 白云区 + 440112 黄埔区 + 440113 番禺区 + 440114 花都区 + 440183 增城市 + 440184 从化市 + 440200 韶关市 + 440201 市辖区 + 440202 北江区 + 440203 武江区 + 440204 浈江区 + 440221 曲江县 + 440222 始兴县 + 440224 仁化县 + 440229 翁源县 + 440232 乳源瑶族自治县 + 440233 新丰县 + 440281 乐昌市 + 440282 南雄市 + 440300 深圳市 + 440301 市辖区 + 440303 罗湖区 + 440304 福田区 + 440305 南山区 + 440306 宝安区 + 440307 龙岗区 + 440308 盐田区 + 440400 珠海市 + 440401 市辖区 + 440402 香洲区 + 440403 斗门区 + 440404 金湾区 + 440500 汕头市 + 440501 市辖区 + 440507 龙湖区 + 440511 金平区 + 440512 濠江区 + 440513 潮阳区 + 440514 潮南区 + 440515 澄海区 + 440523 南澳县 + 440600 佛山市 + 440601 市辖区 + 440604 禅城区 + 440605 南海区 + 440606 顺德区 + 440607 三水区 + 440608 高明区 + 440700 江门市 + 440701 市辖区 + 440703 蓬江区 + 440704 江海区 + 440705 新会区 + 440781 台山市 + 440783 开平市 + 440784 鹤山市 + 440785 恩平市 + 440800 湛江市 + 440801 市辖区 + 440802 赤坎区 + 440803 霞山区 + 440804 坡头区 + 440811 麻章区 + 440823 遂溪县 + 440825 徐闻县 + 440881 廉江市 + 440882 雷州市 + 440883 吴川市 + 440900 茂名市 + 440901 市辖区 + 440902 茂南区 + 440903 茂港区 + 440923 电白县 + 440981 高州市 + 440982 化州市 + 440983 信宜市 + 441200 肇庆市 + 441201 市辖区 + 441202 端州区 + 441203 鼎湖区 + 441223 广宁县 + 441224 怀集县 + 441225 封开县 + 441226 德庆县 + 441283 高要市 + 441284 四会市 + 441300 惠州市 + 441301 市辖区 + 441302 惠城区 + 441303 惠阳区 + 441322 博罗县 + 441323 惠东县 + 441324 龙门县 + 441400 梅州市 + 441401 市辖区 + 441402 梅江区 + 441421 梅县 + 441422 大埔县 + 441423 丰顺县 + 441424 五华县 + 441426 平远县 + 441427 蕉岭县 + 441481 兴宁市 + 441500 汕尾市 + 441501 市辖区 + 441502 城区 + 441521 海丰县 + 441523 陆河县 + 441581 陆丰市 + 441600 河源市 + 441601 市辖区 + 441602 源城区 + 441621 紫金县 + 441622 龙川县 + 441623 连平县 + 441624 和平县 + 441625 东源县 + 441700 阳江市 + 441701 市辖区 + 441702 江城区 + 441721 阳西县 + 441723 阳东县 + 441781 阳春市 + 441800 清远市 + 441801 市辖区 + 441802 清城区 + 441821 佛冈县 + 441823 阳山县 + 441825 连山壮族瑶族自治县 + 441826 连南瑶族自治县 + 441827 清新县 + 441881 英德市 + 441882 连州市 + 441900 东莞市 + 442000 中山市 + 445100 潮州市 + 445101 市辖区 + 445102 湘桥区 + 445121 潮安县 + 445122 饶平县 + 445200 揭阳市 + 445201 市辖区 + 445202 榕城区 + 445221 揭东县 + 445222 揭西县 + 445224 惠来县 + 445281 普宁市 + 445300 云浮市 + 445301 市辖区 + 445302 云城区 + 445321 新兴县 + 445322 郁南县 + 445323 云安县 + 445381 罗定市 + 450000 广西壮族自治区 + 450100 南宁市 + 450101 市辖区 + 450102 兴宁区 + 450103 新城区 + 450104 城北区 + 450105 江南区 + 450106 永新区 + 450121 邕宁县 + 450122 武鸣县 + 450123 隆安县 + 450124 马山县 + 450125 上林县 + 450126 宾阳县 + 450127 横县 + 450200 柳州市 + 450201 市辖区 + 450202 城中区 + 450203 鱼峰区 + 450204 柳南区 + 450205 柳北区 + 450221 柳江县 + 450222 柳城县 + 450223 鹿寨县 + 450224 融安县 + 450225 融水苗族自治县 + 450226 三江侗族自治县 + 450300 桂林市 + 450301 市辖区 + 450302 秀峰区 + 450303 叠彩区 + 450304 象山区 + 450305 七星区 + 450311 雁山区 + 450321 阳朔县 + 450322 临桂县 + 450323 灵川县 + 450324 全州县 + 450325 兴安县 + 450326 永福县 + 450327 灌阳县 + 450328 龙胜各族自治县 + 450329 资源县 + 450330 平乐县 + 450331 荔蒲县 + 450332 恭城瑶族自治县 + 450400 梧州市 + 450401 市辖区 + 450403 万秀区 + 450404 蝶山区 + 450405 长洲区 + 450421 苍梧县 + 450422 藤县 + 450423 蒙山县 + 450481 岑溪市 + 450500 北海市 + 450501 市辖区 + 450502 海城区 + 450503 银海区 + 450512 铁山港区 + 450521 合浦县 + 450600 防城港市 + 450601 市辖区 + 450602 港口区 + 450603 防城区 + 450621 上思县 + 450681 东兴市 + 450700 钦州市 + 450701 市辖区 + 450702 钦南区 + 450703 钦北区 + 450721 灵山县 + 450722 浦北县 + 450800 贵港市 + 450801 市辖区 + 450802 港北区 + 450803 港南区 + 450804 覃塘区 + 450821 平南县 + 450881 桂平市 + 450900 玉林市 + 450901 市辖区 + 450902 玉州区 + 450921 容县 + 450922 陆川县 + 450923 博白县 + 450924 兴业县 + 450981 北流市 + 451000 百色市 + 451001 市辖区 + 451002 右江区 + 451021 田阳县 + 451022 田东县 + 451023 平果县 + 451024 德保县 + 451025 靖西县 + 451026 那坡县 + 451027 凌云县 + 451028 乐业县 + 451029 田林县 + 451030 西林县 + 451031 隆林各族自治县 + 451100 贺州市 + 451101 市辖区 + 451102 八步区 + 451121 昭平县 + 451122 钟山县 + 451123 富川瑶族自治县 + 451200 河池市 + 451201 市辖区 + 451202 金城江区 + 451221 南丹县 + 451222 天峨县 + 451223 凤山县 + 451224 东兰县 + 451225 罗城仫佬族自治县 + 451226 环江毛南族自治县 + 451227 巴马瑶族自治县 + 451228 都安瑶族自治县 + 451229 大化瑶族自治县 + 451281 宜州市 + 451300 来宾市 + 451301 市辖区 + 451302 兴宾区 + 451321 忻城县 + 451322 象州县 + 451323 武宣县 + 451324 金秀瑶族自治县 + 451381 合山市 + 451400 崇左市 + 451401 市辖区 + 451402 江洲区 + 451421 扶绥县 + 451422 宁明县 + 451423 龙州县 + 451424 大新县 + 451425 天等县 + 451481 凭祥市 + 460000 海南省 + 460100 海口市 + 460101 市辖区 + 460105 秀英区 + 460106 龙华区 + 460107 琼山区 + 460108 美兰区 + 460200 三亚市 + 460201 市辖区 + 469000 省直辖县级行政单位 + 469001 五指山市 + 469002 琼海市 + 469003 儋州市 + 469005 文昌市 + 469006 万宁市 + 469007 东方市 + 469025 定安县 + 469026 屯昌县 + 469027 澄迈县 + 469028 临高县 + 469030 白沙黎族自治县 + 469031 昌江黎族自治县 + 469033 乐东黎族自治县 + 469034 陵水黎族自治县 + 469035 保亭黎族苗族自治县 + 469036 琼中黎族苗族自治县 + 469037 西沙群岛 + 469038 南沙群岛 + 469039 中沙群岛的岛礁及其海域 + 500000 重庆市 + 500100 市辖区 + 500101 万州区 + 500102 涪陵区 + 500103 渝中区 + 500104 大渡口区 + 500105 江北区 + 500106 沙坪坝区 + 500107 九龙坡区 + 500108 南岸区 + 500109 北碚区 + 500110 万盛区 + 500111 双桥区 + 500112 渝北区 + 500113 巴南区 + 500114 黔江区 + 500115 长寿区 + 500200 县 + 500222 綦江县 + 500223 潼南县 + 500224 铜梁县 + 500225 大足县 + 500226 荣昌县 + 500227 璧山县 + 500228 梁平县 + 500229 城口县 + 500230 丰都县 + 500231 垫江县 + 500232 武隆县 + 500233 忠县 + 500234 开县 + 500235 云阳县 + 500236 奉节县 + 500237 巫山县 + 500238 巫溪县 + 500240 石柱土家族自治县 + 500241 秀山土家族苗族自治县 + 500242 酉阳土家族苗族自治县 + 500243 彭水苗族土家族自治县 + 500300 市 + 500381 江津市 + 500382 合川市 + 500383 永川市 + 500384 南川市 + 510000 四川省 + 510100 成都市 + 510101 市辖区 + 510104 锦江区 + 510105 青羊区 + 510106 金牛区 + 510107 武侯区 + 510108 成华区 + 510112 龙泉驿区 + 510113 青白江区 + 510114 新都区 + 510115 温江区 + 510121 金堂县 + 510122 双流县 + 510124 郫县 + 510129 大邑县 + 510131 蒲江县 + 510132 新津县 + 510181 都江堰市 + 510182 彭州市 + 510183 邛崃市 + 510184 崇州市 + 510300 自贡市 + 510301 市辖区 + 510302 自流井区 + 510303 贡井区 + 510304 大安区 + 510311 沿滩区 + 510321 荣县 + 510322 富顺县 + 510400 攀枝花市 + 510401 市辖区 + 510402 东区 + 510403 西区 + 510411 仁和区 + 510421 米易县 + 510422 盐边县 + 510500 泸州市 + 510501 市辖区 + 510502 江阳区 + 510503 纳溪区 + 510504 龙马潭区 + 510521 泸县 + 510522 合江县 + 510524 叙永县 + 510525 古蔺县 + 510600 德阳市 + 510601 市辖区 + 510603 旌阳区 + 510623 中江县 + 510626 罗江县 + 510681 广汉市 + 510682 什邡市 + 510683 绵竹市 + 510700 绵阳市 + 510701 市辖区 + 510703 涪城区 + 510704 游仙区 + 510722 三台县 + 510723 盐亭县 + 510724 安县 + 510725 梓潼县 + 510726 北川羌族自治县 + 510727 平武县 + 510781 江油市 + 510800 广元市 + 510801 市辖区 + 510802 市中区 + 510811 元坝区 + 510812 朝天区 + 510821 旺苍县 + 510822 青川县 + 510823 剑阁县 + 510824 苍溪县 + 510900 遂宁市 + 510901 市辖区 + 510903 船山区 + 510904 安居区 + 510921 蓬溪县 + 510922 射洪县 + 510923 大英县 + 511000 内江市 + 511001 市辖区 + 511002 市中区 + 511011 东兴区 + 511024 威远县 + 511025 资中县 + 511028 隆昌县 + 511100 乐山市 + 511101 市辖区 + 511102 市中区 + 511111 沙湾区 + 511112 五通桥区 + 511113 金口河区 + 511123 犍为县 + 511124 井研县 + 511126 夹江县 + 511129 沐川县 + 511132 峨边彝族自治县 + 511133 马边彝族自治县 + 511181 峨眉山市 + 511300 南充市 + 511301 市辖区 + 511302 顺庆区 + 511303 高坪区 + 511304 嘉陵区 + 511321 南部县 + 511322 营山县 + 511323 蓬安县 + 511324 仪陇县 + 511325 西充县 + 511381 阆中市 + 511400 眉山市 + 511401 市辖区 + 511402 东坡区 + 511421 仁寿县 + 511422 彭山县 + 511423 洪雅县 + 511424 丹棱县 + 511425 青神县 + 511500 宜宾市 + 511501 市辖区 + 511502 翠屏区 + 511521 宜宾县 + 511522 南溪县 + 511523 江安县 + 511524 长宁县 + 511525 高县 + 511526 珙县 + 511527 筠连县 + 511528 兴文县 + 511529 屏山县 + 511600 广安市 + 511601 市辖区 + 511602 广安区 + 511621 岳池县 + 511622 武胜县 + 511623 邻水县 + 511681 华莹市 + 511700 达州市 + 511701 市辖区 + 511702 通川区 + 511721 达县 + 511722 宣汉县 + 511723 开江县 + 511724 大竹县 + 511725 渠县 + 511781 万源市 + 511800 雅安市 + 511801 市辖区 + 511802 雨城区 + 511821 名山县 + 511822 荥经县 + 511823 汉源县 + 511824 石棉县 + 511825 天全县 + 511826 芦山县 + 511827 宝兴县 + 511900 巴中市 + 511901 市辖区 + 511902 巴州区 + 511921 通江县 + 511922 南江县 + 511923 平昌县 + 512000 资阳市 + 512001 市辖区 + 512002 雁江区 + 512021 安岳县 + 512022 乐至县 + 512081 简阳市 + 513200 阿坝藏族羌族自治州 + 513221 汶川县 + 513222 理县 + 513223 茂县 + 513224 松潘县 + 513225 九寨沟县 + 513226 金川县 + 513227 小金县 + 513228 黑水县 + 513229 马尔康县 + 513230 壤塘县 + 513231 阿坝县 + 513232 若尔盖县 + 513233 红原县 + 513300 甘孜藏族自治州 + 513321 康定县 + 513322 泸定县 + 513323 丹巴县 + 513324 九龙县 + 513325 雅江县 + 513326 道孚县 + 513327 炉霍县 + 513328 甘孜县 + 513329 新龙县 + 513330 德格县 + 513331 白玉县 + 513332 石渠县 + 513333 色达县 + 513334 理塘县 + 513335 巴塘县 + 513336 乡城县 + 513337 稻城县 + 513338 得荣县 + 513400 凉山彝族自治州 + 513401 西昌市 + 513422 木里藏族自治县 + 513423 盐源县 + 513424 德昌县 + 513425 会理县 + 513426 会东县 + 513427 宁南县 + 513428 普格县 + 513429 布拖县 + 513430 金阳县 + 513431 昭觉县 + 513432 喜德县 + 513433 冕宁县 + 513434 越西县 + 513435 甘洛县 + 513436 美姑县 + 513437 雷波县 + 520000 贵州省 + 520100 贵阳市 + 520101 市辖区 + 520102 南明区 + 520103 云岩区 + 520111 花溪区 + 520112 乌当区 + 520113 白云区 + 520114 小河区 + 520121 开阳县 + 520122 息烽县 + 520123 修文县 + 520181 清镇市 + 520200 六盘水市 + 520201 钟山区 + 520203 六枝特区 + 520221 水城县 + 520222 盘县 + 520300 遵义市 + 520301 市辖区 + 520302 红花岗区 + 520303 汇川区 + 520321 遵义县 + 520322 桐梓县 + 520323 绥阳县 + 520324 正安县 + 520325 道真仡佬族苗族自治县 + 520326 务川仡佬族苗族自治县 + 520327 凤冈县 + 520328 湄潭县 + 520329 余庆县 + 520330 习水县 + 520381 赤水市 + 520382 仁怀市 + 520400 安顺市 + 520401 市辖区 + 520402 西秀区 + 520421 平坝县 + 520422 普定县 + 520423 镇宁布依族苗族自治县 + 520424 关岭布依族苗族自治县 + 520425 紫云苗族布依族自治县 + 522200 铜仁地区 + 522201 铜仁市 + 522222 江口县 + 522223 玉屏侗族自治县 + 522224 石阡县 + 522225 思南县 + 522226 印江土家族苗族自治县 + 522227 德江县 + 522228 沿河土家族自治县 + 522229 松桃苗族自治县 + 522230 万山特区 + 522300 黔西南布依族苗族自治州 + 522301 兴义市 + 522322 兴仁县 + 522323 普安县 + 522324 晴隆县 + 522325 贞丰县 + 522326 望谟县 + 522327 册亨县 + 522328 安龙县 + 522400 毕节地区 + 522401 毕节市 + 522422 大方县 + 522423 黔西县 + 522424 金沙县 + 522425 织金县 + 522426 纳雍县 + 522427 威宁彝族回族苗族自治县 + 522428 赫章县 + 522600 黔东南苗族侗族自治州 + 522601 凯里市 + 522622 黄平县 + 522623 施秉县 + 522624 三穗县 + 522625 镇远县 + 522626 岑巩县 + 522627 天柱县 + 522628 锦屏县 + 522629 剑河县 + 522630 台江县 + 522631 黎平县 + 522632 榕江县 + 522633 从江县 + 522634 雷山县 + 522635 麻江县 + 522636 丹寨县 + 522700 黔南布依族苗族自治州 + 522701 都匀市 + 522702 福泉市 + 522722 荔波县 + 522723 贵定县 + 522725 瓮安县 + 522726 独山县 + 522727 平塘县 + 522728 罗甸县 + 522729 长顺县 + 522730 龙里县 + 522731 惠水县 + 522732 三都水族自治县 + 530000 云南省 + 530100 昆明市 + 530101 市辖区 + 530102 五华区 + 530103 盘龙区 + 530111 官渡区 + 530112 西山区 + 530113 东川区 + 530121 呈贡县 + 530122 晋宁县 + 530124 富民县 + 530125 宜良县 + 530126 石林彝族自治县 + 530127 嵩明县 + 530128 禄劝彝族苗族自治县 + 530129 寻甸回族彝族自治县 + 530181 安宁市 + 530300 曲靖市 + 530301 市辖区 + 530302 麒麟区 + 530321 马龙县 + 530322 陆良县 + 530323 师宗县 + 530324 罗平县 + 530325 富源县 + 530326 会泽县 + 530328 沾益县 + 530381 宣威市 + 530400 玉溪市 + 530401 市辖区 + 530402 红塔区 + 530421 江川县 + 530422 澄江县 + 530423 通海县 + 530424 华宁县 + 530425 易门县 + 530426 峨山彝族自治县 + 530427 新平彝族傣族自治县 + 530428 元江哈尼族彝族傣族自治县 + 530500 保山市 + 530501 市辖区 + 530502 隆阳区 + 530521 施甸县 + 530522 腾冲县 + 530523 龙陵县 + 530524 昌宁县 + 530600 昭通市 + 530601 市辖区 + 530602 昭阳区 + 530621 鲁甸县 + 530622 巧家县 + 530623 盐津县 + 530624 大关县 + 530625 永善县 + 530626 绥江县 + 530627 镇雄县 + 530628 彝良县 + 530629 威信县 + 530630 水富县 + 530700 丽江市 + 530701 市辖区 + 530702 古城区 + 530721 玉龙纳西族自治县 + 530722 永胜县 + 530723 华坪县 + 530724 宁蒗彝族自治县 + 530800 思茅市 + 530801 市辖区 + 530802 翠云区 + 530821 普洱哈尼族彝族自治县 + 530822 墨江哈尼族自治县 + 530823 景东彝族自治县 + 530824 景谷傣族彝族自治县 + 530825 镇沅彝族哈尼族拉祜族自治县 + 530826 江城哈尼族彝族自治县 + 530827 孟连傣族拉祜族佤族自治县 + 530828 澜沧拉祜族自治县 + 530829 西盟佤族自治县 + 530900 临沧市 + 530901 市辖区 + 530902 临翔区 + 530921 凤庆县 + 530922 云县 + 530923 永德县 + 530924 镇康县 + 530925 双江拉祜族佤族布朗族傣族自治县 + 530926 耿马傣族佤族自治县 + 530927 沧源佤族自治县 + 532300 楚雄彝族自治州 + 532301 楚雄市 + 532322 双柏县 + 532323 牟定县 + 532324 南华县 + 532325 姚安县 + 532326 大姚县 + 532327 永仁县 + 532328 元谋县 + 532329 武定县 + 532331 禄丰县 + 532500 红河哈尼族彝族自治州 + 532501 个旧市 + 532502 开远市 + 532522 蒙自县 + 532523 屏边苗族自治县 + 532524 建水县 + 532525 石屏县 + 532526 弥勒县 + 532527 泸西县 + 532528 元阳县 + 532529 红河县 + 532530 金平苗族瑶族傣族自治县 + 532531 绿春县 + 532532 河口瑶族自治县 + 532600 文山壮族苗族自治州 + 532621 文山县 + 532622 砚山县 + 532623 西畴县 + 532624 麻栗坡县 + 532625 马关县 + 532626 丘北县 + 532627 广南县 + 532628 富宁县 + 532800 西双版纳傣族自治州 + 532801 景洪市 + 532822 勐海县 + 532823 勐腊县 + 532900 大理白族自治州 + 532901 大理市 + 532922 漾濞彝族自治县 + 532923 祥云县 + 532924 宾川县 + 532925 弥渡县 + 532926 南涧彝族自治县 + 532927 巍山彝族回族自治县 + 532928 永平县 + 532929 云龙县 + 532930 洱源县 + 532931 剑川县 + 532932 鹤庆县 + 533100 德宏傣族景颇族自治州 + 533102 瑞丽市 + 533103 潞西市 + 533122 梁河县 + 533123 盈江县 + 533124 陇川县 + 533300 怒江傈僳族自治州 + 533321 泸水县 + 533323 福贡县 + 533324 贡山独龙族怒族自治县 + 533325 兰坪白族普米族自治县 + 533400 迪庆藏族自治州 + 533421 香格里拉县 + 533422 德钦县 + 533423 维西傈僳族自治县 + 540000 西藏自治区 + 540100 拉萨市 + 540101 市辖区 + 540102 城关区 + 540121 林周县 + 540122 当雄县 + 540123 尼木县 + 540124 曲水县 + 540125 堆龙德庆县 + 540126 达孜县 + 540127 墨竹工卡县 + 542100 昌都地区 + 542121 昌都县 + 542122 江达县 + 542123 贡觉县 + 542124 类乌齐县 + 542125 丁青县 + 542126 察雅县 + 542127 八宿县 + 542128 左贡县 + 542129 芒康县 + 542132 洛隆县 + 542133 边坝县 + 542200 山南地区 + 542221 乃东县 + 542222 扎囊县 + 542223 贡嘎县 + 542224 桑日县 + 542225 琼结县 + 542226 曲松县 + 542227 措美县 + 542228 洛扎县 + 542229 加查县 + 542231 隆子县 + 542232 错那县 + 542233 浪卡子县 + 542300 日喀则地区 + 542301 日喀则市 + 542322 南木林县 + 542323 江孜县 + 542324 定日县 + 542325 萨迦县 + 542326 拉孜县 + 542327 昂仁县 + 542328 谢通门县 + 542329 白朗县 + 542330 仁布县 + 542331 康马县 + 542332 定结县 + 542333 仲巴县 + 542334 亚东县 + 542335 吉隆县 + 542336 聂拉木县 + 542337 萨嘎县 + 542338 岗巴县 + 542400 那曲地区 + 542421 那曲县 + 542422 嘉黎县 + 542423 比如县 + 542424 聂荣县 + 542425 安多县 + 542426 申扎县 + 542427 索县 + 542428 班戈县 + 542429 巴青县 + 542430 尼玛县 + 542500 阿里地区 + 542521 普兰县 + 542522 札达县 + 542523 噶尔县 + 542524 日土县 + 542525 革吉县 + 542526 改则县 + 542527 措勤县 + 542600 林芝地区 + 542621 林芝县 + 542622 工布江达县 + 542623 米林县 + 542624 墨脱县 + 542625 波密县 + 542626 察隅县 + 542627 朗县 + 610000 陕西省 + 610100 西安市 + 610101 市辖区 + 610102 新城区 + 610103 碑林区 + 610104 莲湖区 + 610111 灞桥区 + 610112 未央区 + 610113 雁塔区 + 610114 阎良区 + 610115 临潼区 + 610116 长安区 + 610122 蓝田县 + 610124 周至县 + 610125 户县 + 610126 高陵县 + 610200 铜川市 + 610201 市辖区 + 610202 王益区 + 610203 印台区 + 610204 耀州区 + 610222 宜君县 + 610300 宝鸡市 + 610301 市辖区 + 610302 渭滨区 + 610303 金台区 + 610304 陈仓区 + 610322 凤翔县 + 610323 岐山县 + 610324 扶风县 + 610326 眉县 + 610327 陇县 + 610328 千阳县 + 610329 麟游县 + 610330 凤县 + 610331 太白县 + 610400 咸阳市 + 610401 市辖区 + 610402 秦都区 + 610403 杨凌区 + 610404 渭城区 + 610422 三原县 + 610423 泾阳县 + 610424 乾县 + 610425 礼泉县 + 610426 永寿县 + 610427 彬县 + 610428 长武县 + 610429 旬邑县 + 610430 淳化县 + 610431 武功县 + 610481 兴平市 + 610500 渭南市 + 610501 市辖区 + 610502 临渭区 + 610521 华县 + 610522 潼关县 + 610523 大荔县 + 610524 合阳县 + 610525 澄城县 + 610526 蒲城县 + 610527 白水县 + 610528 富平县 + 610581 韩城市 + 610582 华阴市 + 610600 延安市 + 610601 市辖区 + 610602 宝塔区 + 610621 延长县 + 610622 延川县 + 610623 子长县 + 610625 志丹县 + 610626 吴旗县 + 610627 甘泉县 + 610628 富县 + 610629 洛川县 + 610630 宜川县 + 610631 黄龙县 + 610632 黄陵县 + 610700 汉中市 + 610701 市辖区 + 610702 汉台区 + 610721 南郑县 + 610722 城固县 + 610723 洋县 + 610724 西乡县 + 610725 勉县 + 610726 宁强县 + 610727 略阳县 + 610728 镇巴县 + 610729 留坝县 + 610730 佛坪县 + 610800 榆林市 + 610801 市辖区 + 610802 榆阳区 + 610821 神木县 + 610822 府谷县 + 610823 横山县 + 610824 靖边县 + 610825 定边县 + 610826 绥德县 + 610827 米脂县 + 610828 佳县 + 610829 吴堡县 + 610830 清涧县 + 610831 子洲县 + 610900 安康市 + 610901 市辖区 + 610902 汉滨区 + 610921 汉阴县 + 610922 石泉县 + 610923 宁陕县 + 610924 紫阳县 + 610925 岚皋县 + 610926 平利县 + 610927 镇坪县 + 610928 旬阳县 + 610929 白河县 + 611000 商洛市 + 611001 市辖区 + 611002 商州区 + 611021 洛南县 + 611022 丹凤县 + 611023 商南县 + 611024 山阳县 + 611025 镇安县 + 611026 柞水县 + 620000 甘肃省 + 620100 兰州市 + 620101 市辖区 + 620102 城关区 + 620103 七里河区 + 620104 西固区 + 620105 安宁区 + 620111 红古区 + 620121 永登县 + 620122 皋兰县 + 620123 榆中县 + 620200 嘉峪关市 + 620201 市辖区 + 620300 金昌市 + 620301 市辖区 + 620302 金川区 + 620321 永昌县 + 620400 白银市 + 620401 市辖区 + 620402 白银区 + 620403 平川区 + 620421 靖远县 + 620422 会宁县 + 620423 景泰县 + 620500 天水市 + 620501 市辖区 + 620502 秦城区 + 620503 北道区 + 620521 清水县 + 620522 秦安县 + 620523 甘谷县 + 620524 武山县 + 620525 张家川回族自治县 + 620600 武威市 + 620601 市辖区 + 620602 凉州区 + 620621 民勤县 + 620622 古浪县 + 620623 天祝藏族自治县 + 620700 张掖市 + 620701 市辖区 + 620702 甘州区 + 620721 肃南裕固族自治县 + 620722 民乐县 + 620723 临泽县 + 620724 高台县 + 620725 山丹县 + 620800 平凉市 + 620801 市辖区 + 620802 崆峒区 + 620821 泾川县 + 620822 灵台县 + 620823 崇信县 + 620824 华亭县 + 620825 庄浪县 + 620826 静宁县 + 620900 酒泉市 + 620901 市辖区 + 620902 肃州区 + 620921 金塔县 + 620922 安西县 + 620923 肃北蒙古族自治县 + 620924 阿克塞哈萨克族自治县 + 620981 玉门市 + 620982 敦煌市 + 621000 庆阳市 + 621001 市辖区 + 621002 西峰区 + 621021 庆城县 + 621022 环县 + 621023 华池县 + 621024 合水县 + 621025 正宁县 + 621026 宁县 + 621027 镇原县 + 621100 定西市 + 621101 市辖区 + 621102 安定区 + 621121 通渭县 + 621122 陇西县 + 621123 渭源县 + 621124 临洮县 + 621125 漳县 + 621126 岷县 + 622600 陇南地区 + 622621 武都县 + 622623 宕昌县 + 622624 成县 + 622625 康县 + 622626 文县 + 622627 西和县 + 622628 礼县 + 622629 两当县 + 622630 徽县 + 622900 临夏回族自治州 + 622901 临夏市 + 622921 临夏县 + 622922 康乐县 + 622923 永靖县 + 622924 广河县 + 622925 和政县 + 622926 东乡族自治县 + 622927 积石山保安族东乡族撒拉族自治县 + 623000 甘南藏族自治州 + 623001 合作市 + 623021 临潭县 + 623022 卓尼县 + 623023 舟曲县 + 623024 迭部县 + 623025 玛曲县 + 623026 碌曲县 + 623027 夏河县 + 630000 青海省 + 630100 西宁市 + 630101 市辖区 + 630102 城东区 + 630103 城中区 + 630104 城西区 + 630105 城北区 + 630121 大通回族土族自治县 + 630122 湟中县 + 630123 湟源县 + 632100 海东地区 + 632121 平安县 + 632122 民和回族土族自治县 + 632123 乐都县 + 632126 互助土族自治县 + 632127 化隆回族自治县 + 632128 循化撒拉族自治县 + 632200 海北藏族自治州 + 632221 门源回族自治县 + 632222 祁连县 + 632223 海晏县 + 632224 刚察县 + 632300 黄南藏族自治州 + 632321 同仁县 + 632322 尖扎县 + 632323 泽库县 + 632324 河南蒙古族自治县 + 632500 海南藏族自治州 + 632521 共和县 + 632522 同德县 + 632523 贵德县 + 632524 兴海县 + 632525 贵南县 + 632600 果洛藏族自治州 + 632621 玛沁县 + 632622 班玛县 + 632623 甘德县 + 632624 达日县 + 632625 久治县 + 632626 玛多县 + 632700 玉树藏族自治州 + 632721 玉树县 + 632722 杂多县 + 632723 称多县 + 632724 治多县 + 632725 囊谦县 + 632726 曲麻莱县 + 632800 海西蒙古族藏族自治州 + 632801 格尔木市 + 632802 德令哈市 + 632821 乌兰县 + 632822 都兰县 + 632823 天峻县 + 640000 宁夏回族自治区 + 640100 银川市 + 640101 市辖区 + 640104 兴庆区 + 640105 西夏区 + 640106 金凤区 + 640122 贺兰县 + 640181 灵武市 + 640200 石嘴山市 + 640201 市辖区 + 640202 大武口区 + 640205 惠农区 + 640221 平罗县 + 640300 吴忠市 + 640301 市辖区 + 640302 利通区 + 640323 盐池县 + 640324 同心县 + 640381 青铜峡市 + 640400 固原市 + 640401 市辖区 + 640402 原州区 + 640422 西吉县 + 640423 隆德县 + 640424 泾源县 + 640425 彭阳县 + 640500 中卫市 + 640501 市辖区 + 640502 沙坡头区 + 640521 中宁县 + 640522 海原县 + 650000 新疆维吾尔自治区 + 650100 乌鲁木齐市 + 650101 市辖区 + 650102 天山区 + 650103 沙依巴克区 + 650104 新市区 + 650105 水磨沟区 + 650106 头屯河区 + 650107 达坂城区 + 650108 东山区 + 650121 乌鲁木齐县 + 650200 克拉玛依市 + 650201 市辖区 + 650202 独山子区 + 650203 克拉玛依区 + 650204 白碱滩区 + 650205 乌尔禾区 + 652100 吐鲁番地区 + 652101 吐鲁番市 + 652122 鄯善县 + 652123 托克逊县 + 652200 哈密地区 + 652201 哈密市 + 652222 巴里坤哈萨克自治县 + 652223 伊吾县 + 652300 昌吉回族自治州 + 652301 昌吉市 + 652302 阜康市 + 652303 米泉市 + 652323 呼图壁县 + 652324 玛纳斯县 + 652325 奇台县 + 652327 吉木萨尔县 + 652328 木垒哈萨克自治县 + 652700 博尔塔拉蒙古自治州 + 652701 博乐市 + 652722 精河县 + 652723 温泉县 + 652800 巴音郭楞蒙古自治州 + 652801 库尔勒市 + 652822 轮台县 + 652823 尉犁县 + 652824 若羌县 + 652825 且末县 + 652826 焉耆回族自治县 + 652827 和静县 + 652828 和硕县 + 652829 博湖县 + 652900 阿克苏地区 + 652901 阿克苏市 + 652922 温宿县 + 652923 库车县 + 652924 沙雅县 + 652925 新和县 + 652926 拜城县 + 652927 乌什县 + 652928 阿瓦提县 + 652929 柯坪县 + 653000 克孜勒苏柯尔克孜自治州 + 653001 阿图什市 + 653022 阿克陶县 + 653023 阿合奇县 + 653024 乌恰县 + 653100 喀什地区 + 653101 喀什市 + 653121 疏附县 + 653122 疏勒县 + 653123 英吉沙县 + 653124 泽普县 + 653125 莎车县 + 653126 叶城县 + 653127 麦盖提县 + 653128 岳普湖县 + 653129 伽师县 + 653130 巴楚县 + 653131 塔什库尔干塔吉克自治县 + 653200 和田地区 + 653201 和田市 + 653221 和田县 + 653222 墨玉县 + 653223 皮山县 + 653224 洛浦县 + 653225 策勒县 + 653226 于田县 + 653227 民丰县 + 654000 伊犁哈萨克自治州 + 654002 伊宁市 + 654003 奎屯市 + 654021 伊宁县 + 654022 察布查尔锡伯自治县 + 654023 霍城县 + 654024 巩留县 + 654025 新源县 + 654026 昭苏县 + 654027 特克斯县 + 654028 尼勒克县 + 654200 塔城地区 + 654201 塔城市 + 654202 乌苏市 + 654221 额敏县 + 654223 沙湾县 + 654224 托里县 + 654225 裕民县 + 654226 和布克赛尔蒙古自治县 + 654300 阿勒泰地区 + 654301 阿勒泰市 + 654321 布尔津县 + 654322 富蕴县 + 654323 福海县 + 654324 哈巴河县 + 654325 青河县 + 654326 吉木乃县 + 659000 省直辖行政单位 + 659001 石河子市 + 659002 阿拉尔市 + 659003 图木舒克市 + 659004 五家渠市 + 710000 台湾省 + 810000 香港特别行政区 + 820000 澳门特别行政区 diff --git a/dkhjziye333.js b/dkhjziye333.js new file mode 100644 index 000000000..2f3a3a227 --- /dev/null +++ b/dkhjziye333.js @@ -0,0 +1,681 @@ +/*ziye + +说明:微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.png 获取授权 + +10.8 一共20个,自行删减替换(不一定都能提现,可自行关闭) +10.14 因为大部分打卡失效,现删减整理,剩余5个 +10.28 增加京优打卡和云端打卡 +注意 久诺打卡用本地js 改ck=2 进行获取 +11.14 剔除无用打卡 剩余4个 +11.19 恢复微打卡 剩余5个 必须用本地文件获取微打卡的ck + +功能如下: +1.读秒限速打卡, +2.打卡币统计,次数统计 +3.现金统计,自动兑换,自动提现 (默认关闭兑换和提现,自行打开) + + +一,第一次进一定先授权,第一次进一定先授权,第一次进一定先授权, + +二,将hostname复制粘贴进配置文件 + +三,将重写复制到 rewrite_local 下,开启软件,进对应程序获取ck(会卡住,但是可以获取ck),目前一共9个打卡小程序, + +建议新建配置片段,获取ck后禁用, +换号则复制js文件,修改jbid的值就可以了 + + + +ck=1 + +音乐打卡 +早起打卡 +云端打卡 +久诺打卡 + + +ck=2 +微打卡 + + + +时间设置 + +!!!删除第一个*后面的空格!!! 自行模拟人性化修改选择 + + +5位 第一位为分 填 10-59 如 + +* /12 6-23 * * * dkhjziye925.js +6点到23点 0 12 24 36 48 运行1次 + + +6位 第一位为秒 填 0-59 第二位为分 填 10-59 如 + +23 * /13 6-23 * * * dkhjziye925.js +6点到23点 0 13 26 39 52 的23秒运行1次 + + + +打卡限速默认设置10分钟一次,可根据情况修改, + + + + +hostname=www.baimaa.com,ph0001.hezyq.com,cps.0day.fun,am.kuqi5.cn,zm.shujumagician.com, + +############## 圈x + +//音乐打卡 +https:\/\/www\.baimaa\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js + + +// 早起打卡 +https:\/\/ph0001\.hezyq\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js + + + +//云端打卡 +https:\/\/cps\.0day\.fun\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js + + + +//久诺打卡 +https:\/\/am\.kuqi5\.cn\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js + + + +//微打卡 +https:\/\/zm\.shujumagician\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js + + + + +############## loon + + +//音乐打卡 +http-request https:\/\/www\.baimaa\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + +// 早起打卡 +http-request https:\/\/ph0001\.hezyq\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + +//云端打卡 +http-request https:\/\/cps\.0day\.fun\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + +//久诺打卡 +http-request https:\/\/am\.kuqi5\.cn\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + + + + +//微打卡 +http-request https:\/\/zm\.shujumagician\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + +############## surge + +//音乐打卡 +音乐打卡 = type=http-request,pattern=https:\/\/www\.baimaa\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + +// 早起打卡 +早起打卡 = type=http-request,pattern=https:\/\/ph0001\.hezyq\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + + +//云端打卡 +云端打卡 = type=http-request,pattern=https:\/\/cps\.0day\.fun\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + + +//久诺打卡 +久诺打卡 = type=http-request,pattern=https:\/\/am\.kuqi5\.cn\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + + +//微打卡 +微打卡= type=http-request,pattern=https:\/\/zm\.shujumagician\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.js, requires-body=true + + +*/ + +//////////////////////////////////////////正文 + +const CK=1// 修改ck 获取对应程序cookie + +const jsname = '打卡合集' +const $ = new Env(jsname)//模版引用 +const jbid =1// 换号则复制js,修改jbid的值就可以了 +const notify = 1; //通知开为1,关为0 +const logs = 0; // 日志开为1,关为0 + +const dk=1//打卡开关 +const tj=1//统计开关 +const xj=1//现金开关 +const dm=1//读秒开关 +const tx=0//提现开关 +const dh=0//兑换开关 +const dd=2//运行时间,单位为秒 + +var tz=''//通知循环 + + + + +const yydkname = "音乐打卡";//程序名 +const yydkid = 11;//ck id +const yydkcs = 10;//打卡次数 +const yydktx = 10;//提现标准 +const yydkxs = 10;//限速标准.单位为分钟 +const yydkdh = 10;//兑换标准 +const yydkdhid = 22;//兑换id +const yydkdhsp = "1元";//兑换商品 +const yydkkey = "yydkkey"+jbid //保存ck +const yydkurl =$.getdata(yydkkey)//读取ck + + + + + + + + + + +const zqdkname = "早起打卡";//程序名 +const zqdkid = 597;//ck id +const zqdkcs = 20;//打卡次数 +const zqdktx = 10;//提现标准 +const zqdkxs = 10;//限速标准.单位为分钟 +const zqdkdh = 5000;//兑换标准 +const zqdkdhid = 6;//兑换id +const zqdkdhsp = "1元";//兑换商品 +const zqdkkey = "zqdkkey"+jbid //保存ck +const zqdkurl =$.getdata(zqdkkey)//读取ck + + + + + + + + + + +const yddkname = "云端打卡";//程序名 +const yddkid = 2;//ck id +const yddkcs = 10;//打卡次数 +const yddktx = 10;//提现标准 +const yddkxs = 10;//限速标准.单位为分钟 +const yddkdh = 3500;//兑换标准 +const yddkdhid = 4;//兑换id +const yddkdhsp = "50元话费";//兑换商品 +const yddkkey = "yddkkey"+jbid //保存ck +const yddkurl =$.getdata(yddkkey)//读取ck + + + + + + +const jndkname = "久诺打卡";//程序名 +const jndkid = 8;//ck id +const jndkcs = 10;//打卡次数 +const jndktx = 10;//提现标准 +const jndkxs = 10;//限速标准.单位为分钟 +const jndkdh = 3500;//兑换标准 +const jndkdhid = 4;//兑换id +const jndkdhsp = "50元话费";//兑换商品 +const jndkkey = "jndkkey"+jbid //保存ck +const jndkurl =$.getdata(jndkkey)//读取ck + + + + + + +const wdkname = "微打卡";//程序名 +const wdkid = 2;//ck id +const wdkcs = 20;//打卡次数 +const wdktx = 10;//提现标准 +const wdkxs = 10;//限速标准.单位为分钟 +const wdkdh = 13000;//兑换标准 +const wdkdhid = 9;//兑换id +const wdkdhsp = "腾讯月卡";//兑换商品 +const wdkkey = "wdkkey"+jbid //保存ck +const wdkurl =$.getdata(wdkkey)//读取ck + + + + + + + + + +//CK运行 + +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + all() +} + + + + + +//1异步运行 + + + function all() + + { + + for(var i=0;i<6;i++) + { (function(i) { + setTimeout(function() { + + + + +if(i==0) jndk(i); + +else if(i==1) yddk(i); + +else if(i==2) yydk(i); + +else if(i==3) zqdk(i); + +else if(i==4) wdk(i); + +else if(i==5) showmsg(i); + + + +}, (i + 1) * dd*1000); + })(i) + + + + +}} + + + + + + + + +//CK获取模块 +function GetCookie() { + +/////////////////////CK=1 + +if (CK==1) +{ + + + + +if ($request && $request.url.match(/i=2&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const yddkurl = $request.url + $.log(`yddkurl:${yddkurl}`) + if (yddkurl) $.setdata(yddkurl, yddkkey) + $.msg(yddkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=8&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const jndkurl = $request.url + $.log(`jndkurl:${jndkurl}`) + if (jndkurl) $.setdata(jndkurl, jndkkey) + $.msg(jndkkey, `获取cookie: 成功🎉`, ``) +} + + + + + +if ($request && $request.url.match(/i=11&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const yydkurl = $request.url + $.log(`yydkurl:${yydkurl}`) + if (yydkurl) $.setdata(yydkurl, yydkkey) + $.msg(yydkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=597&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const zqdkurl = $request.url + $.log(`zqdkurl:${zqdkurl}`) + if (zqdkurl) $.setdata(zqdkurl, zqdkkey) + $.msg(zqdkkey, `获取cookie: 成功🎉`, ``) +} + + + +} + + + + if (CK==2) +{ + + +if ($request && $request.url.match(/i=2&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const wdkurl = $request.url + $.log(`wdkurl:${wdkurl}`) + if (wdkurl) $.setdata(wdkurl, wdkkey) + $.msg(wdkkey, `获取cookie: 成功🎉`, ``) +} + + + } + + + +} + + + + +///////////////////////////////////////运行 + + + + +function yydk() { +var A={Y:[yydkurl,yydkname,yydkcs,yydktx,yydkxs,yydkdh,yydkdhid,yydkdhsp]} +B(A) +} + + + + + +function zqdk() { +var A={Y:[zqdkurl,zqdkname,zqdkcs,zqdktx,zqdkxs,zqdkdh,zqdkdhid,zqdkdhsp]} +B(A) +} + + + + + +function yddk() { +var A={Y:[yddkurl,yddkname,yddkcs,yddktx,yddkxs,yddkdh,yddkdhid,yddkdhsp]} +B(A) +} + + + + + +function jndk() { +var A={Y:[jndkurl,jndkname,jndkcs,jndktx,jndkxs,jndkdh,jndkdhid,jndkdhsp]} +B(A) +} + + + + + +function wdk() { +var A={Y:[wdkurl,wdkname,wdkcs,wdktx,wdkxs,wdkdh,wdkdhid,wdkdhsp]} +B(A) +} + + + + + + + + + + +function B(C) { + +return new Promise((resolve, reject) => { + + +const Tjurl = {url: C.Y[0]}; +const Xjurl = {url: C.Y[0].replace(/action=today&contr=index/g, `action=index&contr=my`)}; +const Logurl = {url: C.Y[0].replace(/action=today&contr=index/g, `action=log&contr=clock&level=1&p=1&today=1`)}; + +const Dhurl = {url: C.Y[0].replace(/action=today&contr=index/g, `action=index&contr=shop`)}; + +const Dhspurl = {url: C.Y[0].replace(/do=distribute/g, `do=exchange&id=${C.Y[6]}`)}; + + + + +const Txurl = {url: C.Y[0].replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${C.Y[3]}&payment_code=`)}; + +const Dkurl = {url: C.Y[0].replace(/action=today&contr=index/g, `action=sign&contr=clock`) + }; + + + +//统计打卡 + +if (tj==1) +$.get(Tjurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}统计 - data: ${data}`) + tbj = JSON.parse(data) +if(tbj.status == 1 && tbj.info.today.clock < C.Y[2]){tz+=C.Y[1]+'[账户信息]👤'+ +'已打卡'+[Number(tbj.info.today.clock) ]+'/'+C.Y[2]+'次'+',得'+[Number(tbj.info.today.currency)]+'币'+'\n' + } +else {tz+=C.Y[1]+'[打卡完成]✅'+'得'+[Number(tbj.info.today.currency)]+'币'+'\n'} + + +if (dk==1&&tbj.info.today.clock==0){ + $.get(Dkurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}打卡- data: ${data}`) + dbj = JSON.parse(data) +if (dbj.status==1){ +tz+=C.Y[1]+'[打卡成功]🎉'+'打卡次数+1'+'\n' + + } + + +resolve() + + }) + + +} + + + + + + + + + + +//读秒打卡 + + +if (dm==1) + $.get(Logurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}限速- data: ${data}`) + ybj = JSON.parse(data) + +var f=ybj.info.log.length-1 +var time = ybj.info.log[f].created +var newtime=time.replace(time[10],'T') +var c = new Date(newtime)/1000 +var now = new Date()/1000 +var cz=[Number((now+28800-c)/60).toFixed(0)] + +if (czC.Y[4]&&tbj.info.today.clock{ + if(logs)$.log(`${C.Y[1]}打卡- data: ${data}`) + dbj = JSON.parse(data) +if (dbj.status==1){ +tz+=C.Y[1]+'[打卡成功]🎉'+'打卡次数+1'+'\n' + + } + + +resolve() + + }) + + +} + + + +resolve() + }) + + + + + + +resolve() + }) + + + +//兑换 +if (dh==1) + $.get(Dhurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}兑换 - data: ${data}`) + Mbj= JSON.parse(data) +if(Mbj.status == 1) +{tz+=C.Y[1]+"[总打卡币]💰"+'余'+ +Mbj.info.member.currency+"币"+"\n" + + } + + + + + +if (dh==1&&Mbj.info.member.currency>=C.Y[5]){ + $.get(Dhspurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}兑换商品 - data: ${data}`) + nbj = JSON.parse(data) +if(nbj.status == 1) { + +tz+=C.Y[1]+'[兑换成功]🧧,成功兑换'+C.Y[7] ++'\n' + + } + +else { + +tz+=C.Y[1]+'[兑换失败]❓:'+nbj.info+'\n' + + } + +resolve() + + }) + + +} + + + +resolve() + }) + + + + + +//现金提现 +if (xj==1) + $.get(Xjurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}现金 - data: ${data}`) + xbj = JSON.parse(data) +if(xbj.status == 1) +{tz+=C.Y[1]+'[现金余额]💵'+xbj.info.member.money+'元'+'\n' + + } + + + + + +if (tx==1&&xbj.info.member.money>=C.Y[3]){ + $.get(Txurl,(error, response, data) =>{ + if(logs)$.log(`${C.Y[1]}提现 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1) { + +tz+=C.Y[1]+'[提现成功]🧧,提现'+C.Y[3]+'元'+'\n' + + } + +else { + +tz+=C.Y[1]+'[提现失败]❓:'+obj.info+'\n' + + } + +resolve() + }) + + +} + + + + +resolve() + }) + + + + }) + } + + + + + + +function showmsg() { + + + +if (notify ==1) +$.msg(jsname,'',tz) + + +} + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} + diff --git a/dkhjziye333.png b/dkhjziye333.png new file mode 100644 index 000000000..f8adbb954 Binary files /dev/null and b/dkhjziye333.png differ diff --git a/dkhjziyeck.js b/dkhjziyeck.js new file mode 100644 index 000000000..e96481522 --- /dev/null +++ b/dkhjziyeck.js @@ -0,0 +1,563 @@ +/*ziye + +说明:微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziye333.png 获取授权 + + + + +一,第一次进一定先授权,第一次进一定先授权,第一次进一定先授权, + +二,将hostname复制粘贴进配置文件 + +三,将重写复制到 rewrite_local 下,开启软件,进对应程序获取ck(会卡住,但是可以获取ck),目前一共7个打卡小程序, + +建议新建配置片段,获取ck后禁用, +换号则复制js文件,修改jbid的值就可以了 + + + +ck=1 + +微打卡 +微早起打卡 +音乐打卡 +早起打卡 +圈子打卡 +京优打卡 +每天打卡 + + + +ck=2 + +云端打卡 +久诺打卡 + +用本地js 改ck=2 获取ck + + + + + +时间设置 + +!!!删除第一个*后面的空格!!! 自行模拟人性化修改选择 + + +5位 第一位为分 填 10-59 如 + +* /12 6-23 * * * dkhjziye925.js +6点到23点 0 12 24 36 48 运行1次 + + +6位 第一位为秒 填 0-59 第二位为分 填 10-59 如 + +23 * /13 6-23 * * * dkhjziye925.js +6点到23点 0 13 26 39 52 的23秒运行1次 + + + +打卡限速默认设置10分钟一次,可根据情况修改, + + + +hostname=zm.shujumagician.com,www.baimaa.com,ph0001.hezyq.com,daka.isfx.cn,wq.inqan.com,www.zq221727.com,cps.0day.fun,am.kuqi5.cn,w.1688sywh.com, + +############## 圈x + +//微打卡 微早起打卡 +https:\/\/zm\.shujumagician\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + +//音乐打卡 +https:\/\/www\.baimaa\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + +// 早起打卡 +https:\/\/ph0001\.hezyq\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + + +//圈子打卡 +https:\/\/wq\.inqan\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + + + +//京优打卡 +https:\/\/www\.zq221727\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + + + +//云端打卡 +https:\/\/cps\.0day\.fun\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + + + + + +//久诺打卡 +https:\/\/am\.kuqi5\.cn\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + + + +//每天打卡 +https:\/\/w\.1688sywh\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js + + + + + + + + + + + + +############## loon + +//微打卡 微早起打卡 +http-request https:\/\/zm\.shujumagician\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + +//音乐打卡 +http-request https:\/\/www\.baimaa\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + +// 早起打卡 +http-request https:\/\/ph0001\.hezyq\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + +//圈子打卡 +http-request https:\/\/wq\.inqan\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + +//京优打卡 +http-request https:\/\/www\.zq221727\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + +//云端打卡 +http-request https:\/\/cps\.0day\.fun\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + + + +//久诺打卡 +http-request https:\/\/am\.kuqi5\.cn\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + +//每天打卡 +http-request https:\/\/w\.1688sywh\.com\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + + + + + + +############## surge + +//微打卡 微早起打卡 +微打卡 微早起打卡 = type=http-request,pattern=https:\/\/zm\.shujumagician\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + +//音乐打卡 +音乐打卡 = type=http-request,pattern=https:\/\/www\.baimaa\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + +// 早起打卡 +早起打卡 = type=http-request,pattern=https:\/\/ph0001\.hezyq\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + +//圈子打卡 +圈子打卡 = type=http-request,pattern=https:\/\/wq\.inqan\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + +//京优打卡 +京优打卡 = type=http-request,pattern=https:\/\/www\.zq221727\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + +//云端打卡 +云端打卡 = type=http-request,pattern=https:\/\/cps\.0day\.fun\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + +//久诺打卡 +久诺打卡 = type=http-request,pattern=https:\/\/am\.kuqi5\.cn\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + +//每天打卡 +每天打卡 = type=http-request,pattern=https:\/\/w\.1688sywh\.com\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/dkhjziyeck.js, requires-body=true + + + + + + + + + + + + + +*/ + +//////////////////////////////////////////正文 + +const CK=2// 修改ck 获取对应程序cookie + +const jsname = '打卡合集' +const $ = new Env(jsname)//模版引用 +const jbid =1// 换号则复制js,修改jbid的值就可以了 +const notify = 1; //通知开为1,关为0 +const logs = 0; // 日志开为1,关为0 + + + + +const wdkname = "微打卡";//程序名 +const wdkid = 2;//ck id +const wdkcs = 20;//打卡次数 +const wdktx = 10;//提现标准 +const wdkxs = 10;//限速标准.单位为分钟 +const wdkdh = 13000;//兑换标准 +const wdkdhid = 9;//兑换id +const wdkdhsp = "腾讯月卡";//兑换商品 +const wdkkey = "wdkkey"+jbid //保存ck +const wdkurl =$.getdata(wdkkey)//读取ck + + + + + + + +const wzqdkname = "微早起打卡";//程序名 +const wzqdkid = 8;//ck id +const wzqdkcs = 20;//打卡次数 +const wzqdktx = 10;//提现标准 +const wzqdkxs = 10;//限速标准.单位为分钟 +const wzqdkdh = 13000;//兑换标准 +const wzqdkdhid = 10;//兑换id +const wzqdkdhsp = "腾讯月卡";//兑换商品 +const wzqdkkey = "wzqdkkey"+jbid //保存ck +const wzqdkurl =$.getdata(wzqdkkey)//读取ck + + + + +const yydkname = "音乐打卡";//程序名 +const yydkid = 11;//ck id +const yydkcs = 10;//打卡次数 +const yydktx = 10;//提现标准 +const yydkxs = 10;//限速标准.单位为分钟 +const yydkdh = 10;//兑换标准 +const yydkdhid = 22;//兑换id +const yydkdhsp = "1元";//兑换商品 +const yydkkey = "yydkkey"+jbid //保存ck +const yydkurl =$.getdata(yydkkey)//读取ck + + + + + + + + + + +const zqdkname = "早起打卡";//程序名 +const zqdkid = 597;//ck id +const zqdkcs = 20;//打卡次数 +const zqdktx = 10;//提现标准 +const zqdkxs = 10;//限速标准.单位为分钟 +const zqdkdh = 5000;//兑换标准 +const zqdkdhid = 6;//兑换id +const zqdkdhsp = "1元";//兑换商品 +const zqdkkey = "zqdkkey"+jbid //保存ck +const zqdkurl =$.getdata(zqdkkey)//读取ck + + + + +const qzdkname = "圈子打卡";//程序名 +const qzdkid = 9;//ck id +const qzdkcs = 20;//打卡次数 +const qzdktx = 10;//提现标准 +const qzdkxs = 10;//限速标准.单位为分钟 +const qzdkdh = 3500;//兑换标准 +const qzdkdhid = 4;//兑换id +const qzdkdhsp = "50元话费";//兑换商品 +const qzdkkey = "qzdkkey"+jbid //保存ck +const qzdkurl =$.getdata(qzdkkey)//读取ck + + + + + +const jydkname = "京优打卡";//程序名 +const jydkid = 39;//ck id +const jydkcs = 5;//打卡次数 +const jydktx = 10;//提现标准 +const jydkxs = 10;//限速标准.单位为分钟 +const jydkdh = 3500;//兑换标准 +const jydkdhid = 4;//兑换id +const jydkdhsp = "50元话费";//兑换商品 +const jydkkey = "jydkkey"+jbid //保存ck +const jydkurl =$.getdata(jydkkey)//读取ck + + + + +const yddkname = "云端打卡";//程序名 +const yddkid = 2;//ck id +const yddkcs = 10;//打卡次数 +const yddktx = 10;//提现标准 +const yddkxs = 10;//限速标准.单位为分钟 +const yddkdh = 3500;//兑换标准 +const yddkdhid = 4;//兑换id +const yddkdhsp = "50元话费";//兑换商品 +const yddkkey = "yddkkey"+jbid //保存ck +const yddkurl =$.getdata(yddkkey)//读取ck + + + + + + +const jndkname = "久诺打卡";//程序名 +const jndkid = 8;//ck id +const jndkcs = 10;//打卡次数 +const jndktx = 10;//提现标准 +const jndkxs = 10;//限速标准.单位为分钟 +const jndkdh = 3500;//兑换标准 +const jndkdhid = 4;//兑换id +const jndkdhsp = "50元话费";//兑换商品 +const jndkkey = "jndkkey"+jbid //保存ck +const jndkurl =$.getdata(jndkkey)//读取ck + + + + +const mtdkname = "每天打卡";//程序名 +const mtdkid = 57;//ck id +const mtdkcs = 10;//打卡次数 +const mtdktx = 10;//提现标准 +const mtdkxs = 10;//限速标准.单位为分钟 +const mtdkdh = 3500;//兑换标准 +const mtdkdhid = 4;//兑换id +const mtdkdhsp = "50元话费";//兑换商品 +const mtdkkey = "mtdkkey"+jbid //保存ck +const mtdkurl =$.getdata(mtdkkey)//读取ck + + + + + + + + + + + +//CK运行 + +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} + + + + + + + + + + +//CK获取模块 +function GetCookie() { + +/////////////////////CK=1 + +if (CK==1) +{ + +if ($request && $request.url.match(/i=2&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const wdkurl = $request.url + $.log(`wdkurl:${wdkurl}`) + if (wdkurl) $.setdata(wdkurl, wdkkey) + $.msg(wdkkey, `获取cookie: 成功🎉`, ``) +} + + + + + + +if ($request && $request.url.match(/i=8&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const wzqdkurl = $request.url + $.log(`wzqdkurl:${wzqdkurl}`) + if (wzqdkurl) $.setdata(wzqdkurl, wzqdkkey) + $.msg(wzqdkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=11&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const yydkurl = $request.url + $.log(`yydkurl:${yydkurl}`) + if (yydkurl) $.setdata(yydkurl, yydkkey) + $.msg(yydkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=597&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const zqdkurl = $request.url + $.log(`zqdkurl:${zqdkurl}`) + if (zqdkurl) $.setdata(zqdkurl, zqdkkey) + $.msg(zqdkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=9&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const qzdkurl = $request.url + $.log(`qzdkurl:${qzdkurl}`) + if (qzdkurl) $.setdata(qzdkurl, qzdkkey) + $.msg(qzdkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=39&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const jydkurl = $request.url + $.log(`jydkurl:${jydkurl}`) + if (jydkurl) $.setdata(jydkurl, jydkkey) + $.msg(jydkkey, `获取cookie: 成功🎉`, ``) +} + + + + + +if ($request && $request.url.match(/i=39&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const mtdkurl = $request.url + $.log(`mtdkurl:${mtdkurl}`) + if (mtdkurl) $.setdata(mtdkurl, mtdkkey) + $.msg(mtdkkey, `获取cookie: 成功🎉`, ``) +} + + + + + + +} + + + + + + + + +if (CK==2) +{ + + + + + +if ($request && $request.url.match(/i=2&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const yddkurl = $request.url + $.log(`yddkurl:${yddkurl}`) + if (yddkurl) $.setdata(yddkurl, yddkkey) + $.msg(yddkkey, `获取cookie: 成功🎉`, ``) +} + + + + +if ($request && $request.url.match(/i=8&/)) +if ($request && $request.url.match(/action=today&contr=index/)) +{const jndkurl = $request.url + $.log(`jndkurl:${jndkurl}`) + if (jndkurl) $.setdata(jndkurl, jndkkey) + $.msg(jndkkey, `获取cookie: 成功🎉`, ``) +} + + + + + + +} + + + + + + + + +} + + + + + + + + + + + + + + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} + diff --git a/flwhbziye.js b/flwhbziye.js new file mode 100644 index 000000000..828762452 --- /dev/null +++ b/flwhbziye.js @@ -0,0 +1,287 @@ + +/*ziye + +//返利网1212天天领现金,活动时间 12月 5号 9号到12号 +每天1.95 + +下载地址 http://m.a8fdj.cn/Invite/promotion?id=775&spm=page_name.h5.pty-wxzcpv~std-65354&go=http%3A%2F%2Fhuodong.a8fdj.cn%2Fh5%2FInvitefriendsreward%2FregisterCallback%3Fuserid%3D373511081%26id%3D775%26sn%3D47ecab06aba43e015082e531d8214eb5 + +下载后登录 + +进入 我的 点击 天天领现金 获取cookie + +⚠️会卡住,但是能获取到cookie,然后注释重写就行了! +提现请先微信关注返利网公众号 + +hostname=huodong.fanli.com, + +时间👇 + +0 1-16 10 5,9,10,11,12 * * + + + +#返利网红包 +############## 圈x +https:\/\/huodong\.fanli\.com\/h5\/Fanlishare20201212\/ajaxInit url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/flwhbziye.js + + + +#返利网红包 +############## loon + + +http-request https:\/\/huodong\.fanli\.com\/h5\/Fanlishare20201212\/ajaxDoTask76728 script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/flwhbziye.js,requires-header=true, tag=返利网红包获取cookie + + +#返利网红包 +############## surge + +返利网红包 = type=http-request,pattern=https:\/\/huodong\.fanli\.com\/h5\/Fanlishare20201212\/ajaxDoTask76728,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/flwhbziye.js, + + + + + + +*/ + + + + + +const jsname='返利网红包' +const $ = Env(jsname) + + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval=1//0为关闭通知,1为开启 +const jbid=1; +const txbz=1.95//设置余额大于等于多少提现,必须大于0.3 + + + + + +const flwhburlKey = 'flwhburl'+jbid + +const flwhbheaderKey = 'flwhbhd'+jbid + + + +const flwhburlVal = $.getdata(flwhburlKey) + +const flwhbheaderVal = $.getdata(flwhbheaderKey) + +const flwhbbodyVal = '' + + + + + + + + + +var tz='' + + +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie(); + $.done(); +} else { + all() +} + + + + + +function GetCookie() { + + + + if($request &&$request.url.indexOf("ajaxInit")>=0) { + + const flwhburlVal = $request.url +if (flwhburlVal) $.setdata(flwhburlVal,flwhburlKey) + $.log(`[${jsname}] 获取url请求: 成功,flwhburlVal: ${flwhburlVal}`) +const flwhbheaderVal = JSON.stringify($request.headers) + if (flwhbheaderVal) $.setdata(flwhbheaderVal,flwhbheaderKey) + $.log(`[${jsname}] 获取Cookie: 成功,flwhbheaderVal: ${flwhbheaderVal}`) + $.msg(flwhbheaderKey, `获取Cookie: 成功🎉`, ``) + + + } + +} + + + + + + + + + + + + + function all() + + { + + for(var i=0;i<3;i++) + { (function(i) { + setTimeout(function() { + + if(i==0) flwhbtask(); + if(i==1) flwhblh(); + +else if(i==2) { +showmsg() +$.done()} +}, (i + 1) *500); + })(i) + + +}} + + + +//账户信息 +function flwhbtask() { +return new Promise((resolve, reject) => { + + const toflwhburl = { + + url: flwhburlVal, + + headers: JSON.parse(flwhbheaderVal), + body: flwhbbodyVal + }; + $.get(toflwhburl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 账户信息: ${data}`) + signinfo =JSON.parse(data) + if (signinfo.status==1) + { +tz+='【收益总计】🎉:'+signinfo.data.user_total_money+'元'+'\n'+ +'【账户余额】🎉:'+signinfo.data.user_current_money+'\n'+ +'【今日奖励】🎉:'+signinfo.data.get_money_76728+'元'+'\n' + +} + +else +tz+='【出现问题】✖️:'+signinfo.data+'\n' + +zhtx(signinfo.data.user_current_money) + + + + + resolve() + }) + }) + } + + + + +//惊喜礼盒 +function flwhblh() { +return new Promise((resolve, reject) => { + + const toflwhblhurl = { + + url: flwhburlVal.replace(/ajaxInit/g, `ajaxDoTask76728`), + + headers: JSON.parse(flwhbheaderVal), + body: flwhbbodyVal + }; + $.get(toflwhblhurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 惊喜礼盒: ${data}`) + jxlh =JSON.parse(data) + if (jxlh.data.remain_num_76728>0) + { +tz+='【开启礼盒】🎉:'+jxlh.data.amount+'元'+'\n'+ +'【剩余礼盒】🎉:'+jxlh.data.remain_num_76728+'个'+'\n' + +} + +else +tz+='【开启完毕】✖️:'+'礼盒已全部开启'+'\n' + + + + + resolve() + }) + }) + } + + + + +function zhtx(y) +{ +if(y>=txbz) +flwhbtx() + +} + + + + + + +//提现 +function flwhbtx() { +return new Promise((resolve, reject) => { + + const toflwhbtxurl = { + + url: flwhburlVal.replace(/ajaxInit/g, `ajaxExchangeCash`), + + headers: JSON.parse(flwhbheaderVal), + + }; + $.get(toflwhbtxurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 余额提现: ${data}`) + txtx =JSON.parse(data) + if (txtx.status==1) + { +tz+='【余额提现】🎉:提现成功,请到公众号领取'+'\n' + +} + +else +tz+='【余额提现】✖️:'+txtx.info+'\n' + + + + + resolve() + }) + }) + } + + + + + + + + + +function showmsg() { + + + +if (notifyInterval==1) +$.msg(jsname,'',tz) +} + + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/isdkziye.js b/isdkziye.js deleted file mode 100644 index fd97f7de9..000000000 --- a/isdkziye.js +++ /dev/null @@ -1,344 +0,0 @@ -/*ziye is分享打卡 - -非常重要!!! - -微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/isdkziye.png 进入小程序,登录获取授权,再启动软件获取ck -建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 - - - - -2020.9.9 - -《《《《《《《《《《制作其他打卡js的说明 - -抓包小程序,然后替换以下内容来制作其他打卡js, -需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 - -daka.isfx.cn -is分享打卡 -cs = 10 -xj = 1 -isdkurl -i=2 -isdk - -手动替换 -daka\.isfx\.cn - -制作其他打卡js的说明》》》》》》》》》》》 - - - - - - -////////////////////////////////////////正文 - -使用说明: - -一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/isdkziye.png 进入小程序,登录获取授权 - -二,然后将hostname复制粘贴进配置文件 - -三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 - -功能如下: -1.每日打卡,设置了开关,完成任务不再打卡 -2.打卡币统计, -3.现金统计,自动提现 - - - - - - - -hostname= daka.isfx.cn, - -//surge -is分享打卡 = type=http-request,pattern=^https:\/\/daka\.isfx\.cn\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/isdkziye.js - - -//圈x -https:\/\/daka\.isfx\.cn\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/isdkziye.js - -//loon -http-request ^https:\/\/daka\.isfx\.cn\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/isdkziye.js -, requires-body=true, timeout=10, tag=is分享打卡 - - -*/ - - - -const sy = init()//声明必须 -const notifyInterval = 1; //通知开为1,常关为0 -const logs = 0; // 日志开关 -const jsname = 'is分享打卡' -const jbid =1 -const sb='失败,请先关闭,进入程序获取授权' - -const cs = 10;//小程序打卡次数 -const xj = 1;//提现标准 -var tz='' - -const dkurlkey = 'isdkurl'+jbid -const dkurl = sy.getdata(dkurlkey) - - -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - all() -} - - - -function GetCookie() { -if ($request && $request.url.match(/i=2&/)) -if ($request && $request.url.match(/action=today&contr=index/)) - { - const dkurl = $request.url - sy.log(`dkurl:${dkurl}`) - if (dkurl) sy.setdata(dkurl, dkurlkey) - sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) -} - -} - - -//异步运行 - - -function all() - - { - - for(var i=0;i<3;i++) - { (function(i) { - setTimeout(function() { - - if(i==0) dktj(i); -else if(i==1) dkxj(i); -else if(i==2) showmsg(i); -}, (i + 1) * 1000); - })(i) - - -}} - - - - -//统计 - -function dktj() { -return new Promise((resolve, reject) => { - - const Tjurl = { - url: dkurl - }; - sy.get(Tjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1统计 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ -"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - - - - - -cstj1(obj.info.today.clock); - - - - resolve() - }) - }) - } - - -//次数统计 - - -function cstj1(tjtj) -{ -if (tjtj { - - const Xjurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) - }; - sy.get(Xjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1现金 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - - - - - tz +="💵现金余额"+ -obj.info.member.money+"元"+"\n" - - } - - else tz +=sb+"\n"; - - -xjtj1(obj.info.member.money); - - - - resolve() - }) - }) - } - - - - -//自动提现 - -function dktx() { -return new Promise((resolve, reject) => { - - const Txurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) - }; - sy.get(Txurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1提现 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - -tz +='提现成功,成功提现'+xj+'元'+"\n" - - } - -if(obj.status == 2) { - -tz +='提现失败,原因:'+obj.info+"\n" - - } - - - - - resolve() - }) - }) - } - - - -//现金统计 - - -function xjtj1(tjtj) -{ -if (tjtj>=xj) -dktx() - -} - - - -//打卡 -function dkdk() { -return new Promise((resolve, reject) => { - - const Dkurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) - }; - sy.get(Dkurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1打卡- data: ${data}`) - obj = JSON.parse(data) - - if (obj.status==1){ -tz+='[️打卡任务]:'+'打卡次数+1'+'\n' - - } -else tz +=obj.info+'\n' - - - resolve() - }) - }) - } - - -function showmsg() { - -console.log(tz) - -if (notifyInterval==1) -sy.msg(jsname,'',tz) -} - - -function init() { - isSurge = () => { - return undefined !== this.$httpClient - } - isQuanX = () => { - return undefined !== this.$task - } - getdata = (key) => { - if (isSurge()) return $persistentStore.read(key) - if (isQuanX()) return $prefs.valueForKey(key) - } - setdata = (key, val) => { - if (isSurge()) return $persistentStore.write(key, val) - if (isQuanX()) return $prefs.setValueForKey(key, val) - } - msg = (title, subtitle = '', body = '') => { - if (isSurge()) $notification.post(title, subtitle, body) - if (isQuanX()) $notify(title, subtitle, body) - } - log = (msg) => { - console.log(`${msg}\n`) - } - get = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'GET' - return $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) return $httpClient.get(options, callback) - } - post = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'POST' - $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) $httpClient.post(options, callback) - } - done = (value = {}) => { - $done(value) - } - return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } -} diff --git a/isdkziye.png b/isdkziye.png deleted file mode 100644 index a116c72ad..000000000 Binary files a/isdkziye.png and /dev/null differ diff --git a/ksdkziye.js b/ksdkziye.js deleted file mode 100644 index ae4be1c44..000000000 --- a/ksdkziye.js +++ /dev/null @@ -1,338 +0,0 @@ -/*ziye卡神打卡 - -非常重要!!! - -微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/ksdkziye.png 进入小程序,登录获取授权,再启动软件获取ck -建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 - - - -《《《《《《《《《《制作其他打卡js的说明 - -抓包小程序,然后替换以下内容来制作其他打卡js, -需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 - -dkdk.vvrtf.cn -卡神打卡 -cs = 10 -xj = 1 -ksdkurl -i=3 -ksdk - -手动替换 -dkdk\.vvrtf\.cn - -制作其他打卡js的说明》》》》》》》》》》》 - - - - - - -////////////////////////////////////////正文 - - -使用说明: -一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/ksdkziye.png 进入小程序,登录获取授权 - -二,然后将hostname复制粘贴进配置文件 - -三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 - -功能如下: -1.每日打卡,设置了开关,完成任务不再打卡 -2.打卡币统计, -3.现金统计,自动提现 - - - - - -hostname= dkdk.vvrtf.cn, - -//surge -卡神打卡 = type=http-request,pattern=^https:\/\/dkdk\.vvrtf\.cn\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/ksdkziye.js - -//圈x -https:\/\/dkdk\.vvrtf\.cn\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/ksdkziye.js - -//loon -http-request ^https:\/\/dkdk\.vvrtf\.cn\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/ksdkziye.js -, requires-body=true, timeout=10, tag=卡神打卡 - - -*/ - - - -const sy = init()//声明必须 -const notifyInterval = 1; //通知开为1,常关为0 -const logs = 0; // 日志开关 -const jsname = '卡神打卡' -const jbid =1 -const sb='失败,请先关闭,进入程序获取授权' - -const cs = 10;//小程序打卡次数 -const xj = 1;//提现标准 -var tz='' - -const dkurlkey = 'ksdkurl'+jbid -const dkurl = sy.getdata(dkurlkey) - - -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - all() -} - - - -function GetCookie() { -if ($request && $request.url.match(/i=3&/)) -if ($request && $request.url.match(/action=today&contr=index/)) - { - const dkurl = $request.url - sy.log(`dkurl:${dkurl}`) - if (dkurl) sy.setdata(dkurl, dkurlkey) - sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) -} - -} - - -//异步运行 - - -function all() - - { - - for(var i=0;i<3;i++) - { (function(i) { - setTimeout(function() { - - if(i==0) dktj(i); -else if(i==1) dkxj(i); -else if(i==2) showmsg(i); -}, (i + 1) * 1000); - })(i) - - -}} - - - - -//统计 - -function dktj() { -return new Promise((resolve, reject) => { - - const Tjurl = { - url: dkurl - }; - sy.get(Tjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1统计 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ -"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - - - - - -cstj1(obj.info.today.clock); - - - - resolve() - }) - }) - } - - -//次数统计 - - -function cstj1(tjtj) -{ -if (tjtj { - - const Xjurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) - }; - sy.get(Xjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1现金 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - - - - - tz +="💵现金余额"+ -obj.info.member.money+"元"+"\n" - - } - - else tz +=sb+"\n"; - - -xjtj1(obj.info.member.money); - - - - resolve() - }) - }) - } - - - - -//自动提现 - -function dktx() { -return new Promise((resolve, reject) => { - - const Txurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) - }; - sy.get(Txurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1提现 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - -tz +='提现成功,成功提现'+xj+'元'+"\n" - - } - -if(obj.status == 2) { - -tz +='提现失败,原因:'+obj.info+"\n" - - } - - - - - resolve() - }) - }) - } - - - -//现金统计 - - -function xjtj1(tjtj) -{ -if (tjtj>=xj) -dktx() - -} - - - -//打卡 -function dkdk() { -return new Promise((resolve, reject) => { - - const Dkurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) - }; - sy.get(Dkurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1打卡- data: ${data}`) - obj = JSON.parse(data) - - if (obj.status==1){ -tz+='[️打卡任务]:'+'打卡次数+1'+'\n' - - } -else tz +=obj.info+'\n' - - - resolve() - }) - }) - } - - -function showmsg() { - -console.log(tz) - -if (notifyInterval==1) -sy.msg(jsname,'',tz) -} - - -function init() { - isSurge = () => { - return undefined !== this.$httpClient - } - isQuanX = () => { - return undefined !== this.$task - } - getdata = (key) => { - if (isSurge()) return $persistentStore.read(key) - if (isQuanX()) return $prefs.valueForKey(key) - } - setdata = (key, val) => { - if (isSurge()) return $persistentStore.write(key, val) - if (isQuanX()) return $prefs.setValueForKey(key, val) - } - msg = (title, subtitle = '', body = '') => { - if (isSurge()) $notification.post(title, subtitle, body) - if (isQuanX()) $notify(title, subtitle, body) - } - log = (msg) => { - console.log(`${msg}\n`) - } - get = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'GET' - return $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) return $httpClient.get(options, callback) - } - post = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'POST' - $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) $httpClient.post(options, callback) - } - done = (value = {}) => { - $done(value) - } - return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } -} diff --git a/msdkziye.png b/msdkziye.png new file mode 100644 index 000000000..01b423c51 Binary files /dev/null and b/msdkziye.png differ diff --git a/package.json b/package.json new file mode 100644 index 000000000..64ae63399 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "Sunert", + "version": "1.0.0", + "description": "", + "main": "jingxi.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Sunert/Scripts.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/Sunert/Scripts/issues" + }, + "homepage": "https://github.com/Sunert/Scripts#readme", + "dependencies": { + "crypto-js": "^4.0.0", + "got": "^11.7.0", + "http-server": "^0.12.3", + "tough-cookie": "^4.0.0" + } +} diff --git a/qqread.js b/qqread.js new file mode 100644 index 000000000..cefa0f7fe --- /dev/null +++ b/qqread.js @@ -0,0 +1,641 @@ + +/*ziye + +本人github地址 https://github.com/ziye12/JavaScript +转载请备注个名字,谢谢 + +11.25 增加 阅读时长上传,阅读金币,阅读随机金币 +11.25 修复翻倍宝箱不同时领取的问题.增加阅读金币判定 +11.25 修复阅读时长问题,阅读金币问题,请重新获取时长cookie +11.26 随机金币只有一次,故去除,调整修复阅读金币问题,增加时长上传限制 +11.26 增加领取周时长奖励 +11.26 增加结束命令 +11.27 调整通知为,成功开启宝箱再通知 +11.28 修复错误 +12.1 调整通知为15次宝箱通知一次 +12.1 优化通知 +12.2 修复企鹅更新打卡不了的问题 + +⚠️cookie获取方法: + +进 https://m.q.qq.com/a/s/d3eacc70120b9a37e46bad408c0c4c2a 点我的 获取cookie + +进一本书 看 10秒以下 然后退出,获取阅读时长cookie,看书一定不能超过10秒 + +可能某些页面会卡住,但是能获取到cookie,再注释cookie重写就行了! + + + +⚠️宝箱奖励为20分钟一次,自己根据情况设置定时,建议设置11分钟一次 + +hostname=mqqapi.reader.qq.com + +############## 圈x + +#企鹅读书获取cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js + +#企鹅读书获取时长cookie +https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js + + +############## loon + +//企鹅读书获取cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js,requires-header=true, tag=企鹅读书获取cookie + +//企鹅读书获取时长cookie +http-request https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid? script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true, tag=企鹅读书获取时长cookie + + +############## surge + +//企鹅读书获取cookie +企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/user\/init,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true + +//企鹅读书获取时长cookie +企鹅读书 = type=http-request,pattern=https:\/\/mqqapi\.reader\.qq\.com\/mqq\/addReadTimeWithBid?,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/qqread.js, requires-header=true + + +*/ + +const jsname='企鹅读书' +const $ = Env(jsname) + +console.log(`\n========= 脚本执行时间(TM):${new Date(new Date().getTime() + 0 * 60 * 60 * 1000).toLocaleString('zh', {hour12: false})} =========\n`) + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval=3 +//0为关闭通知,1为所有通知,2为宝箱领取成功通知,3为宝箱每15次通知一次 + +const jbid=1//换号则修改这个值,默认账号1 +const dd=1//单次任务延迟,默认1秒 +const TIME=30//单次时长上传限制,默认5分钟 +const maxtime=20//每日上传时长限制,默认20小时 +const wktimess=1200//周奖励领取标准,默认1200分钟 +var tz='' + +const qqreadurlKey = 'qqreadurl'+jbid +const qqreadurlVal = $.getdata(qqreadurlKey) + +const qqreadheaderKey = 'qqreadhd'+jbid +const qqreadheaderVal= $.getdata(qqreadheaderKey) + +const qqreadtimeurlKey = 'qqreadtimeurl'+jbid +const qqreadtimeurlVal = $.getdata(qqreadtimeurlKey) + +const qqreadtimeheaderKey = 'qqreadtimehd'+jbid +const qqreadtimeheaderVal= $.getdata(qqreadtimeheaderKey) + + +//CK运行 +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + all() +} + +function GetCookie() { + + if($request &&$request.url.indexOf("init")>=0) { + + const qqreadurlVal = $request.url +if (qqreadurlVal) $.setdata(qqreadurlVal,qqreadurlKey) + $.log(`[${jsname}] 获取url请求: 成功,qqreadurlVal: ${qqreadurlVal}`) + + const qqreadbodyVal = $request.body + if (qqreadbodyVal) $.setdata(qqreadbodyVal,qqreadbodyKey) + $.log(`[${jsname}] 获取阅读: 成功,qqreadbodyVal: ${qqreadbodyVal}`) + + + const qqreadheaderVal = JSON.stringify($request.headers) + if (qqreadheaderVal) $.setdata(qqreadheaderVal,qqreadheaderKey) + $.log(`[${jsname}] 获取Cookie: 成功,qqreadheaderVal: ${qqreadheaderVal}`) + $.msg(qqreadheaderKey, `获取cookie: 成功🎉`, ``) + +} + +else if($request &&$request.url.indexOf("addReadTimeWithBid?")>=0) { + const qqreadtimeurlVal = $request.url +if (qqreadtimeurlVal) $.setdata(qqreadtimeurlVal,qqreadtimeurlKey) + $.log(`[${jsname}] 获取阅读时长url: 成功,qqreadtimeurlVal: ${qqreadtimeurlVal}`) + +const qqreadtimeheaderVal = JSON.stringify($request.headers) + if (qqreadtimeheaderVal) $.setdata(qqreadtimeheaderVal,qqreadtimeheaderKey) + $.log(`[${jsname}] 获取时长header: 成功,qqreadtimeheaderVal: ${qqreadtimeheaderVal}`) + $.msg(qqreadtimeheaderKey, `获取阅读时长cookie: 成功🎉`, ``) + + } + +} + + + + +function all() + + { + for(var i=0;i<18;i++) + { (function(i) { + setTimeout(function() { + if (i==0) +qqreadinfo();//用户名 + +else if (i==1) +qqreadconfig();//时长查询 + +else if (i==2) +qqreadtask();//任务列表 + +else if (i==3&&task.data.taskList[2].doneFlag==0) +qqreadsign();//金币签到 + +else if (i==4&&task.data.treasureBox.doneFlag==0) +qqreadbox();//宝箱 + +else if (i==5&&task.data.taskList[1].doneFlag==0) +qqreadssr1();//阅读金币1 + +else if (i==6&&config.data.pageParams.todayReadSeconds/3600<=maxtime) +qqreadtime();//上传时长 + +else if (i==7&&task.data.taskList[2].doneFlag==0) +qqreadtake();//阅豆签到 + +else if (i==8&&task.data.taskList[0].doneFlag==0) +qqreaddayread();//阅读任务 + +else if (i==9&&task.data.taskList[1].doneFlag==0) +qqreadssr2();//阅读金币2 + +else if (i==10&&task.data.taskList[3].doneFlag==0) +qqreadvideo();//视频任务 + +else if(i==11&&task.data.taskList[2].doneFlag==0) +qqreadsign2();//签到翻倍 + +else if (i==12&&task.data.treasureBox.videoDoneFlag==0) +qqreadbox2();//宝箱翻倍 + +else if (i==13&&task.data.taskList[1].doneFlag==0) +qqreadssr3();//阅读金币3 + +else if (i==14) +qqreadwktime();//周时长查询 + +else if (i==15) +qqreadpick();//领周时长奖励 + +else if (i==16) +showmsg();//通知 + +else if (i==17) +$.done();//结束 + + } +, (i + 1) *dd*1000); + })(i) + } +} + + +//任务列表 +function qqreadtask() { +return new Promise((resolve, reject) => { + const toqqreadtaskurl ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/page?fromGuid=', + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadtaskurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 任务列表: ${data}`) + task =JSON.parse(data) +tz+= +'【现金余额】:'+ + (task.data.user.amount/10000).toFixed(2)+ + '元\n'+ + '【第'+ + task.data.invite.issue+ + '期】:时间'+ + task.data.invite.dayRange+ + '\n'+ + ' 已邀请'+ + task.data.invite.inviteCount+ + '人,再邀请'+ + task.data.invite.nextInviteConfig.count+ + '人获得'+ + task.data.invite.nextInviteConfig.amount+ + '金币\n'+ + '【'+ + task.data.taskList[0].title+ + '】:'+ + task.data.taskList[0].amount+ + '金币,'+ + task.data.taskList[0].actionText+ + '\n'+ + '【'+ + task.data.taskList[1].title+ + '】:'+ + task.data.taskList[1].amount+ + '金币,'+ + task.data.taskList[1].actionText+ + '\n'+ + '【'+ + task.data.taskList[2].title+ + '】:'+ + task.data.taskList[2].amount+ + '金币,'+ + task.data.taskList[2].actionText+ + '\n'+ + '【'+ + task.data.taskList[3].title+ + '】:'+ + task.data.taskList[3].amount+ + '金币,'+ + task.data.taskList[3].actionText+ + '\n'+ + '【宝箱任务'+ + (task.data.treasureBox.count+1)+ + '】:'+ + task.data.treasureBox.tipText+ + '\n'+ + '【'+task.data.fans.title+ + '】:'+ + task.data.fans.fansCount+ + '个好友,'+ + task.data.fans.todayAmount+ + '金币\n' + +resolve() + + }) + + }) + } + + +//用户名 +function qqreadinfo() { +return new Promise((resolve, reject) => { + const toqqreadinfourl = { + url: qqreadurlVal, + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadinfourl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 用户名: ${data}`) + info =JSON.parse(data) +tz+= +'【用户信息】:'+info.data.user.nickName+'\n' + +resolve() + }) + }) + } + + +//阅豆签到 +function qqreadtake() { +return new Promise((resolve, reject) => { + const toqqreadtakeurl ={url: 'https://mqqapi.reader.qq.com/mqq/sign_in/user', + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.post(toqqreadtakeurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 阅豆签到: ${data}`) + take =JSON.parse(data) +if (take.data.takeTicket>0) + { +tz+= +'【阅豆签到】:获得'+take.data.takeTicket+'豆\n' +} + +resolve() + }) + }) + } + + +//阅读时长任务 +function qqreadconfig() { +return new Promise((resolve, reject) => { + const toqqreadconfigurl = { + url: 'https://mqqapi.reader.qq.com/mqq/page/config?router=%2Fpages%2Fbook-read%2Findex&options=', + headers: JSON.parse(qqreadheaderVal), + }; + $.get(toqqreadconfigurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 阅读时长查询: ${data}`) + config =JSON.parse(data) + if (config.code==0) +tz+='【时长查询】:今日阅读'+(config.data.pageParams.todayReadSeconds/60).toFixed(0)+'分钟\n' + + +resolve() + }) + }) + } + + +//阅读时长 +function qqreadtime() { +return new Promise((resolve, reject) => { + const toqqreadtimeurl = { + url: qqreadtimeurlVal.replace(/readTime=/g, `readTime=${TIME}`), + headers: JSON.parse(qqreadtimeheaderVal), + + }; + + $.get(toqqreadtimeurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 阅读时长: ${data}`) + time =JSON.parse(data) + if (time.code==0) +tz+='【阅读时长】:上传'+TIME/6+'分钟\n' + + +resolve() + }) + }) + } + + +//阅读金币1 +function qqreadssr1() { +return new Promise((resolve, reject) => { + const toqqreadssr1url = {url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=30`, + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; +if (config.data.pageParams.todayReadSeconds/60>=1){ + + $.get(toqqreadssr1url,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 金币奖励1: ${data}`) + ssr1 =JSON.parse(data) + if (ssr1.data.amount>0) +tz+='【阅读金币1】获得'+ssr1.data.amount+'金币\n' + + +resolve() + }) +} + }) + } + + +//阅读金币2 +function qqreadssr2() { +return new Promise((resolve, reject) => { + const toqqreadssr2url = {url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=300`, + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; +if (config.data.pageParams.todayReadSeconds/60>=5){ + + $.get(toqqreadssr2url,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 金币奖励2: ${data}`) + ssr2 =JSON.parse(data) + if (ssr2.data.amount>0) +tz+='【阅读金币2】获得'+ssr2.data.amount+'金币\n' + +resolve() + }) +} + }) + } + + +//阅读金币3 +function qqreadssr3() { +return new Promise((resolve, reject) => { + const toqqreadssr3url = {url: `https://mqqapi.reader.qq.com/mqq/red_packet/user/read_time?seconds=1800`, + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + +if (config.data.pageParams.todayReadSeconds/60>=30){ + + $.get(toqqreadssr3url,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 金币奖励3: ${data}`) + ssr3 =JSON.parse(data) + if (ssr3.data.amount>0) +tz+='【阅读金币3】获得'+ssr3.data.amount+'金币\n' + + +resolve() + }) +} + }) + } + + +//金币签到 +function qqreadsign() { +return new Promise((resolve, reject) => { + const toqqreadsignurl ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in/page', + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadsignurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 金币签到: ${data}`) + sign =JSON.parse(data) + +if (sign.data.videoDoneFlag) + { +tz+= +'【金币签到】:获得'+sign.data.todayAmount+'金币\n' + } + + +resolve() + }) + }) + } + + +//金币签到翻倍 +function qqreadsign2() { +return new Promise((resolve, reject) => { + const toqqreadsign2url ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/clock_in_video', + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadsign2url,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 金币签到翻倍: ${data}`) + sign2 =JSON.parse(data) + +if (sign2.code==0) + { +tz+= +'【签到翻倍】:获得'+sign2.data.amount+'金币\n' +} + +resolve() + }) + }) + } + + +//每日阅读 +function qqreaddayread() { +return new Promise((resolve, reject) => { + const toqqreaddayreadurl ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/read_book', + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreaddayreadurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 每日阅读: ${data}`) + dayread =JSON.parse(data) +if (dayread.code==0) + { +tz+= +'【每日阅读】:获得'+dayread.data.amount+'金币\n' + +} + +resolve() + }) + }) + } + + +//视频奖励 +function qqreadvideo() { +return new Promise((resolve, reject) => { + const toqqreadvideourl ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/watch_video', + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadvideourl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 视频奖励: ${data}`) + video =JSON.parse(data) + +if (video.code==0) + { +tz+= +'【视频奖励】:获得'+video.data.amount+'金币\n' + +} + +resolve() + }) + }) + } + + +//宝箱奖励 +function qqreadbox() { +return new Promise((resolve, reject) => { + + const toqqreadboxurl ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box', + + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadboxurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 宝箱奖励: ${data}`) + box =JSON.parse(data) + +if (box.data.count>=0) + { +tz+= +'【宝箱奖励'+box.data.count+'】:获得'+box.data.amount+'金币\n' + + } + +resolve() + }) + }) + } + +//宝箱奖励翻倍 +function qqreadbox2() { +return new Promise((resolve, reject) => { + + const toqqreadbox2url ={url: 'https://mqqapi.reader.qq.com/mqq/red_packet/user/treasure_box_video', + + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadbox2url,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 宝箱奖励翻倍: ${data}`) + box2 =JSON.parse(data) + +if (box2.code==0) + { +tz+= +'【宝箱翻倍】:获得'+box2.data.amount+'金币\n' +} + +resolve() + }) + }) + } + +//本周阅读时长 +function qqreadwktime() { +return new Promise((resolve, reject) => { + + const toqqreadwktimeurl = { + + url: `https://mqqapi.reader.qq.com/mqq/v1/bookShelfInit`, + + headers: JSON.parse(qqreadheaderVal), + + }; + + $.get(toqqreadwktimeurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 阅读时长: ${data}`) + wktime =JSON.parse(data) + if (wktime.code==0) +tz+='【本周阅读时长】:'+wktime.data.readTime+'分钟\n' + +resolve() + }) + }) + } + + +//本周阅读时长奖励任务 +function qqreadpick() { +return new Promise((resolve, reject) => { + const toqqreadpickurl = { + url:`https://mqqapi.reader.qq.com/mqq/pickPackageInit`, + headers: JSON.parse(qqreadheaderVal), + }; + +if (wktime.data.readTime>=wktimess){ + $.get(toqqreadpickurl,(error, response, data) =>{ + if(logs) $.log(`${jsname},周阅读时长奖励任务: ${data}`) + pick =JSON.parse(data) + if (pick.data[7].isPick==true) +tz+='【周时长奖励】:已全部领取\n' +for(let i=0;i{ +var pickid=pick.data[i].readTime +var Packageid=['10','10','20','30','50','80','100','120'] +const toqqreadPackageurl = { + url:`https://mqqapi.reader.qq.com/mqq/pickPackage?readTime=${pickid}`, + headers: JSON.parse(qqreadheaderVal), + timeout:60000}; + $.get(toqqreadPackageurl,(error, response, data) =>{ + if(logs) $.log(`${jsname}, 领周阅读时长: ${data}`) + Package =JSON.parse(data) + if (Package.code==0) +tz+='【周时长奖励'+(i+1)+'】:领取'+Packageid[i]+'阅豆\n' +}) + + },i*100)} + +}) + resolve() + } +}) + } + + + +function showmsg() { +console.log(tz) + +if (notifyInterval==1) +$.msg(jsname,'',tz)//显示所有通知 + +else if (notifyInterval==2&&task.data.treasureBox.doneFlag==0) +$.msg(jsname,'',tz)//宝箱领取成功通知 + +else if (notifyInterval==3&&task.data.treasureBox.count==0||task.data.treasureBox.count==15||task.data.treasureBox.count==30||task.data.treasureBox.count==45||task.data.treasureBox.count==60) +$.msg(jsname,'',tz)//宝箱每15次通知一次 + +} + + +// prettier-ignore +function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise((e,i)=>{s.call(this,t,(t,s,r)=>{t?i(t):e(s)})})}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise(e=>{this.get({url:t},(t,s,i)=>e(i))})}runScript(t,e){return new Promise(s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(t,e,i)=>s(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==t?t:(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{},t)[e[e.length-1]]=s,t)}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):this.data&&this.data[e]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} diff --git a/tldkziye.js b/qzdkziye.js similarity index 83% rename from tldkziye.js rename to qzdkziye.js index 3cf54bb2c..b3edc4f80 100644 --- a/tldkziye.js +++ b/qzdkziye.js @@ -1,354 +1,351 @@ -/*ziye 陀螺打卡 - - -非常重要!!! - -微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/tldkziye.png 进入小程序,登录获取授权,再启动软件获取ck -建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 - - - - -2020.9.9 非常重要!!! 原本打卡规定是30分钟一次,打卡速度一定不要太快,否则封号 -2020.9.10 修复重写错误 - - - - -《《《《《《《《《《制作其他打卡js的说明 - -抓包小程序,然后替换以下内容来制作其他打卡js, -需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 - -wq.02gk.com -陀螺打卡 -cs = 20 -xj = 1 -tldkurl -i=15 -tldk - -手动替换 -wq\.02gk\.com - -制作其他打卡js的说明》》》》》》》》》》》 - - - - - -////////////////////////////////////////正文 - - -使用说明: - -一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/tldkziye.png 进入小程序,登录获取授权 - -二,然后将hostname复制粘贴进配置文件 - -三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 - -功能如下: -1.每日打卡,设置了开关,完成任务不再打卡 -2.打卡币统计, -3.现金统计,自动提现 - - - - - - - -hostname= wq.02gk.com, - - - -//surge -陀螺打卡 = type=http-request,pattern=^https:\/\/wq\.02gk\.com\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/tldkziye.js - - - -//圈x -https:\/\/wq\.02gk\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/tldkziye.js - - -//loon -http-request ^https:\/\/wq\.02gk\.com\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/tldkziye.js -, requires-body=true, timeout=10, tag=陀螺打卡 - -*/ - - - - - -const sy = init()//声明必须 -const notifyInterval = 1; //通知开为1,常关为0 -const logs = 0; // 日志开关 -const jsname = '陀螺打卡' -const jbid =1 -const sb='失败,请先关闭,进入程序获取授权' - -const cs = 20;//小程序打卡次数 -const xj = 1;//提现标准 -var tz='' - -const dkurlkey = 'tldkurl'+jbid -const dkurl = sy.getdata(dkurlkey) - - -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - all() -} - - - -function GetCookie() { -if ($request && $request.url.match(/i=15&/)) -if ($request && $request.url.match(/action=today&contr=index/)) - { - const dkurl = $request.url - sy.log(`dkurl:${dkurl}`) - if (dkurl) sy.setdata(dkurl, dkurlkey) - sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) -} - -} - - -//异步运行 - - -function all() - - { - - for(var i=0;i<3;i++) - { (function(i) { - setTimeout(function() { - - if(i==0) dktj(i); -else if(i==1) dkxj(i); -else if(i==2) showmsg(i); -}, (i + 1) * 1000); - })(i) - - -}} - - - - -//统计 - -function dktj() { -return new Promise((resolve, reject) => { - - const Tjurl = { - url: dkurl - }; - sy.get(Tjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1统计 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ -"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - - - - - -cstj1(obj.info.today.clock); - - - - resolve() - }) - }) - } - - -//次数统计 - - -function cstj1(tjtj) -{ -if (tjtj { - - const Xjurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) - }; - sy.get(Xjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1现金 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - - - - - tz +="💵现金余额"+ -obj.info.member.money+"元"+"\n" - - } - - else tz +=sb+"\n"; - - -xjtj1(obj.info.member.money); - - - - resolve() - }) - }) - } - - - - -//自动提现 - -function dktx() { -return new Promise((resolve, reject) => { - - const Txurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) - }; - sy.get(Txurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1提现 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - -tz +='提现成功,成功提现'+xj+'元'+"\n" - - } - -if(obj.status == 2) { - -tz +='提现失败,原因:'+obj.info+"\n" - - } - - - - - resolve() - }) - }) - } - - - -//现金统计 - - -function xjtj1(tjtj) -{ -if (tjtj>=xj) -dktx() - -} - - - -//打卡 -function dkdk() { -return new Promise((resolve, reject) => { - - const Dkurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) - }; - sy.get(Dkurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1打卡- data: ${data}`) - obj = JSON.parse(data) - - if (obj.status==1){ -tz+='[️打卡任务]:'+'打卡次数+1'+'\n' - - } -else tz +=obj.info+'\n' - - - resolve() - }) - }) - } - - -function showmsg() { - -console.log(tz) - -if (notifyInterval==1) -sy.msg(jsname,'',tz) -} - - -function init() { - isSurge = () => { - return undefined !== this.$httpClient - } - isQuanX = () => { - return undefined !== this.$task - } - getdata = (key) => { - if (isSurge()) return $persistentStore.read(key) - if (isQuanX()) return $prefs.valueForKey(key) - } - setdata = (key, val) => { - if (isSurge()) return $persistentStore.write(key, val) - if (isQuanX()) return $prefs.setValueForKey(key, val) - } - msg = (title, subtitle = '', body = '') => { - if (isSurge()) $notification.post(title, subtitle, body) - if (isQuanX()) $notify(title, subtitle, body) - } - log = (msg) => { - console.log(`${msg}\n`) - } - get = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'GET' - return $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) return $httpClient.get(options, callback) - } - post = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'POST' - $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) $httpClient.post(options, callback) - } - done = (value = {}) => { - $done(value) - } - return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } -} +/*ziye 圈子打卡 + + +非常重要!!! + +微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/qzdkziye.png 进入小程序,登录获取授权,再启动软件获取ck +建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 + + + + + + +2020.9.22 + + + + + +《《《《《《《《《《制作其他打卡js的说明 + +抓包小程序,然后替换以下内容来制作其他打卡js, +需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 + +wq.inqan.com +圈子打卡 +cs = 20 +xj = 1 +qzdkurl +i=9 +qzdk + +手动替换 +wq\.inqan\.com + +制作其他打卡js的说明》》》》》》》》》》》 + + + + + + +////////////////////////////////////////正文 + + +使用说明: + +一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/qzdkziye.png 进入小程序,登录获取授权 + +二,然后将hostname复制粘贴进配置文件 + +三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 + + +功能如下: +1.每日打卡,设置了开关,完成任务不再打卡 +2.打卡币统计, +3.现金统计,自动提现 + +hostname= wq.inqan.com, + + + +//surge +圈子打卡 = type=http-request,pattern=^https:\/\/wq\.inqan\.com\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/qzdkziye.js + + +//圈x +https:\/\/wq\.inqan\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/qzdkziye.js + +//loon +http-request ^https:\/\/wq\.inqan\.com\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/qzdkziye.js, requires-body=true, timeout=10, tag=圈子打卡 + + + +*/ + + + + + +const sy = init()//声明必须 +const notifyInterval = 1; //通知开为1,常关为0 +const logs = 0; // 日志开关 +const jsname = '圈子打卡' +const jbid =1 +const sb='失败,请先关闭,进入程序获取授权' + +const cs = 20;//小程序打卡次数 +const xj = 1;//提现标准 +var tz='' + +const dkurlkey = 'qzdkurl'+jbid +const dkurl = sy.getdata(dkurlkey) + + +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + all() +} + + + +function GetCookie() { +if ($request && $request.url.match(/i=9&/)) +if ($request && $request.url.match(/action=today&contr=index/)) + { + const dkurl = $request.url + sy.log(`dkurl:${dkurl}`) + if (dkurl) sy.setdata(dkurl, dkurlkey) + sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) +} + +} + + +//异步运行 + + +function all() + + { + + for(var i=0;i<3;i++) + { (function(i) { + setTimeout(function() { + + if(i==0) dktj(i); +else if(i==1) dkxj(i); +else if(i==2) showmsg(i); +}, (i + 1) * 1000); + })(i) + + +}} + + + + +//统计 + +function dktj() { +return new Promise((resolve, reject) => { + + const Tjurl = { + url: dkurl + }; + sy.get(Tjurl,(error, response, data) =>{ + if(logs)sy.log(`${jsname}1统计 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ +"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" + }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" + + + + + +cstj1(obj.info.today.clock); + + + + resolve() + }) + }) + } + + +//次数统计 + + +function cstj1(tjtj) +{ +if (tjtj { + + const Xjurl = { + url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) + }; + sy.get(Xjurl,(error, response, data) =>{ + if(logs)sy.log(`${jsname}1现金 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1) { + + + + + tz +="💵现金余额"+ +obj.info.member.money+"元"+"\n" + + } + + else tz +=sb+"\n"; + + +xjtj1(obj.info.member.money); + + + + resolve() + }) + }) + } + + + + +//自动提现 + +function dktx() { +return new Promise((resolve, reject) => { + + const Txurl = { + url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) + }; + sy.get(Txurl,(error, response, data) =>{ + if(logs)sy.log(`${jsname}1提现 - data: ${data}`) + obj = JSON.parse(data) +if(obj.status == 1) { + +tz +='提现成功,成功提现'+xj+'元'+"\n" + + } + +if(obj.status == 2) { + +tz +='提现失败,原因:'+obj.info+"\n" + + } + + + + + resolve() + }) + }) + } + + + +//现金统计 + + +function xjtj1(tjtj) +{ +if (tjtj>=xj) +dktx() + +} + + + +//打卡 +function dkdk() { +return new Promise((resolve, reject) => { + + const Dkurl = { + url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) + }; + sy.get(Dkurl,(error, response, data) =>{ + if(logs)sy.log(`${jsname}1打卡- data: ${data}`) + obj = JSON.parse(data) + + if (obj.status==1){ +tz+='[️打卡任务]:'+'打卡次数+1'+'\n' + + } +else tz +=obj.info+'\n' + + + resolve() + }) + }) + } + + +function showmsg() { + +console.log(tz) + +if (notifyInterval==1) +sy.msg(jsname,'',tz) +} + + +function init() { + isSurge = () => { + return undefined !== this.$httpClient + } + isQuanX = () => { + return undefined !== this.$task + } + getdata = (key) => { + if (isSurge()) return $persistentStore.read(key) + if (isQuanX()) return $prefs.valueForKey(key) + } + setdata = (key, val) => { + if (isSurge()) return $persistentStore.write(key, val) + if (isQuanX()) return $prefs.setValueForKey(key, val) + } + msg = (title, subtitle = '', body = '') => { + if (isSurge()) $notification.post(title, subtitle, body) + if (isQuanX()) $notify(title, subtitle, body) + } + log = (msg) => { + console.log(`${msg}\n`) + } + get = (options, callback) => { + if (isQuanX()) { + if (typeof options == 'string') options = { url: options } + options['method'] = 'GET' + return $task.fetch(options).then( + (response) => { + response['status'] = response.statusCode + callback(null, response, response.body) + }, + (reason) => callback(reason.error, null, null) + ) + } + if (isSurge()) return $httpClient.get(options, callback) + } + post = (options, callback) => { + if (isQuanX()) { + if (typeof options == 'string') options = { url: options } + options['method'] = 'POST' + $task.fetch(options).then( + (response) => { + response['status'] = response.statusCode + callback(null, response, response.body) + }, + (reason) => callback(reason.error, null, null) + ) + } + if (isSurge()) $httpClient.post(options, callback) + } + done = (value = {}) => { + $done(value) + } + return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } +} \ No newline at end of file diff --git a/qzdkziye.png b/qzdkziye.png new file mode 100644 index 000000000..370c3d7a1 Binary files /dev/null and b/qzdkziye.png differ diff --git a/sendNotify.js b/sendNotify.js new file mode 100644 index 000000000..b0874bb07 --- /dev/null +++ b/sendNotify.js @@ -0,0 +1,255 @@ +const $ = new Env(); +// =======================================微信server酱通知设置区域=========================================== +//此处填你申请的SCKEY. +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入PUSH_KEY) +let SCKEY = ''; + +// =======================================Bark App通知设置区域=========================================== +//此处填你BarkAPP的信息(IP/设备码,例如:https://api.day.app/XXXXXXXX) +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_PUSH) +let BARK_PUSH = ''; +//BARK app推送铃声,铃声列表去APP查看复制填写 +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入BARK_SOUND , Value输入app提供的铃声名称,例如:birdsong) +let BARK_SOUND = ''; + + +// =======================================telegram机器人通知设置区域=========================================== +//此处填你telegram bot 的Token,例如:1077xxx4424:AAFjv0FcqxxxxxxgEMGfi22B4yh15R5uw +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_BOT_TOKEN) +let TG_BOT_TOKEN = ''; +//此处填你接收通知消息的telegram用户的id,例如:129xxx206 +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入TG_USER_ID) +let TG_USER_ID = ''; + +// =======================================钉钉机器人通知设置区域=========================================== +//此处填你钉钉 bot 的webhook,例如:5a544165465465645d0f31dca676e7bd07415asdasd +//注:此处设置github action用户填写到Settings-Secrets里面(Name输入DD_BOT_TOKEN) +let DD_BOT_TOKEN = ''; +//密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 +let DD_BOT_SECRET = ''; + +if (process.env.PUSH_KEY) { + SCKEY = process.env.PUSH_KEY; +} +if (process.env.BARK_PUSH) { + if(process.env.BARK_PUSH.indexOf('https') > -1 || process.env.BARK_PUSH.indexOf('http') > -1) { + //兼容BARK自建用户 + BARK_PUSH = process.env.BARK_PUSH + } else { + BARK_PUSH = `https://api.day.app/${process.env.BARK_PUSH}` + } + if (process.env.BARK_SOUND) { + BARK_SOUND = process.env.BARK_SOUND + } +} else { + if(BARK_PUSH && BARK_PUSH.indexOf('https') === -1 && BARK_PUSH.indexOf('http') === -1) { + //兼容BARK本地用户只填写设备码的情况 + BARK_PUSH = `https://api.day.app/${BARK_PUSH}` + } +} +if (process.env.TG_BOT_TOKEN) { + TG_BOT_TOKEN = process.env.TG_BOT_TOKEN; +} +if (process.env.TG_USER_ID) { + TG_USER_ID = process.env.TG_USER_ID; +} + +if (process.env.DD_BOT_TOKEN) { + DD_BOT_TOKEN = process.env.DD_BOT_TOKEN; + if (process.env.DD_BOT_SECRET) { + DD_BOT_SECRET = process.env.DD_BOT_SECRET; + } +} + +async function sendNotify(text, desp) { + //提供四种通知 + await serverNotify(text, desp); + await BarkNotify(text, desp); + await tgBotNotify(text, desp); + await ddBotNotify(text, desp); +} + +function serverNotify(text, desp) { + return new Promise(resolve => { + if (SCKEY) { + //微信server酱推送通知一个\n不会换行,需要两个\n才能换行,故做此替换 + desp = desp.replace(/[\n\r]/g, '\n\n'); + const options = { + url: `https://sc.ftqq.com/${SCKEY}.send`, + body: `text=${text}&desp=${desp}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n发送通知调用API失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errno === 0) { + console.log('\nserver酱发送通知消息成功\n') + } else if (data.errno === 1024) { + console.log('\nPUSH_KEY 错误\n') + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供server酱的SCKEY,取消微信推送消息通知\n'); + resolve() + } + }) +} + +function BarkNotify(text, desp) { + return new Promise(resolve => { + if (BARK_PUSH) { + const options = { + url: `${BARK_PUSH}/${encodeURIComponent(text)}/${encodeURIComponent(desp)}?sound=${BARK_SOUND}`, + } + $.get(options, (err, resp, data) => { + try { + if (err) { + console.log('\nBark APP发送通知调用API失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.code === 200) { + console.log('\nBark APP发送通知消息成功\n') + } else { + console.log(`\n${data.message}\n`); + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(); + } + }) + } else { + console.log('\n您未提供Bark的APP推送BARK_PUSH,取消Bark推送消息通知\n'); + resolve() + } + }) +} + +function tgBotNotify(text, desp) { + return new Promise(resolve => { + if (TG_BOT_TOKEN && TG_USER_ID) { + const options = { + url: `https://api.telegram.org/bot${TG_BOT_TOKEN}/sendMessage`, + body: `chat_id=${TG_USER_ID}&text=${text}\n\n${desp}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + } + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\ntelegram发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.ok) { + console.log('\nTelegram发送通知消息完成。\n') + } else if (data.error_code === 400) { + console.log('\n请主动给bot发送一条消息并检查接收用户ID是否正确。\n') + } else if (data.error_code === 401){ + console.log('\nTelegram bot token 填写错误。\n') + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供telegram机器人推送所需的TG_BOT_TOKEN和TG_USER_ID,取消telegram推送消息通知\n'); + resolve() + } + }) +} +function ddBotNotify(text, desp) { + return new Promise(resolve => { + const options = { + url: `https://oapi.dingtalk.com/robot/send?access_token=${DD_BOT_TOKEN}`, + json: { + "msgtype": "text", + "text": { + "content": ` ${text}\n\n${desp}` + } + }, + headers: { + 'Content-Type': 'application/json' + } + } + if (DD_BOT_TOKEN && DD_BOT_SECRET) { + const crypto = require('crypto'); + const dateNow = Date.now(); + const hmac = crypto.createHmac('sha256', DD_BOT_SECRET); + hmac.update(`${dateNow}\n${DD_BOT_SECRET}`); + const result = encodeURIComponent(hmac.digest('base64')); + options.url = `${options.url}×tamp=${dateNow}&sign=${result}`; + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n钉钉发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errcode === 0) { + console.log('\n钉钉发送通知消息完成。\n') + } else { + console.log(`\n${data.errmsg}\n`) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else if (DD_BOT_TOKEN) { + $.post(options, (err, resp, data) => { + try { + if (err) { + console.log('\n钉钉发送通知消息失败!!\n') + console.log(err); + } else { + data = JSON.parse(data); + if (data.errcode === 0) { + console.log('\n钉钉发送通知消息完成。\n') + } else { + console.log(`\n${data.errmsg}\n`) + } + } + } catch (e) { + $.logErr(e, resp); + } finally { + resolve(data); + } + }) + } else { + console.log('\n您未提供钉钉机器人推送所需的DD_BOT_TOKEN或者DD_BOT_SECRET,取消钉钉推送消息通知\n'); + resolve() + } + }) +} +module.exports = { + sendNotify, + BarkNotify, + SCKEY, + BARK_PUSH, + TG_BOT_TOKEN, + TG_USER_ID, + DD_BOT_TOKEN, +}//这里导出SCKEY,BARK_PUSH等通知参数是jd_bean_sign.js处需要 +// prettier-ignore +function Env(t,s){return new class{constructor(t,s){this.name=t,this.data=null,this.dataFile="box.dat",this.logs=[],this.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,s),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}getScript(t){return new Promise(s=>{$.get({url:t},(t,e,i)=>s(i))})}runScript(t,s){return new Promise(e=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=s&&s.timeout?s.timeout:o;const[h,a]=i.split("@"),r={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":h,Accept:"*/*"}};$.post(r,(t,s,i)=>e(i))}).catch(t=>this.logErr(t))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s);if(!e&&!i)return{};{const i=e?t:s;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),s=this.path.resolve(process.cwd(),this.dataFile),e=this.fs.existsSync(t),i=!e&&this.fs.existsSync(s),o=JSON.stringify(this.data);e?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(s,o):this.fs.writeFileSync(t,o)}}lodash_get(t,s,e){const i=s.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return e;return o}lodash_set(t,s,e){return Object(t)!==t?t:(Array.isArray(s)||(s=s.toString().match(/[^.[\]]+/g)||[]),s.slice(0,-1).reduce((t,e,i)=>Object(t[e])===t[e]?t[e]:t[e]=Math.abs(s[i+1])>>0==+s[i+1]?[]:{},t)[s[s.length-1]]=e,t)}getdata(t){let s=this.getval(t);if(/^@/.test(t)){const[,e,i]=/^@(.*?)\.(.*?)$/.exec(t),o=e?this.getval(e):"";if(o)try{const t=JSON.parse(o);s=t?this.lodash_get(t,i,""):s}catch(t){s=""}}return s}setdata(t,s){let e=!1;if(/^@/.test(s)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(s),h=this.getval(i),a=i?"null"===h?null:h||"{}":"{}";try{const s=JSON.parse(a);this.lodash_set(s,o,t),e=this.setval(JSON.stringify(s),i)}catch(s){const h={};this.lodash_set(h,o,t),e=this.setval(JSON.stringify(h),i)}}else e=$.setval(t,s);return e}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,s){return this.isSurge()||this.isLoon()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):this.isNode()?(this.data=this.loaddata(),this.data[s]=t,this.writedata(),!0):this.data&&this.data[s]||null}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,s=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?$httpClient.get(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,s)=>{try{const e=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(e,null),s.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t)))}post(t,s=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),delete t.headers["Content-Length"],this.isSurge()||this.isLoon())$httpClient.post(t,(t,e,i)=>{!t&&e&&(e.body=i,e.statusCode=e.status),s(t,e,i)});else if(this.isQuanX())t.method="POST",$task.fetch(t).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t));else if(this.isNode()){this.initGotEnv(t);const{url:e,...i}=t;this.got.post(e,i).then(t=>{const{statusCode:e,statusCode:i,headers:o,body:h}=t;s(null,{status:e,statusCode:i,headers:o,body:h},h)},t=>s(t))}}time(t){let s={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in s)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?s[e]:("00"+s[e]).substr((""+s[e]).length)));return t}msg(s=t,e="",i="",o){const h=t=>!t||!this.isLoon()&&this.isSurge()?t:"string"==typeof t?this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0:"object"==typeof t&&(t["open-url"]||t["media-url"])?this.isLoon()?t["open-url"]:this.isQuanX()?t:void 0:void 0;$.isMute||(this.isSurge()||this.isLoon()?$notification.post(s,e,i,h(o)):this.isQuanX()&&$notify(s,e,i,h(o))),this.logs.push("","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="),this.logs.push(s),e&&this.logs.push(e),i&&this.logs.push(i)}log(...t){t.length>0?this.logs=[...this.logs,...t]:console.log(this.logs.join(this.logSeparator))}logErr(t,s){const e=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();e?$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):$.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(s=>setTimeout(s,t))}done(t={}){const s=(new Date).getTime(),e=(s-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${e} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,s)} \ No newline at end of file diff --git a/wyxdkziye.js b/wyxdkziye.js deleted file mode 100644 index b47e3c771..000000000 --- a/wyxdkziye.js +++ /dev/null @@ -1,347 +0,0 @@ -/*ziye 玩游戏打卡 - -非常重要!!! - -微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/wyxdkziye.png 进入小程序,登录获取授权,再启动软件获取ck -建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 - - - -2020.9.9 - - -《《《《《《《《《《制作其他打卡js的说明 - -抓包小程序,然后替换以下内容来制作其他打卡js, -需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 - -we7.ivee.top -玩游戏打卡 -cs = 5 -xj = 1 -wyxdkurl -i=6 -wyxdk - -手动替换 -we7\.ivee\.top - -制作其他打卡js的说明》》》》》》》》》》》 - - - - - - -////////////////////////////////////////正文 - -使用说明: - -一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/wyxdkziye.png 进入小程序,登录获取授权 - -二,然后将hostname复制粘贴进配置文件 - -三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 - -功能如下: -1.每日打卡,设置了开关,完成任务不再打卡 -2.打卡币统计, -3.现金统计,自动提现 - - - - - -hostname= we7.ivee.top, - - - -//surge -玩游戏打卡 = type=http-request,pattern=^https:\/\/we7\.ivee\.top\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/wyxdkziye.js - - - -//圈x -https:\/\/we7\.ivee\.top\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/wyxdkziye.js - - -//loon -http-request ^https:\/\/we7\.ivee\.top\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/wyxdkziye.js -, requires-body=true, timeout=10, tag=玩游戏打卡 - - -*/ - - - - -const sy = init()//声明必须 -const notifyInterval = 1; //通知开为1,常关为0 -const logs = 0; // 日志开关 -const jsname = '玩游戏打卡' -const jbid =1 -const sb='失败,请先关闭,进入程序获取授权' - -const cs = 5;//小程序打卡次数 -const xj = 1;//提现标准 -var tz='' - -const dkurlkey = 'wyxdkurl'+jbid -const dkurl = sy.getdata(dkurlkey) - - -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - all() -} - - - -function GetCookie() { -if ($request && $request.url.match(/i=6&/)) -if ($request && $request.url.match(/action=today&contr=index/)) - { - const dkurl = $request.url - sy.log(`dkurl:${dkurl}`) - if (dkurl) sy.setdata(dkurl, dkurlkey) - sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) -} - -} - - -//异步运行 - - -function all() - - { - - for(var i=0;i<3;i++) - { (function(i) { - setTimeout(function() { - - if(i==0) dktj(i); -else if(i==1) dkxj(i); -else if(i==2) showmsg(i); -}, (i + 1) * 1000); - })(i) - - -}} - - - - -//统计 - -function dktj() { -return new Promise((resolve, reject) => { - - const Tjurl = { - url: dkurl - }; - sy.get(Tjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1统计 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ -"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - - - - - -cstj1(obj.info.today.clock); - - - - resolve() - }) - }) - } - - -//次数统计 - - -function cstj1(tjtj) -{ -if (tjtj { - - const Xjurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) - }; - sy.get(Xjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1现金 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - - - - - tz +="💵现金余额"+ -obj.info.member.money+"元"+"\n" - - } - - else tz +=sb+"\n"; - - -xjtj1(obj.info.member.money); - - - - resolve() - }) - }) - } - - - - -//自动提现 - -function dktx() { -return new Promise((resolve, reject) => { - - const Txurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) - }; - sy.get(Txurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1提现 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - -tz +='提现成功,成功提现'+xj+'元'+"\n" - - } - -if(obj.status == 2) { - -tz +='提现失败,原因:'+obj.info+"\n" - - } - - - - - resolve() - }) - }) - } - - - -//现金统计 - - -function xjtj1(tjtj) -{ -if (tjtj>=xj) -dktx() - -} - - - -//打卡 -function dkdk() { -return new Promise((resolve, reject) => { - - const Dkurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) - }; - sy.get(Dkurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1打卡- data: ${data}`) - obj = JSON.parse(data) - - if (obj.status==1){ -tz+='[️打卡任务]:'+'打卡次数+1'+'\n' - - } -else tz +=obj.info+'\n' - - - resolve() - }) - }) - } - - -function showmsg() { - -console.log(tz) - -if (notifyInterval==1) -sy.msg(jsname,'',tz) -} - - -function init() { - isSurge = () => { - return undefined !== this.$httpClient - } - isQuanX = () => { - return undefined !== this.$task - } - getdata = (key) => { - if (isSurge()) return $persistentStore.read(key) - if (isQuanX()) return $prefs.valueForKey(key) - } - setdata = (key, val) => { - if (isSurge()) return $persistentStore.write(key, val) - if (isQuanX()) return $prefs.setValueForKey(key, val) - } - msg = (title, subtitle = '', body = '') => { - if (isSurge()) $notification.post(title, subtitle, body) - if (isQuanX()) $notify(title, subtitle, body) - } - log = (msg) => { - console.log(`${msg}\n`) - } - get = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'GET' - return $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) return $httpClient.get(options, callback) - } - post = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'POST' - $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) $httpClient.post(options, callback) - } - done = (value = {}) => { - $done(value) - } - return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } -} diff --git a/xiaoleziye.js b/xiaoleziye.js new file mode 100644 index 000000000..e138f20b2 --- /dev/null +++ b/xiaoleziye.js @@ -0,0 +1,399 @@ + +/*ziye + + +微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/xiaoleziye.png 获取授权 + +开软件,然后进签到,点签到获取cookie + + +10.5 增加更多通知内容 +10.7 修复cookie,获取问题 + + + + +hostname=minapp.xqrobot.net, + +#小乐 +############## 圈x + +https:\/\/minapp\.xqrobot\.net\/* url script-request-body https://raw.githubusercontent.com/ziye12/JavaScript/master/xiaoleziye.js + + +#小乐 +############## loon + + +http-request https:\/\/minapp\.xqrobot\.net\/* script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/xiaoleziye.js, requires-body=true + + +#小乐 +############## surge + +小乐签到 = type=http-request,pattern=https:\/\/minapp\.xqrobot\.net\/*,script-path=https://raw.githubusercontent.com/ziye12/JavaScript/master/xiaoleziye.js, requires-body=true + + + + + +*/ + + + + + +const sy = init() + +const jsname='小乐签到' + +const logs = 0; //0为关闭日志,1为开启 +const notifyInterval=1//0为关闭通知,1为开启 +const jbid=1; + + +const xiaoleurlKey = 'xiaoleurl'+jbid + +const xiaoleheaderKey = 'xiaolehd'+jbid + +const xiaolebodyKey = 'xiaolebd'+jbid + +const xiaoleurlVal = sy.getdata(xiaoleurlKey) + +const xiaoleheaderVal = sy.getdata(xiaoleheaderKey) + +const xiaolebodyVal = sy.getdata(xiaolebodyKey) + + + + + + + + +var tz='' + + +let isGetCookie = typeof $request !== 'undefined' +if (isGetCookie) { + GetCookie() +} else { + all() +} + + + + + +function GetCookie() { + +if ($request.headers){ + + if($request &&$request.url.indexOf("/user.php?mod=sign&")>=0) { + + const xiaoleurlVal = $request.url +if (xiaoleurlVal) sy.setdata(xiaoleurlVal,xiaoleurlKey) + sy.log(`[${jsname}] 获取url请求: 成功,xiaoleurlVal: ${xiaoleurlVal}`) + + const xiaolebodyVal = $request.body + if (xiaolebodyVal) sy.setdata(xiaolebodyVal,xiaolebodyKey) + sy.log(`[${jsname}] 获取阅读: 成功,xiaolebodyVal: ${xiaolebodyVal}`) + +const xiaoleheaderVal = JSON.stringify($request.headers) + if (xiaoleheaderVal) sy.setdata(xiaoleheaderVal,xiaoleheaderKey) + sy.log(`[${jsname}] 获取Cookie: 成功,xiaoleheaderVal: ${xiaoleheaderVal}`) + sy.msg(xiaoleheaderKey, `获取Cookie: 成功🎉`, ``) + + + + + } + + } + +} + + + + + + + + + + + + + function all() + + { + + for(var i=0;i<5;i++) + { (function(i) { + setTimeout(function() { + + if(i==0) xiaoletask(i); + +else if(i==1) xiaoleuser(i); +else if(i==2) xiaoletg(i); +else if(i==3) xiaolesy(i); + + + +else if(i==4) showmsg(i); +}, (i + 1) *1000); + })(i) + + +}} + + + +//签到 +function xiaoletask() { +return new Promise((resolve, reject) => { + + const toxiaoleurl = { + + url: xiaoleurlVal, + + headers: JSON.parse(xiaoleheaderVal), + body: xiaolebodyVal + }; + sy.post(toxiaoleurl,(error, response, data) =>{ + if(logs) sy.log(`${jsname}, 签到信息: ${data}`) + signinfo =JSON.parse(data) + if (signinfo.result==true) + { +tz+='【签到成功】🎉:'+signinfo.show+'\n' +} + +else if (signinfo.result==false) + { +tz+='【重复签到】✖️:'+signinfo.show+'\n' +} + + + + resolve() + }) + }) + } + + + + +function xiaoleuser() { +return new Promise((resolve, reject) => { + + const toxiaoleuserurl = { + url: xiaoleurlVal.replace(/mod=sign/g, `mod=index`), +headers: JSON.parse(xiaoleheaderVal), + + }; + sy.post(toxiaoleuserurl,(error, response, data) =>{ +if(logs) sy.log(`${jsname}, 用户信息: ${data}`) + userinfo =JSON.parse(data) + if (userinfo.result==true) + { +tz+='【'+userinfo.info.userlevel_name+'】👤:'+userinfo.info.user_name+'\n'+ +'【现金余额】🧧:'+userinfo.info.user_money+'元'+'\n'+ +'【今日收益】🧧:'+userinfo.info.jiang_day1+'元'+'\n'+ +'【本月收益】🧧:'+userinfo.info.jiang_month1+'元'+'\n'+ +'【签到任务】⏰:'+userinfo.info.task_list[0].name+'\n'+ +'【签到收益】⏰:'+userinfo.info.task_list[0].money+'\n'+ +'【签到信息】⏰:'+userinfo.info.task_list[0].desc+'\n'+ + + + +'【邀请任务】👥:'+userinfo.info.task_list[1].name+'\n'+ +'【邀请收益】👥:'+userinfo.info.task_list[1].money+'\n'+ +'【邀请信息】👥:'+userinfo.info.task_list[1].desc+'\n' + + +} + + +else if (userinfo.result==false) + { +tz+=userinfo.show +} + + + + resolve() + }) + }) + } + + + + + +function xiaoletg() { +return new Promise((resolve, reject) => { + + const toxiaoletgurl = { + url: xiaoleurlVal.replace(/mod=sign/g, `mod=tg&act=user&level=&page=1`), +headers: JSON.parse(xiaoleheaderVal), + + }; + sy.post(toxiaoletgurl,(error, response, data) =>{ +if(logs) sy.log(`${jsname}, 用户信息: ${data}`) + tginfo =JSON.parse(data) + + + if (tginfo.result==true) + { + + +tz+='【好友信息】😄:'+tginfo.list[0].user_name+'\n'+ +'【注册时间】🤖:'+tginfo.list[0].user_atime+'\n'+ +'【好友等级】🎊:'+tginfo.list[0].userlevel_name+'\n' + + + + +} + + +else if (userinfo.result==false) + { +tz+='错误' +} + + + + resolve() + }) + }) + } + + + + + + + + + + + + + + + + + + +function xiaolesy() { +return new Promise((resolve, reject) => { + + const toxiaolesyurl = { + url: xiaoleurlVal.replace(/mod=sign/g, `mod=tbk_jiang&page=1`), +headers: JSON.parse(xiaoleheaderVal), + + }; + sy.post(toxiaolesyurl,(error, response, data) =>{ +if(logs) sy.log(`${jsname}, 收益信息: ${data}`) + syinfo =JSON.parse(data) +var xx=syinfo.list[0].jiang_text +var tt=xx.substring(xx.indexOf("用户")+2,xx.indexOf("奖励")); + + + + if (syinfo.result==true) + { +tz+= +'【收益信息】👤:'+tt+'\n'+ +'【下单时间】🧧:'+syinfo.list[0].jiang_adate+'\n'+ +'【预计收益】🧧:'+syinfo.list[0].jiang_money+'元'+'\n' + + + + + + +} + + +else if (userinfo.result==false) + { +tz+=userinfo.show +} + + + + resolve() + }) + }) + } + + + + +function showmsg() { + +console.log(tz) + +if (notifyInterval==1) +sy.msg(jsname,'',tz) +} + + +function init() { + isSurge = () => { + return undefined !== this.$httpClient + } + isQuanX = () => { + return undefined !== this.$task + } + getdata = (key) => { + if (isSurge()) return $persistentStore.read(key) + if (isQuanX()) return $prefs.valueForKey(key) + } + setdata = (key, val) => { + if (isSurge()) return $persistentStore.write(key, val) + if (isQuanX()) return $prefs.setValueForKey(key, val) + } + msg = (title, subtitle = '', body = '') => { + if (isSurge()) $notification.post(title, subtitle, body) + if (isQuanX()) $notify(title, subtitle, body) + } + log = (msg) => { + console.log(`${msg}\n`) + } + get = (options, callback) => { + if (isQuanX()) { + if (typeof options == 'string') options = { url: options } + options['method'] = 'GET' + return $task.fetch(options).then( + (response) => { + response['status'] = response.statusCode + callback(null, response, response.body) + }, + (reason) => callback(reason.error, null, null) + ) + } + if (isSurge()) return $httpClient.get(options, callback) + } + post = (options, callback) => { + if (isQuanX()) { + if (typeof options == 'string') options = { url: options } + options['method'] = 'POST' + $task.fetch(options).then( + (response) => { + response['status'] = response.statusCode + callback(null, response, response.body) + }, + (reason) => callback(reason.error, null, null) + ) + } + if (isSurge()) $httpClient.post(options, callback) + } + done = (value = {}) => { + $done(value) + } + return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } +} + diff --git a/xiaoleziye.png b/xiaoleziye.png new file mode 100644 index 000000000..eab575e49 Binary files /dev/null and b/xiaoleziye.png differ diff --git a/ysfdw.js b/ysfdw.js new file mode 100644 index 000000000..7651e453c --- /dev/null +++ b/ysfdw.js @@ -0,0 +1,32 @@ +/*ziye + +如果显示未获取定位,则重启软件多试几次 + + +下载到文件到本地 +放到构造请求里方便修改 (远程不能修改) + +浏览器打开https://raw.githubusercontent.com/ziye12/JavaScript/master/diqudaima.txt,然后搜索地区,修改下面👇的6位数 + + + + +[MITM] +hostname=restapi.amap.com +[rewrite_local] +#云闪付改定位 +^https:\/\/restapi\.amap\.com\/v3\/geocode\/regeo? url script-response-body ysfdw.js + +*/ + +var body = $response.body; // 声明一个变量body并以响应消息体赋值 +var obj = JSON.parse(body); // JSON.parse()将json形式的body转变成对象处理 + + + +obj.regeocode.addressComponent.adcode="540102" + + + +body = JSON.stringify(obj); // 重新打包回json字符串 +$done(body); // 结束修改 diff --git a/yydkziye.js b/yydkziye.js index 1aea69974..00c3dfbe4 100644 --- a/yydkziye.js +++ b/yydkziye.js @@ -13,7 +13,7 @@ 2020.9.8 2020.9.9 修复部分错误 2020.9.13 打卡次数调整为5 - +2020.9.16 打卡次数恢复为10 @@ -25,7 +25,7 @@ www.baimaa.com 音乐打卡 -cs = 5 +cs = 10 xj = 1 yydkurl i=11 @@ -87,7 +87,7 @@ const jsname = '音乐打卡' const jbid =1 const sb='失败,请先关闭,进入程序获取授权' -const cs = 5;//小程序打卡次数 +const cs = 10;//小程序打卡次数 const xj = 1;//提现标准 var tz='' diff --git a/yyzadkziye.js b/yyzadkziye.js deleted file mode 100644 index 45e5bfad4..000000000 --- a/yyzadkziye.js +++ /dev/null @@ -1,338 +0,0 @@ -/*ziye羊羊早安打卡 - -非常重要!!! - -微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/yyzadkziye.png 进入小程序,登录获取授权,再启动软件获取ck -建议设置6点到23点之间打卡,时间间隔30分钟以上,否则容易封号 - - - -《《《《《《《《《《制作其他打卡js的说明 - -抓包小程序,然后替换以下内容来制作其他打卡js, -需要替换的内容如下,按顺序替换字符,自己用电脑或者KODE软件替换,KODE下载链接https://apps.apple.com/cn/app/koder-code-editor/id1447489375 - -ph0001.hezyq.com -羊羊早安打卡 -cs = 40 -xj = 1 -yyzadkurl -i=1146 -yyzadk - -手动替换 -ph0001\.hezyq\.com - -制作其他打卡js的说明》》》》》》》》》》》 - - - - - - -////////////////////////////////////////正文 - - -使用说明: -一,微信扫码 https://raw.githubusercontent.com/ziye12/JavaScript/master/yyzadkziye.png 进入小程序,登录获取授权 - -二,然后将hostname复制粘贴进配置文件 - -三,将重写复制到 rewrite_local 下,再进入程序获取ck,建议 放入新建配置片段,获取之后禁用即可 - -功能如下: -1.每日打卡,设置了开关,完成任务不再打卡 -2.打卡币统计, -3.现金统计,自动提现 - - - - - -hostname= ph0001.hezyq.com, - -//surge -羊羊早安打卡 = type=http-request,pattern=^https:\/\/ph0001\.hezyq\.com\/*,requires-body=1,max-size=0,script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/yyzadkziye.js - -//圈x -https:\/\/ph0001\.hezyq\.com\/* url script-request-header https://raw.githubusercontent.com/ziye12/JavaScript/master/yyzadkziye.js - -//loon -http-request ^https:\/\/ph0001\.hezyq\.com\/* script-path= https://raw.githubusercontent.com/ziye12/JavaScript/master/yyzadkziye.js -, requires-body=true, timeout=10, tag=羊羊早安打卡 - - -*/ - - - -const sy = init()//声明必须 -const notifyInterval = 1; //通知开为1,常关为0 -const logs = 0; // 日志开关 -const jsname = '羊羊早安打卡' -const jbid =1 -const sb='失败,请先关闭,进入程序获取授权' - -const cs = 40;//小程序打卡次数 -const xj = 1;//提现标准 -var tz='' - -const dkurlkey = 'yyzadkurl'+jbid -const dkurl = sy.getdata(dkurlkey) - - -let isGetCookie = typeof $request !== 'undefined' -if (isGetCookie) { - GetCookie() -} else { - all() -} - - - -function GetCookie() { -if ($request && $request.url.match(/i=1146&/)) -if ($request && $request.url.match(/action=today&contr=index/)) - { - const dkurl = $request.url - sy.log(`dkurl:${dkurl}`) - if (dkurl) sy.setdata(dkurl, dkurlkey) - sy.msg(dkurlkey, `获取cookie: 成功🎉`, ``) -} - -} - - -//异步运行 - - -function all() - - { - - for(var i=0;i<3;i++) - { (function(i) { - setTimeout(function() { - - if(i==0) dktj(i); -else if(i==1) dkxj(i); -else if(i==2) showmsg(i); -}, (i + 1) * 1000); - })(i) - - -}} - - - - -//统计 - -function dktj() { -return new Promise((resolve, reject) => { - - const Tjurl = { - url: dkurl - }; - sy.get(Tjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1统计 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1 && obj.info.today.clock < cs){tz+="[账户信息]🎉"+"\n"+ -"今日已打卡"+[Number(obj.info.today.clock) ]+"/"+cs+"次"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - }else tz+="[打卡完成]"+"余"+[Number(obj.info.today. currency)]+"币"+"\n" - - - - - -cstj1(obj.info.today.clock); - - - - resolve() - }) - }) - } - - -//次数统计 - - -function cstj1(tjtj) -{ -if (tjtj { - - const Xjurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=index&contr=my`) - }; - sy.get(Xjurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1现金 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - - - - - tz +="💵现金余额"+ -obj.info.member.money+"元"+"\n" - - } - - else tz +=sb+"\n"; - - -xjtj1(obj.info.member.money); - - - - resolve() - }) - }) - } - - - - -//自动提现 - -function dktx() { -return new Promise((resolve, reject) => { - - const Txurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=withdrawals&contr=my&money=${xj}&payment_code=`) - }; - sy.get(Txurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1提现 - data: ${data}`) - obj = JSON.parse(data) -if(obj.status == 1) { - -tz +='提现成功,成功提现'+xj+'元'+"\n" - - } - -if(obj.status == 2) { - -tz +='提现失败,原因:'+obj.info+"\n" - - } - - - - - resolve() - }) - }) - } - - - -//现金统计 - - -function xjtj1(tjtj) -{ -if (tjtj>=xj) -dktx() - -} - - - -//打卡 -function dkdk() { -return new Promise((resolve, reject) => { - - const Dkurl = { - url: dkurl.replace(/action=today&contr=index/g, `action=sign&contr=clock`) - }; - sy.get(Dkurl,(error, response, data) =>{ - if(logs)sy.log(`${jsname}1打卡- data: ${data}`) - obj = JSON.parse(data) - - if (obj.status==1){ -tz+='[️打卡任务]:'+'打卡次数+1'+'\n' - - } -else tz +=obj.info+'\n' - - - resolve() - }) - }) - } - - -function showmsg() { - -console.log(tz) - -if (notifyInterval==1) -sy.msg(jsname,'',tz) -} - - -function init() { - isSurge = () => { - return undefined !== this.$httpClient - } - isQuanX = () => { - return undefined !== this.$task - } - getdata = (key) => { - if (isSurge()) return $persistentStore.read(key) - if (isQuanX()) return $prefs.valueForKey(key) - } - setdata = (key, val) => { - if (isSurge()) return $persistentStore.write(key, val) - if (isQuanX()) return $prefs.setValueForKey(key, val) - } - msg = (title, subtitle = '', body = '') => { - if (isSurge()) $notification.post(title, subtitle, body) - if (isQuanX()) $notify(title, subtitle, body) - } - log = (msg) => { - console.log(`${msg}\n`) - } - get = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'GET' - return $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) return $httpClient.get(options, callback) - } - post = (options, callback) => { - if (isQuanX()) { - if (typeof options == 'string') options = { url: options } - options['method'] = 'POST' - $task.fetch(options).then( - (response) => { - response['status'] = response.statusCode - callback(null, response, response.body) - }, - (reason) => callback(reason.error, null, null) - ) - } - if (isSurge()) $httpClient.post(options, callback) - } - done = (value = {}) => { - $done(value) - } - return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } -} diff --git a/yyzadkziye.png b/yyzadkziye.png deleted file mode 100644 index 088214a71..000000000 Binary files a/yyzadkziye.png and /dev/null differ