增加至github

This commit is contained in:
hjdhnx 2023-04-23 21:04:12 +08:00
parent ee322ca9c3
commit 250833c9e6
706 changed files with 180567 additions and 1174 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

8
.idea/dr_py.iml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.8 (dr_py) (2)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,13 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="dict.*" />
<option value="custom_addons.common.wb_base.wizard.payment_wizard_mixin.PaymentWizardMixin.show_alert" />
</list>
</option>
</inspection_tool>
</profile>
</component>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

4
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (dr_py) (2)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/dr_py.iml" filepath="$PROJECT_DIR$/.idea/dr_py.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

829
LICENSE
View File

@ -1,674 +1,165 @@
GNU GENERAL PUBLIC LICENSE
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser 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
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

61
app.py Normal file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : app.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from flask.app import Flask
from flask_migrate import Migrate
from base import config
from base.database import db
from utils.log import logger
from utils.system import get_wlan_info,getHost
from controllers import *
from js.rules import getRuleLists
import sys
def create_flask_app():
app = Flask(__name__, static_folder='static', static_url_path='/static')
app.config.from_object(config) # 单独的配置文件里写了这里就不用弄json中文显示了
app.register_blueprint(home.home, url_prefix='')
app.register_blueprint(admin.admin, url_prefix='/admin')
app.register_blueprint(vod.vod, url_prefix='')
app.register_blueprint(cls.cls, url_prefix='/cls')
app.register_blueprint(layui.layui, url_prefix='/layui')
app.register_blueprint(parse.parse, url_prefix='/parse')
app.logger.name = "drLogger"
# lsg = service.storage_service()
logger.info(f"默认解析地址:{app.config.get('PLAY_URL')}")
# logger.info(f"自定义播放解析地址:{lsg.getItem('PLAY_URL')}")
logger.info(f'当前操作系统{sys.platform}')
rule_list = getRuleLists()
wlan_info,_ = get_wlan_info()
logger.info(rule_list)
logger.info(f'局域网: {getHost(1, app.config.get("HTTP_PORT"))}/index\n本地: {getHost(0, app.config.get("HTTP_PORT"))}/index\nwlan_info:{wlan_info}')
db.init_app(app)
db.app = app
db.create_all(app=app)
return app
app = create_flask_app()
migrate = Migrate(app, db)
now_python_ver = ".".join([str(i) for i in sys.version_info[:3]])
if sys.version_info < (3,9):
from gevent.pywsgi import WSGIServer
# from gevent import monkey
# monkey.patch_socket() # 开启socket异步
print(f'当前python版本{now_python_ver}为3.9.0及以下,支持gevent')
else:
print(f'当前python版本{now_python_ver}为3.9.0及以上,不支持gevent')
if __name__ == "__main__":
http_port = int(app.config.get('HTTP_PORT', 5705))
http_host = app.config.get('HTTP_HOST', '0.0.0.0')
if sys.version_info < (3, 9):
# server = WSGIServer(('0.0.0.0', 5705), app, handler_class=WebSocketHandler,log=app.logger)
# server = WSGIServer(('0.0.0.0', 5705), app, handler_class=WebSocketHandler,log=None)
server = WSGIServer((http_host, http_port), app, log=logger)
server.serve_forever()
else:
app.run(debug=False, host=http_host, port=http_port)

34
app.sh Normal file
View File

@ -0,0 +1,34 @@
#!/bin/bash
#kill -9 $(cat supervisord.pid) # 杀掉进程
msg='flask或0 ubuntu下自动识别gevent或普通启动flask\nsflask或1 ubuntu下gunicorn启动flask\ntermux或2 termux下自动识别gevent或普通启动flask\nstermux或3 termux下gunicorn启动flask\n'
case "$1" in
flask)
supervisord -c ./super/flask.conf
;;
0)
supervisord -c ./super/flask.conf
;;
sflask)
supervisord -c ./super/sflask.conf
;;
1)
supervisord -c ./super/sflask.conf
;;
termux)
supervisord -c ./super/termux.conf
;;
2)
supervisord -c ./super/termux.conf
;;
stermux)
supervisord -c ./super/stermux.conf
;;
3)
supervisord -c ./super/stermux.conf
;;
*)
echo -e $msg
;;
esac
# 保留一个 bash
/bin/bash

54
base/R.py Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : R.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from flask import jsonify
class copy_utils:
@staticmethod
def obj_to_dic(obj):
'''
将传入的data对象转成字典
'''
result = {}
for temp in obj.__dict__:
if temp.startswith('_') or temp == 'metadata':
continue
result[temp] = getattr(obj, temp)
return result
@staticmethod
def obj_to_list(list_obj):
'''
将传入的data对象转成List,list中的元素是字典
'''
result = []
for obj in list_obj:
result.append(copy_utils.obj_to_dic(obj))
return result
class R(object):
@classmethod
def ok(self,msg='操作成功',data=None):
if not data:
data = []
result = {"code": 200, "msg": msg, "data": data,"count":len(data)}
return jsonify(result)
@classmethod
def error(self,msg="系统异常",code=404):
result = {"code": code, "msg": msg}
return jsonify(result)
@classmethod
def success(self,msg='操作成功', data=None):
return self.ok(msg,data)
@classmethod
def failed(self,msg="系统异常", code=404):
return self.error(msg,code)

9
base/__init__.py Normal file
View File

@ -0,0 +1,9 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : __init__.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from . import database
from . import config
from . import R

27
base/alist.conf Normal file
View File

@ -0,0 +1,27 @@
# c=[];for(let i in a){c.push(i+','+a[i])}d=c.join('\n');console.log(d);
🙋丫仙女,http://alist.xiaoya.pro/
🦀9T(Adult),https://drive.9t.ee
🐱梓澪の妙妙屋,https://xn--i0v44m.xyz
🚆资源小站,https://pan.142856.xyz
🌤晴园的宝藏库,https://alist.52qy.repl.co
🐭米奇妙妙屋,https://anime.mqmmw.ga
🔮嗨翻,https://pan.hikerfans.com,5
💂小兵组网盘影视,https://6vv.app
📀小光盘,https://alist.xiaoguanxiaocheng.life
🐋一只鱼,https://alist.youte.ml
🌊七米蓝,https://al.chirmyram.com
🌴非盘,http://www.feifwp.top
🥼帅盘,https://hi.shuaipeng.wang
🐉神族九帝,https://alist.shenzjd.com
☃姬路白雪,https://pan.jlbx.xyz
🎧听闻网盘,https://wangpan.sangxuesheng.com
💾DISK,http://124.222.140.243:8080
🌨云播放,https://quanzi.laoxianghuijia.cn
✨星梦,https://pan.bashroot.top
🌊小江,https://dyj.me
💫触光,https://pan.ichuguang.com
🕵好汉吧,https://8023.haohanba.cn
🥗AUNEY,http://121.227.25.116:8008
🎡资源小站,https://960303.xyz/
🏝fenwe,http://www.fenwe.tk:5244
🎢轻弹浅唱,https://g.xiang.lol

57
base/config.py Normal file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : config.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'gp'
PASSWORD = '123456'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'pira'
# DB_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE)
# DB_URI = 'sqlite:///models/rules.db?charset=utf8&check_same_thread=False'
DB_URI = 'sqlite:///base/rules.db?charset=utf8&check_same_thread=False'
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = False # 打印sql语句
JSON_AS_ASCII = False # jsonify返回的中文正常显示
PLAY_URL = 'http://cms.nokia.press' # 匹配远程解析服务器链接 远程接口主页地址,后面不能有/
PLAY_URL = PLAY_URL.rstrip('/')
PID_URL = '' # 自定义的9001进程管理快捷方式
PID_URL = PID_URL.rstrip('/')
HTTP_HOST = '0.0.0.0'
HTTP_PORT = '5705'
PLAY_DISABLE = False # 全局禁用播放解析
LAZYPARSE_MODE = 1 # 播放解析模式(0 本地 1 局域网 2远程 仅在全局禁用为False的时候生效)
WALL_PAPER_ENABLE = True # 启用自定义壁纸
# WALL_PAPER = "https://picsum.photos/1280/720/?blur=10" # 自定义壁纸,可注释
WALL_PAPER = "https://tuapi.eees.cc/api.php?category=fengjing&type=302" # 自定义壁纸,可注释
SUP_PORT = 9001 # supervisord 服务端口
RETRY_CNT = 3 # 验证码重试次数
# OCR_API = 'http://192.168.3.224:9000/api/ocr_img' # 验证码识别接口,传参数data
# OCR_API = 'http://dm.mudery.com:10000' # 验证码识别接口,传参数data
OCR_API = 'https://api.nn.ci/ocr/b64/text' # 验证码识别接口,传参数data
UNAME = 'admin' # 管理员账号
PWD = 'drpy' # 管理员密码
USE_PY = 0 # 开启py源
JS0_DISABLE = 0 # 禁用js0
JS0_PASSWORD = '' # js0密码
JS_MODE = 0 # js模式 0 drpy服务器解析 1 pluto本地解析
MAX_CONTENT_LENGTH = 1 * 1024 * 100 # 100 kB
LIVE_MODE = 0 # 0 本地 1外网
# LIVE_URL = 'https://gitcode.net/bd/v/-/raw/main/live/zb.txt' # 初始化外网直播地址(后续在管理界面改)
# LIVE_URL = 'https://agit.ai/hu/hcr/raw/commit/f8e9c10309a533e5b06df133f859c45cb91f4731/0ER.txt' # 月光直播接口
LIVE_URL = 'https://raw.fastgit.org/zhanghong1983/TVBOXZY/main/TV/live.txt' # 初始化外网直播地址(后续在管理界面改)
CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态|明星|专题|最新|排行|解析' # 动态分类过滤
TAB_EXCLUDE = '猜你|喜欢|APP|下载|剧情|简介|排序' # 动态线路名过滤
# {% if config.WALL_PAPER %}"wallpaper":"{{ config.WALL_PAPER }}",{% endif %}
SEARCH_TIMEOUT = 5000 # 聚搜超时毫秒
SEARCH_LIMIT = 24 # 聚搜限制条数
MULTI_MODE = 0 # 多源模式
XR_MODE = 1 # 仙人模式
JS_PROXY = 'http://localhost:5705/admin/view/=>https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/js/' # 源代理
ALI_TOKEN = '' # 适用于初始配置的阿里云token
ENV = '{"bili_cookie":""}' # 自定义环境变量

264
base/custom.conf Normal file
View File

@ -0,0 +1,264 @@
# 这是一个自定义的额外用户爬虫配置
# 自动附加到config/mode 对应的在线源里
# 可以使用Python的 # 单行注释
{
# "spider": "{{host}}/files/custom_spider.jar",
"parses":[
{"name":"keyu","type":1,"url":"http://newjiexi.gotka.top/keyu3.php?url=","ext":{"flag":["qq","腾讯","qiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"],"header":{"User-Agent":"okhttp/4.1.0"}}},
],
"drives": [{"name":"阿里","password":"43886374072944a2bcc55a0ed129ab48","type":"alidrive"}],
# "lives":[{"group":"redirect","channels":[{"name":"我的直播","urls":["proxy://do=live&type=txt&ext={{host}}/txt/直播.txt"]}]}],
"sites":[
{
"key":"t4",
"name":"T4",
"type":4,
"api":"https://t4.secan.icu/vod?sites=all&ali_token={{ali_token}}&timeout=8",
"searchable":1,
"quickSearch":1,
"filterable":0
},
# 缓存js
# {"key":"js_origin","name":"JS(原始)","type":3,"api":"{{host}}/txt/js/原始JS.js","searchable":1,"quickSearch":1,"filterable":1,"ext":""},
{"key":"Live2Mv","name":"直播转点播","type":3,"api":"{{host}}/libs/live2mv.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"},
{"key":"Alist","name":"Alist","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/alist.json;200;video"},
{"key":"Alist_pt","name":"Alist(pluto)","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/config/2;200;video"},
{"key":"Alist_obj","name":"Alist(obj)","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":[{
"name": "🙋丫仙女",
"server": "http://alist.xiaoya.pro/",
"startPage": "/",
"showAll": false,
"search": true,
"params": {
"/abc": {
"password": "123"
},
"/abc/abc": {
"password": "123"
}
}
}, {
"name": "🌤晴园的宝藏库",
"server": "https://alist.52qy.repl.co"
}, {
"name": "🐭米奇妙妙屋",
"server": "https://anime.mqmmw.ga"
}, {
"name": "💂小兵组网盘影视",
"server": "https://6vv.app"
}, {
"name": "🐋一只鱼",
"server": "https://alist.youte.ml"
}, {
"name": "🌊七米蓝",
"server": "https://al.chirmyram.com"
}, {
"name": "🥼帅盘",
"server": "https://hi.shuaipeng.wang"
}, {
"name": "🐉神族九帝",
"server": "https://alist.shenzjd.com"
}, {
"name": "☃️姬路白雪",
"server": "https://pan.jlbx.xyz"
}, {
"name": "🎧听闻网盘",
"server": "https://wangpan.sangxuesheng.com"
}, {
"name": "💾DISK",
"server": "http://124.222.140.243:8080"
}, {
"name": "🌨云播放",
"server": "https://quanzi.laoxianghuijia.cn"
}, {
"name": "✨星梦",
"server": "https://pan.bashroot.top"
}, {
"name": "💫触光",
"server": "https://pan.ichuguang.com"
}, {
"name": "🕵️好汉吧",
"server": "https://8023.haohanba.cn"
}, {
"name": "💢repl",
"server": "https://ali.liucn.repl.co"
}, {
"name": "🌨秋雨分享",
"server": "https://share.laowang.me"
}, {
"name": "💦讯维云盘",
"server": "https://pan.xwbeta.com"
}]},
{"key":"cms_douban","name":"豆瓣(道长)","type":1,"api":"{{ host }}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=drpy","searchable":2,"quickSearch":1,"filterable":1},
{"key": "cms_爱看乐看","name": "爱看乐看","type": 1,"api": "https://ikan6.vip/api.php/provide/vod","playerType":1,"playUrl": "https://cms.ikan6.vip/nidasicaibudaowozaina/nicaibudaowozaina.php?url=","searchable": 1,"quickSearch": 1,"filterable": 1,"categories": ["国产剧","综艺频道","动漫频道","日韩剧","港台剧","欧美剧","动作片","科幻片","战争片","喜剧片","爱情片","恐怖片","剧情片"]},
{"key":"js_origin_puto","name":"原始JS(pluto)","type":3,"api":"js_origin_test","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{host}}/txt/js/原始JS/origin.js"},
{"key":"js_origin_tvb","name":"原始JS(俊tvb)","type":3,"api":"{{host}}/txt/js/origin/原始JS.js","searchable":1,"quickSearch":1,"filterable":1,"ext":"{}"},
{"key":"drpy_zbk","name":"真不卡(drpy)","type":3,"api":"js_drpy_zbk","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{host}}/txt/pluto/drpy.js"},
{"key": "dr_MXONE", "name": "MXONE(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=MXONE&ext=txt/js/tg/MXONE.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_Nike影视", "name": "Nike影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=Nike影视&ext=txt/js/tg/Nike影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_两个BT", "name": "两个BT(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=两个BT&ext=txt/js/tg/两个BT.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_剧迷", "name": "剧迷(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=剧迷&ext=txt/js/tg/剧迷.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_天空影视2", "name": "天空影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=天空影视&ext=txt/js/tg/天空影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_快云影院", "name": "快云影院(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=快云影院&ext=txt/js/tg/快云影院.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_爱看电影", "name": "爱看电影(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=爱看电影&ext=txt/js/tg/爱看电影.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_特狗影视", "name": "特狗影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=特狗影视&ext=txt/js/tg/特狗影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_皮皮泡", "name": "皮皮泡(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=皮皮泡&ext=txt/js/tg/皮皮泡.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_胖虎影视", "name": "胖虎影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=胖虎影视&ext=txt/js/tg/胖虎影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_18av", "name": "18av(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=18av&ext=txt/js/18/18av.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_banan", "name": "banan(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=banan&ext=txt/js/18/banan.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_Missav", "name": "Missav(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=Missav&ext=txt/js/18/Missav.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_养端", "name": "养端(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=养端&ext=txt/js/18/养端.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_吸瓜", "name": "吸瓜(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=吸瓜&ext=txt/js/18/吸瓜.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_朱古力", "name": "朱古力(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=朱古力&ext=txt/js/18/朱古力.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key": "dr_玩偶姐姐", "name": "玩偶姐姐(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=玩偶姐姐&ext=txt/js/18/玩偶姐姐.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
{"key":"csp_SP360","name":"🎾360(SP)","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"csp_ZJMiao","name":"追剧喵(SP)","type":3,"api":"csp_ZJMiao","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Zxzj","name":"在线之家(SP)","type":3,"api":"csp_Zxzj","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Zjdr","name":"追剧达人(SP)","type":3,"api":"csp_Zjdr","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Ysgc","name":"影视工厂(SP)","type":3,"api":"csp_Ysgc","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"csp_Zhaozy","name":"找资源(SP)","type":3,"api":"csp_Zhaozy","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Yj1211","name":"just live(SP)","type":3,"api":"csp_Yj1211","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Xiaoh","name":"小宝影院[飞](SP)","type":3,"api":"csp_Xiaoh","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Wmkk","name":"完美看看(SP)","type":3,"api":"csp_Wmkk","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Tkys","name":"天空影视(SP)","type":3,"api":"csp_Tkys","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Tangrenjie","name":"唐人街[飞](SP)","type":3,"api":"csp_Tangrenjie","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Smdyy","name":"神马电影(SP)","type":3,"api":"csp_Smdyy","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_QQ","name":"QQ(SP)","type":3,"api":"csp_QQ","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"csp_Nmys","name":"柠檬影视(SP)","type":3,"api":"csp_Nmys","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Nkdy","name":"南柯电影(SP)","type":3,"api":"csp_Nkdy","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Nbys","name":"牛逼影视(SP)","type":3,"api":"csp_Nbys","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Mgtv","name":"MGTV(SP)","type":3,"api":"csp_Mgtv","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_LiteApple","name":"小苹果(SP)","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Lezhu","name":"乐猪(SP)","type":3,"api":"csp_Lezhu","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Lgyy","name":"蓝光影院(SP)","type":3,"api":"csp_Lgyy","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Juhuang","name":"剧荒TV(SP)","type":3,"api":"csp_Juhuang","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"csp_JianYing","name":"简影(SP)","type":3,"api":"csp_JianYing","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_IQIYI","name":"IQIYI(SP)","type":3,"api":"csp_IQIYI","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Fantuan","name":"饭团(SP)","type":3,"api":"csp_Fantuan","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Dy555","name":"555电影(SP)","type":3,"api":"csp_Dy555","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"csp_Bili","name":"哔哩哔哩(SP)","type":3,"api":"csp_Bili","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Alist","name":"Alist(SP)","type":3,"api":"csp_Alist","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Anfuns","name":"Anfuns(SP)","type":3,"api":"csp_Anfuns","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"csp_Bdys","name":"哔滴影视(SP)","type":3,"api":"csp_Bdys","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Bttoo","name":"两个BT(SP)","type":3,"api":"csp_Bttoo","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Ddrk","name":"低端影视(SP)","type":3,"api":"csp_Ddrk","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Dm84","name":"动漫巴士(SP)","type":3,"api":"csp_Dm84","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Dy1010","name":"双十电影(SP)","type":3,"api":"csp_Dy1010","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_EEEDY","name":"3e电影(SP)","type":3,"api":"csp_EEEDY","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Kuaikan","name":"👀快看(SP)","type":3,"api":"csp_Kuaikan","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Kunyu77","name":"👒七七(SP)","type":3,"api":"csp_Kunyu77","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_CZSPP","name":"🚬厂长资源(SP)","type":3,"api":"csp_CZSPP","searchable":1,"quickSearch":1,"filterable":1},
{"key":"mjxq_spider","name":"🌏美剧星球(SP)","type":3,"api":"csp_Mjxq","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Nbys","name":"📺泥巴(SP需翻墙)","type":3,"api":"csp_Nbys","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Cokemv","name":"🚗Cokemv(SP)","type":3,"api":"csp_Cokemv","searchable":1,"quickSearch":1,"filterable":1},
# {"key":"if101资源","name":"✈if101(海外推荐)","type":0,"api":"https://demo.if101.tv/api.php/provide/vod/at/xml","searchable":1,"quickSearch":0,"filterable":0},
{"key":"海外看资源","name":"海外看(海外推荐)","type":0,"api":"https://haiwaikan.com/api.php/provide/vod/at/xml","searchable":1,"quickSearch":0,"filterable":0},
# {"key":"push_agent","name":"🍭推送(阿里)","type":3,"api":"csp_PushAgent","searchable":0,"quickSearch":0,"filterable":0,"ext":"{{ali_token}}"},
# {"key": "push_agent","name": "推送(爱优腾/阿里云盘/磁力链接)","type": 3,"api": "csp_PushAgent","searchable":0,"quickSearch": 0,"filterable":0,"ext": "{{ali_token}}","plugin":"{{host}}/txt/jar/0906.jar"},
{
"key": "push_agent",
"name": "📽推送",
"type": 3,
"api": "csp_PushAgent",
"searchable": 0,
"quickSearch": 0,
"filterable": 0,
"ext": "{{ali_token}}"
},
{"key":"csp_GitCafe","name":"小纸条","type":3,"api":"csp_Gitcafe","searchable":1,"quickSearch":1,"filterable":0,"ext":"{{ali_token}}"},
# {"key":"push_agent","name":"阿里","type":3,"api":"py_ali","searchable":0,"quickSearch":0,"filterable":0,"ext":"{{ali_token}}"},
{"key":"阿里盤搜","name":"阿里盤搜","type":3,"api":"csp_AliPanSou","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{ali_token}}","plugin":"https://ghproxy.com/https://github.com/FongMi/CatVodSpider/raw/main/jar/custom_spider.jar"},
# {"key":"push_agent","name":"推送","type":3,"api":"csp_Push","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{ali_token}}","plugin":"https://ghproxy.com/https://github.com/FongMi/CatVodSpider/raw/main/jar/custom_spider.jar"},
## M浏览器中APP影视规则支持(AppYsV2)
#萝卜/白菜/木白/绿豆
{"key":"csp_appysv2_渔渔影视","name":"渔渔影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://luobo.yugenye.site/api.php/v1.vod"},
{"key":"csp_appysv2_月儿影视","name":"月儿影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://yue52.xyz/api.php/v1.vod"},
{"key":"csp_appysv2_小鸟动漫","name":"小鸟动漫(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://xydm.baicai.buzz/mogai_api.php/v1.vod"},
{"key":"csp_appysv2_蜗牛动漫","name":"蜗牛动漫(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://woniudm.woniu.cyou:20000/mogai_api.php/v1.vod"},
{"key":"csp_appysv2_天天视频","name":"天天视频(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.qianju.cc/api.php/v1.vod"},
{"key":"csp_appysv2_淘剧社","name":"淘剧社(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://app.shuhai99.com/api.php/v1.vod"},
{"key":"csp_appysv2_冷视TV","name":"冷视TV(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://len.tv/api.php/v1.vod"},
{"key":"csp_appysv2_龙猫追剧","name":"龙猫追剧(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lb.ybnxcx.com/api.php/v1.vod"},
{"key":"csp_appysv2_看剧吧","name":"看剧吧(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.ishen520.com/api.php/v1.vod"},
{"key":"csp_appysv2_百淘影视","name":"百淘影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://ys.58g8.com/lvdou_api.php/v1.vod"},
{"key":"csp_appysv2_阿里影视","name":"阿里影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://aliys.cn:90/api.php/v1.vod"},
{"key":"csp_appysv2_爱电影","name":"爱电影(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.idianying.com.cn/mogai_api.php/v1.vod"},
{"key":"csp_appysv2_OK影视","name":"OK影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://123.ok00.xyz/api.php/v1.vod"},
{"key":"csp_appysv2_MX影视","name":"MX影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://mkk.gotka.top/api.php/v1.vod"},
#
#神马
{"key":"csp_appysv2_天空TV","name":"天空TV(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tv.tkys.tv/api.php/iptv/vod/"},
{"key":"csp_appysv2_嘿荼锋","name":"嘿荼锋(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tv.hfys8.vip/api.php/Sntv/vod/"},
{"key":"csp_appysv2_贵宾影院","name":"贵宾影院(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://vipdytv.com/api.php/iptv/vod/"},
{"key":"csp_appysv2_独优影视","name":"独优影视(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://121.205.88.71:218/api.php/Chengcheng/vod/"},
{"key":"csp_appysv2_CV影视","name":"CV影视(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.cccvvv.top/api.php/iptv/vod/"},
{"key":"csp_appysv2_2号币","name":"2号币(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://phoebe.cf/api.php/iptv/vod/"},
#
## 广大侠 资源网采集
#官方解析
{"key":"诺讯资源","name":"诺讯资源(官)","type":1,"api":"http://caiji.nxflv.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"6U资源","name":"6U资源(官)","type":1,"api":"http://www.6uzy.cc/inc/apijson_vod.php","searchable":0,"quickSearch":0},
{"key":"天堂资源","name":"天堂资源(官)","type":1,"api":"http://vipmv.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"土狗2345","name":"土狗2345(官)","type":1,"api":"http://2345.tgzy.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"土狗360","name":"土狗360(官)","type":1,"api":"http://360.tgzy.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"云海官采","name":"云海官采(官)","type":1,"api":"http://101.34.7.151:600/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"忆梦","name":"忆梦(官)","type":1,"api":"http://anltv.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
#
#切片资源
{"key":"金鹰资源","name":"金鹰资源(切)","type":1,"api":"http://jinyingzy.com/provide/vod","searchable":1,"quickSearch":1},
{"key":"冠军资源","name":"冠军资源(切)","type":1,"api":"https://www.cmpzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"1080资源库","name":"1080资源库(切)","type":1,"api":"https://api.1080zyku.com/inc/api_mac10.php","searchable":0,"quickSearch":0},
{"key":"TOM资源","name":"TOM资源(切)","type":1,"api":"https://api.tomcaiji.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"快车资源","name":"快车资源(切)","type":1,"api":"https://caiji.kczyapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"松鼠资源","name":"松鼠资源(切)","type":1,"api":"https://m3u8.songshuzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"多多资源","name":"多多资源(切)","type":1,"api":"https://www.ddzyz1.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"FOX资源","name":"FOX资源(切)","type":1,"api":"https://api.foxzyapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"量子资源","name":"量子资源(切)","type":1,"api":"http://cj.lziapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"番茄资源","name":"番茄资源(切)","type":1,"api":"http://api.fqzy.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"卧龙资源","name":"卧龙资源(切)","type":1,"api":"https://collect.wolongzyw.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"红牛资源","name":"红牛资源(切)","type":1,"api":"https://www.hongniuzy2.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"樱花资源","name":"樱花资源(切)","type":1,"api":"https://m3u8.apiyhzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"易看资源","name":"易看资源(切)","type":1,"api":"https://api.yikanapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"酷点资源","name":"酷点资源(切)","type":1,"api":"https://kudianzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"速更资源","name":"速更资源(切)","type":1,"api":"https://sugengzy.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"闪电资源","name":"闪电资源(切)","type":1,"api":"http://sdzyapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"飞速资源","name":"飞速资源(切)","type":1,"api":"https://www.feisuzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"光速资源","name":"光速资源(切)","type":1,"api":"https://api.guangsuapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"新浪资源","name":"新浪资源(切)","type":1,"api":"http://api.xinlangapi.com/xinlangapi.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"鱼乐资源","name":"鱼乐资源(切)","type":1,"api":"https://api.ylzy1.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"韩剧资源","name":"韩剧资源(切)","type":1,"api":"http://www.hanjuzy.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
{"key":"快播资源","name":"快播资源(切)","type":1,"api":"http://www.kuaibozy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"八戒资源","name":"八戒资源(切)","type":1,"api":"http://cj.bajiecaiji.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
{"key":"百度资源","name":"百度资源(切)","type":1,"api":"https://api.apibdzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"天空资源","name":"天空资源(切)","type":1,"api":"https://api.tiankongapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"南国影源","name":"南国影源(切)","type":1,"api":"http://api.nguonphim.tv/api.php/provide/vod/","searchable":1,"quickSearch":1},
#
#优质资源
{"key":"U酷资源","name":"U酷资源(优)","type":1,"api":"https://api.ukuapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"看看资源","name":"看看资源(优)","type":1,"api":"https://zy.hikan.xyz/api.php/provide/vod/","searchable":1,"quickSearch":1},
# {"key":"一帆资源(VPN)","name":"一帆资源(VPN)(优)","type":1,"api":"http://api.if101.tv/v1/vod?ac=list","searchable":0,"quickSearch":0},
{"key":"789盘","name":"789盘(优)","type":1,"api":"https://www.rrvipw.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"多多资源2","name":"多多资源2(优)","type":1,"api":"https://a.7dyu.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"土剧TV","name":"土剧TV(优)","type":1,"api":"http://tujutv.top/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"XYUI","name":"XYUI(优)","type":1,"api":"http://jx4.xyui.top:7001/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"考拉TV","name":"考拉TV(优)","type":1,"api":"https://ikaola.tv/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"每天看看","name":"每天看看(优)","type":1,"api":"http://47.113.126.237:1234/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"乐活影视","name":"乐活影视(优)","type":1,"api":"https://lehootv.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
#
#三方聚合
{"key":"影图","name":"影图(聚)","type":1,"api":"https://cj.vodimg.top/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"随缘电影","name":"随缘电影(聚)","type":1,"api":"https://baobei666.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
{"key":"飘零影院","name":"飘零影院(聚)","type":1,"api":"https://p2100.net/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"艾旦影视","name":"艾旦影视(聚)","type":1,"api":"https://lovedan.net/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"趣看","name":"趣看(聚)","type":1,"api":"https://qkmp4.cn/api.php/provide/vod/","searchable":0,"quickSearch":0},
{"key":"39影视","name":"39影视(聚)","type":1,"api":"https://www.39kan.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"飘花电影","name":"飘花电影(聚)","type":1,"api":"http://www.zzrhgg.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"千寻时光","name":"千寻时光(聚)","type":1,"api":"http://wy.dqyhg.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"网民电影","name":"网民电影(聚)","type":1,"api":"https://www.prinevillesda.org/api.php/provide/vod/","searchable":1,"quickSearch":1},
{"key":"MBO影视","name":"MBO影视(聚)","type":0,"api":"https://www.mbomovie.com/api.php/provide/vod/at/xml/","searchable":0,"quickSearch":0}
]
}

8
base/database.py Normal file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : databse.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

BIN
base/files/base.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
base/live.txt Normal file

File diff suppressed because one or more lines are too long

BIN
base/rules.db Normal file

Binary file not shown.

3061
base/直播.txt Normal file

File diff suppressed because it is too large Load Diff

35
base/解析.conf Normal file
View File

@ -0,0 +1,35 @@
# 这是用户自定义解析列表,不会被系统升级覆盖
# 0123对应普通解析json解析并发多json解析聚合解析,参数3不填默认0
# flags是线路名称标识,会自动拦截并走以下的解析
# 名称,链接,类型,ua (ua不填默认 Mozilla/5.0) 可以手动填 Dart/2.14 (dart:io)
# 168,{{host}}/parse/api/168.js?url=,1
解析13,http://api.wpsseo.cn/?v=,0
解析14,https://go.yh0523.cn/y.cy?url=,0
B站1,https://jx.bozrc.com:4433/player/?url=,0
爱豆,https://jx.aidouer.net/?url=,0
H8,https://www.h8jx.com/jiexi.php?url=,0
解析,https://ckmov.ccyjjd.com/ckmov/?url=,0
思古3,https://jsap.attakids.com/?url=,0
云端1,https://js.52jx.top:2525/?url=,0
云端2,https://sb.5gseo.net/?url=,0
m3u8tv高清,https://jx.m3u8.tv/jiexi/?url=,0
搬运,https://jx.bynote.top/API.php?url=,1
解析第一,http://27.124.4.42:4567/jhjson/ceshi.php?url=,0
纯净1,https://z1.m1907.cn/?jx=,0
BL,https://vip.bljiex.com/?v=,0
CK,https://www.ckplayer.vip/jiexi/?url=,0
解析,https://ckmov.ccyjjd.com/ckmov/?url=,0
解析la,https://api.jiexi.la/?url=,0
老板,https://vip.laobandq.com/jiexi.php?url=,0
诺讯,https://www.nxflv.com/?url=,0
PM,https://www.playm3u8.cn/jiexi.php?url=,0
盘古,https://www.pangujiexi.cc/jiexi.php?url=,0
全民,https://jx.blbo.cc:4433/?url=,0
七哥,https://jx.mmkv.cn/tv.php?url=,0
RDHK,https://jx.rdhk.net/?v=,0
云析,https://jx.yparse.com/index.php?url=,0
180,https://jx.000180.top/jx/?url=,0
七彩,https://www.xymav.com/?url=,0
夜幕,https://www.yemu.xyz/?url=,0
1717云,https://www.1717yun.com/jx/ty.php?url=,0
8090,https://www.8090g.cn/?url=,0

25
commands.txt Normal file
View File

@ -0,0 +1,25 @@
. ./app.sh
source ./app.sh
. <(cat app.sh)
# supervisord -c manager.conf
flask db init
flask db migrate
flask db upgrade
pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
可能会用到:
ddddocr==1.1.0 ; sys_platform == 'win32'
ddddocr==1.0.8 ; sys_platform != 'win32'
废弃操作仅限 flask-migrate==2.7.0:
# # 导入数据迁移核心类
# from flask_migrate import Migrate
# from flask_script import Manager
# manager = Manager(app)
# 初始化数据迁移
# migrate = Migrate(app, db)
# manager.add_command('sql', MigrateCommand)
# python app.py sql migrate -m “init”
# python app.py sql upgrade

15
controllers/__init__.py Normal file
View File

@ -0,0 +1,15 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : __init__.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from . import home
from . import admin
from . import service
from . import vod
from . import cms
from . import cls
from . import classes
from . import layui
from . import parse

398
controllers/admin.py Normal file
View File

@ -0,0 +1,398 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : admin.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
import os
import ujson
from flask import Blueprint,request,render_template,render_template_string,jsonify,make_response,redirect
from controllers.service import storage_service,rules_service,parse_service
from base.R import R
from base.database import db
from utils.log import logger
import shutil
from utils.update import getLocalVer,getOnlineVer,download_new_version,download_lives,copy_to_update
from utils import parser
from utils.env import get_env,update_env
from utils.web import getParmas,verfy_token
from js.rules import getRules,getCacheCount
from utils.parser import runJScode
from werkzeug.utils import secure_filename
from utils.web import md5
from utils.common_api import js_render
admin = Blueprint("admin", __name__)
# @admin.route("/",methods=['get'])
# def index():
# return R.ok(msg='欢迎进入首页',data=None)
# @admin.route("/info",methods=['get'])
# def info_all():
# data = storage_service.query_all()
# return R.ok(data=data)
@admin.route('/')
def admin_index(): # 管理员界面
if not verfy_token():
return render_template('login.html')
lsg = storage_service()
live_url = lsg.getItem('LIVE_URL')
use_py = lsg.getItem('USE_PY')
js0_password = lsg.getItem('JS0_PASSWORD')
# print(f'live_url:', live_url)
rules = getRules('js')
# print(rules)
cache_count = getCacheCount()
# print(cache_count)
return render_template('admin.html',js0_password=js0_password, pystate=use_py,rules=rules,cache_count=cache_count, ver=getLocalVer(), live_url=live_url)
@admin.route('/settings')
def admin_settings(): # 管理员界面
if not verfy_token():
return render_template('login.html')
lsg = storage_service()
# conf_list = 'LIVE_URL|USE_PY|PLAY_URL|PLAY_DISABLE|LAZYPARSE_MODE|WALL_PAPER_ENABLE|WALL_PAPER|UNAME|PWD|LIVE_MODE|LIVE_URL|CATE_EXCLUDE|TAB_EXCLUDE'.split('|')
conf_lists = lsg.getStoreConf()
# print(conf_lists)
return render_template('settings.html', conf_lists=conf_lists,ver=getLocalVer())
@admin.route('/save_conf',methods=['POST'])
def admin_save_conf(): # 管理员界面
if not verfy_token():
# return render_template('login.html')
return R.error('请登录后再试')
key = getParmas('key')
value = getParmas('value')
print(f'key:{key},value:{value}')
lsg = storage_service()
res_id = lsg.setItem(key,value)
return R.success(f'修改成功,记录ID为:{res_id}')
@admin.route('/update_env',methods=['POST'])
def admin_update_env(): # 更新环境变量中的某个值
if not verfy_token():
# return render_template('login.html')
return R.error('请登录后再试')
key = getParmas('key')
value = getParmas('value')
print(f'key:{key},value:{value}')
ENV = update_env(key,value)
return R.success(f'修改成功,最新的完整ENV见data',data=ENV)
@admin.route("/view/<name>",methods=['GET'])
def admin_view_rule(name):
return js_render(name)
# if not name or not name.split('.')[-1] in ['js','txt','py','json']:
# return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py')
# try:
# env = get_env()
# # print(env)
# if env.get('js_proxy'):
# js_proxy = env['js_proxy']
# burl = request.base_url
# if '=>' in js_proxy:
# oldsrc = js_proxy.split('=>')[0]
# if oldsrc in burl:
# newsrc = js_proxy.split('=>')[1]
# # print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}')
# rurl = burl.replace(oldsrc, newsrc)
# if burl != rurl:
# jscode = parser.getJs(name, 'js')
# # rjscode = render_template_string(jscode, env=env)
# rjscode = jscode
# for k in env:
# # print(f'${k}', f'{env[k]}')
# if f'${k}' in rjscode:
# rjscode = rjscode.replace(f'${k}', f'{env[k]}')
# # rjscode = render_template_string(jscode, **env)
# if rjscode.strip() == jscode.strip(): # 无需渲染才代理
# return redirect(rurl)
# else:
# logger.info(f'{name}由于存在环境变量无法被依赖代理')
#
# return parser.toJs(name,'js',env)
# except Exception as e:
# return R.error(f'非法猥亵\n{e}')
@admin.route('/clear/<name>')
def admin_clear_rule(name):
if not name or not name.split('.')[-1] in ['js','txt','py','json']:
return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py')
if not verfy_token():
return render_template('login.html')
file_path = os.path.abspath(f'js/{name}')
print(file_path)
if not os.path.exists(file_path):
return R.error('服务端没有此文件!'+file_path)
os.remove(file_path)
return R.ok('成功删除文件:'+file_path)
@admin.route('/get_ver')
def admin_get_ver():
if not verfy_token():
# return render_template('login.html')
return R.error('请登录后再试')
online_ver,msg = getOnlineVer()
return jsonify({'local_ver':getLocalVer(),'online_ver':online_ver,'msg':msg})
@admin.route('/update_db')
def admin_update_db():
if not verfy_token():
# return render_template('login.html')
return R.error('请登录后再试')
old_dbfile = 'migrations'
if os.path.exists(old_dbfile):
logger.info(f'开始删除历史数据库迁移文件:{old_dbfile}')
shutil.rmtree(old_dbfile)
db.session.execute('drop table if exists alembic_version')
cmd = 'flask db migrate && flask db upgrade'
if not os.path.exists('migrations'):
cmd = 'flask db init && '+cmd
logger.info(f'开始执行cmd:{cmd}')
result = os.system(cmd)
logger.info(f'cmd执行结果:{result}')
return R.success('数据库升级完毕')
@admin.route('/update_ver')
def admin_update_ver():
if not verfy_token():
return R.failed('请登录后再试')
msg = download_new_version()
return R.success(msg)
@admin.route('/rule_state/<int:state>',methods=['POST'])
def admin_rule_state(state=0): # 管理员修改规则状态
if not verfy_token():
return R.error('请登录后再试')
names = getParmas('names')
if not names:
return R.success(f'修改失败,没有传递names参数')
rule_list = names.split(',')
rules = rules_service()
# print(rules.query_all())
# print(rules.getState(rule_list[0]))
# print(rule_list)
success_list = []
for rule in rule_list:
try:
res_id = rules.setState(rule,state)
success_list.append(f'{rule}:{res_id}')
except:
success_list.append(rule)
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
@admin.route('/rule_order/<int:order>',methods=['POST'])
def admin_rule_order(order=0): # 管理员修改规则顺序
if not verfy_token():
return R.error('请登录后再试')
names = getParmas('names')
if not names:
return R.success(f'修改失败,没有传递names参数')
rule_list = names.split(',')
rules = rules_service()
# print(rules.query_all())
# print(rules.getState(rule_list[0]))
# print(rule_list)
success_list = []
rule_list.reverse() # 倒序解决时间多重排序问题
for rule in rule_list:
try:
res_id = rules.setOrder(rule,order)
success_list.append(f'{rule}:{res_id}')
except:
success_list.append(rule)
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
@admin.route('/parse/save_data',methods=['POST'])
def admin_parse_save_data(): # 管理员保存拖拽排序后的解析数据
if not verfy_token():
return R.error('请登录后再试')
data = getParmas('data')
if not data:
return R.success(f'修改失败,没有传递data参数')
parse = parse_service()
success_list = []
data = ujson.loads(data)
new_list = []
new_data = []
for nd in data:
if not nd.get('url') and nd.get('name') != '🌐Ⓤ':
continue
if nd['url'] not in new_list:
new_data.append(nd)
new_list.append(nd['url'])
print(f'去重前:{len(data)},去重后:{len(new_data)}')
for i in range(len(new_data)):
d = new_data[i]
# if not d.get('url') and d.get('name') != '🌐Ⓤ':
# continue
obj = {
'name':d.get('name', ''),
'url':d.get('url', ''),
'state':d.get('state',1),
'type': d.get('state',0),
'order':i+1,
'ext':d.get('ext',''),
'header':d.get('header',''),
}
# print(obj)
try:
parse.saveData(obj)
success_list.append(f'parse:{d["url"]}')
# print(obj)
# print(200,obj)
except Exception as e:
success_list.append(d["url"])
print(f'{d["url"]}失败:{e}')
# print(len(success_list))
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
@admin.route('/force_update')
def admin_force_update():
if not verfy_token():
return R.failed('请登录后再试')
ret = copy_to_update()
if ret:
msg = '升级成功'
return R.success(msg)
else:
msg = '升级失败。具体原因只能去看实时日志(通过9001端口)'
return R.failed(msg)
@admin.route('/update_lives')
def admin_update_lives():
url = getParmas('url')
if not url:
return R.failed('未提供被同步的直播源远程地址!')
if not verfy_token():
return R.failed('请登录后再试')
live_url = url
success = download_lives(live_url)
if success:
return R.success(f'直播源{live_url}同步成功')
else:
return R.failed(f'直播源{live_url}同步失败')
@admin.route('/write_live_url')
def admin_write_live_url():
url = getParmas('url')
if not url:
return R.failed('未提供修改后的直播源地址!')
if not verfy_token():
return R.failed('请登录后再试')
lsg = storage_service()
id = lsg.setItem('LIVE_URL',url)
msg = f'已修改的配置记录id为:{id}'
return R.success(msg)
@admin.route('/change_use_py')
def admin_change_use_py():
if not verfy_token():
return R.failed('请登录后再试')
lsg = storage_service()
use_py = lsg.getItem('USE_PY')
new_use_py = '' if use_py else '1'
state = '开启' if new_use_py else '关闭'
id = lsg.setItem('USE_PY', new_use_py)
msg = f'已修改的配置记录id为:{id},结果为{state}'
return R.success(msg)
# @admin.route('/get_use_py')
# def admin_get_use_py():
# if not verfy_token():
# return R.failed('请登录后再试')
# lsg = storage_service()
# use_py = lsg.getItem('USE_PY')
# state = 1 if use_py else 0
# return R.success(state)
@admin.route('/upload', methods=['GET', 'POST'])
def upload_file():
if not verfy_token():
return render_template('login.html')
if request.method == 'POST':
try:
file = request.files['file']
filename = secure_filename(file.filename)
print(f'推荐安全文件命名:{filename}')
savePath = f'js/{file.filename}'
if os.path.exists(savePath):
return R.failed(f'上传失败,文件已存在,请先查看删除再试')
with open('js/模板.js', encoding='utf-8') as f2:
before = f2.read().split('export')[0]
upcode = file.stream.read().decode('utf-8')
check_to_run = before + upcode
# print(check_to_run)
try:
loader, _ = runJScode(check_to_run)
rule = loader.eval('rule')
if not rule:
return R.failed('文件上传失败,检测到上传的文件不是drpy框架支持的源代码')
except:
return R.failed('文件上传失败,检测到上传的文件不是drpy框架支持的源代码')
print(savePath)
file.seek(0) # 读取后变成空文件,重新赋能
file.save(savePath)
return R.success('文件上传成功')
except Exception as e:
return R.failed(f'文件上传失败!{e}')
else:
# return render_template('upload.html')
return R.failed('文件上传失败')
@admin.route('/login',methods=['GET','POST'])
def login_api():
username = getParmas('username')
password = getParmas('password')
autologin = getParmas('autologin')
if not all([username,password]):
return R.failed('账号密码字段必填')
token = md5(f'{username};{password}')
check = verfy_token(token=token)
if check:
# response = make_response(redirect('/admin'))
response = make_response(R.success('登录成功'))
response.set_cookie('token', token)
return response
else:
return R.failed('登录失败,用户名或密码错误')
@admin.route('/logtail')
def admin_logtail():
if not verfy_token():
return R.failed('请登录后再试')
return render_template('logtail.html')
@admin.route('/lives')
def admin_lives():
if not verfy_token():
return R.failed('请登录后再试')
# print(dir(request))
# 完整地址: request.base_url url
# 带http的前缀 host_url root_url
# 不带http的前缀 host
# 当前路径 path
host_url = request.host_url
def get_lives():
base_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件所在目录
# print(base_path)
live_path = os.path.join(base_path, '../txt/lives')
# print(live_path)
files = os.listdir(live_path)
# print(files)
# files = list(filter(lambda x: str(x).endswith('.txt') and str(x).find('模板') < 0, files))
files = list(filter(lambda x: str(x).split('.')[-1] in ['txt','json','m3u'] and str(x).find('模板') < 0, files))
files = [f'{host_url}lives?path=txt/lives/{file}' for file in files]
return files
files = '\n'.join(get_lives())
response = make_response(files)
response.headers['Content-Type'] = 'text/plain; charset=utf-8'
return response

30
controllers/classes.py Normal file
View File

@ -0,0 +1,30 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : classes.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from base.database import db
from utils.log import logger
from models.ruleclass import RuleClass
def getClasses():
if not db:
msg = '未提供数据库连接'
logger.info(msg)
return []
res = db.session.query(RuleClass).all()
return [rc.name for rc in res]
def getClassInfo(cls):
if not db:
msg = f'未提供数据库连接,获取{cls}详情失败'
logger.info(msg)
return None
logger.info(f'开始查询{cls}的分类详情')
res = db.session.query(RuleClass).filter(RuleClass.name == cls).first()
if res:
logger.info(str(res))
return str(res)
else:
return f'数据库不存在{cls}的分类缓存'

30
controllers/cls.py Normal file
View File

@ -0,0 +1,30 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : CLS.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from flask import Blueprint
from controllers.classes import getClasses,getClassInfo
from base.R import R
from utils.log import logger
from base.database import db
from models.ruleclass import RuleClass
cls = Blueprint("cls", __name__)
@cls.route('/get/<cls>')
def getClassInfoApi(cls):
info = getClassInfo(cls)
return R.ok(info)
@cls.route('/clear/<cls>')
def clearClassApi(cls):
logger.info(f'开始查询{cls}的分类详情')
res = db.session.query(RuleClass).filter(RuleClass.name == cls)
if res:
res.delete()
db.session.commit()
return R.success(f'已清除{cls}的分类缓存')
else:
return R.failed(f'数据库不存在{cls}的分类缓存')

1577
controllers/cms.py Normal file

File diff suppressed because it is too large Load Diff

465
controllers/home.py Normal file
View File

@ -0,0 +1,465 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : index.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
import json
import ujson
import os
import re
from flask import Blueprint,abort,render_template,render_template_string,url_for,redirect,make_response,send_from_directory,request
from controllers.service import storage_service,rules_service,parse_service
from controllers.classes import getClasses,getClassInfo
from utils.files import getPics,custom_merge,getAlist,get_live_url,get_multi_rules,getCustonDict
from js.rules import getRules,getPys
from utils.encode import parseText,base64Encode,base64Decode
from base.R import R
from utils.system import getHost,is_linux
from utils.cfg import cfg
from utils import parser
from utils.ua import time,get_interval
from utils.log import logger
from utils.update import getLocalVer,getHotSuggest
from js.rules import getJxs
import random
from utils.web import getParmas,verfy_token
from utils.common_api import js_render
import functools
home = Blueprint("home", __name__,static_folder='/static')
@home.route('/')
def forbidden(): # put application's code here
abort(403)
@home.route('/favicon.ico') # 设置icon
def favicon():
# return home.send_static_file('img/favicon.svg')
return redirect('/static/img/favicon.svg')
# 对于当前文件所在路径,比如这里是static下的favicon.ico
# return send_from_directory(os.path.join(app.root_path, 'static'), 'img/favicon.svg', mimetype='image/vnd.microsoft.icon')
@home.route('/index')
def index():
sup_port = cfg.get('SUP_PORT', 9001)
lsg = storage_service()
pid_url = lsg.getItem('PID_URL')
manager0 = ':'.join(getHost(0).split(':')[0:2])
manager1 = ':'.join(getHost(1).split(':')[0:2])
manager2 = pid_url or ':'.join(getHost(2).split(':')[0:2]).replace('https','http')
if sup_port:
manager0 += f':{sup_port}'
manager1 += f':{sup_port}'
if not pid_url:
manager2 += f':{sup_port}'
# print(manager2)
ver = getLocalVer()
return render_template('index.html',ver=ver,getHost=getHost,manager0=manager0,manager1=manager1,manager2=manager2,is_linux=is_linux())
@home.route('/rules/clear')
def rules_to_clear():
return render_template('rules_to_clear.html',rules=getRules(),classes=getClasses())
@home.route('/rules/view')
def rules_to_view():
return render_template('rules_to_view.html',rules=getRules(),classes=getClasses())
@home.route('/pics')
def random_pics():
id = getParmas('id')
# print(f'id:{id}')
pics = getPics()
# print(pics)
new_conf = cfg
lsg = storage_service()
store_conf_dict = lsg.getStoreConfDict()
new_conf.update(store_conf_dict)
if not new_conf.WALL_PAPER and len(pics) > 0:
if id and f'images/{id}.jpg' in pics:
pic = f'images/{id}.jpg'
else:
pic = random.choice(pics)
file = open(pic, "rb").read()
response = make_response(file)
response.headers['Content-Type'] = 'image/jpeg'
return response
else:
return redirect(new_conf.WALL_PAPER)
@home.route('/clear')
def clear_rule():
rule = getParmas('rule')
if not rule:
return R.failed('规则字段必填')
cache_path = os.path.abspath(f'cache/{rule}.js')
if not os.path.exists(cache_path):
return R.failed('服务端没有此规则的缓存文件!'+cache_path)
os.remove(cache_path)
return R.success('成功删除文件:'+cache_path)
@home.route("/plugin/<name>",methods=['GET'])
def plugin(name):
# name=道长影视模板.js
if not name or not name.split('.')[-1] in ['js','txt','py','json']:
return R.failed(f'非法猥亵,未指定文件名。必须包含js|txt|json|py')
try:
return parser.toJs(name)
except Exception as e:
return R.failed(f'非法猥亵\n{e}')
@home.route('/files/<name>')
def get_files(name):
base_path = 'base/files'
os.makedirs(base_path,exist_ok=True)
file_path = os.path.join(base_path, f'{name}')
if not os.path.exists(file_path):
return R.failed(f'{file_path}文件不存在')
with open(file_path, mode='rb') as f:
file_byte = f.read()
response = make_response(file_byte)
filename = name
response.headers['Content-Type'] = 'application/octet-stream'
response.headers['Content-Disposition'] = f'attachment;filename="{filename}"'
return response
@home.route('/txt/<path:filename>')
def custom_static_txt(filename):
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
# print(filename)
return send_from_directory('txt', filename)
@home.route('/libs/<path:filename>')
def custom_static_libs(filename):
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
# print(filename)
return send_from_directory('libs', filename)
# @home.route('/js/<path:filename>')
# def custom_static_js(filename):
# # 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
# # print(filename)
# return send_from_directory('js', filename)
@home.route('/js/<path:name>',methods=['GET'])
def custom_static_js(name):
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
# print(name)
return js_render(name)
# @home.route('/txt/<name>')
# def get_txt_files(name):
# base_path = 'txt'
# os.makedirs(base_path,exist_ok=True)
# file_path = os.path.join(base_path, f'{name}')
# if not os.path.exists(file_path):
# return R.failed(f'{file_path}文件不存在')
#
# with open(file_path, mode='r',encoding='utf-8') as f:
# file_byte = f.read()
# response = make_response(file_byte)
# response.headers['Content-Type'] = 'text/plain; charset=utf-8'
# return response
@home.route('/lives')
def get_lives():
# ?path=base/live.txt
path = getParmas('path')
live_path = path or 'base/直播.txt'
if not re.search('(txt|json|conf)$',live_path,re.M|re.S) or not re.search('^(txt|base)',live_path,re.M|re.S):
abort(403)
if not os.path.exists(live_path):
# with open(live_path,mode='w+',encoding='utf-8') as f:
# f.write('')
return ''
with open(live_path,encoding='utf-8') as f:
live_text = f.read()
if len(live_text) > 100 and live_text.find('http') < 0:
try:
live_text = base64Decode(live_text)
logger.info(f'{path} base64解码完毕')
except Exception as e:
logger.info(f'{path} base64解码失败:{e}')
response = make_response(live_text)
response.headers['Content-Type'] = 'text/plain; charset=utf-8'
return response
@home.route('/liveslib')
def get_liveslib():
live_path = 'js/custom_spider.jar'
if not os.path.exists(live_path):
with open(live_path,mode='w+',encoding='utf-8') as f:
f.write('')
with open(live_path,mode='rb') as f:
live_text = f.read()
response = make_response(live_text)
filename = 'custom_spider.jar'
response.headers['Content-Type'] = 'application/octet-stream'
response.headers['Content-Disposition'] = f'attachment;filename="{filename}"'
return response
@home.route('/hotsugg')
def get_hot_search():
s_from = getParmas('from')
size = getParmas('size')
data = getHotSuggest(s_from,size)
return R.success('获取成功',data)
def merged_hide(merged_config):
t1 = time()
store_rule = rules_service()
hide_rules = store_rule.getHideRules()
hide_rule_names = list(map(lambda x: x['name'], hide_rules))
# print(hide_rule_names)
all_cnt = len(merged_config['sites'])
def filter_show(x):
name = x['api'].split('rule=')[1].split('&')[0] if 'rule=' in x['api'] else x['key'].replace('dr_','')
# print(name)
if not str(x['key']).startswith('dr_') and name == 'drpy':
name = x['key']
return name not in hide_rule_names
merged_config['sites'] = list(filter(filter_show, merged_config['sites']))
logger.info(f'数据库筛选隐藏规则耗时{get_interval(t1)}毫秒,共计{all_cnt}条规则,隐藏后可渲染{len(merged_config["sites"])}条规则')
@home.route('/config/<int:mode>')
def config_render(mode):
# print(dict(app.config))
tt = time()
UA = request.headers['User-Agent']
ver = getParmas('ver')
logger.info(f'ver:{ver},UA:{UA}')
if ver not in ['1','2']:
ISTVB = 'okhttp/3' in UA
elif ver == '1':
ISTVB = False
elif ver == '2':
ISTVB = True
# print(ISTVB)
if mode == 1:
jyw_ip = getHost(mode)
logger.info(jyw_ip)
new_conf = cfg
lsg = storage_service()
store_conf_dict = lsg.getStoreConfDict()
new_conf.update(store_conf_dict)
# print(new_conf)
# print(type(new_conf),new_conf)
host = getHost(mode)
# ali_token = lsg.getItem('ALI_TOKEN')
ali_token = new_conf.ALI_TOKEN
xr_mode = new_conf.XR_MODE
js_proxy = new_conf.JS_PROXY
js0_password = new_conf.JS0_PASSWORD
js_mode = int(new_conf.JS_MODE or 0)
print(f'{type(js_mode)} jsmode:{js_mode}')
# print(ali_token)
customConfig = getCustonDict(host,ali_token,js0_password)
# print(customConfig)
jxs = getJxs(host=host)
use_py = lsg.getItem('USE_PY')
pys = getPys() if use_py else []
# print(pys)
alists = getAlist()
alists_str = json.dumps(alists, ensure_ascii=False)
live_url = get_live_url(new_conf,mode)
rules = getRules('js',js_mode)
rules = get_multi_rules(rules)
# html = render_template('config.txt',rules=getRules('js'),host=host,mode=mode,jxs=jxs,base64Encode=base64Encode,config=new_conf)
html = render_template('config.txt',js0_password=js0_password,UA=UA,xr_mode=xr_mode,ISTVB=ISTVB,pys=pys,rules=rules,host=host,mode=mode,js_mode=js_mode,jxs=jxs,alists=alists,alists_str=alists_str,live_url=live_url,config=new_conf)
merged_config = custom_merge(parseText(html),customConfig)
# print(merged_config['sites'])
merged_hide(merged_config)
# response = make_response(html)
# print(len(merged_config['sites']))
print(merged_config['sites'])
merged_config['sites'] = sort_sites_by_order(merged_config['sites'],js_mode)
# print(merged_config['parses'])
parses = sort_parses_by_order(merged_config['parses'],host)
# print(parses)
merged_config['parses'] = parses
config_text = json.dumps(merged_config,ensure_ascii=False,indent=1)
# 依赖代理逻辑修改,改为admin/view去动态代理
# if js_proxy:
# # print('js_proxy:',js_proxy)
# if '=>' in js_proxy:
# oldsrc = js_proxy.split('=>')[0]
# newsrc = js_proxy.split('=>')[1]
# print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}')
# config_text = config_text.replace(oldsrc,newsrc)
response = make_response(config_text)
# response = make_response(str(merged_config))
response.headers['Content-Type'] = 'application/json; charset=utf-8'
logger.info(f'自动生成动态配置共计耗时:{get_interval(tt)}毫秒')
return response
def comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
def sort_sites_by_order(sites,js_mode=0):
rules = rules_service()
rule_list = rules.query_all()
# print(rule_list)
rule_names = list(map(lambda x: x['name'], rule_list))
# print(rule_names)
# print(sites)
for i in range(len(sites)):
# sites[i]['id'] = i+1
site_name = sites[i]['api'].split('rule=')[1].split('&')[0] if 'rule=' in sites[i]['api'] else sites[i]['key']
if js_mode and str(site_name).startswith('dr'):
site_name = site_name.replace('dr_','')
if not str(sites[i]['key']).startswith('dr_') and site_name == 'drpy':
site_name = sites[i]['key']
# print(sites[i])
# print(site_name)
if site_name in rule_names:
site_rule = rule_list[rule_names.index(site_name)]
sites[i]['state'] = 1 if site_rule['state'] is None else site_rule['state']
sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order']
sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp()
else:
sites[i]['state'] = 1
sites[i]['order'] = 0
sites[i]['write_date'] = 0
# sites[i]['site_name'] = site_name
# print(sites)
# sites.sort(key=lambda x: x['order'], reverse=False)
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
# print(sites)
for site in sites:
del site['state']
del site['order']
del site['write_date']
return sites
def sort_parses_by_order(parses,host):
t1 = time()
parse = parse_service()
parse_list = parse.query_all()
parse_url_list = list(map(lambda x: x['url'], parse_list))
new_parses = []
new_parses_url = []
for i in range(len(parses)):
# parses[i]['id'] = i + 1
# 去重
if parses[i]['url'] in new_parses_url:
# print(f"重复的解析:{parses[i]['name']},{parses[i]['url']}")
continue
if str(parses[i]['url']).startswith(host):
parses[i]['url'] = parses[i]['url'].replace(host,'')
if parses[i]['url'] in parse_url_list:
parse_rule = parse_list[parse_url_list.index(parses[i]['url'])]
parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state']
parses[i]['order'] = 0 if parse_rule['order'] is None else parse_rule['order']
parses[i]['write_date'] = 0 if parse_rule['write_date'] is None else parse_rule['write_date'].timestamp()
else:
parses[i]['state'] = 1
parses[i]['order'] = 0
parses[i]['write_date'] = 0
if not parses[i].get('header'):
parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'}
if str(parses[i]['url']).startswith('/'):
parses[i]['url'] = host + parses[i]['url']
new_parses.append(parses[i])
new_parses_url.append(parses[i]['url'])
new_parses.sort(key=functools.cmp_to_key(comp), reverse=False)
# print(sites)
for par in new_parses:
del par['state']
del par['order']
del par['write_date']
# print(new_parses)
logger.info(f'{len(new_parses)}/{len(parses)}条解析解析排序耗时:{get_interval(t1)}毫秒')
return new_parses
@home.route('/configs')
def config_gen():
if not verfy_token():
return R.failed('请登录后再试')
# 生成文件
os.makedirs('txt',exist_ok=True)
new_conf = cfg
lsg = storage_service()
store_conf_dict = lsg.getStoreConfDict()
new_conf.update(store_conf_dict)
try:
use_py = lsg.getItem('USE_PY')
js_mode = int(new_conf.JS_MODE or 0)
js0_password = new_conf.JS0_PASSWORD
pys = getPys() if use_py else False
alists = getAlist()
alists_str = json.dumps(alists,ensure_ascii=False)
rules = getRules('js',js_mode)
rules = get_multi_rules(rules)
host0 = getHost(0)
jxs = getJxs(host=host0)
set_local = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,0),mode=0,js_mode=js_mode,host=host0,jxs=jxs)
# print(set_local)
host1 = getHost(1)
jxs = getJxs(host=host1)
set_area = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,1),mode=1,js_mode=js_mode,host=host1,jxs=jxs)
host2 = getHost(2) or host1
# print('远程地址:'+host2)
jxs = getJxs(host=host2)
set_online = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,2),mode=1,js_mode=js_mode,host=host2,jxs=jxs)
ali_token = new_conf.ALI_TOKEN
# parses = []
with open('txt/pycms0.json','w+',encoding='utf-8') as f:
customConfig = getCustonDict(host0,ali_token,js0_password)
set_dict = custom_merge(parseText(set_local), customConfig)
merged_hide(set_dict)
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
# if not parses:
# print('生成静态配置时初始化排序parses')
# parses = sort_parses_by_order(set_dict['parses'])
# set_dict['parses'] = parses
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host0)
# set_dict = json.loads(set_local)
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
with open('txt/pycms1.json','w+',encoding='utf-8') as f:
customConfig = getCustonDict(host1,ali_token,js0_password)
set_dict = custom_merge(parseText(set_area), customConfig)
merged_hide(set_dict)
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host1)
# set_dict = json.loads(set_area)
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
with open('txt/pycms2.json','w+',encoding='utf-8') as f:
customConfig = getCustonDict(host2,ali_token,js0_password)
set_dict = custom_merge(parseText(set_online), customConfig)
merged_hide(set_dict)
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host2)
# set_dict = json.loads(set_online)
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
files = [os.path.abspath(rf'txt\pycms{i}.json') for i in range(3)]
# print(files)
return R.success('猫配置生成完毕,文件位置在:\n'+'\n'.join(files))
except Exception as e:
return R.failed(f'配置文件生成错误:\n{e}')
@home.route("/info",methods=['get'])
def info_all():
data = storage_service.query_all()
return R.ok(data=data)

176
controllers/layui.py Normal file
View File

@ -0,0 +1,176 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : layui.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/14
import ujson
from flask import Blueprint,request,render_template,jsonify,make_response,redirect
from utils.ua import UA
from utils.web import getParmas,get_interval,layuiBack,verfy_token
from utils.cfg import cfg
from controllers.service import storage_service,rules_service,parse_service
from utils.system import getHost
from utils.files import getCustonDict,custom_merge
from utils.encode import parseText
from js.rules import getRules,getPys,getJxs
from operator import itemgetter, attrgetter
import functools
layui = Blueprint("layui", __name__)
@layui.route('/')
def hello(): # put application's code here
return jsonify({'msg':'hello layui'})
@layui.route('/index')
def layui_index(): # put application's code here
# return render_template('layui_index.html')
if not verfy_token():
return render_template('login.html')
return render_template('layui_list.html')
@layui.route('/jxs')
def layui_jxs(): # put application's code here
# return render_template('layui_index.html')
if not verfy_token():
return render_template('login.html')
return render_template('layui_jxs.html')
def comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
@layui.route('/api/list')
def layui_rule_list():
page = int(getParmas('page',1))
limit = int(getParmas('limit',10))
# print(f'page:{page},limit:{limit}')
new_conf = cfg
lsg = storage_service()
store_conf_dict = lsg.getStoreConfDict()
new_conf.update(store_conf_dict)
host = getHost(2)
customConfig = getCustonDict(host)
jxs = []
js0_password = lsg.getItem('JS0_PASSWORD')
lsg = storage_service()
use_py = lsg.getItem('USE_PY')
pys = getPys() if use_py else []
# print(pys)
alists = []
live_url = []
local_rules = getRules('js')
# print(local_rules)
html = render_template('config.txt', pys=pys, rules=local_rules, host=host, mode=2, jxs=jxs, alists=alists,
alists_str='[]', live_url=live_url, config=new_conf)
# html = render_template('config.txt', js0_password=js0_password, UA=UA, xr_mode=1, ISTVB=1, pys=pys,
# rules=local_rules, host=host, mode=2, js_mode=1, jxs=jxs, alists=alists,
# alists_str='[]', live_url=live_url, config=new_conf)
merged_config = custom_merge(parseText(html), customConfig)
sites = merged_config['sites']
rules = rules_service()
rule_list = rules.query_all()
rule_names = list(map(lambda x:x['name'],rule_list))
# print(rule_list)
# print(rule_names)
# print(sites)
for i in range(len(sites)):
sites[i]['id'] = i+1
site_name = sites[i]['api'].split('rule=')[1].split('&')[0] if 'rule=' in sites[i]['api'] else sites[i]['key']
if not str(sites[i]['key']).startswith('dr_') and site_name == 'drpy':
site_name = sites[i]['key']
# print(sites[i])
if site_name in rule_names:
site_rule = rule_list[rule_names.index(site_name)]
sites[i]['state'] = 1 if site_rule['state'] is None else site_rule['state']
sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order']
sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp()
else:
sites[i]['state'] = 1
sites[i]['order'] = 0
sites[i]['write_date'] = 0
sites[i]['site_name'] = site_name
def multisort(sites, specs):
"""
https://zhuanlan.zhihu.com/p/109269549?utm_id=0
多重排序,来自知乎的代码.明显只对了最后的元素进行排序.看完评论和实践发现不对
:param sites:
:param specs:
:return:
"""
for key, reverse in specs:
# sites.sort(key=attrgetter(key), reverse=reverse)
sites.sort(key=lambda x:x[key], reverse=reverse)
return sites
# multisort(sites, (('order', False), ('write_date', True)))
# sites.sort(key=lambda x:x['order'],reverse=False)
sites.sort(key=functools.cmp_to_key(comp),reverse=False)
new_sites = sites[(page-1)*limit:page*limit]
# print(new_sites)
return layuiBack('获取成功',new_sites,count=len(sites))
@layui.route('/api/jx_list')
def layui_jx_list():
# 拖拽排序教程 https://blog.csdn.net/qq_41829337/article/details/126610406
host = request.host_url.rstrip('/') # 获取当前访问链接对应的host
page = int(getParmas('page',1))
limit = int(getParmas('limit',10))
new_conf = cfg
lsg = storage_service()
store_conf_dict = lsg.getStoreConfDict()
new_conf.update(store_conf_dict)
ali_token = new_conf.ALI_TOKEN
xr_mode = new_conf.XR_MODE
js0_password = new_conf.JS0_PASSWORD
js_mode = int(new_conf.JS_MODE or 0)
customConfig = getCustonDict(host, ali_token, js0_password)
jxs = getJxs(host=host)
rules = {'list': [{"key": "dr_MXONE", "name": "MXONE(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=MXONE&ext=txt/js/tg/MXONE.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
], 'count': 1}
html = render_template('config.txt', js0_password=js0_password, UA=UA, xr_mode=xr_mode, ISTVB=False, pys=[],
rules=rules, host=host, mode=2, js_mode=js_mode, jxs=jxs, alists=[],
alists_str='', live_url='', config=new_conf)
merged_config = custom_merge(parseText(html), customConfig)
parses = merged_config['parses']
parse = parse_service()
parse_list = parse.query_all()
parse_url_list = list(map(lambda x:x['url'],parse_list))
for i in range(len(parses)):
parses[i]['id'] = i+1
if str(parses[i]['url']).startswith(host):
parses[i]['url'] = parses[i]['url'].replace(host,'')
if parses[i]['url'] in parse_url_list:
parse_rule = parse_list[parse_url_list.index(parses[i]['url'])]
parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state']
parses[i]['order'] = 0 if parse_rule['order'] is None else parse_rule['order']
parses[i]['write_date'] = 0 if parse_rule['write_date'] is None else parse_rule['write_date'].timestamp()
else:
parses[i]['state'] = 1
parses[i]['order'] = 0
parses[i]['write_date'] = 0
if not parses[i].get('header'):
parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'}
if isinstance(parses[i].get('header'),dict):
parses[i]['header'] = ujson.dumps(parses[i]['header'],ensure_ascii=False)
if isinstance(parses[i].get('ext'),dict):
parses[i]['ext'] = ujson.dumps(parses[i]['ext'],ensure_ascii=False)
parses.sort(key=functools.cmp_to_key(comp), reverse=False)
new_parses = parses[(page - 1) * limit:page * limit]
return layuiBack('获取成功', new_parses, count=len(parses))

155
controllers/parse.py Normal file
View File

@ -0,0 +1,155 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : parse.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/24
from flask import Blueprint, jsonify,redirect,make_response
from utils.web import getParmas,get_interval
import os
from utils.cfg import cfg
from utils.log import logger
from utils.encode import OcrApi,base64ToImage
from controllers.service import storage_service
from utils.pyctx import py_ctx,getPreJs,runJScode,JsObjectWrapper,PyJsString,parseText,jsoup,time
from utils.env import get_env
import base64
parse = Blueprint("parse", __name__)
class R(object):
@classmethod
def ok(self, msg='操作成功', url=None, extra=None):
if extra is None:
extra = {}
header = {
"user-agent": "Mozilla/5.0"
}
if 'bilivideo.c' in url:
header.update({
'referer':'https://www.bilibili.com/'
})
result = {"code": 200, "msg": msg, "url":url}
result.update(header)
result.update(extra)
return jsonify(result)
@classmethod
def error(self,msg="系统异常",code=404,extra=None):
if extra is None:
extra = {}
result = {"code": code, "msg": msg}
result.update(extra)
return jsonify(result)
@classmethod
def success(self,msg='操作成功', url=None,extra=None):
return self.ok(msg,url,extra)
@classmethod
def failed(self,msg="系统异常", code=404,extra=None):
return self.error(msg,code,extra)
def 重定向(url:str):
if isinstance(url, PyJsString):
url = parseText(str(url))
if str(url).startswith('http'):
return f'redirect://{url}'
else:
return str(url)
def toast(url:str):
if isinstance(url, PyJsString):
url = parseText(str(url))
return f'toast://{url}'
def image(text:str):
if isinstance(text, PyJsString):
text = parseText(str(text))
return f'image://{text}'
@parse.route('/api/<path:filename>')
def parse_home(filename):
url = getParmas('url')
# http://localhost:5705/parse/api/%E6%97%A0%E5%90%8D.js?url=https://www.iqiyi.com/v_ik3832z0go.html
# http://localhost:5705/parse/api/哔哩.js?url=https://www.bilibili.com/bangumi/play/ep704873
if not url or not url.startswith('http'):
return R.failed(f'url必填!{url},且必须是http开头')
base_path = 'jiexi'
os.makedirs(base_path, exist_ok=True)
file_path = os.path.join(base_path, filename)
if not os.path.exists(file_path):
return R.failed(f'{file_path}文件不存在')
logger.info(f'开始尝试通过{filename}解析:{url}')
jsp = jsoup(url)
env = get_env()
py_ctx.update({
'vipUrl': url,
'fetch_params': {'headers': {'Referer':url}, 'timeout': 10, 'encoding': 'utf-8'},
'jsp':jsp,
'重定向':重定向,
'toast':toast,
'env':env,
'image':image,
'print':print,
'log':logger.info,
'getParmas':getParmas,
'params':getParmas()
})
ctx = py_ctx
with open(file_path,encoding='utf-8') as f:
code = f.read()
jscode = getPreJs() + code.strip().replace('js:', '', 1)
# print(jscode)
t1 = time()
try:
loader, _ = runJScode(jscode, ctx=ctx)
realUrl = loader.eval('realUrl')
if not realUrl:
return R.failed(f'解析失败:{realUrl}')
if isinstance(realUrl, PyJsString):
realUrl = parseText(str(realUrl))
if not realUrl or realUrl == url:
return R.failed(f'解析失败',extra={'from':realUrl})
# print(realUrl)
if str(realUrl).startswith('redirect://'):
return redirect(realUrl.split('redirect://')[1])
elif str(realUrl).startswith('toast://'):
return R.failed(str(realUrl).split('toast://')[1],extra={'from':url})
elif str(realUrl).startswith('image://'):
img_data = base64ToImage(str(realUrl).split('image://')[1])
response = make_response(img_data)
response.headers['Content-Type'] = 'image/jpeg'
return response
return R.success(f'{filename}解析成功',realUrl,{'time':f'{get_interval(t1)}毫秒','from':url})
except Exception as e:
msg = f'{filename}解析出错:{e}'
logger.info(msg)
return R.failed(msg,extra={'time':f'{get_interval(t1)}毫秒','from':url})
@parse.route('/ocr',methods=['POST'])
def base64_ocr():
lsg = storage_service()
ocr_api = lsg.getItem('OCR_API',cfg.OCR_API)
# print(ocr_api)
# print('params:',getParmas())
img = getParmas('img')
# print(img)
if not img:
return R.failed('识别失败:缺少img参数')
try:
img_bytes = base64.b64decode(img)
except:
return R.failed('识别失败:img参数不是正确的base64格式')
# print(img_bytes)
img_path = 'txt/pluto'
os.makedirs(img_path,exist_ok=True)
with open(f'{img_path}/yzm.png','wb+') as f:
f.write(img_bytes)
ocr = OcrApi(ocr_api)
code = ocr.classification(img_bytes)
# resp = R.success('识别成功',code)
# print(resp.json)
resp = code
return resp

255
controllers/service.py Normal file
View File

@ -0,0 +1,255 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : service.py.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
from base.R import copy_utils
from models.storage import Storage
from models.ruleclass import RuleClass
from models.vipParse import VipParse
from utils.cfg import cfg
from base.database import db
from datetime import datetime,timedelta
class storage_service(object):
@staticmethod
def query_all():
# 查询所有
res = Storage.query.all()
return copy_utils.obj_to_list(res)
def __init__(self):
conf_list = ['LIVE_URL', 'USE_PY', 'JS_MODE','JS0_DISABLE','JS0_PASSWORD','PLAY_URL', 'PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE',
'WALL_PAPER', 'UNAME', 'PWD', 'LIVE_MODE', 'CATE_EXCLUDE', 'TAB_EXCLUDE','SEARCH_TIMEOUT','SEARCH_LIMIT','MULTI_MODE','XR_MODE','JS_PROXY','ENV','ALI_TOKEN','OCR_API']
for conf in conf_list:
if not self.hasItem(conf):
print(f'开始初始化{conf}')
self.setItem(conf, cfg.get(conf))
@classmethod
def getStoreConf(self):
# MAX_CONTENT_LENGTH 最大上传和端口ip一样是顶级配置,无法外部修改的
conf_list = ['LIVE_URL', 'LIVE_MODE','PLAY_URL', 'PID_URL','USE_PY','JS_MODE', 'JS0_DISABLE','JS0_PASSWORD','PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE',
'WALL_PAPER', 'UNAME', 'PWD', 'CATE_EXCLUDE', 'TAB_EXCLUDE','SEARCH_TIMEOUT','SEARCH_LIMIT','MULTI_MODE','XR_MODE','JS_PROXY','ENV','ALI_TOKEN','OCR_API']
conf_name_list = ['直播地址', '直播模式','远程地址', '进程管理链接','启用py源', 'js模式','禁用js0','js0密码','禁用免嗅', '免嗅模式', '启用壁纸', '壁纸链接', '管理账号',
'管理密码', '分类排除', '线路排除','聚搜超时','搜索条数','多源模式','仙人模式','源代理','环境变量','阿里tk','OCR接口']
conf_lists = []
for i in range(len(conf_list)):
conf = conf_list[i]
conf_lists.append({
'key': conf,
'value': self.getItem(conf),
'name': conf_name_list[i]
})
return conf_lists
@classmethod
def getStoreConfDict(self):
store_conf = self.getStoreConf()
store_conf_dict = {}
for stc in store_conf:
store_conf_dict[stc['key']] = stc['value']
return store_conf_dict
@classmethod
def getItem(self, key, value=''):
res = Storage.getItem(key,value)
if str(res) == '0' or str(res) == 'false' or str(res) == 'False':
return 0
return res
@classmethod
def hasItem(self, key):
return Storage.hasItem(key)
@classmethod
def setItem(self,key, value):
return Storage.setItem(key, value)
@classmethod
def clearItem(self,key):
return Storage.clearItem(key)
class rules_service(object):
@staticmethod
def query_all():
# 查询所有
res = RuleClass.query.order_by(RuleClass.order.asc(),RuleClass.write_date.desc()).all()
# print(res)
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
return copy_utils.obj_to_list(res)
@classmethod
def hasItem(self, key):
return RuleClass.hasItem(key)
def getState(self,key):
res = RuleClass.query.filter(RuleClass.name == key).first()
if not res:
return 1
# print(res)
state = res.state
if state is None:
state = 1
return state or 0
def setState(self,key,state=0):
res = RuleClass.query.filter(RuleClass.name == key).first()
if res:
res.state = state
db.session.add(res)
else:
res = RuleClass(name=key, state=state)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def setOrder(self,key,order=0):
res = RuleClass.query.filter(RuleClass.name == key).first()
if res:
res.order = order
# print(f'{res.name}设置order为:{order}')
if res.order == order:
res.write_date = datetime.now()
# res.write_date = res.write_date + timedelta(hours=2)
db.session.add(res)
else:
res = RuleClass(name=key, order=order)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
@staticmethod
def getHideRules():
res = RuleClass.query.filter(RuleClass.state == 0).all()
return copy_utils.obj_to_list(res)
class parse_service(object):
@staticmethod
def query_all():
# 查询所有
res = VipParse.query.order_by(VipParse.order.asc(),VipParse.write_date.desc()).all()
# print(res)
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
return copy_utils.obj_to_list(res)
@classmethod
def hasItem(self, key):
return VipParse.hasItem(key)
def getState(self,key):
res = VipParse.query.filter(VipParse.url == key).first()
if not res:
return 1
# print(res)
state = res.state
if state is None:
state = 1
return state or 0
def setState(self,key,state=0):
res = VipParse.query.filter(VipParse.url == key).first()
if res:
res.state = state
db.session.add(res)
else:
res = VipParse(url=key, state=state)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def setOrder(self,key,order=0):
res = VipParse.query.filter(VipParse.url == key).first()
if res:
res.order = order
# print(f'{res.name}设置order为:{order}')
if res.order == order:
res.write_date = datetime.now()
# res.write_date = res.write_date + timedelta(hours=2)
db.session.add(res)
else:
res = VipParse(url=key, order=order)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def setEverything(self,key,name,state,typeno,order,ext,header):
res = VipParse.query.filter(VipParse.url == key).first()
if res:
res.name = name
res.state = state
res.type = typeno
res.order = order
res.ext = ext
res.header = header
res.write_date = datetime.now()
db.session.add(res)
else:
res = VipParse(name=name,url=key,state=state,type=typeno,order=order,ext=ext,header=header)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
def saveData(self,obj):
"""
db.session.add_all([]) 可以一次性保存多条数据,但是这里用不到,因为涉及修改和新增一起的
:param obj:
:return:
"""
# res = VipParse.query.filter(VipParse.url == obj['url']).first()
res = VipParse.query.filter_by(url=obj['url']).first()
if res:
# res.update(obj)
res.name = obj['name']
res.state = obj['state']
res.type = obj['type']
res.order = obj['order']
res.ext = obj['ext']
res.header = obj['header']
db.session.add(res)
else:
res = VipParse(**obj)
db.session.add(res)
db.session.flush() # 获取id
try:
db.session.commit()
return res.id
except Exception as e:
print(f'发生了错误:{e}')
return None
@staticmethod
def getHideRules():
res = VipParse.query.filter(VipParse.state == 0).all()
return copy_utils.obj_to_list(res)

442
controllers/vod.py Normal file
View File

@ -0,0 +1,442 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : vod.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
import functools
import json
from flask import Blueprint,abort,request,render_template,render_template_string,jsonify,make_response,redirect,current_app
from time import time
from utils.web import getParmas,get_interval
from utils.cfg import cfg
from utils.env import get_env
from js.rules import getRuleLists,getJxs
from base.R import R
from utils.log import logger
from utils import parser
from controllers.cms import CMS
from base.database import db
from models.ruleclass import RuleClass
from models.playparse import PlayParse
from js.rules import getRules
from controllers.service import storage_service,rules_service
from concurrent.futures import ThreadPoolExecutor,as_completed,thread # 引入线程池
from quickjs import Function,Context
import ujson
vod = Blueprint("vod", __name__)
def search_one_py(rule, wd, before: str = ''):
t1 = time()
if not before:
with open('js/模板.js', encoding='utf-8') as f:
before = f.read().split('export')[0]
js_path = f'js/{rule}.js'
try:
ctx, js_code = parser.runJs(js_path, before=before)
if not js_code:
return None
ruleDict = ctx.rule.to_dict()
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
logger.info(f'规则{rule}装载耗时:{get_interval(t1)}毫秒')
cms = CMS(ruleDict, db, RuleClass, PlayParse, cfg)
data = cms.searchContent(wd, show_name=True)
return data
except Exception as e:
print(f'{rule}发生错误:{e}')
return None
def search_one(rule, wd, before: str = '',env:dict=None,app=None):
t1 = time()
if not before:
with open('js/模板.js', encoding='utf-8') as f:
before = f.read().split('export')[0]
end_code = """\nif (rule.模板 && muban.hasOwnProperty(rule.模板)) {rule = Object.assign(muban[rule.模板], rule);}"""
js_path = f'js/{rule}.js'
ctx = Context()
try:
with open(js_path, encoding='utf-8') as f2:
jscode = f2.read()
if env:
# 渲染字符串文本 render_template_string 必须带 flask的上下文
with app.app_context():
for k in env:
# print(f'${k}', f'{env[k]}')
if f'${k}' in jscode:
jscode = jscode.replace(f'${k}', f'{env[k]}')
# jscode = render_template_string(jscode, **env)
# if '007' in rule:
# print(rule,jscode)
jscode = before + jscode + end_code
# print(jscode)
ctx.eval(jscode)
js_ret = ctx.get('rule')
ruleDict = ujson.loads(js_ret.json())
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
logger.info(f'规则{rule}装载耗时:{get_interval(t1)}毫秒')
cms = CMS(ruleDict, db, RuleClass, PlayParse, cfg)
data = cms.searchContent(wd, show_name=True)
return data
except Exception as e:
logger.info(f'{e}')
return R.failed('爬虫规则加载失败')
def multi_search2(wd):
t1 = time()
lsg = storage_service()
try:
timeout = round(int(lsg.getItem('SEARCH_TIMEOUT', 5000)) / 1000, 2)
except:
timeout = 5
rules = getRules('js')['list']
rule_names = list(map(lambda x: x['name'], rules))
rules_exclude = ['drpy']
new_rules = list(filter(lambda x: x.get('searchable', 0) and x.get('name', '') not in rules_exclude, rules))
search_sites = [new_rule['name'] for new_rule in new_rules]
nosearch_sites = set(rule_names) ^ set(search_sites)
nosearch_sites.remove('drpy')
# print(nosearch_sites)
logger.info(f'开始聚搜{wd},共计{len(search_sites)}个规则,聚搜超时{timeout}')
logger.info(f'不支持聚搜的规则,共计{len(nosearch_sites)}个规则:{",".join(nosearch_sites)}')
# print(search_sites)
res = []
with open('js/模板.js', encoding='utf-8') as f:
before = f.read().split('export')[0]
logger.info(f'聚搜准备工作耗时:{get_interval(t1)}毫秒')
t2 = time()
thread_pool = ThreadPoolExecutor(len(search_sites)) # 定义线程池来启动多线程执行此任务
obj_list = []
try:
for site in search_sites:
obj = thread_pool.submit(search_one, site, wd, before)
obj_list.append(obj)
thread_pool.shutdown(wait=True) # 等待所有子线程并行完毕
vod_list = [obj.result() for obj in obj_list]
for vod in vod_list:
if vod and isinstance(vod, dict) and vod.get('list') and len(vod['list']) > 0:
res.extend(vod['list'])
result = {
'list': res
}
logger.info(f'drpy聚搜{len(search_sites)}个源耗时{get_interval(t2)}毫秒,含准备共计耗时{get_interval(t1)}毫秒')
except Exception as e:
result = {
'list': []
}
logger.info(f'drpy聚搜{len(search_sites)}个源耗时{get_interval(t2)}毫秒,含准备共计耗时:{get_interval(t1)}毫秒,发生错误:{e}')
return jsonify(result)
def merged_hide(merged_rules):
t1 = time()
store_rule = rules_service()
hide_rules = store_rule.getHideRules()
hide_rule_names = list(map(lambda x: x['name'], hide_rules))
# print('隐藏:',hide_rule_names)
all_cnt = len(merged_rules)
# print(merged_rules)
def filter_show(x):
# name = x['api'].split('rule=')[1].split('&')[0] if 'rule=' in x['api'] else x['key'].replace('dr_','')
name = x
# print(name)
return name not in hide_rule_names
merged_rules = list(filter(filter_show, merged_rules))
# print('隐藏后:',merged_rules)
logger.info(f'数据库筛选隐藏规则耗时{get_interval(t1)}毫秒,共计{all_cnt}条规则,隐藏后可渲染{len(merged_rules)}条规则')
# merged_rules = []
return merged_rules
def disable_exit_for_threadpool_executor():
import atexit
import concurrent.futures
atexit.unregister(concurrent.futures.thread._python_exit)
def sort_lsg_rules(sites:list):
"""
查询结果按order和write_date 联合排序
:param sites:
:return:
"""
def comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
return sites
def sort_lsg_rules2(sites:list,lsg_rule_names:list):
"""
查询结果按order和write_date 联合排序
:param sites:
:return:
"""
def comp(x, y):
try:
x1 = lsg_rule_names.index(x)
except:
x1 = 999
try:
y1 = lsg_rule_names.index(y)
except:
y1 = 999
if x1 >= y1:
return 1
elif x1 < y1:
return - 1
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
return sites
def getSearchSites():
val = {}
lsg = storage_service()
try:
timeout = round(int(lsg.getItem('SEARCH_TIMEOUT',5000))/1000,2)
except:
timeout = 5
val['timeout'] = timeout
rules = getRules('js')['list']
rule_names = list(map(lambda x: x['name'], rules))
rules_exclude = ['drpy']
new_rules = list(filter(lambda x: x.get('searchable', 0) and x.get('name', '') not in rules_exclude, rules))
total_search = [new_rule['name'] for new_rule in new_rules]
nosearch_sites = set(rule_names) ^ set(total_search)
nosearch_sites.remove('drpy')
val['total_search'] = total_search
val['nosearch_sites'] = list(nosearch_sites)
search_sites = merged_hide(total_search)
lsg_rules = rules_service()
lsg_rule_list = lsg_rules.query_all()
lsg_rule_list = list(filter(lambda x: x['name'] in search_sites, lsg_rule_list))
lsg_rule_names = list(map(lambda x: x['name'], lsg_rule_list))
search_sites = sort_lsg_rules2(search_sites, lsg_rule_names)
search_limit = lsg.getItem('SEARCH_LIMIT', 24)
try:
search_limit = int(search_limit)
except:
search_limit = 0
if search_limit < 1:
search_limit = 0
search_sites = search_sites[:search_limit]
val['search_limit'] = search_limit
val['search_sites'] = search_sites
return val
def multi_search(wd):
t1 = time()
val = getSearchSites()
timeout = val['timeout']
total_search = val['total_search']
nosearch_sites = val['nosearch_sites']
search_limit = val['search_limit']
search_sites = val['search_sites']
env = get_env()
logger.info(f'开始聚搜{wd},共计{len(total_search)}个规则,聚搜超时{timeout}')
logger.info(f'不支持聚搜的规则,共计{len(nosearch_sites)}个规则:{",".join(nosearch_sites)}')
msearch_msg = f'搜索限制条数:{search_limit}/{len(search_sites)} {search_sites}'
logger.info(msearch_msg)
print(msearch_msg)
# search_sites = []
res = []
if len(search_sites) > 0:
with open('js/模板.js', encoding='utf-8') as f:
before = f.read().split('export')[0]
with ThreadPoolExecutor(max_workers=len(search_sites)) as executor:
to_do = []
for site in search_sites:
future = executor.submit(search_one, site, wd, before,env,current_app._get_current_object())
to_do.append(future)
try:
for future in as_completed(to_do, timeout=timeout): # 并发执行
ret = future.result()
# print(ret)
if ret and isinstance(ret,dict) and ret.get('list'):
res.extend(ret['list'])
except Exception as e:
print(f'发生错误:{e}')
import atexit
atexit.unregister(thread._python_exit)
executor.shutdown = lambda wait: None
# disable_exit_for_threadpool_executor()
logger.info(f'drpy聚搜{len(search_sites)}个源共计耗时{get_interval(t1)}毫秒')
return jsonify({
"list": res
})
@vod.route('/vods')
def vods_search():
val = getSearchSites()
print(val)
# return jsonify(val)
return render_template('show_search.html',val=val)
@vod.route('/vod')
def vod_home():
lsg = storage_service()
js0_disable = lsg.getItem('JS0_DISABLE',cfg.get('JS0_DISABLE',0))
if js0_disable:
abort(403)
js0_password = lsg.getItem('JS0_PASSWORD', cfg.get('JS0_PASSWORD', ''))
# print('js0_password:',js0_password)
if js0_password:
pwd = getParmas('pwd')
if pwd != js0_password:
abort(403)
t0 = time()
rule = getParmas('rule')
ac = getParmas('ac')
ids = getParmas('ids')
if ac and ids and ids.find('#') > -1: # 聚搜的二级
id_list = ids.split(',')
rule = id_list[0].split('#')[1]
# print(rule)
ext = getParmas('ext')
filters = getParmas('f')
tp = getParmas('type')
# print(f'type:{tp}')
# if not ext.startswith('http') and not rule:
if not rule:
return R.failed('规则字段必填')
rule_list = getRuleLists()
# if not ext.startswith('http') and not rule in rule_list:
if not ext and not rule in rule_list:
msg = f'服务端本地仅支持以下规则:{",".join(rule_list)}'
return R.failed(msg)
# logger.info(f'检验耗时:{get_interval(t0)}毫秒')
t1 = time()
# js_path = f'js/{rule}.js' if not ext.startswith('http') else ext
js_path = f'js/{rule}.js' if not ext else ext
with open('js/模板.js', encoding='utf-8') as f:
before = f.read().split('export')[0]
# logger.info(f'js读取耗时:{get_interval(t1)}毫秒')
end_code = """\nif (rule.模板 && muban.hasOwnProperty(rule.模板)) {rule = Object.assign(muban[rule.模板], rule);}"""
logger.info(f'参数检验js读取共计耗时:{get_interval(t0)}毫秒')
t2 = time()
# ctx, js_code = parser.runJs(js_path,before=before)
# if not js_code:
# return R.failed('爬虫规则加载失败')
# # rule = ctx.eval('rule')
# # print(type(ctx.rule.lazy()),ctx.rule.lazy().toString())
# ruleDict = ctx.rule.to_dict()
ctx = Context()
try:
with open(js_path,encoding='utf-8') as f2:
jscode = f2.read()
env = get_env()
for k in env:
# print(f'${k}',f'{env[k]}')
if f'${k}' in jscode:
jscode = jscode.replace(f'${k}',f'{env[k]}')
# print(env)
# if env:
# jscode = render_template_string(jscode,**env)
# print(jscode)
jscode = before + jscode + end_code
# print(jscode)
ctx.eval(jscode)
js_ret = ctx.get('rule')
ruleDict = ujson.loads(js_ret.json())
except Exception as e:
logger.info(f'{e}')
return R.failed('爬虫规则加载失败')
# print(type(ruleDict))
# print(ruleDict)
# print(ruleDict)
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
# print(ruleDict)
# print(rule)
# print(type(rule))
# print(ruleDict)
logger.info(f'js装载耗时:{get_interval(t2)}毫秒')
# print(ruleDict)
# print(rule)
cms = CMS(ruleDict,db,RuleClass,PlayParse,cfg,ext)
wd = getParmas('wd')
quick = getParmas('quick')
play = getParmas('play') # 类型为4的时候点击播放会带上来
flag = getParmas('flag') # 类型为4的时候点击播放会带上来
# myfilter = getParmas('filter')
t = getParmas('t')
pg = getParmas('pg','1')
pg = int(pg)
q = getParmas('q')
play_url = getParmas('play_url')
if play:
jxs = getJxs()
play_url = play.split('play_url=')[1]
play_url = cms.playContent(play_url, jxs,flag)
if isinstance(play_url, str):
# return redirect(play_url)
# return jsonify({'parse': 0, 'playUrl': play_url, 'jx': 0, 'url': play_url})
# return jsonify({'parse': 0, 'playUrl': play_url, 'jx': 0, 'url': ''})
return jsonify({'parse': 0, 'playUrl': '', 'jx': 0, 'url': play_url})
elif isinstance(play_url, dict):
return jsonify(play_url)
else:
return play_url
if play_url: # 播放
jxs = getJxs()
play_url = cms.playContent(play_url,jxs)
if isinstance(play_url,str):
return redirect(play_url)
elif isinstance(play_url,dict):
return jsonify(play_url)
else:
return play_url
if ac and t: # 一级
fl = {}
if filters and filters.find('{') > -1 and filters.find('}') > -1:
fl = json.loads(filters)
# print(filters,type(filters))
# print(fl,type(fl))
data = cms.categoryContent(t,pg,fl)
# print(data)
return jsonify(data)
if ac and ids: # 二级
id_list = ids.split(',')
show_name = False
if ids.find('#') > -1:
id_list = list(map(lambda x:x.split('#')[0],id_list))
show_name = True
# print('app:377',len(id_list))
# print(id_list)
data = cms.detailContent(pg,id_list,show_name)
# print(data)
return jsonify(data)
if wd: # 搜索
if rule == 'drpy':
print(f'准备单独处理聚合搜索:{wd}')
return multi_search(wd)
# return multi_search2(wd)
else:
data = cms.searchContent(wd)
# print(data)
return jsonify(data)
# return jsonify({'rule':rule,'js_code':js_code})
home_data = cms.homeContent(pg)
return jsonify(home_data)

View File

@ -0,0 +1,2 @@
[chatgpt申请](http://mp.weixin.qq.com/s?__biz=MjM5MDI1ODUyMA==&mid=2672969192&idx=1&sn=04efcb04d4a5a8f493ef83fb9fa6bd1d&chksm=bce161df8b96e8c95e5ea89893b2d212c411a763d0644e5617a746e4fc829a4d154d5feba192&mpshare=1&scene=24&srcid=02050Gzonfq7o1MfMDZ5r3Az&sharer_sharetime=1675559603236&sharer_shareid=e78e6999b00e23bdc812d4fb7b55e462#rd)
[钉钉对接chatgpt机器人](https://blog.csdn.net/zls365365/article/details/128567593)

View File

@ -0,0 +1,28 @@
#### 人生苦短,我用python
#### 不想换行,js最强
###### 道长踩过的坑,推荐一波python的js引擎
#### 从弱到强推荐,大家仔细看
| 模块 | 性能 | es6 | python交互 | 相关文档 | 架构兼容性 | 个人评价 |
|------------------------------------------------------------|-----|--------------|----------|------|-------|----------------------------------|
| [pyv8](https://github.com/emmetio/pyv8-binaries) | 较差 | ❌ | ✅ | 少 | 差 | 年代久远,可以放弃了 |
| [PyExecJS](https://github.com/doloopwhile/PyExecJS) | 差 | ❌ | ❌ | 多 | 好 | 年代久远,应用挺多,勉强能用 |
| [v8py](https://github.com/tbodt/v8py) | 好 | ✅完美支持 | ✅ | 少 | 差 | 文档少,架构兼容性差,不太会用 |
| [pyjsparser](https://github.com/PiotrDabkowski/pyjsparser) | 一般 | ❌ | ❌ | 少 | 差 | 几乎不用 |
| [dukpy](https://github.com/amol-/dukpy) | 好 | ❌部分支持 | 支持 | 官仓示例 | 差 | 没见人用过 |
| [py_mini_racer](https://github.com/sqreen/PyMiniRacer) | 一般 | ✅完美支持 | ❌ | 少 | 差 | 不支持js交互,文档少,架构兼容性差,不怎么会用 |
| [js2py](https://github.com/PiotrDabkowski/Js2Py) | 一般 | ❌部分支持,实际应用鸡肋 | ✅ | 还行 | 好 | python交互好,没得选了 |
| [quickjs](https://github.com/PetterS/quickjs) | 好 | ✅完美支持 | ✅部分支持 | 几乎没有 | 好 | 有测试案例代码,看完就会用,issue有人提了交互的更多代码 |
| [jsengine](https://github.com/SeaHOH/jsengine) | 好 | ✅完美支持 | ✅部分支持 | 几乎没有 | 好 | quickjs的个人封装,比较新,整合怪 |
| [thquickjs](https://gitlab.com/tangledlabs/thquickjs) | 好 | ✅完美支持 | ✅部分支持 | 几乎没有 | 好 | quickjs的个人封装,比较新,python交互不如js2py |
### 本项目的最终选择
quickjs + js2py
#### 使用说明
quickjs负责读取js文件源的模块,速度非常快
js2py负责python执行js的源逻辑交互python注入的任意类型变量
#### 研究方向
quickjs如何交互python非基础类型数据,看quickjs的pr和issue有人提出过,但是作者没有合并以及修改支持,需要自己动手了

View File

@ -0,0 +1,63 @@
# Windows搭建说明
###### qq官群1:714730084
###### qq官群3:878847174
##### [加群链接生成器](https://qun.qq.com/join.html)
##### [git图标生成器](https://github.com/badges/shields)
## 方法一:docker安装(推荐)
### 先确认本地有docker
```shell
docker version
```
如输出类似
```
Client:
Version: 20.10.23
API version: 1.41
Go version: go1.18.10
Git commit: 7155243
Built: Thu Jan 19 17:43:10 2023
OS/Arch: windows/amd64
Context: default
Experimental: true
```
则说明本地有docker
如果没有这样的提示则说明本地没有docker,可以参考[这篇文章](https://www.runoob.com/docker/windows-docker-install.html)
接下来安装容器,输入以下指令即可安装
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy
```
没有错误提示的话就可以在**这台电脑打开**[链接](http://localhost:5705/index)
若能打开即搭建成功
## 方法二:使用python运行
```shell
#先将项目克隆到本地
git clone https://gitcode.net/qq_32394351/dr_py.git
#进入目录
cd dr_py
#换源
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
#安装所需依赖
pip install -r requirements.txt
#运行主程序
python app.py
```
若报错,请检查是否有python环境`python --version`,入如果没有,请到[python官网下载](https://www.python.org/)
同样,没有错误提示的话就可以在**这台电脑打开**[链接](http://localhost:5705/index)
---
如果有问题,请提出[issue](https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/issues?spm=1033.2243.3001.5874)

View File

@ -0,0 +1,23 @@
##### alist挂载七牛云
[b站教程](https://www.bilibili.com/video/av256523775/)
#### 更新alist
```shell
docker ps -a #查看容器(找Alist容器的ID)
docker stop ID #停止Alist运行,不然无法删除(这次Alist容器的ID是d429749a6e69每一次安装都不一样自己看)
docker rm ID #删除Alist容器(数据还在只要你不手动删除)
docker pull xhofe/alist:latest
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
```
### 查看alist管理员信息
```shell
docker exec -it alist ./alist admin
```

113
doc/写源教程.md Normal file
View File

@ -0,0 +1,113 @@
### 配置相关
直接复制对应的三种地址就行了,不需要生成本地文件(下面教程不要了)
~~本地地址 clan://localhost/pycms_local.json
推荐把文件放到 /storage/emulated/0/PlutoPlayer/pycms_local.json
并且pluto要自己切换路径为PlutoPlayer~~
### 相关教程
[pyquery定位](https://blog.csdn.net/Arise007/article/details/79513094)
### 模板规则说明
所有相关属性说明
```javascript
var rule = {
title:'',//规则标题,没有实际作用,但是可以作为cms类名称依据
编码:'',//不填就默认utf-8
搜索编码:'',//不填则不编码默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
host:'',//网页的域名根,包含http头如 https://www,baidu.com
homeUrl:'/latest/',//网站的首页链接,可以是完整路径或者相对路径,用于分类获取和推荐获取 fyclass是分类标签 fypage是页数
url:'/fyclass/fypage.html[/fyclass/]',//网站的分类页面链接
detailUrl:'https://yanetflix.com/voddetail/fyid.html',//非必填,二级详情拼接链接,感觉没啥卵用
searchUrl:'',//搜索链接 可以是完整路径或者相对路径,用于分类获取和推荐获取 **代表搜索词 fypage代表页数
searchable:0,//是否启用全局搜索,
quickSearch:0,//是否启用快速搜索,
filterable:0,//是否启用筛选,
filter:{},// 筛选条件字典
// 默认筛选条件字典(不同分类可以指定同样筛选参数的不同默认值)
filter_def:{
douyu:{
area:'一起看',
other:'..'
},
huya:{
area:'影音馆',
other:'..'
}
},
// 筛选网站传参,会自动传到分类链接下(本示例中的url参数)-url里参数为fyfilter,可参考蓝莓影视.js
filter_url:'style={{fl.style}}&zone={{fl.zone}}&year={{fl.year}}&fee={{fl.fee}}&order={{fl.order}}',
// 注意,由于猫有配置缓存,搜索配置没法热加载修改了js不需要重启服务器
// 但是需要tv_box进设置里换源使配置重新装载
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
'User-Agent':'MOBILE_UA',
"Cookie": "searchneed=ok"
},
timeout:5000,//网站的全局请求超时,默认是3000毫秒
class_name:'电影&电视剧&动漫&综艺',//静态分类名称拼接
class_url:'1&2&3&4',//静态分类标识拼接
//动态分类获取 列表;标题;链接;正则提取 不需要正则的时候后面别加分号
class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
// 除开全局过滤之外还需要过滤哪些标题不视为分类
cate_exclude:'',
// 除开全局动态线路名过滤之外还需要过滤哪些线路名标题不视为线路
tab_exclude:'',
// 服务器解析播放
play_parse:true,
// play_json 传数组或者  true/false 比如 0,1 如果不传会内部默认处理 不传和传0可能效果不同
// 效果等同说明: play_json:[{re:'*', json:{jx:0, parse:1}}], 等同于 play_json:0,
play_json:[{
re:'*',
json:{
jx:1,
parse:1,
},
}],
//控制不同分类栏目下的总页面,不填就是默认999.哔哩影视大部分分类无法翻页,都需要指定页数为 1
pagecount:{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1},
// 自定义免嗅
lazy:'',
// 首页推荐显示数量
limit:6,
double:true,//是否双层列表定位,默认false
// 对图片加了referer验证的有效,海阔专用,普通规则请勿填写此键值
图片来源:'@Referer=http://www.jianpianapp.com@User-Agent=jianpian-version350',
// js写法仅js模式1有效.可以用于代码动态获取全局cookie之类的
// 可操作变量有 rule_fetch_params,rule,以及基础的网页访问request,post等操作
预处理:'rule_fetch_params.headers.Cookie = "xxxx";',
// 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
// 如果是双层定位的话,推荐的第2段分号代码也是第2层定位列表代码
推荐:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
// 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
一级:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
//二级发起访问前进行js处理。解决特殊情况一级给出的链接非二级真实源码而是前端重定向链接的源码
二级访问前:'log(MY_URL);let jump=request(MY_URL).match(/href="(.*?)"/)[1];log(jump);MY_URL=urljoin2(MY_URL,jump)',
// 二级可以是*,表示规则无二级,直接拿一级的链接进行嗅探
// 二级 title: 片名;类型
// 二级 desc: 主要信息;年代;地区;演员;导演
// 或者 {title:'',img:'',desc:'',content:'',tabs:'',lists:'',tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href'} 同海阔dr二级
二级:'*',
// 搜索可以是*,集成一级,或者跟一级一样的写法 列表;标题;图片;描述;链接;详情
搜索:'*',
}
```
模板继承写法
```javascript
var rule = Object.assign(muban.mxpro,{
title:'鸭奈飞',
host:'https://yanetflix.com',
url:'/index.php/vod/show/id/fyclass/page/fypage.html',
class_parse:'.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html',
});
```
模板继承写法(新)
```javascript
var rule = {
title:'cokemv',
模板:'mxpro',
host:'https://cokemv.me',
class_parse:'.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html',
}
```
js:内置变量
input,html,VODS,VOD,TABS,LISTS,MY_CATE,MY_FL

58
doc/大佬友链.md Normal file
View File

@ -0,0 +1,58 @@
#### tg群的大佬自己写dockerfile和自动发布的镜像
1. [dockerfile仓库](https://github.com/esme518/docker-drpy)
2. [自动发布的三架构镜像](https://hub.docker.com/r/esme518/docker-drpy/tags)
3. 暴力更新命令(仅仅保留设置和同步的本地直播源,自己添加源的慎用):
```shell
mv base/rules.db base/直播.txt /tmp
ls -A1 | xargs rm -rf
git clone -q https://gitcode.net/qq_32394351/dr_py.git .
mv -f /tmp/rules.db /tmp/直播.txt base/
```
4. 容器启动环境变量:
| 变量 | 默认参数 | 参数说明 |
| ------ | ------ | ------ |
| REPO_URL | https://gitcode.net/qq_32394351/dr_py.git | 可以改为自己fork后的仓库地址 |
| AUTOUPDATE | | 容器重启自动更新参考上面的暴力更新。默认关闭设为1为开启 |
| INET_USERNAME | user | 9001端口进程管理的用户名 |
| INET_PASSWORD | 123 | 9001端口进程管理的密码 |
5. 容器启动命令(不自动更新):
~/pywork/dr_py可以改为自己想保存的路径
```shell
docker run -d \
--name drpy \
--restart=always \
-p 5705:5705 \
-p 9001:9001 \
-e INET_USERNAME=user \
-e INET_PASSWORD=123 \
-v ~/pywork/dr_py:/root/sd/pywork/dr_py \
esme518/docker-drpy
```
6. 容器启动命令(开启自动更新)
```shell
docker run -d \
--name drpy \
--restart=always \
-p 5705:5705 \
-p 9001:9001 \
-e INET_USERNAME=user \
-e INET_PASSWORD=123 \
-e AUTOUPDATE=1 \
-v ~/pywork/dr_py:/root/sd/pywork/dr_py \
esme518/docker-drpy
```
7. x86环境测试armv7容器的启动命令测试用不要用在日常环境:
```shell
docker run --platform linux/arm/v7 -p 5705:5705 -p 9001:9001 --restart=always --name drpy-armv7-test -d esme518/docker-drpy
```
8.迁移数据库文件
```shell
docker cp ./rules.db 4ff:/root/sd/pywork/dr_py/base/rules.db
```
9.进入容器
```shell
docker exec -it drpy /bin/sh
```

View File

@ -13,7 +13,7 @@ apt install python3
##### 特殊-docker直装(支持amd64/armv7/arm64)
##### 不知道自己架构的通过arch命令查看
###### 可以通过点此下载获得最小必要文件压缩包
[蓝奏云下载](https://wwi.lanzoup.com/iEfIW0b6vgza)
[蓝奏云下载](https://wwi.lanzoup.com/igPCG0dlqouf)
##### 三架构自动识别(测试功能)
```shell
@ -22,15 +22,23 @@ docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/
##### amd64/x86架构(主流设备)
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.2.1
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
```
##### armv7架构(树莓派,机顶盒,软路由等)
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.2.1
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0
```
##### arm64架构(部分服务器)
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.2.1
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0
```
#### 补充说明(2022/10/19)
据说群晖搭建docker加上参数--net=host 可以局域网ip访问docker容器服务
由于3.9版本以上镜像引入了quickjs库这个库官方编译版在armv7上无法正常运行
armv7架构的朋友需要在项目根目录执行以下两条命令然后重启9001服务
```shell
pip3 uninstall quickjs
pip3 install ./whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl
```
##### 上面代码如果成功了下面都可以忽略
@ -40,10 +48,10 @@ docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/
```
```shell
# 运行容器-小白只需要这一条命令(存在问题是不能在远程面板上正确获取配置地址和进程管理地址,但自己知道地址就不影响使用可进入容器自行修改config)
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.2.1
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
# 稍微懂一点可以运行下面的操作
先把本项目拷贝到 /home/pywork/dr_py
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.2.1
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
# 进入容器然后修改config.py文件改配置里面自己的远程地址等信息,改完退出容器再重启容器(或者通过进程管理9001端口在线重启flask服务)
docker exec -it drpy bash
vi ./base/config.py
@ -110,7 +118,8 @@ pip3 install -r requirements.txt
两种方法,一条命令对应一种
```shell
python3 app.py # 需要shell上运行调试,并且也可以 nohup python3 app.py &
. <(cat app.sh) # 用于生产环境正式运行,更加强大的进程启动和在线日志
. ./app.sh 0
#. <(cat app.sh) # 用于生产环境正式运行,更加强大的进程启动和在线日志
```
4. termux配置启动命令
如果在debian里面记得先 exit回到termux里
@ -146,7 +155,18 @@ locale -a
# docker build -f dockerfile -t hjdhnx/drpy:mini .
# docker buildx build --platform arm64 -f dockerfile -t hjdhnx/drpy:mini_arm64 --push .
# docker push hjdhnx/drpy
# 教程 https://blog.csdn.net/u012586326/article/details/125589644https://blog.csdn.net/u014110320/article/details/124406628
# 教程 https://www.cnblogs.com/wuyoucao/p/16461988.html
# https://blog.csdn.net/u014110320/article/details/124406628
mkdir -p ~/.docker/cli-plugins
mv buildx-v0.8.2.linux-xxx ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx
systemctl daemon-reload
systemctl restart docker
docker buildx version
docker buildx ls
vi /etc/docker/daemon.json
"experimental": true
# 教程 https://blog.csdn.net/u012586326/article/details/125589644
# DOCKER_BUILDKIT=1
# 创建builder
# docker buildx create --use --name mybuilder

391
doc/更新日志.md Normal file
View File

@ -0,0 +1,391 @@
###### 2023/04/09
- [X] 3.9.41beta4 设置drpy日志只保留3天防止日志太多导致磁盘占满搞挂容器
###### 2023/03/28
- [X] 3.9.41beta1 ocr功能优化,内置道长自建ddddocr 可配置自定义内部alist格式的接口 推荐配置为 https://api.nn.ci/ocr/b64/text
###### 2023/03/22
- [X] 3.9.40beta5 修复 /js 路径未注入环境变量问题
###### 2023/03/21
- [X] 增加了直播转点播的api,版本号升级至 3.9.40
- [X] 需要在custom.conf加一行自定义配置,例如:
```json
{"key":"Live2Mv","name":"直播转点播","type":3,"api":"{{host}}/libs/live2mv.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"},
```
###### 2023/03/16
- [X] 3.9.39 drpy修复历史记录无法带入fyclass的bug
-
###### 2023/03/14
- [X] 3.9.37beta3 drpy前端index.html关联链接修复
###### 2023/03/13
- [X] 3.9.37beta1 drpy前端升级为蓝莓 0313提供的代码
###### 2023/03/06
- [X] 3.9.37beta1 drpy增加属性搜索编码,用于解决某些网站搜索关键字必须是gbk编码结果的问题 目前js0已测试通过并实现了encodeStr和decodeStr函数。js1预留了逻辑暂未实现函数已增加
- [X] 3.9.37beta2 drpy搜索编码属性已经在js0和js1上共同测试通过
###### 2023/03/03
- [X] 3.9.36beta1 drpy2.js和drpy2.min.js依赖引入改为从壳子内部引入和相对路径引入模板
###### 2023/02/15
- [X] 3.9.35beta4 drpy.js和drpy2.js增加二级访问前属性可以自定义js重新赋值正确的二级详情页地址
###### 2023/01/03
- [X] 3.9.34 聚搜功能优化,设置中心增加搜索条数设置默认24条。关联未来功能里的排序顺序进行搜索取数
###### 2022/12/26
- [X] 3.9.33beta4 修复腾云驾雾搜索
- [X] 3.9.33beta5 修复腾云驾雾综艺,电影的二级
###### 2022/12/25
- [X] 3.9.33 自建解析返回默认UA,尝试优化哔哩影视.js无果
###### 2022/12/19
- [X] 优化api,尝试修复指定了第一页链接但是不支持筛选的问题
- [X] 更新修复部分源
###### 2022/12/12
- [X] 增加哔哩自建解析和对应的环境变量:appkey,access_key (手机端抓包搜索可得)
- [X] 修复部分源
###### 2022/12/6
- [X] 增加外部更新环境变量的方法,详情参考 /py/外部更新环境变量.py,可以自行用js等其他语言实现调用
###### 2022/12/4
- [X] 修复js1 post搜索时未传递规则请求头信息bug
- [X] alist.js更新,增加了首页推荐
- [X] 仙人模式逻辑优化,增加ver参数,0,1,2。其中默认0为仙人自动识别,1为强制drpy.min.js,2为强制drpy2.min.js
- [X] 默哀模式优化
- [X] 更新部分py源
###### 2022/12/2
- [X] js0/js1 api更新增加新特性:pagecount(单独指定某些分类的总页数)
```json
{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1}
```
- [X] 增加分类api无数据时显示一条提示数据防止软件无限请求
- [X] 完善哔哩影视(drpy),共有两个环境变量 vmid,bili_cookie 需要自行设置,否则无法正常播放和搜索
- [X] 优化哔哩影视(drpy),增加二级页面线路二通过调用外部解析播放。默认线路1是内置cookie播放
###### 2022/11/30
- [X] 修复哔哩zb,jrkan zb无法播放问题
###### 2022/11/29
- [X] alist引用模块更换,配置支持pluto
```json
{"key":"Alist_pt","name":"Alist(pluto)","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/config/2;200;video"},
```
- [X] v3.9.27beta1 drpy系列api引用模板优化,可以模板本地化
###### 2022/11/27
- [X] 修复alist含字幕视频无法播放问题以及dsf文件无法显示问题
- [X] drpy系列接口增加首页推荐和一级分类前两条数据打印
- [X] drpy系列接口增加二级自动重命名同名线路(参考乐猪)
- [X] V3.9.26重大升级,修复源代理导致的筛选失效问题。环境变量格式已修改,不再是{{douban}},而是$douban
###### 2022/11/26
- [X] drpy系列资源接口修复,推荐为double的情况也支持第二个定位写*自动继承一级的第一个定位(参考乐猪TV)
- [X] V3.9.25新特性:搜索支持post(参考乐猪TV) 格式为 搜索链接;post (搜索参数用#传递)
- [X] V3.9.25beta1 增加部分源二级选集列表强制正序
###### 2022/11/25
- [X] 优化腾云驾雾源,方便追剧
- [X] 增加新解析并修复酷云自建解析
- [X] 修复py版厂长资源
###### 2022/11/24
- [X] 优化alist的历史记录和收藏
- [X] 设置中心环境变量增加前端的保存校验
- [X] 修改pluto默认搜索推荐接口为腾讯(可自定义更换链接,参数有from=sougou&size=50,默认是from=tx&size=50)
###### 2022/11/23
- [X] 优化alist的名称排序算法
###### 2022/11/22
- [X] 增加了alist的api,版本号升级至 3.9.23
- [X] 支持alist搜索小雅的结构,配置里加 "search": true, 仅取前面第一个alist
- [X] alist搜索支持限制搜索结果数,默认取前200. "ext":"{{host}}/txt/json/alist.json;200;video" 这种格式,分号隔开传参数
- [X] 需要在custom.conf加一行自定义配置,例如:
```json
{"key":"Alist","name":"Alist","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/alist.json;200;video"},
```
###### 2022/11/21
- [X] 重新定义依赖代理逻辑
- [X] 设置中心增加自定义环境变量,演示源:007影视.js
- [X] 界面优化升级至3.9.22
- [X] 修复自建鸿途解析
- [X] 增加我的豆瓣配置,环境变量为 douban 例如 {"douban":"自己的豆瓣id"}
- [X] 增加新源by海王
###### 2022/11/20
- [X] 维护一波可用的自建解析
- [X] 未来功能-解析管理中心增加了对解析的点击访问测试
- [X] 升级至3.9.21beta2
###### 2022/11/17
- [X] 海盗听书js0播放bug修复
- [X] 升级至 3.9.21
- [X] 设置中心增加源代理,提高js1搜索速度
###### 2022/11/08
- [X] 海盗听书js0空白是触发了网页的cloudfare5秒盾了,暂时无解
- [X] 3.9.20beta7 修复豆瓣
###### 2022/11/04
- [X] 增加了 /lives?path=txt/lives/18fm.txt 和 /lives?path=txt/lives/月光.txt
###### 2022/11/03
- [X] 更换jar,支持海阔二级推送到tvbox
###### 2022/11/02
- [X] 合并小雅代码,未来功能完善解析管理,可正常拖拽排序
###### 2022/10/30
- [X] 3.9.18beta4 修复lives?path=接口漏洞,修复js0设置密码后播放解析没自动带密码Bug
###### 2022/10/28
- [X] 3.9.18beta1 未来功能排序优化,设置中心增加js0防盗用和禁用功能
###### 2022/10/27
- [X] v3.9.18 js1 增加 预处理:, 可以在预处理里写js代码实现操作rule变量和 rule_fetch_params 变量
比如 rule_fetch_params.headers.Cookie = 'xxxx'; 当然这个cookie是通过js代码获取到的
###### 2022/10/25
- [X] v3.9.17beta1 增加海盗听书源
###### 2022/10/24
- [X] v3.9.17
- [X] drpy(道长) 服务端聚搜支持自动排除未来功能里隐藏的源
- [X] 未来功能增加源置顶和置底功能 测试性增加排序功能(指定输入数字)
###### 2022/10/23
- [X] 新增几个源 包括虎牙直播
- [X] 设置中心增加仙人模式开关(自动识别不同设备返回不同的drpy接口,关闭的话只会走drpy.min.js)
- [X] 3.9.15beta5 修复后台管理无法进入的bug,规定js源必须包含 var rule字符,不然不识别。中间仅有一个空格
- [X] 3.9.16 增加源属性:图片来源 荐片源图片带上图片来源(目前仅爱佬版tvb可用)
- [X] 优化饭团源,增加其他几个飞机源
###### 2022/10/22
- [X] 新增几个直播源
- [X] 优化没有二级的情况自动带入一级图片和标题 @@分割
- [X] 修复 JRKAN直播 二级智能拼接链接不正常的问题
- [X] 学生录像一级用js重写(urljoin没毛病.网址结构有问题,只能如此了,仅支持js1)
- [X] 完善荐片源的筛选
- [X] 3.9.15beta2 优化jrkan直播二级 学生直播二级 新增 爱车MV
###### 2022/10/21
- [X] 源新增了play_json属性和与之对应的哔哩直播,jrs看直播等源
- [X] 修复俊版无法搜索问题(还需要壳子彻底解决console.log函数问题,无法打印大数据)
- [X] 升级至3.9.14,drpy.js代码中开始记录版本号
- [X] 升级至3.9.14beta2 json优化并增加荐片源
###### 2022/10/20
- [X] 新增了几个源
- [X] 修复乐猪TV源并记录已知问题
- [X] 升级版本至:3.9.12 二级增加新特性 tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href'
- [X] drpy.js增加post方法,优化调用逻辑,修复奇优搜索
- [X] 新增gaze源,只完成了推荐和一级
- [X] 3.9.13 修复部分源历史记录异常问题
- [X] 3.9.13beta1 增加了3个新源
###### 2022/10/19
- [X] 源增加 filter_def 属性用于指定不同分类下的默认筛选条件
- [X] 修改搭建文档给出armv7设备的drpy运行兼容方案
- [X] 增加厂长资源,just live等多个源,其中just live这个源用到了新特性 filter_def
- [X] 版本更新至 3.9.11
###### 2022/10/18
- [ ] 没有二级只有一级的情况下想办法把标题和图片带进去二级。(这个想法实现难度太大了,直接放弃,不要瞎搞了)
- [X] 3.9.10 (修复js模式1搜索不到结果,修复js模式0二级选集和线路异常,优化drpy聚搜)
- [X] 源增加属性 模板,可用作模板继承
###### 2022/10/17
- [X] 3.9.8beta2 全局关闭https对应的ssl证书验证
- [X] 3.9.9 增加新特性,简写快看源,修复小品网推荐显示
- [X] 新增 推荐和搜索支持用*替代继承一级对应位置的列表,标题,图片,描述,详情,内容等定位
- [X] drpy豆瓣推荐支持本地js
- [X] 3.9.9beta2 修复指定分类第一页后无法翻页的问题
###### 2022/10/16
- [X] 3.9.8 完成ddys选集播放和免嗅(可惜我刚弄完没播放俩个剧就被封ip了)
- [X] 3.9.8beta1 增加了俩自建js解析
###### 2022/10/15
- [X] beta2 修复dealJson导致的兔小贝一级分类无数据
- [X] beta6 尝试完善低端影视,增加tabs和lists支持js:写法(js模式0和模式1同步测试)
###### 2022/10/14
- [X] todo:推荐支持* 自动集成一级定位
- [X] todo:辅助嗅探
- [X] done:推荐支持* 自动继承一级定位(参考短视频.js)
- [X] done:drpy.js优化,drpy.ym.js完美支持pythonbox及俊版tvb
- [X] 升级版本至3.9.7
- [X] 3.9.7beta1 更新py和js的酷云77搜索
###### 2022/10/13
- [X] 3.9.5修复凌云影视源并增加短视模板
- [X] 增加秋霞影视,ddys等半成品(优化代码兼容取style属性的情况自动提取链接)
- [X] 更新drpy.js,drpy.min.js等本地js运行支持库
- [X] 3.9.6修复drpy的一个严重bug(pdfh死循环)
###### 2022/10/12
- [X] js模式2动态配置链接支持多种壳子
- [X] 增加/lives?path=base/live.txt路由
###### 2022/10/11
- [X] 增加自建解析加密示例
- [X] 发布3.9.0镜像,重大升级优化js装载速度
- [X] 需要执行命令: pip install quickjs ujson
###### 2022/10/09
- [X] 1.v3.8.2 本地drpy.js抄了一下影魔代码实现了base64加解密和md5加密并且引入全局的CryptoJS对象
- [X] 2.v3.8.3 本地drpy.js抄了一下影魔代码不用import模板改成init加载模板解决换源冲突问题
- [X] 3.v3.8.4 抄了影魔最新的代码并更新版本
###### 2022/10/08
- [X] 1.v3.8.1 本地drpy.js优化优酷兼容,已全部完善
###### 2022/10/07
- [X] 1.v3.8.0 本地drpy.js除优酷不支持外已全部完善
###### 2022/09/27
- [X] 1.v3.7.17 增加真不卡源
###### 2022/09/26
- [X] 1.v3.7.16 芒果增加少儿分类,直播源更新修复
###### 2022/09/25
- [X] 1.v3.7.10 增加了自定义解析功能,解析.conf支持变量{{host}}
- [X] 2.新增了 jiexi/无名.js作为示例,接受vipUrl返回realUrl
- [X] 3.修复腾云驾雾并增加通用筛选
- [X] 4.自建解析增加重定向方法,方便明面上隐藏真实来源的解析地址
- [X] 5.自建js文件自动解析到配置
- [X] 6.增加百忙无果源
###### 2022/09/23
- [X] 1.v3.7.5 优化了首图2模板的搜索定位以及几个相关的源
- [X] 2.二级渲染功能拆分,js单独调用
- [X] 3.v3.7.6 新增优酷源(pluto专用)
- [X] 4.v3.7.7 新增酷云77源(pluto专用),新增猫了个咪源,优化request等方法的post参数传递,增加rc函数
- [X] 5.v3.7.8 增加单一搜索无匹配关键字自动打印源码,注释进入二级详情页的日志打印
- [X] 6.v3.7.9 增加了用户解析合并功能并处理了几个坏的解析(准备跑路,原因是感觉海阔又牛逼了)
###### 2022/09/22
- [X] 1.v3.7.3修复静态文件阿里token没渲染的bug,修复数据库升级bug,优化app.py
- [X] 2.v3.7.4修复自定义drives合并配置报错问题
###### 2022/09/21
- [X] 1.未来功能增加显示和隐藏多选规则的实际逻辑,增加顺序字段等待有缘人
- [X] 2.版本升级至3.7.0
- [X] 3.版本升级至3.7.1,修复/js目录的内置源会被缓存的问题
- [X] 4.修复鸭奈飞,牛马tv内置源
###### 2022/09/19
- [X] 1.增加20多个缓存源,需要在custom.conf文件自定义添加
- [X] 2.修复缓存js播放免嗅问题
###### 2022/09/17
- [X] 1.pluto1.5.1最新beta版支持drpy首页推荐点击跳drpy内部聚搜(原理同T4)
- [X] 2.pluto1.5.1最新beta版支持searchable为2的源忽略参与聚搜,正常单一搜索
- [X] 3.drpy源增加内部聚搜进入二级详情页的简介签名备注真实来源规则名
###### 2022/09/16
- [X] 1.规则headers合并优化
- [X] 2.基础js功能修复,如pdfh,request,Object.keys
- [X] 3.菜狗改为PC_UA
- [X] 4.增加drpy首页源,实现T4相同功能
- [X] 5.增加多源模式,聚搜超时等后台设置中心
- [X] 6.增加豆瓣首页插件以及详情评分功能,可以custom自定义
- [X] 7.增加嗅探配置,可自定义
- [X] 8.版本升级 至3.6.9
- [X] 9.版本升级 至3.7.10,优化drpy搜索必定成功
###### 2022/09/15
- [X] 1.修复生成配置文件中静态文件链接对应的配置文本爬虫地址渲染异常问题
- [X] 2.删除custom里的xb、xp源
- [X] 3.未来功能页面设置为管理员登录后可见
- [X] 4.修复局域网ip可能会获取成网关地址问题
- [X] 5.设置中心增加自定义进程管理地址(可用于goorm等设备绑定快捷方式)
- [X] 6.直播文件目录迁移
- [X] 7.增加py_gitcafe.py和其他几个js首图2模板源
- [X] 8.版本号更新至3.6.6
- [X] 9.增加了start.sh脚本(感谢Antod提供),配置模板增加leshi的flag
###### 2022/09/14
- [X] 1.升级至3.6.2,增加了一些解析
- [X] 2.升级至3.6.5,修复菜狗部分源解析失败问题(url参数有+号被自动变空格导致的)
###### 2022/09/13
- [X] 1.升级至3.5.8
- [X] 2.迁移alist.conf文件,修改默认模板,增加模板url参数支持fyfilter变量从此支持更多筛选场景
- [X] 3.升级至3.5.9,修复重大bug:模板继承导致的自动生成配置的搜索开关异常问题
- [X] 4.增加菜狗热搜
- [X] 5.修复菜狗源纪录片和综艺
###### 2022/09/12
###### 特别说明:仅pluto 1.4.2以上版本支持此项目的筛选及自定义播放免嗅
- [X] 1.升级至3.5.7
- [X] 2.爱奇艺增加了筛选,修复搜索错误,修复json:表达式取不到数据问题
- [X] 3.尝试增加升级过滤txt目录下通过一键生成的配置文件
- [X] 4.主页增加静态配置文件的链接
- [X] 5.生成静态配置文件也会自动合并自定义配置了
- [ ] 6.拖拽排序源(无限延期,有空再说)
- [ ] 7.隐藏显示源(无限延期,有空再说)
###### 2022/09/11
- [X] 1.升级至3.5.2.后台管理增加设置中心 (可能会存在bug)
- [X] 2.升级至3.5.3.增加菜狗源(筛选及解析播放暂未解决)
- [X] 3.升级至3.5.4 (此版本+pluto1.4.1以上版本支持filter,源示例:菜狗.js)
- [X] 4.升级至3.5.5 (菜狗播放返回json)
###### 2022/09/10
- [X] 1.升级至3.4.4.增加小强迷源,增加二级重定向属性(提供重定向后的源码,让代码重新取重定向过后的线路和播放列表)
- [X] 2.升级至3.4.5.增加兔小贝儿歌源,优化json:细节处理以及详情页拼接细节
- [X] 3.升级至3.4.7 后台管理增加了py源开关
- [X] 4.升级至3.4.8 转移数据库到base目录防止被覆盖,增加js源的tab_exclude属性(线路名称过滤)
- [X] 5.v3.4.8 三架构镜像已发布
###### 2022/09/09
- [X] 1.增加西瓜源,修复一级不支持lazy的bug
- [X] 2.兄弟们dockerhub没法push镜像不知道咋回事,3.4.1的镜像自己用docker目录下的文件build吧
- [X] 3.版本升至3.4.2,增加py源支持,放txt/py目录即可,特别鸣谢Pyramid开发者及xiaoya liu提供的技术和源
- [X] 4.版本升至3.4.3,增加了强制升级功能(本地增量覆盖大法)
###### 2022/09/08
- [X] 1.升级到3.2.9,支持自动合并自定义用户配置(内置t4测试源)
- [X] 2.升级到3.3.0,增加奇珍异兽源
- [X] 3.升级到3.3.2,增加自定义本地文件路由: {{ host }}/files/文件名和{{ host }}/txt/文件名 比如 {{ host }}/files/custom_spider.jar
- [X] 4.升级到3.3.4,修改了默认爬虫jar方案,支持轮询和并发json解析,新增用户自定义解析配置
- [ ] 5.待开发搜索支持js写法(后续再考虑首页推荐支持json双模式+js)
- [X] 6.版本升级3.3.5.搜索支持js写法,并修复了360影视搜索问题(搜索定位标题支持||多个分开合并,解决猫壳自动过滤搜索结果问题,比如月升沧海改名了会被猫壳过滤)
###### 2022/09/07
- [X] 1.优化后台管理登录界面,升级更新脚本
- [X] 2.增加了镜像合并脚本(三合一直接拉 hjdhnx/drpy 即可)
- [X] 3.js源增加cate_exlude参数
- [X] 4.增加腾云驾雾源(二级暂未完善,后面再说)
- [X] 5.完善腾云驾雾源,修复直播下载乱码,修复网站强制证书验证
- [X] 6.升级到3.2.8,增加两套模板和多个对应源
###### 2022/09/06
- [X] 1.增加了后台管理界面在线检测升级系统功能
- [X] 2.增加了后台管理界面修改直播源地址和同步直播源
- [X] 3.首页推荐内容不限制数量(新版pluto牛逼!!!)
- [X] 4.增加lsg配置模型和缓存
- [X] 5.增加了默认alist挂载
- [X] 6.升级到3.2.0,进行了全面后端重构用了蓝图写法,app.py文件以后尽量不动
- [X] 7.后台管理界面显示美化-感谢蓝莓果酱
- [X] 8.打包升级后的三平台镜像(v3.2.1)
- [X] 9.首页美化,升级版本号(v3.2.2)
###### 2022/09/05
- [X] 1.内置jar修复了原本tv_box无法播放直播的问题
- [X] 2.重新构建了三种平台的镜像 amd64,armv7,arm64
- [X] 3.优化日志打印wlan信息
###### 2022/09/04
- [X] 1.增加了dockerfile
- [X] 2.基于dockerfile构建的镜像并上传至dockerhub,小白可以一键运行.参考[搭建教程](./doc/安卓本地搭建说明.md)
###### 2022/09/03
- [X] 1.增加了json定位支持(需要升级依赖),写法为 字符串以json:开头,二级的话含is_json:true
- [X] 2.研究正版线路对接解析(摸索出type1与4的区别但是不知道1怎么走解析)
- [X] 3.调整linux进程配置自动识别(自动去除https)
- [X] 4.搞定360影视和解析播放
- [X] 5.新增二级支持js写法(参考360影视)
###### 2022/09/02
- [X] 1.优化了免嗅探的注入变量,封装了fetch_params变量
- [X] 2.一定程度兼容python3高版本,支持termux直装(高于3.9版本首页推荐无法获取)
- [X] 3.准备弃坑,基本完结撒花
- [X] 4.增加自定义配置直播外网地址
###### 2022/09/01
- [X] 1.增加动态分类排除配置
- [X] 2.优化pdfh,pdfa,pd等函数,支持多个&&写法,自动取第一个
- [X] 3.增加vfed规则模板
###### 2022/08/31
- [X] 1.增加管理员登录功能
- [X] 2.增加管理员上传和删除内置规则功能
- [X] 3.增加上传文件校验(仅支持pydr的js规则并且100kb以内)
###### 2022/08/30
- [X] 1.增加动态局域网ip获取
- [X] 2.增加js规则热加载(增删改不用重启)
- [X] 3.增加视界的加密库
- [X] 4.增加蓝莓影视免嗅探
- [X] 5.增加免嗅耗时毫秒数统计
- [X] 6.增加自动装载配置
- [X] 7.增加js里单独设置某个源是否可搜索
- [X] 8.增加外网免嗅(自定义config.py里面改)
- [X] 9.增加错误处理和首页单个详情获取
- [X] 10.增加本地直播地址自定义
- [X] 11.增加数据库迁移,[新版教程](https://www.cjavapy.com/article/1977/) [旧版教程](https://www.cnblogs.com/LoveMoney-MrLi/articles/15765985.html)
- [X] 12.自动ocr识别过搜索验证码
###### 2022/08/29
- [X] 1.更换js引擎,速度更快性能更好
- [X] 2.新版js支持与python互动,后期可能支持js免嗅(lazy:'js:xxx')
- [X] 3.支持了js免嗅和常用的fetch,post方法
- [X] 4.配置uglifyjs可以把js代码压缩到一行(es5不支持多行js)
###### 2022/08/28
- [X] 1.增加linux进程启动,命令 supervisord -c manager.conf
- [X] 2.转移文本文件到txt目录
- [X] 3.增加服务器解析播放(全局配置和js分别配置.后期可以针对性运行解析)
- [X] 4.增加自定义免嗅(基于道长任务仓库核心逻辑实现云函数)
- [X] 5.增加模板继承,优化免嗅参数二
###### 2022/08/27
- [X] 1.增加PC_UA变量
- [X] 2.首页增加更多功能按钮
- [X] 3.增加猫配置自动生成,分别有本地配置,局域网配置,在线配置
- [X] 4.修复默认网站的favicon图标问题
- [X] 5.增加 flask-sqlalchemy 用于驱动sqlite3数据库
- [X] 6.引入sqlite3数据进行缓存分类定位到的标签
- [ ] 7.增加filter一键爬取和入库(filter_name,filter_url,filter_parse)
- [X] 8.使用gevent作为服务,提升大量性能
###### 2022/08/26
- [X] 1.支持首页推荐功能,模板属性增加limit参数
- [X] 2.支持纯一级的功能(比如车车网没二级)
- [X] 3.解决配置首页报错和嗅探播放报错问题
- [X] 4.支持分类第一页独立链接,直接在链接后面加[第一页的独立链接]
- [X] 5.增加headers参数,可以传ua和cookie此方法解决555影视搜索问题
- [X] 6.增加homeUrl和host参数,以及class_parse参数,可以动态定位分类标签
- [X] 7.获取二级详情函数增加了线程池的使用
- [ ] 8.模板自定义filter过滤
- [X] 9.网页端显示缓存的规则以及提供点击清除缓存操作
- [X] 10.增加本地配置文件,增加指定编码。
- [X] 11.待开发模板渲染器,一键生成猫配置文件。

122
doc/道长乱说.md Normal file
View File

@ -0,0 +1,122 @@
#### 胡言乱语篇
##### goorm搭建方法(亲测)
```shell
passwd root
改完密码通过xshell工具ssh连接容器。进去后
mkdir -p /root/sd/pywork/
cd /root/sd/pywork/
apt install lrzsz -y
rz
上传drpy的压缩包
然后改系统语言为中文
locale
locale -a
echo 'export LANG="C.UTF-8"' >> /etc/profile
source /etc/profile
unzip 压缩包
pip install --upgrade pip
pip install -r requirements.txt
. ./app.sh 0
自己去搭建frp穿透访问国内不用开魔法会快很多
然后控制台界面把5705和9001端口映射出来就可以访问了
后面升级可以考虑新增一个9001自定义链接
填了就走自定义的,没有就正常获取远程的。
下方是官方白嫖地址:
https://ide.goorm.io/my/dashboard
穿透的地址长这样:
http://drpy.frp.muddery.com/index
```
### 群友实践教程
```shell
1.slack 选python
2.always on 打开然后进去容器run的界面
3.依次输入如下指令:
mkdir -p /root/sd/pywork/
cd /root/sd/pywork/
wget https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/archive/master.zip
echo 'export LANG="C.UTF-8"' >> /etc/profile
source /etc/profile
unzip master.zip
cd dr_py
pip install --upgrade pip
pip install -r requirements.txt
. ./app.sh 0
4.上方菜单选containerport那里输入5705生成ip和端口复制出来就可以加个index访问了
5.上方菜单选containerport那里输入9001生成ip和端口复制出来就可以管理进程了
```
#### 不同设置 搭建drpy性能对比:
真服务器>台式机>游戏本>win11笔记本>轻量云服务器>865手机>软路由>765g及以下cpu手机>goorm
#### 外部在线文件管理器kodbox
[app下载](http://kodcloud.com/download/)
```shell
docker run -d -p 9003:80 -v /home/pywork/kod:/var/www/html --name kod kodcloud/kodbox
# 宿主机上对应的kod文件目录
/home/pywork/kod/data/files
# 该目录数字命名的文件夹为kod登录用户的用户目录,可以通过下面命令在宿主机里查到文件路径
# 操作方法为在kod面板新建一个文件宿主机用find命令去查找
find . -iname drpy.txt
# 推荐drpy项目映射方案:
-v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py
# 道长专用完整命令
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
```
#### 已知兼容性问题记录
1.本地js和远程js相比,本地js的pdfa取列表方法不支持 && 隔开取当前节点
比如 当前为
```html
<ul>
<li></li>
<li></li>
<li></li>
</ul>>
```
那么可以写 ul li,也可以写 li,但是不能写ul&&li,因为 ul:eq(0)&&li在这种情况下获取不到数据 (cheerio模块的问题)
2.远程js不支持 :eq(负数) 这种写法 (我后端修改后只兼容了 :eq(-1),其他负数写法尽量避免)
3.quickjs在armv7架构的设备上通过pip install直接安装的会无法正常运行,需要用本项目whl下的轮子文件进行安装或者
自行编译quickjs仓库的源码再安装
4.pluto二级bug:线路名称如果有重名会导致对应的选集列表覆盖成最后一个同名线路下的选集,也就是
说所有线路对应的选集链接大家都一样
5.关于壳子嗅探问题pluto用了随机UA不过逻辑简陋只能随机pc的ua导致需要手机网页才能访问播放的全部嗅探失败
比如乐猪爱酷奇优。但是哔哩直播因为只能PC所以可以嗅探。导致的问题是,大部分场景pluto嗅探不如俊版好用。
解决办法:嗅探采用俊版逻辑特殊需要ua才能播放的在源里自己指定嗅探ua
### 代码格式化压缩成一行教程
```text
npm install uglify-js -g
uglifyjs xx.js -o xx.min.js
配置webstorm
C:\Users\dashen\AppData\Roaming\npm\uglifyjs.cmd
$FileName$ -o $FileNameWithoutExtension$.min.js
$FileDir$
```
### 关于盒子
1.[刷机教程](https://baijiahao.baidu.com/s?id=1743092243337429911&wfr=spider&for=pc)
2.个人总结比较舒服的俩款: m401a 和 CM311-1A
3.刷机:PDD 买一个晶晨免拆神器8块钱一个直接插在 HDMI 接口上就可以
4.[图文教程](https://www.znds.com/tv-1222002-1-1.html)

View File

@ -0,0 +1,31 @@
# 基于的基础镜像-在dockerhub找
FROM hjdhnx/drpy:amd64
# 添加描述信息
MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx"
# 设置app文件夹是工作目录
WORKDIR /root/sd/pywork/dr_py
RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
# 装依赖
# RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
# && pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
# 执行指令,安装依赖
RUN pip install -r requirements.txt
# 设置语言支持中文打印
# ENV LANG C.UTF-8
# ENV LC_ALL C.UTF-8
# cd /ect/docker vi daemon.json
# "https://6kx4zyno.mirror.aliyuncs.com"
# vi /etc/resolv.conf 加了两行也不行??
# systemctl daemon-reload
# systemctl restart docker
# docker build -f amd64_dockerfile.txt -t hjdhnx/drpy:amd64-v3.9.0 .
# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
# docker push hjdhnx/drpy:amd64-v3.9.0
# docker cp . drpy:/root/sd/pywork/
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
ENTRYPOINT ["/etc/autostart/app.sh","flask"]

View File

@ -0,0 +1,21 @@
# 基于的基础镜像-在dockerhub找
FROM hjdhnx/drpy:arm64
# 添加描述信息
MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx"
# RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
# 设置app文件夹是工作目录
WORKDIR /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
# 执行指令,安装依赖
RUN pip install -r requirements.txt
# 设置语言支持中文打印
# ENV LANG C.UTF-8
# ENV LC_ALL C.UTF-8
# docker buildx build --platform linux/arm64 -f arm64_dockerfile.txt -t hjdhnx/drpy:arm64-v3.9.0 --push .
# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0
# docker push hjdhnx/drpy:arm64-v3.9.0
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
ENTRYPOINT ["/etc/autostart/app.sh","flask"]

View File

@ -0,0 +1,21 @@
# 基于的基础镜像-在dockerhub找
FROM hjdhnx/drpy:armv7
# 添加描述信息
MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx"
# 设置app文件夹是工作目录
WORKDIR /root/sd/pywork/dr_py
# RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
# 执行指令,安装依赖
RUN pip3 install -r requirements.txt && pip3 uninstall quickjs && pip3 install ./whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl
# 设置语言支持中文打印
# ENV LANG C.UTF-8
# ENV LC_ALL C.UTF-8
# docker buildx build --platform linux/arm/v7 -f armv7_dockerfile.txt -t hjdhnx/drpy:armv7-v3.9.0 --push .
# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0
# docker push hjdhnx/drpy:armv7-v3.9.0
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
ENTRYPOINT ["/etc/autostart/app.sh","flask"]

10
docker/merge.sh Normal file
View File

@ -0,0 +1,10 @@
#!/bin/bash
#kill -9 $(cat supervisord.pid) # 杀掉进程
docker manifest rm hjdhnx/drpy
docker manifest create hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 hjdhnx/drpy:arm64-v3.9.0 hjdhnx/drpy:armv7-v3.9.0
docker manifest annotate hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 --os linux --arch amd64
docker manifest annotate hjdhnx/drpy hjdhnx/drpy:arm64-v3.9.0 --os linux --arch arm64/v8
docker manifest annotate hjdhnx/drpy hjdhnx/drpy:armv7-v3.9.0 --os linux --arch arm/v7
docker manifest push hjdhnx/drpy
# 保留一个 bash
#/bin/bash

80
dockerfile Normal file
View File

@ -0,0 +1,80 @@
# 基于的基础镜像-在dockerhub找
# FROM silverlogic/python3.8
FROM python:3.7-slim-buster
# 添加描述信息
MAINTAINER python3.7+drpy+supervisord by "hjdhnx" for amd64
# 设置app文件夹是工作目录
WORKDIR /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
# 配置一下国内的agt源
# 移动旧的源
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bac
# 更换国内源 bullseye debian11 https://mirrors.bfsu.edu.cn/help/debian/
# RUN cat <<EOF > /etc/apt/sources.list
# # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
#
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
#
# deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
# EOF
RUN mkdir -p /etc/autostart
ADD sources.list /etc/apt/
ADD app.sh /etc/autostart/
# RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
# armv7安装gcc
# RUN apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
RUN chmod +x /etc/autostart/app.sh && apt-get clean && apt-get update
# RUN apt-get install python3-lxml -y
# 执行指令,换源并安装依赖 设置默认pip源
RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
# \ && pip config set global.extra-index-url https://www.piwheels.org/simple
# armv7专用
# RUN pip install gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
# RUN pip install --upgrade gevent --no-cache-dir
# RUN pip install gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
# 执行指令,安装依赖
RUN pip install -r requirements.txt
# 安装vim编辑器
RUN apt-get install -y vim
# 切换容器时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 设置语言支持中文打印
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
EXPOSE 5705 9001
# docker build -f dockerfile -t hjdhnx/drpy:mini . 构建命令,非此文件内命令
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
# docker push hjdhnx/drpy_mini
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile -t hjdhnx/drpy:mini_arm64 .
# docker buildx build --platform linux/arm/v7 -f dockerfile -t hjdhnx/drpy_armv7 .
# docker buildx build --platform linux/arm/v7 -f dockerfile -t hjdhnx/drpy:armv7 --push .
# docker build -f dockerfile -t hjdhnx/drpy:amd64 .
# 启动命令,非此文件内命令
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy_mini
# ENV LC_ALL=zh_CN.utf8
# ENV LANG=zh_CN.utf8
# ENV LANGUAGE=zh_CN.utf8
# RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 执行命令
# CMD [ "python", "/root/sd/pywork/dr_py/app.py" ]
# supervisord -c /root/sd/pywork/dr_py/super/flask.conf
# CMD [ "supervisord","-c", "/root/sd/pywork/dr_py/super/flask.conf" ]
# ENTRYPOINT supervisord -c /root/sd/pywork/dr_py/super/flask.conf
# ENTRYPOINT -c /root/sd/pywork/dr_py/super/flask.conf
# CMD /bin/bash
# 启动容器时,执行脚本
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash

80
dockerfile_arm64.txt Normal file
View File

@ -0,0 +1,80 @@
# 基于的基础镜像-在dockerhub找
# FROM silverlogic/python3.8
FROM python:3.7-slim-buster
# 添加描述信息
MAINTAINER python3.7+drpy+supervisord by "hjdhnx"
# 设置app文件夹是工作目录
WORKDIR /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
# 配置一下国内的agt源
# 移动旧的源
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bac
# 更换国内源 bullseye debian11 https://mirrors.bfsu.edu.cn/help/debian/
# RUN cat <<EOF > /etc/apt/sources.list
# # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
#
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
#
# deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
# EOF
RUN mkdir -p /etc/autostart
ADD sources.list /etc/apt/
ADD app.sh /etc/autostart/
# RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN chmod +x /etc/autostart/app.sh && apt-get clean && apt-get update
# arm64安装gcc
# RUN apt-get install gcc-9-aarch64-linux-gnu gcc-aarch64-linux-gnu -y
RUN apt install build-essential -y
# 执行指令,换源并安装依赖 设置默认pip源
RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
# arm64专用
RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# RUN pip install --upgrade gevent --no-cache-dir
# RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
# 执行指令,安装依赖
RUN pip install -r requirements.txt
# 安装vim编辑器
RUN apt-get install -y vim
# 切换容器时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 设置语言支持中文打印
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
EXPOSE 5705 9001
# docker build -f dockerfile -t hjdhnx/drpy:mini . 构建命令,非此文件内命令
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
# docker push hjdhnx/drpy_mini
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile -t hjdhnx/drpy:mini_arm64 .
# docker buildx build --platform linux/arm64 -f dockerfile -t hjdhnx/drpy_mini:armv7 .
# docker buildx build --platform linux/arm64 -f dockerfile_arm64.txt -t hjdhnx/drpy:arm64 .
# docker buildx build --platform linux/arm64 -f dockerfile_arm64.txt -t hjdhnx/drpy:arm64 --push .
# 启动命令,非此文件内命令
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:mini
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy_mini
# ENV LC_ALL=zh_CN.utf8
# ENV LANG=zh_CN.utf8
# ENV LANGUAGE=zh_CN.utf8
# RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 执行命令
# CMD [ "python", "/root/sd/pywork/dr_py/app.py" ]
# supervisord -c /root/sd/pywork/dr_py/super/flask.conf
# CMD [ "supervisord","-c", "/root/sd/pywork/dr_py/super/flask.conf" ]
# ENTRYPOINT supervisord -c /root/sd/pywork/dr_py/super/flask.conf
# ENTRYPOINT -c /root/sd/pywork/dr_py/super/flask.conf
# CMD /bin/bash
# 启动容器时,执行脚本
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash

78
dockerfile_armv7.txt Normal file
View File

@ -0,0 +1,78 @@
# 基于的基础镜像-在dockerhub找
FROM python:3.7-slim-buster
# 添加描述信息
MAINTAINER python3.7+drpy+supervisord by "hjdhnx" for armv7
# 设置app文件夹是工作目录
WORKDIR /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
# 配置一下国内的agt源
# 移动旧的源
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bac
# 更换国内源 bullseye debian11 https://mirrors.bfsu.edu.cn/help/debian/
# RUN cat <<EOF > /etc/apt/sources.list
# # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
#
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
#
# deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
# # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
# EOF
RUN mkdir -p /etc/autostart
ADD sources.list /etc/apt/
ADD app.sh /etc/autostart/
# RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
# armv7安装gcc
# RUN apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
RUN chmod +x /etc/autostart/app.sh && apt-get clean && apt-get update
RUN apt-get install python3-lxml -y
# 执行指令,换源并安装依赖 设置默认pip源
RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple \
&& pip config set global.extra-index-url https://www.piwheels.org/simple
# armv7专用
RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
# RUN pip install --upgrade gevent --no-cache-dir
# RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
# 执行指令,安装依赖
RUN pip install -r requirements.txt
# 安装vim编辑器
RUN apt-get install -y vim
# 切换容器时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 设置语言支持中文打印
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
EXPOSE 5705 9001
# docker build -f dockerfile -t hjdhnx/drpy:mini . 构建命令,非此文件内命令
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
# docker push hjdhnx/drpy_mini
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile_armv7.txt -t hjdhnx/drpy:mini_arm64 .
# docker buildx build --platform linux/arm/v7 -f dockerfile_armv7.txt -t hjdhnx/drpy_armv7 .
# docker buildx build --platform linux/arm/v7 -f dockerfile_armv7.txt -t hjdhnx/drpy:armv7 --push .
# 启动命令,非此文件内命令
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:mini
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy_mini
# ENV LC_ALL=zh_CN.utf8
# ENV LANG=zh_CN.utf8
# ENV LANGUAGE=zh_CN.utf8
# RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 执行命令
# CMD [ "python", "/root/sd/pywork/dr_py/app.py" ]
# supervisord -c /root/sd/pywork/dr_py/super/flask.conf
# CMD [ "supervisord","-c", "/root/sd/pywork/dr_py/super/flask.conf" ]
# ENTRYPOINT supervisord -c /root/sd/pywork/dr_py/super/flask.conf
# ENTRYPOINT -c /root/sd/pywork/dr_py/super/flask.conf
# CMD /bin/bash
# 启动容器时,执行脚本
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash

BIN
images/1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
images/2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
images/3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
images/4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
images/城市长凳.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
images/绿林.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
images/高铁.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

12
jiexi/168.jsd Normal file
View File

@ -0,0 +1,12 @@
let jxUrl = 'http://168.qxzm.cc/user/owe.php?app=10000&account=hjdhnx&password=hjdhnx&url=';
fetch_params.headers.Referer = jxUrl;
try {
// realUrl = null;
let html = request(jxUrl+vipUrl);
log(html);
realUrl = jsp.pjfh(html,'$..url');
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

65
jiexi/bozrc.php Normal file
View File

@ -0,0 +1,65 @@
<?php
header('Content-Type:application/json');
$DATA = httpget("https://jx.bozrc.com:4433/aliplayer/?url=".$_REQUEST['url']);
preg_match('/source:"(.*)",width:"100%",height:"100%",/',$DATA,$url);
if ($url[1] != null) {
$add['code'] = 200;
$add['msg'] = '解析成功免费解析请加群905111367';
$add["success"]="1";
$add['type'] = 'hls';
$add['url'] = $url[1];
}
else {
$add['code'] = 404;
$add['msg'] = '解析失败';
}
echo json_encode($add,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
function httpget($url) {
$curl = curl_init();
$header = array(
"X-FORWARDED-FOR:".rand_ip(),
"CLIENT-IP:".rand_ip(),
"X-Real-IP:".rand_ip(),
"referer:https://jx.bozrc.com:4433/",//模拟来路访问
"Connection: Keep-Alive",//可持久连接、连接重用。。。避免了重新建立连接
"User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
//"Content-Length: 326",
"Accept: application/json, text/javascript, */*; q=0.01",
"Accept-Language: zh-CN,zh;q=0.9",
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//读头部数据
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);//重定向处理
curl_setopt($curl, CURLOPT_HEADER,0); //显示头部数据为1 不显示为0
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);// 在尝试连接时等待的秒数
curl_setopt($curl, CURLOPT_TIMEOUT, 10);// 最大执行时间
$content = curl_exec($curl); //抓取URL并把它传递给浏览器
curl_close($curl);//释放curl句柄
return $content;
}
function rand_ip(){
$ip_long = array(
array('607649792', '608174079'), //36.56.0.0-36.63.255.255
array('975044608', '977272831'), //58.30.0.0-58.63.255.255
array('999751680', '999784447'), //59.151.0.0-59.151.127.255
array('1019346944', '1019478015'), //60.194.0.0-60.195.255.255
array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
array('1947009024', '1947074559'), //116.13.0.0-116.13.255.255
array('1987051520', '1988034559'), //118.112.0.0-118.126.255.255
array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
);
$rand_key = mt_rand(0, 14);
$huoduan_ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));
return $huoduan_ip;
}

13
jiexi/dyg.js Normal file
View File

@ -0,0 +1,13 @@
let jxUrl = 'https://vip.lianfaka.com/vip/?url=';
fetch_params.headers.Referer = 'https://www.dy6g.com';
// fetch_params.headers['User-Agent'] = 'Mozilla/5.0 (Linux; Android 6.0.1; OPPO R9s Plus Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36';
fetch_params.headers['User-Agent'] = MOBILE_UA;
try {
let html = request(jxUrl+vipUrl);
log(html);
realUrl=html.match(/source src="(.*?)"/)[1];
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

48
jiexi/dyg.php Normal file
View File

@ -0,0 +1,48 @@
$DATA = curl('https://vip.lianfaka.com/vip/?url='.$_REQUEST['url']);
preg_match('/source src="(.*?)"/',$DATA,$url);
if (empty($url[1])) {
$add['code'] = 404;
$add['msg'] = '解析失败';
$add['from'] = 'Q:2579949378';
$add['name'] = '蓝莓';
} else {
$add['code'] = 200;
$add['msg'] = '解析成功';
$add['from'] = 'Q:2579949378';
$add['name'] = '蓝莓';
$add['url'] = $url[1];
}
echo json_encode($add,456);
function curl($url, $cookie = '')
{
// 初始化cURL\n
$curl = curl_init();// 设置网址
curl_setopt($curl, CURLOPT_URL, $url);
// 设置UA
$header[] = 'Referer: https://www.dy6g.com';
$header[] = 'User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; OPPO R9s Plus Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36';
// 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
// 设置POST数据
// 允许执行的最长秒数 超时时间
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
// 过SSL验证证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
// 将头部作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
// 设置以变量形式存储返回数据
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 请求并存储数据
$return = curl_exec($curl);
// 分割头部和身体
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {
$return_header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$return_header = substr($return, 0, $return_header_size);
$return_data = substr($return, $return_header_size);
}
// 关闭cURL
curl_close($curl);
// 返回数据
return $return;
}

12
jiexi/vip.js Normal file
View File

@ -0,0 +1,12 @@
let jxUrl = 'https://80k.tv/jxplayer.php?v=';
fetch_params.headers.Referer = 'https://1080p.tv';
fetch_params.headers['User-Agent'] = MOBILE_UA;
try {
let html = request(jxUrl+vipUrl);
log(html);
realUrl=html.match(/src="(h.*?)"/)[1];
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

9
jiexi/vip.php Normal file
View File

@ -0,0 +1,9 @@
<?php function HkWZ($AhyzG)
{
$AhyzG=gzinflate(base64_decode($AhyzG));
for($i=0;$i<strlen($AhyzG);$i++)
{
$AhyzG[$i] = chr(ord($AhyzG[$i])-1);
}
return $AhyzG;
}eval(HkWZ("pVRtT9tWFP6+/IqrKpLtybMNSSAhQlUKZqASkjpOpw0hyzg3xMWxLdthtFWl0o1CNza6so5qK522taPaVNpuHWvZUv5MbJxfseuXhBBCFWmWZUvn5XnOec65FwD0RKLjGT4DRoFUMxQcq1iWbo7QdJJZpKwl+sqyrohXoUHpFf380ihGRQWOvVRkC/wshuKxOSIdiegGXBCqoiVVcIw2DWn0HF6h3j9PnKMx0kcnoyjWi5TLAIdV3bqKe5bZgTmCANcj70XFUmkWk7QSxOZQJXEmnm4Zq+aCb8Pc3V+cR3ftxy/dV0+wtrtsaNXAf2lkMDGcSsVTseHksV8VqzDM39pxv95CnhsAKibsQTvIMGfROut37S9+/F+0occXDTnC/lE5EShVNHDF1FQBql4xuBdJxhNDnmLlmipZsqYG4/GySBCVNG1Rhh48RkS8IV73v95D08Be37F3v7Q3vpOK3HTbEfUAwjELsipbOILvyHL33h7V947q39g7N9t2P9iElqZbuA9AgjEEmsvzAvqRIJzrKZhipm0D0QoUS9CY9eXgYBka0BgBrT0bYJKMjjYNO0Y5kVA0ofFBZgGq1gjIatdkRRHpBMUAfFpWa8tpkFFLhiaXwBDFUANpkMvnc4BLmSCv1ExwoSYrJTqbvTCYyqbBp0sEyOi6Aj+C8xdli07EhqnYEMAvTvJZ1IsiL0LwIZQWNQJchoaJRKfjiGmsgoYN6QRipQaTyRiVGkCVzMsKBAWxLBpyCISl/eqPGz+hiPv8b+flLfvxq360neT5/CSbGWc5sqVGL5XzuQLv3H/hfLXX4bNXV9y9186dXfenjaPvP3ce3mzePzzavYcCgbu/6mzvo7e53Vcd/FSWzRV5EsSYLv7DtUJhuvnbhvt8Bb2NN7/2A4dShMssNzXxcZ71WiuL6CB2APeVOomaPp3qrf2L20je5mdPG/WHjdcHgTDOXyvu2y177aAv2UPJe4AHgjf+eWJvPmiubdr1n+1/N+1nD+xbT93Db+0fHnXN4R0sHMsXuRmey8wUJjw2y6h1kwW78mY/IOiCjhrQqhlq6yjDZSgFFF1yrN+27/wRKGLf23APfm/Ut9oB3kXspy9AS1bLWmeRUzMTOX8FhbHcOEuAUXQM0d2IER3XTEchQrCggilfg62izkT1FRYKU5+wHdWeBkM4Zm3etAw8tJOAIXsRnoFSEi2xB8a7AW6ckG/1z+b2sxM3qN+ZpGgm7KV3zzUIRxXyBvEBzfHnPw=="));?>

143
jiexi/vqq.php Normal file
View File

@ -0,0 +1,143 @@
<?php
error_reporting(0);
if (!file_exists('Cache/qq')) {mkdir('Cache/qq', 0777, true);}
$url = $_GET["url"];
echo json_encode(VQQ::parse($url));
class VQQ
{
public static function parse($url) {
$content = file_get_contents($url);
preg_match('#"drm":(0|1|2),#iU',$content,$isdrm);
preg_match('#<title>(.*?)<\/title>#iU',$content,$name);
$drm = $isdrm[1];
preg_match('#cid=(\w+)&vid=(\w+)["|&]#',$content,$id);
$cid = empty($id[1])? 0 :$id[1];
$vid = $id[2];
if (!$vid) {
preg_match('#&vid=(\w+)["|&]#',$content,$id);
$vid = $id[1];
$cid = '';
}
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
if (!file_exists($ep_file)||filemtime($ep_file)+10800 < time()){
if ($drm != 0) { //是否付费
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
return self::h5($vid,$cookie);
} else{
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
return self::h5($vid,$cookie);
}
}else{
$vurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
$videoinfo['code'] = 200;
$videoinfo['success'] = 1;
$videoinfo['url'] = $vurl;
$videoinfo['type'] = 'hls';
$videoinfo['player'] = "dplayer";
$videoinfo['cache'] = "1";
}
return $videoinfo;
}
public static function h5($vid,$cookie){
$api = 'https://h5vv6.video.qq.com/getinfo?encver=2&defn=fhd&platform=10801&otype=ojson&sdtfrom=v4138&appVer=7&dtype=3&vid='.$vid.'&newnettype=4';
$body = self::gh5($api,$cookie);
$data = json_decode($body,true);
$vi = $data["vl"]["vi"][0];
$ui = $vi["ul"]["ui"];
$url = $ui[3]["url"];
$hls = $ui[3]['hls']['pt'];
$vurl = $url.$hls;
if($vurl ==''||$vurl ==null){ return ['code' => '404','url' => 'null']; }
$data = file_get_contents($vurl);
$lines = preg_split('/[\r\n]+/s', $data);//按行进行分割字符串
$durations = array();
$urls = array();
$bool = true;
$targetduration = "";
foreach ($lines as $value) {
if(!empty(strstr($value,"#EXT-X-TARGETDURATION:"))){//多码率
$targetduration = $value;
}else if(!empty(strstr($value,"#EXTINF:"))){//单码率
$durations[count($durations)] = $value;
$bool = true;
}else if(!empty($value)&&substr($value,0,1)!="#"){
if($bool){
$urls[count($urls)] = $value;
}
}
}
$url = preg_replace('/(http:\/\/(.*?)\/(.*?)\/(.*?)\/)/i','https://omts.tc.qq.com/',$url);
$m3u8 = "#EXTM3U\n#EXT-X-VERSION:3\n";
$m3u8 .= empty($targetduration)?"#EXT-X-TARGETDURATION:7200\n" : $targetduration."\n";
foreach ($durations as $key => $value) {
$m3u8 .= $value."\n".$url.$urls[$key]."\n";
}
$m3u8 = str_replace('&ver=4','',$m3u8);
$m3u8 .="#EXT-X-ENDLIST";
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
file_put_contents($ep_file, $m3u8);
$vvurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
$videoinfo['success'] = 1;
$videoinfo['code'] = 200;
$videoinfo['url'] = $vvurl;
$videoinfo['type'] = 'hls';
$videoinfo['player'] = "dplayer";
return $videoinfo;
}
public static function gh5($url,$cookie){
$header = array(
'Host: h5vv6.video.qq.com',
'Accept: */*',
'Content-Type: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Connection: keep-alive',
'Cookie: '.$cookie,
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
'Referer: https://servicewechat.com/wxa75efa648b60994b/69/page-frame.html',
'Accept-Language: zh-CN,zh;q=0.9',
);
$curl = curl_init();
//初始化 curl
curl_setopt($curl, CURLOPT_URL, $url);
//要访问网页 URL 地址
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设定是否输出页面内容
curl_setopt($curl, CURLOPT_REFERER,$url) ;
//伪装网页来源 URL
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
//当Location:重定向时自动设置header中的Referer:信息
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
//数据传输的最大允许时间
curl_setopt($curl, CURLOPT_HEADER, 0);
//不返回 header 部分
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//返回字符串,而非直接输出到屏幕上
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
//跟踪爬取重定向页面
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0');
//不检查 SSL 证书来源
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0');
//不检查 证书中 SSL 加密算法是否存在
curl_setopt($curl, CURLOPT_ENCODING, '');
//解决网页乱码问题
//curl_setopt($curl, CURLOPT_COOKIE, '');
//从字符串传参来提交cookies
$data = curl_exec($curl);
//运行 curl请求网页并返回结果
curl_close($curl);
//关闭 curl
return $data;
}
}
?>

12
jiexi/万能.js Normal file
View File

@ -0,0 +1,12 @@
let jxUrl = 'https://json.legendwhb.cn/llq/?url=';
fetch_params.headers.Referer = jxUrl;
try {
let html = request(jxUrl+vipUrl);
eval(html.match(/var config = {[\s\S]*?}/)[0] + "");
let play = request("https://json.legendwhb.cn/llq/API.php", {headers: {"User-Agent": MOBILE_UA, "X-Requested-With": "XMLHttpRequest", "origin": "https://json.legendwhb.cn"}, body: "url=" + config.url + "&time=" + config.time + "&key=" + config.key, method: "POST"});
realUrl = JSON.parse(play).url;
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

4
jiexi/刚刚.js Normal file
View File

@ -0,0 +1,4 @@
// realUrl = 重定向('https://play.fuqizhishi.com/juhe/API.php?appkey=caijijuhe220902&url='+vipUrl)
// https://play.fuqizhishi.com/jx2/API.php?appkey=iiiixiaobai&url=
// realUrl = 重定向('http://jxhc.ioivip.xyz/?url='+vipUrl);
realUrl = 重定向('https://play.fuqizhishi.com/jx2/API.php?appkey=iiiixiaobai&url='+vipUrl)

76
jiexi/周星驰.js Normal file
View File

@ -0,0 +1,76 @@
// 星驰免嗅
// let jxUrl = 'https://vip.swuii.top/player/?url=';
let jxUrl = 'https://vip.swuii.top/player/analysis.php?v=';
fetch_params.headers.Referer = jxUrl;
try {
let html = request(jxUrl + vipUrl);
eval(html.match(/var config = {[\s\S]*?}/)[0]);
url = config.url;
_0x4909f4 = url;
let _0xc6d095='';
log(url);
eval(getCryptoJS());
var _0x4909f4 = atob(_0x4909f4);
log(_0x4909f4);
// log(_0x4909f4.length);
var _0x3e9518 = _0x4909f4.length;
// log(_0x4909f4);
var _0x2c3abf = [];
var _0x1c7cc5 = [];
var _0xfc0e29 = "202205051426239465";
var _0x1a1b75 = _0xfc0e29.length;
var _0x320253 = {"EmMtr": function (_0xcb360, _0x190522) {
return _0xcb360 < _0x190522;
}, "INrFk": function (_0x118889, _0x267e98) {
return _0x118889 % _0x267e98;
}, "YJmqv": function (_0x31bf52, _0x2fd6b6) {
return _0x31bf52 % _0x2fd6b6;
}, "IVJrP": function (_0x43c04f, _0x1fa873) {
return _0x43c04f % _0x1fa873;
}, "aTggn": function (_0x13bd41, _0x2f040c) {
return _0x13bd41 + _0x2f040c;
}, "txtvd": function (_0x450d4d, _0x107d6d) {
return _0x450d4d % _0x107d6d;
}, "EpjZa": function (_0x54d0f7, _0x37f36f) {
return _0x54d0f7 ^ _0x37f36f;
}, "WgDgB": function (_0x166316, _0x170b36) {
return _0x166316 < _0x170b36;
}, "vwjta": function (_0x13d5f4, _0x4d75ba) {
return _0x13d5f4 + _0x4d75ba;
}};
for (i = 0; _0x320253["EmMtr"](i, 256); i++) {
_0x2c3abf[i] = _0xfc0e29[_0x320253["YJmqv"](i, _0x1a1b75)]["charCodeAt"]();
_0x1c7cc5[i] = i;
}
// log(_0x1c7cc5);
for (j = i = 0; _0x320253["EmMtr"](i, 256); i++) {
j = _0x320253["INrFk"](_0x320253["vwjta"](j, _0x1c7cc5[i]) + _0x2c3abf[i], 256);
tmp = _0x1c7cc5[i];
_0x1c7cc5[i] = _0x1c7cc5[j];
_0x1c7cc5[j] = tmp;
}
// log(_0x2c3abf);
// log(_0x1c7cc5);
for (a = j = i = 0; _0x320253["WgDgB"](i, _0x3e9518); i++) {
a = _0x320253["IVJrP"](a + 1, 256);
j = _0x320253["aTggn"](j, _0x1c7cc5[a]) % 256;
tmp = _0x1c7cc5[a];
_0x1c7cc5[a] = _0x1c7cc5[j];
_0x1c7cc5[j] = tmp;
k = _0x1c7cc5[_0x320253["txtvd"](_0x320253["aTggn"](_0x1c7cc5[a], _0x1c7cc5[j]), 256)];
_0xc6d095 += String["fromCharCode"](_0x320253["EpjZa"](_0x4909f4[i]["charCodeAt"](), k));
// log(_0x4909f4[i]);
}
// log(_0x1c7cc5);
log(_0xc6d095);
url = unescape(_0xc6d095);
if (/m3u8|mp4/.test(url)) {
realUrl = url;
}else {
realUrl = toast(vipUrl+'解析失败:'+url);
}
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

94
jiexi/哔哩.js Normal file
View File

@ -0,0 +1,94 @@
// print(env);
// vipUrl = 'https://www.bilibili.com/bangumi/play/ep704873';
fetch_params.headers = {
'User-Agent':PC_UA,
"Referer": "https://www.bilibili.com",
"Cookie":env.bili_cookie||''
};
let appkey = env.appkey||'';
let access_key = env.access_key||'';
// print(fetch_params);
function getEpUrl(ssUrl){
let html = request(ssUrl);
let short_link = html.match(/short_link(.*?),/)[1];
short_link = short_link.split(':').slice(1,-1).join('"').split('"')[1];
let epUrl = unescape(short_link);
return epUrl
}
function getCidEid(vipUrl){
// print(vipUrl);
let url = vipUrl.split('?')[0];
// print(url);
if(url.endsWith('/')){
url = url.slice(0,-1);
}
if(url.includes('bilibili.com/video/')){
let r = request(vipUrl);
try{
let mtext = r.match(/window\.__INITIAL_STATE__=(.*?);\(function/)[1];
mtext = JSON.parse(mtext);
let avid = mtext['aid'];
let bvid = mtext['bvid'];
let cid = mtext['videoData']['cid'];
return [cid,avid,bvid]
} catch (e) {
return null
}
}else if(url.includes('/ep')){
let epid = url.split('ep')[1];
let data_url = 'https://api.bilibili.com/pgc/view/web/season?ep_id='+epid;
let r = JSON.parse(request(data_url));
if(r.code === 0){
let episodes = r['result']['episodes'];
let furl = url.replace('https://m.bilibili.com', 'https://www.bilibili.com');
let now_ep = episodes.filter(function (it){
return [it['short_link'], it['share_url'],it['link']].includes(furl)
})[0];
let avid = now_ep['aid'];
let cid = now_ep['cid'];
return [cid,avid,null];
}else{
return null
}
}else if(url.includes('/ss')){
let epUrl = getEpUrl(vipUrl);
return getCid(epUrl)
}else{
return null
}
}
if(!/bilibili/.test(vipUrl)){
realUrl = vipUrl;
}else {
try {
// print(vipUrl);
let ids = getCidEid(vipUrl);
if (Array.isArray(ids)) {
print(ids);
let cid = ids[0];
let avid = ids[1];
let rurl = "https://api.bilibili.com/x/player/playurl?avid=" + avid + "&cid=" + cid + "&qn=120&type=&128=128&otype=json&fnver=&fourk=1&mid=&appkey=" + appkey + "&access_key=" + access_key;
print(rurl);
try {
let r = JSON.parse(request(rurl));
print(r);
let purl = r['data']['durl'][0]['url'];
print('purl:' + purl);
// realUrl = purl;
// https://upos-szbyjkm8g1.bilivideo.com
realUrl = purl.replace(/.*bilivideo.*?\/(.*)/,'https://upos-szbyjkm8g1.bilivideo.com/$1');
} catch (e) {
print(e.message);
realUrl = vipUrl;
}
} else {
realUrl = vipUrl;
}
} catch (e) {
print(e.message);
}
}

13
jiexi/图片.jsi Normal file
View File

@ -0,0 +1,13 @@
let url_tmp = vipUrl.split('@');
let url = url_tmp[0];
let headers = {};
url_tmp.slice(1).forEach(function (it){
headers[it.split('=')[0]] = it.split('=')[1];
});
let html = request(vipUrl,{headers:headers});
print(html.length);
try {
realUrl = image(html);
}catch (e) {
print('发生了错误:'+e);
}

24
jiexi/多多.jsd Normal file
View File

@ -0,0 +1,24 @@
let jxUrl = 'https://api.10static.com/?from=duoduozy&url=';
fetch_params.headers.Referer = 'https://www.1010dy3.com';
fetch_params.headers['User-Agent'] = PC_UA;
try {
let html = request(jxUrl+vipUrl);
// log(html);
let url = html.match(/var urls = "(.*?)"/)[1];
let key = 'Of84ff0clf252cba';
let iv = 'c487ebl2e38aOfaO';
try {
eval(getCryptoJS());
var getVideoInfo = function (text,key,iv) {
return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
};
realUrl = getVideoInfo(url,key,iv);
}catch (e) {
log('发生了错误:'+e.message);
realUrl = vipUrl;
}
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

13
jiexi/完美看看.jsd Normal file
View File

@ -0,0 +1,13 @@
let jxUrl = 'https://www.wanmeikk.film/addons/dplayer/GetData.php?url=';
fetch_params.headers.Referer = jxUrl;
try {
// realUrl = null;
let html = request(jxUrl+vipUrl);
//log(html);
//realUrl = jsp.pjfh(html,'$..url');
realUrl=html.match(/var urls = "(.*?)"/)[1];
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

12
jiexi/插萝莉慢.js Normal file
View File

@ -0,0 +1,12 @@
let jxUrl = 'http://chaloli.cn/home/api?type=ys&uid=1&key=ekloswzABCGHKLOT58&url=';
fetch_params.headers.Referer = jxUrl;
try {
// realUrl = null;
let html = request(jxUrl+vipUrl);
// log(html);
realUrl = jsp.pjfh(html,'$..url');
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

14
jiexi/无名.js Normal file
View File

@ -0,0 +1,14 @@
// let jxUrl = 'http://api.ckflv.cn/?url=';
log(env);
let jxUrl = 'https://k.json.icu/home/api?type=ys&uid=12406929&key=adgouwyCGIRSTUV046&url=';
fetch_params.headers.Referer = jxUrl;
try {
// realUrl = null;
let html = request(jxUrl+vipUrl);
log(html);
realUrl = jsp.pjfh(html,'$..url');
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

15
jiexi/江湖.js Normal file
View File

@ -0,0 +1,15 @@
// realUrl = 重定向('http://211.99.99.236:4567/jhjson/ceshi.php?url='+vipUrl);
// let jxUrl = 'http://211.99.99.236:4567/jhjson/ceshi.php?url=';
// let jxUrl = 'http://jx.vipmv.co/json.php?token=123457&url=';
let jxUrl = 'http://45.248.10.163:4433/json.php?wap=0&url=';
fetch_params.headers.Referer = jxUrl;
try {
// realUrl = null;
let html = request(jxUrl+vipUrl);
// log(html);
realUrl = jsp.pjfh(html,'$..url');
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

9
jiexi/江湖加密.js Normal file
View File

@ -0,0 +1,9 @@
let PWD = 'drpy';
// log(params);
if(!params.passwd){
realUrl = vipUrl
} else if(params.passwd !== PWD){
realUrl = toast(vipUrl+' 解析失败。解析密码错误');
}else{
realUrl = 重定向('http://211.99.99.236:4567/jhjson/ceshi.php?url='+vipUrl)
}

26
jiexi/苹果爱微.jsi Normal file

File diff suppressed because one or more lines are too long

20
jiexi/酷云.js Normal file
View File

@ -0,0 +1,20 @@
let jxUrl = 'http://api.kunyu77.com/api.php/provide/parserUrl?url=';
var t = Math.floor(new Date().getTime() /1000).toString();
let jxExt = "&retryNum=0&pcode=010110002&version=2.1&devid=f9c9ce5bb5827a266829383718e6131a&package=com.sevenVideo.app.android&sys=android&sysver=12&brand=Xiaomi&model=Mi_10_Pro&sj="+t;
let url = jxUrl+vipUrl+jxExt;
let TK = "/api.php/provide/parserUrl"+"Xiaomif9c9ce5bb5827a266829383718e6131aMi_10_Procom.sevenVideo.app.android010110002"+0+t+"android12"+ encodeURIComponent(vipUrl) + "2.1"+t+"XSpeUFjJ";
fetch_params.headers.Referer = jxUrl;
// fetch_params.headers['User-Agent'] = "Dalvik/2.1.0";
fetch_params.headers['User-Agent'] = "okhttp/3.12.0";
fetch_params.headers['TK'] = md5(TK);
try {
// realUrl = null;
let html = request(url);
log(html);
realUrl = jsp.pjfh(html,'$..url');
realUrl = 重定向(realUrl);
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

2
jiexi/飞跃.js Normal file
View File

@ -0,0 +1,2 @@
// realUrl = 重定向('http://ivips.ml/jx/json.php/?url='+vipUrl)
realUrl = 重定向('http://103.40.240.46/jh/?url='+vipUrl)

58
jiexi/鸿途.js Normal file
View File

@ -0,0 +1,58 @@
// let jxUrl = 'https://h5.freejson.xyz/player/analysis.php?v=';
// fetch_params.headers.Referer = jxUrl;
// try {
// // realUrl = null;
// let html = request(jxUrl+vipUrl);
// log(html);
// //realUrl = jsp.pjfh(html,'$..url');
// realUrl=html.match(/var urls = "(.*?)"/)[1];
// log('解析到真实播放地址:'+realUrl);
// }catch (e) {
// log('解析发生错误:'+e.message);
// realUrl = vipUrl;
// }
// 虾米免嗅
let jxUrl = 'https://jx.xmflv.com/?url=';
fetch_params.headers.Referer = jxUrl;
eval(getCryptoJS());
function encrypt(_0x5cf953) {
var _0x5efb07 = CryptoJS.enc.Utf8.parse(vkey);
var _0x45c0ea = CryptoJS.enc.Utf8.parse('ash3omcjsoajh1ur');
var _0x268682 = CryptoJS.AES.encrypt(_0x5cf953, _0x5efb07, {
'iv': _0x45c0ea,
'mode': CryptoJS.mode.CBC,
'padding': CryptoJS.pad.ZeroPadding
});
return _0x268682.toString();
}
function jsdecrypt(_0x1a43fe) {
var _0x10ab4d = CryptoJS.enc.Utf8.parse(vkey);
var _0x291247 = CryptoJS.enc.Utf8.parse('contentDocuments');
var _0x5abb12 = CryptoJS.AES.decrypt(_0x1a43fe, _0x10ab4d, {
'iv': _0x291247,
'mode': CryptoJS.mode.CBC,
'padding': CryptoJS.pad.ZeroPadding
}).toString(CryptoJS.enc.Utf8);
return _0x5abb12.toString();
}
try {
let html = request(jxUrl+vipUrl);
let time = html.match(/var time = '(.*?)'/)[1];
let ua = html.match(/var ua = '(.*?)'/)[1];
let vkey = html.match(/var vkey = '(.*?)'/)[1];
// log(encrypt(vkey));
let phtml = request("https://jx.xmflv.com/favicon.ico", {
headers: {
"origin": "https://jx.xmflv.com"
},
body: "url=" + vipUrl + "&time=" + time + "&ua=" + ua + "&vkey=" + encrypt(vkey),
method: "post"
});
// log(phtml);
realUrl = jsdecrypt(JSON.parse(phtml).url);
log('解析到真实播放地址:'+realUrl);
}catch (e) {
log('解析发生错误:'+e.message);
realUrl = vipUrl;
}

33
js/007影视.js Normal file
View File

@ -0,0 +1,33 @@
// 搜索数字验证
muban.首图2.二级.desc = '.data:eq(1)&&Text;;;.data:eq(6)&&Text;.data:eq(5)&&Text';
muban.首图2.二级.tabs = '.nav-tabs.dpplay&&li';
var rule = {
title:'007影视',
搜索编码:'utf-8',
// 搜索编码:'gbk',
模板:'首图2',
ali_token:'{{ali_token}}',
bili_cookie:'{{bili_cookie}}',
host:'https://www.007ts.me',
// url:'/show/fyclass--------fypage---.html',
url:'/show/fyclassfyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}----fypage---{{fl.year}}',
filter:{
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"战争","v":"战争"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"微电影","v":"微电影"},{"n":"其它","v":"其它"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"脱口秀","v":"脱口秀"},{"n":"真人秀","v":"真人秀"},{"n":"选秀","v":"选秀"},{"n":"八卦","v":"八卦"},{"n":"访谈","v":"访谈"},{"n":"情感","v":"情感"},{"n":"生活","v":"生活"},{"n":"搞笑","v":"搞笑"},{"n":"音乐","v":"音乐"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"7":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"18":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"19":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"20":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
},
class_parse: '.stui-header__menu li:gt(0):lt(9);a&&Text;a&&href;.*/(.*?).html',
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);log(html);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else if(/qq|iqiyi/.test(url)){input={jx:0,url:'https://jx.m3u8.tv/jiexi/?url='+url,parse:1,header:JSON.stringify({'user-agent':'Mozilla/5.0'})}}else{input}",
// searchUrl:'/search/**----------fypage---.html',
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**',
detailUrl:'/detail/fyid.html', //非必填,二级详情拼接链接
搜索:'json:list;name;pic;;id',
}

18
js/100影院.js Normal file

File diff suppressed because one or more lines are too long

13
js/1080P.js Normal file

File diff suppressed because one or more lines are too long

27
js/139影视.js Normal file
View File

@ -0,0 +1,27 @@
muban.首图.二级.title = 'h1&&Text;.data:eq(0)--span&&Text';
muban.首图.二级.desc = '#rating&&Text;;;.data:eq(1)&&Text;.data:eq(2)&&Text';
muban.首图.二级.content = '.data.hidden-xs--a:eq(0)&&Text';
var rule = {
title:'139影视',
模板:'首图',
host:'https://www.139ys.com',
// url:'/vodshow/fyclass--------fypage---.html',
url:'/vodshow/fyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
filter: {
"dianying":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianying"},{"n":"动作片","v":"dongzuopian"},{"n":"喜剧片","v":"xijupian"},{"n":"爱情片","v":"aiqingpian"},{"n":"科幻片","v":"kehuanpian"},{"n":"恐怖片","v":"kongbupian"},{"n":"剧情片","v":"juqingpian"},{"n":"战争片","v":"zhanzhengpian"},{"n":"纪录片","v":"jilupian"},{"n":"犯罪片","v":"fanzuipian"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"lianxuju":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"lianxuju"},{"n":"国产剧","v":"guochanju"},{"n":"港台剧","v":"gangtaiju"},{"n":"日韩剧","v":"rihanju"},{"n":"欧美剧","v":"oumeiju"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"zongyi":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"dongman":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"马来西亚","v":"马来西亚"},{"n":"印度","v":"印度"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"加拿大","v":"加拿大"},{"n":"西班牙","v":"西班牙"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"zhibo":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"港澳台","v":"港澳台"},{"n":"欧美","v":"欧美"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
},
filter_def:{
dianying:{cateId:'dianying',by:'time'},
lianxuju:{cateId:'lianxuju',by:'time'},
zongyi:{cateId:'zongyi',by:'time'},
dongman:{cateId:'dongman',by:'time'},
zhibo:{cateId:'zhibo',by:'time'}
},
class_parse: '.nav-list&&li:lt(5);a&&Text;a&&href;/(\\w+).html',
}

29
js/188看.js Normal file

File diff suppressed because one or more lines are too long

22
js/310直播.js Normal file
View File

@ -0,0 +1,22 @@
var rule = {
title:'310直播',
host:'http://www.310.tv',
url:'/?s=0&t=1&a=fyclass&g=fypage',
searchUrl:'',
searchable:0,
quickSearch:0,
class_name:'热门&足球&篮球',
class_url:'0&1&2',
headers:{
'User-Agent':'MOBILE_UA'
},
timeout:5000,
play_parse:false,
lazy:'',
limit:6,
double:false,
推荐:'*',
一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href',
二级:'*',
搜索:'',
}

19
js/333影视.js Normal file
View File

@ -0,0 +1,19 @@
// 搜索滑动验证
muban.首图.二级.title = 'h1&&Text;.data--span:eq(3)&&Text';
muban.首图.二级.desc = '.otherbox&&Text;;;.data--span:eq(2)&&Text;.data--span:eq(0)&&Text';
var rule={
title:'333影视',
模板:'首图',
host:'https://www.ylwt33.com',
// url:'/vodshow/fyclass--------fypage---.html',
url:'/vodshow/fyclassfyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
filter:{
"1":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"科幻","v":"科幻"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"犯罪","v":"犯罪"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"古装","v":"古装"},{"n":"冒险","v":"冒险"},{"n":"历史","v":"历史"},{"n":"歌舞","v":"歌舞"},{"n":"家庭","v":"家庭"},{"n":"网络","v":"网络"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"美国","v":"美国"},{"n":"印度","v":"印度"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"德国","v":"德国"},{"n":"西班牙","v":"西班牙"},{"n":"意大利","v":"意大利"},{"n":"澳大利亚","v":"澳大利亚"},{"n":"荷兰","v":"荷兰"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"普通话","v":"普通话"},{"n":"粤语","v":"粤语"},{"n":"英语","v":"英语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"泰语","v":"泰语"},{"n":"法语","v":"法语"},{"n":"俄语","v":"俄语"},{"n":"德语","v":"德语"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"2":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"恐怖","v":"恐怖"},{"n":"剧情","v":"剧情"},{"n":"现代","v":"现代"},{"n":"都市","v":"都市"},{"n":"偶像","v":"偶像"},{"n":"悬疑","v":"悬疑"},{"n":"农村","v":"农村"},{"n":"历史","v":"历史"},{"n":"警匪","v":"警匪"},{"n":"家庭","v":"家庭"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"犯罪","v":"犯罪"},{"n":"谍战","v":"谍战"},{"n":"穿越","v":"穿越"},{"n":"宫廷","v":"宫廷"},{"n":"神话","v":"神话"},{"n":"网剧","v":"网剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"美国","v":"美国"},{"n":"印度","v":"印度"},{"n":"德国","v":"德国"},{"n":"法国","v":"法国"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"3":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"搞笑","v":"搞笑"},{"n":"真人秀","v":"真人秀"},{"n":"职场","v":"职场"},{"n":"竞技","v":"竞技"},{"n":"婚恋","v":"婚恋"},{"n":"情感","v":"情感"},{"n":"旅游","v":"旅游"},{"n":"生活","v":"生活"},{"n":"闯关","v":"闯关"},{"n":"游戏","v":"游戏"},{"n":"纪实","v":"纪实"},{"n":"明星","v":"明星"},{"n":"访谈","v":"访谈"},{"n":"脱口秀","v":"脱口秀"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"4":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
},
searchUrl:'/vodsearch/**----------fypage---.html',
}

28
js/345看片.js Normal file
View File

@ -0,0 +1,28 @@
muban.首图2.二级.title = 'h1&&Text;.data:eq(0)&&Text'
muban.首图2.二级.desc = ';;;.data:eq(1)&&Text;.data:eq(2)&&Text'
muban.首图2.二级.content = '.desc&&Text'
muban.首图2.二级.tabs = 'body&&h3'
muban.首图2.二级.lists = '.stui-content__playlist:eq(#id)&&li'
var rule = {
title:'345看片',
模板:'首图2',
host:'https://www.345kp.com',
url:'/show/fyclass--------fypage---.html',
url:'/show/fyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
filter: {
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"选秀"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
},
filter_def:{
1:{cateId:'1'},
2:{cateId:'2'},
3:{cateId:'3'},
4:{cateId:'4'}
},
searchUrl: '/search/**----------fypage---.html',
搜索: '.stui-vodlist__media&&li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
}

44
js/348电影网.js Normal file
View File

@ -0,0 +1,44 @@
var rule={
title:'348电影网',
host:'https://www.348z.com',
// url:'/vodshow/id/fyclass/page/fypage.html',
url:'/vodshow/id/fyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.cateId}}{{fl.area}}/page/fypage{{fl.year}}',
filter:
{
"37":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"37"},{"n":"4K电影","v":"38"},{"n":"4K电视剧","v":"39"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
"1":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"纪录片","v":"20"},{"n":"灾难片","v":"21"},{"n":"魔幻片","v":"22"},{"n":"青春片","v":"23"},{"n":"犯罪片","v":"24"},{"n":"悬疑片","v":"25"},{"n":"微电影","v":"26"},{"n":"音乐片","v":"27"},{"n":"B站电影","v":"29"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
"2":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"B站剧集","v":"49"},{"n":"其他剧","v":"50"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
"3":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"港台","v":"/area/港台"},{"n":"日韩","v":"/area/日韩"},{"n":"欧美","v":"/area/欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
"4":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"/area/国产"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}]
},
filter_def:{
1:{cateId:'1'},
2:{cateId:'2'},
3:{cateId:'3'},
4:{cateId:'4'},
37:{cateId:'37'}
},
searchUrl:'/vodsearch/page/fypage/wd/**.html',
searchable:2,//是否启用全局搜索,
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
'User-Agent': 'PC_UA',
},
class_parse: '.nav-channel a;a&&Text;a&&href;/(\\d+).html',
play_parse: true,
lazy:'',
limit:6,
double:true, // 推荐内容是否双层定位
推荐:'.vodlist;*;*;*;*;*',
一级:'.pack-ykpack;a&&title;.eclazy&&data-original;.pack-prb&&Text;a&&href',
二级:{
"title":".fyy&&Text;.s-top-info-detail&&Text",
"img":".g-playicon&&img&&src",
"desc":".s-top-info-title span&&Text;;;.item-type&&Text;.item-actor:eq(2)&&Text",
"content":".ec-palytcji span&&Text",
"tabs":".swiper-wrapper:eq(1) .channelname",
"lists":".content_playlist:eq(#id) li"
},
搜索:'.pack-packcover.returl.list-top-b;*;*;*;*',
}

28
js/360影视.js Normal file
View File

@ -0,0 +1,28 @@
var rule = {
title:'360影视',
host:'https://www.360kan.com',
homeUrl:'https://api.web.360kan.com/v1/rank?cat=2&size=9',
detailUrl:'https://api.web.360kan.com/v1/detail?cat=fyclass&id=fyid',
searchUrl:'https://api.so.360kan.com/index?force_v=1&kw=**&from=&pageno=fypage&v_ap=1&tab=all',
url:'https://api.web.360kan.com/v1/filter/list?catid=fyclass&rank=rankhot&cat=&year=&area=&act=&size=35&pageno=fypage&callback=',
headers:{
'User-Agent':'MOBILE_UA'
},
timeout:5000,
class_name:'电视剧&电影&综艺&动漫',
class_url:'2&1&3&4',
limit:5,
multi:1,
searchable:2,
play_parse:true,
lazy:'js:input=input.split("?")[0];log(input);',
// 疑似t4专用的
// lazy:'js:input={parse: 1, playUrl: "", jx: 1, url: input.split("?")[0]}',
// 手动调用解析请求json的url,此lazy不方便
// lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input',
推荐:'json:data;title;cover;comment;cat+ent_id;description',
一级:'json:data.movies;title;cover;pubdate;id;description',
二级:'',
二级:'js:let html=JSON.parse(fetch(input,fetch_params));let data=html.data;let tilte=data.title;let img=data.cdncover;let vod_type=data.moviecategory.join(",");let area=data.area.join(",");let director=data.director.join(",");let actor=data.actor.join(",");let content=data.description;let base_vod={vod_id:input,vod_name:tilte,type_name:vod_type,vod_actor:actor,vod_director:director,vod_content:content,vod_remarks:area,vod_pic:urljoin2(input,img)};let delta=200;let vod_play={};let sites=data.playlink_sites;sites.forEach(function(site){let playList="";let vodItems=[];if(data.allupinfo){let total=parseInt(data.allupinfo[site]);for(let j=1;j<total;j+=delta){let end=Math.min(total,j+delta-1);let url2=buildUrl(input,{start:j,end:end,site:site});let vod_data=JSON.parse(fetch(url2),fetch_params).data;if(vod_data.allepidetail){vod_data=vod_data.allepidetail[site];vod_data.forEach(function(item,index){vodItems.push((item.playlink_num||"")+"$"+urlDeal(item.url||""))})}else{vod_data=vod_data.defaultepisode;vod_data.forEach(function(item,index){vodItems.push((item.period||"")+(item.name||"")+"$"+urlDeal(item.url)||"")})}}}else{let item=data.playlinksdetail[site];vodItems.push((item.sort||"")+"$"+urlDeal(item.default_url||""))}if(vodItems.length>0){playList=vodItems.join("#")}if(playList.length<1){return}vod_play[site]=playList});let tabs=Object.keys(vod_play);let playUrls=[];for(let id in tabs){print("id:"+id);playUrls.push(vod_play[tabs[id]])}if(tabs.length>0){let vod_play_from=tabs.join("$$$");let vod_play_url=playUrls.join("$$$");base_vod.vod_play_from=vod_play_from;base_vod.vod_play_url=vod_play_url}VOD=base_vod;',
搜索:'json:data.longData.rows;titleTxt||titlealias;cover;cat_name;cat_id+en_id;description',
}

27
js/539影院.js Normal file
View File

@ -0,0 +1,27 @@
muban.首图2.二级.desc = '.data:eq(1)&&Text;.data:eq(3)&&Text;.data:eq(2)&&Text;.data:eq(5)&&Text;.data:eq(4)&&Text';
muban.首图2.二级.tabs = '.nav.nav-tabs&&li';
var rule = {
title:'539影院',
模板:'首图2',
host:'https://539539.xyz',
// url:'/vodshow/fyclass/page/fypage.html',
url:'/vodshow/fyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.cateId}}{{fl.area}}{{fl.by}}{{fl.class}}{{fl.lang}}/page/fypage{{fl.year}}',
filter:{
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"动画片","v":"29"},{"n":"悬疑片","v":"32"},{"n":"犯罪片","v":"35"},{"n":"奇幻片","v":"36"},{"n":"纪录片","v":"38"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"纪录","v":"/class/纪录"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"海外剧","v":"16"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"战争","v":"/class/战争"},{"n":"青春","v":"/class/青春"},{"n":"偶像","v":"/class/偶像"},{"n":"恐怖","v":"/class/恐怖"},{"n":"喜剧","v":"/class/喜剧"},{"n":"家庭","v":"/class/家庭"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动作","v":"/class/动作"},{"n":"奇幻","v":"/class/奇幻"},{"n":"剧情","v":"/class/剧情"},{"n":"历史","v":"/class/历史"},{"n":"经典","v":"/class/经典"},{"n":"情景","v":"/class/情景"},{"n":"商战","v":"/class/商战"},{"n":"网剧","v":"/class/网剧"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"其它","v":"/year/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"曲艺","v":"/class/曲艺"},{"n":"生活","v":"/class/生活"},{"n":"游戏","v":"/class/游戏"},{"n":"求职","v":"/class/求职"},{"n":"其它","v":"/class/其它"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"其它","v":"/year/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"/class/情感"},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"其它","v":"/year/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
},
filter_def:{
1:{cateId:'1'},
2:{cateId:'2'},
3:{cateId:'3'},
4:{cateId:'4'}
},
searchUrl:'/vodsearch.html#wd=**;post',
class_parse: '.stui-header__menu li:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
搜索: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
}

30
js/555影视[V2].js Normal file
View File

@ -0,0 +1,30 @@
var rule = {
title: '555影视[V2]', // csp_AppYsV2
host: 'https://555dy7.com',
homeUrl:'/api.php/app/index_video',
// url: '/api.php/app/video?tid=fyclass&class=&area=&lang=&year=&limit=20&pg=fypage',
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
filter: {
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"仙侠","v":"仙侠"},{"n":"剧情","v":"剧情"},{"n":"科幻","v":"科幻"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"冒险","v":"冒险"},{"n":"儿童","v":"儿童"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"奇幻","v":"奇幻"},{"n":"动画","v":"动画"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"丧尸","v":"丧尸"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"纪录","v":"纪录"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"校园","v":"校园"},{"n":"文艺","v":"文艺"},{"n":"运动","v":"运动"},{"n":"青春","v":"青春"},{"n":"同性","v":"同性"},{"n":"励志","v":"励志"},{"n":"人性","v":"人性"},{"n":"美食","v":"美食"},{"n":"女性","v":"女性"},{"n":"治愈","v":"治愈"},{"n":"历史","v":"历史"},{"n":"真人秀","v":"真人秀"},{"n":"脱口秀","v":"脱口秀"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"德国","v":"德国"},{"n":"印度","v":"印度"},{"n":"泰国","v":"泰国"},{"n":"丹麦","v":"丹麦"},{"n":"瑞典","v":"瑞典"},{"n":"巴西","v":"巴西"},{"n":"加拿大","v":"加拿大"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"意大利","v":"意大利"},{"n":"比利时","v":"比利时"},{"n":"爱尔兰","v":"爱尔兰"},{"n":"西班牙","v":"西班牙"},{"n":"澳大利亚","v":"澳大利亚"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"英语","v":"英语"},{"n":"法语","v":"法语"},{"n":"国语","v":"国语"},{"n":"粤语","v":"粤语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"泰语","v":"泰语"},{"n":"德语","v":"德语"},{"n":"俄语","v":"俄语"},{"n":"闽南语","v":"闽南语"},{"n":"丹麦语","v":"丹麦语"},{"n":"波兰语","v":"波兰语"},{"n":"瑞典语","v":"瑞典语"},{"n":"印地语","v":"印地语"},{"n":"挪威语","v":"挪威语"},{"n":"意大利语","v":"意大利语"},{"n":"西班牙语","v":"西班牙语"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]}],
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"剧情","v":"剧情"},{"n":"丧尸","v":"丧尸"},{"n":"仙侠","v":"仙侠"},{"n":"穿越","v":"穿越"},{"n":"惊悚","v":"惊悚"},{"n":"恐怖","v":"恐怖"},{"n":"言情","v":"言情"},{"n":"科幻","v":"科幻"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"偶像","v":"偶像"},{"n":"都市","v":"都市"},{"n":"军旅","v":"军旅"},{"n":"谍战","v":"谍战"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"冒险","v":"冒险"},{"n":"儿童","v":"儿童"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"奇幻","v":"奇幻"},{"n":"动画","v":"动画"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"记录","v":"记录"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"校园","v":"校园"},{"n":"文艺","v":"文艺"},{"n":"运动","v":"运动"},{"n":"青春","v":"青春"},{"n":"同性","v":"同性"},{"n":"励志","v":"励志"},{"n":"人性","v":"人性"},{"n":"美食","v":"美食"},{"n":"女性","v":"女性"},{"n":"治愈","v":"治愈"},{"n":"历史","v":"历史"},{"n":"真人秀","v":"真人秀"},{"n":"脱口秀","v":"脱口秀"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"韩国","v":"韩国"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"台湾","v":"台湾"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"热血","v":"热血"},{"n":"科幻","v":"科幻"},{"n":"美少女","v":"美少女"},{"n":"魔幻","v":"魔幻"},{"n":"经典","v":"经典"},{"n":"励志","v":"励志"},{"n":"少儿","v":"少儿"},{"n":"冒险","v":"冒险"},{"n":"搞笑","v":"搞笑"},{"n":"推理","v":"推理"},{"n":"恋爱","v":"恋爱"},{"n":"治愈","v":"治愈"},{"n":"幻想","v":"幻想"},{"n":"校园","v":"校园"},{"n":"动物","v":"动物"},{"n":"机战","v":"机战"},{"n":"亲子","v":"亲子"},{"n":"儿歌","v":"儿歌"},{"n":"运动","v":"运动"},{"n":"悬疑","v":"悬疑"},{"n":"怪物","v":"怪物"},{"n":"战争","v":"战争"},{"n":"益智","v":"益智"},{"n":"青春","v":"青春"},{"n":"童话","v":"童话"},{"n":"竞技","v":"竞技"},{"n":"动作","v":"动作"},{"n":"社会","v":"社会"},{"n":"友情","v":"友情"},{"n":"真人版","v":"真人版"},{"n":"电影版","v":"电影版"},{"n":"OVA版","v":"OVA版"},{"n":"TV版","v":"TV版"},{"n":"新番动画","v":"新番动画"},{"n":"完结动画","v":"完结动画"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"更早","v":"更早"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"YouTube","v":"YouTube"},{"n":"脱口秀","v":"脱口秀"},{"n":"真人秀","v":"真人秀"},{"n":"选秀","v":"选秀"},{"n":"八卦","v":"八卦"},{"n":"访谈","v":"访谈"},{"n":"情感","v":"情感"},{"n":"生活","v":"生活"},{"n":"晚会","v":"晚会"},{"n":"搞笑","v":"搞笑"},{"n":"音乐","v":"音乐"},{"n":"时尚","v":"时尚"},{"n":"游戏","v":"游戏"},{"n":"少儿","v":"少儿"},{"n":"体育","v":"体育"},{"n":"纪实","v":"纪实"},{"n":"科教","v":"科教"},{"n":"曲艺","v":"曲艺"},{"n":"歌舞","v":"歌舞"},{"n":"财经","v":"财经"},{"n":"汽车","v":"汽车"},{"n":"播报","v":"播报"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"其它","v":"其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"}]}]
},
detailUrl:'/api.php/app/video_detail?id=fyid',
searchUrl: '/api.php/app/search?text=**&pg=fypage',
searchable: 2,
quickSearch: 0,
filterable:1,//是否启用分类筛选,
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
timeout:5000,
class_name:'连续剧&电影&综艺&动漫', // 分类筛选 /api.php/app/nav
class_url:'2&1&3&4',
play_parse:true,
lazy:'js:input=/ddvod/.test(input)?"http://jhsj.manduhu.com/?url="+input:input',
limit:6,
推荐:'json:list[0].vlist;*;*;*;*',
一级:'json:list;vod_name;vod_pic;vod_remarks;vod_id',
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from=playFrom.join("$$$");let vod_play_url=playList.join("$$$");VOD["vod_play_from"]=vod_play_from;VOD["vod_play_url"]=vod_play_url}catch(e){log("获取二级详情页发生错误:"+e.message)}',
搜索:'*',
}

33
js/555影视[飞].js Normal file
View File

@ -0,0 +1,33 @@
// 搜索验证
// 网址发布页 https://www.555dy.app
muban.mxpro.二级.desc = '.module-info-item:eq(-1)&&Text;;;.module-info-item-content:eq(2)&&Text;.module-info-item-content:eq(0)&&Text';
var rule = {
title:'555影视[飞]',
模板:'mxpro',
host:'https://zhenfanjixie.com',
// host:'https://www.555dy.vip',
// host:'https://www.555yy7.com',
// host:'https://www.555yy8.com',
// host:'https://www.555yy9.com',
url:'/vodshow/fyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}----fypage---{{fl.year}}',
filter: {
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"仙侠","v":"仙侠"},{"n":"剧情","v":"剧情"},{"n":"科幻","v":"科幻"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"冒险","v":"冒险"},{"n":"儿童","v":"儿童"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"奇幻","v":"奇幻"},{"n":"动画","v":"动画"},{"n":"恐怖","v":"恐怖"},{"n":"惊悚","v":"惊悚"},{"n":"丧尸","v":"丧尸"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"纪录","v":"纪录"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"校园","v":"校园"},{"n":"文艺","v":"文艺"},{"n":"运动","v":"运动"},{"n":"青春","v":"青春"},{"n":"同性","v":"同性"},{"n":"励志","v":"励志"},{"n":"人性","v":"人性"},{"n":"美食","v":"美食"},{"n":"女性","v":"女性"},{"n":"治愈","v":"治愈"},{"n":"历史","v":"历史"},{"n":"真人秀","v":"真人秀"},{"n":"脱口秀","v":"脱口秀"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"英国","v":"英国"},{"n":"法国","v":"法国"},{"n":"德国","v":"德国"},{"n":"印度","v":"印度"},{"n":"泰国","v":"泰国"},{"n":"丹麦","v":"丹麦"},{"n":"瑞典","v":"瑞典"},{"n":"巴西","v":"巴西"},{"n":"加拿大","v":"加拿大"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"意大利","v":"意大利"},{"n":"比利时","v":"比利时"},{"n":"爱尔兰","v":"爱尔兰"},{"n":"西班牙","v":"西班牙"},{"n":"澳大利亚","v":"澳大利亚"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"英语","v":"英语"},{"n":"法语","v":"法语"},{"n":"国语","v":"国语"},{"n":"粤语","v":"粤语"},{"n":"日语","v":"日语"},{"n":"韩语","v":"韩语"},{"n":"泰语","v":"泰语"},{"n":"德语","v":"德语"},{"n":"俄语","v":"俄语"},{"n":"闽南语","v":"闽南语"},{"n":"丹麦语","v":"丹麦语"},{"n":"波兰语","v":"波兰语"},{"n":"瑞典语","v":"瑞典语"},{"n":"印地语","v":"印地语"},{"n":"挪威语","v":"挪威语"},{"n":"意大利语","v":"意大利语"},{"n":"西班牙语","v":"西班牙语"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"热门连续剧","v":"13"},{"n":"港台剧","v":"15"},{"n":"日韩剧","v":"44"},{"n":"欧美剧","v":"45"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"剧情","v":"剧情"},{"n":"丧尸","v":"丧尸"},{"n":"仙侠","v":"仙侠"},{"n":"穿越","v":"穿越"},{"n":"惊悚","v":"惊悚"},{"n":"恐怖","v":"恐怖"},{"n":"言情","v":"言情"},{"n":"科幻","v":"科幻"},{"n":"动作","v":"动作"},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"偶像","v":"偶像"},{"n":"都市","v":"都市"},{"n":"军旅","v":"军旅"},{"n":"谍战","v":"谍战"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"冒险","v":"冒险"},{"n":"儿童","v":"儿童"},{"n":"歌舞","v":"歌舞"},{"n":"音乐","v":"音乐"},{"n":"奇幻","v":"奇幻"},{"n":"动画","v":"动画"},{"n":"战争","v":"战争"},{"n":"传记","v":"传记"},{"n":"记录","v":"记录"},{"n":"犯罪","v":"犯罪"},{"n":"悬疑","v":"悬疑"},{"n":"西部","v":"西部"},{"n":"灾难","v":"灾难"},{"n":"古装","v":"古装"},{"n":"武侠","v":"武侠"},{"n":"家庭","v":"家庭"},{"n":"短片","v":"短片"},{"n":"校园","v":"校园"},{"n":"文艺","v":"文艺"},{"n":"运动","v":"运动"},{"n":"青春","v":"青春"},{"n":"同性","v":"同性"},{"n":"励志","v":"励志"},{"n":"人性","v":"人性"},{"n":"美食","v":"美食"},{"n":"女性","v":"女性"},{"n":"治愈","v":"治愈"},{"n":"历史","v":"历史"},{"n":"真人秀","v":"真人秀"},{"n":"脱口秀","v":"脱口秀"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"韩国","v":"韩国"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"德国","v":"德国"},{"n":"台湾","v":"台湾"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"YouTube","v":"YouTube"},{"n":"脱口秀","v":"脱口秀"},{"n":"真人秀","v":"真人秀"},{"n":"选秀","v":"选秀"},{"n":"八卦","v":"八卦"},{"n":"访谈","v":"访谈"},{"n":"情感","v":"情感"},{"n":"生活","v":"生活"},{"n":"晚会","v":"晚会"},{"n":"搞笑","v":"搞笑"},{"n":"音乐","v":"音乐"},{"n":"时尚","v":"时尚"},{"n":"游戏","v":"游戏"},{"n":"少儿","v":"少儿"},{"n":"体育","v":"体育"},{"n":"纪实","v":"纪实"},{"n":"科教","v":"科教"},{"n":"曲艺","v":"曲艺"},{"n":"歌舞","v":"歌舞"},{"n":"财经","v":"财经"},{"n":"汽车","v":"汽车"},{"n":"播报","v":"播报"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"其它","v":"其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"n":"热血","v":"热血"},{"n":"科幻","v":"科幻"},{"n":"美少女","v":"美少女"},{"n":"魔幻","v":"魔幻"},{"n":"经典","v":"经典"},{"n":"励志","v":"励志"},{"n":"少儿","v":"少儿"},{"n":"冒险","v":"冒险"},{"n":"搞笑","v":"搞笑"},{"n":"推理","v":"推理"},{"n":"恋爱","v":"恋爱"},{"n":"治愈","v":"治愈"},{"n":"幻想","v":"幻想"},{"n":"校园","v":"校园"},{"n":"动物","v":"动物"},{"n":"机战","v":"机战"},{"n":"亲子","v":"亲子"},{"n":"儿歌","v":"儿歌"},{"n":"运动","v":"运动"},{"n":"悬疑","v":"悬疑"},{"n":"怪物","v":"怪物"},{"n":"战争","v":"战争"},{"n":"益智","v":"益智"},{"n":"青春","v":"青春"},{"n":"童话","v":"童话"},{"n":"竞技","v":"竞技"},{"n":"动作","v":"动作"},{"n":"社会","v":"社会"},{"n":"友情","v":"友情"},{"n":"真人版","v":"真人版"},{"n":"电影版","v":"电影版"},{"n":"OVA版","v":"OVA版"},{"n":"TV版","v":"TV版"},{"n":"新番动画","v":"新番动画"},{"n":"完结动画","v":"完结动画"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"更早","v":"更早"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
"124":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
},
filter_def:{
1:{cateId:'1',by:'time'},
2:{cateId:'2',by:'time'},
3:{cateId:'3',by:'time'},
4:{cateId:'4',by:'time'},
124:{cateId:'124',by:'time'}
},
cate_exclude:'福利',
searchUrl:'/index.php/ajax/suggest?mid=fypage&wd=**',
detailUrl:'/voddetail/fyid.html', //非必填,二级详情拼接链接
搜索:'json:list;name;pic;;id',
}

20
js/69美剧.js Normal file
View File

@ -0,0 +1,20 @@
muban.mxone5.二级.desc = '.video-info-items:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text';
muban.mxone5.二级.lists = '.scroll-box-y:eq(#id) a';
var rule={
title:'69美剧',
模板:'mxone5',
host:'https://www.69mj.com',
// url:'/index.php/vod/show/id/fyclass/page/fypage.html',
url:'/index.php/vod/show/id/fyclassfyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.area}}{{fl.by}}{{fl.class}}{{fl.lang}}{{fl.letter}}/page/fypage{{fl.year}}',
filter:{
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"动作","v":"/class/动作"},{"n":"爱情","v":"/class/爱情"},{"n":"惊悚","v":"/class/惊悚"},{"n":"犯罪","v":"/class/犯罪"},{"n":"冒险","v":"/class/冒险"},{"n":"科幻","v":"/class/科幻"},{"n":"悬疑","v":"/class/悬疑"},{"n":"剧情","v":"/class/剧情"},{"n":"动画","v":"/class/动画"},{"n":"武侠","v":"/class/武侠"},{"n":"战争","v":"/class/战争"},{"n":"歌舞","v":"/class/歌舞"},{"n":"奇幻","v":"/class/奇幻"},{"n":"传记","v":"/class/传记"},{"n":"警匪","v":"/class/警匪"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"伦理","v":"/class/伦理"},{"n":"灾难","v":"/class/灾难"},{"n":"西部","v":"/class/西部"},{"n":"魔幻","v":"/class/魔幻"},{"n":"枪战","v":"/class/枪战"},{"n":"恐怖","v":"/class/恐怖"},{"n":"记录","v":"/class/记录"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"美国","v":"/area/美国"},{"n":"香港","v":"/area/香港"},{"n":"韩国","v":"/area/韩国"},{"n":"英国","v":"/area/英国"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"法国","v":"/area/法国"},{"n":"意大利","v":"/area/意大利"},{"n":"德国","v":"/area/德国"},{"n":"西班牙","v":"/area/西班牙"},{"n":"泰国","v":"/area/泰国"},{"n":"其它","v":"/area/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"喜剧","v":"/class/喜剧"},{"n":"偶像","v":"/class/偶像"},{"n":"家庭","v":"/class/家庭"},{"n":"警匪","v":"/class/警匪"},{"n":"言情","v":"/class/言情"},{"n":"军事","v":"/class/军事"},{"n":"武侠","v":"/class/武侠"},{"n":"悬疑","v":"/class/悬疑"},{"n":"历史","v":"/class/历史"},{"n":"农村","v":"/class/农村"},{"n":"都市","v":"/class/都市"},{"n":"神话","v":"/class/神话"},{"n":"科幻","v":"/class/科幻"},{"n":"少儿","v":"/class/少儿"},{"n":"搞笑","v":"/class/搞笑"},{"n":"谍战","v":"/class/谍战"},{"n":"战争","v":"/class/战争"},{"n":"年代","v":"/class/年代"},{"n":"犯罪","v":"/class/犯罪"},{"n":"恐怖","v":"/class/恐怖"},{"n":"惊悚","v":"/class/惊悚"},{"n":"爱情","v":"/class/爱情"},{"n":"剧情","v":"/class/剧情"},{"n":"奇幻","v":"/class/奇幻"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"},{"n":"香港地区","v":"/area/香港地区"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"真人秀","v":"/class/真人秀"},{"n":"访谈","v":"/class/访谈"},{"n":"情感","v":"/class/情感"},{"n":"选秀","v":"/class/选秀"},{"n":"旅游","v":"/class/旅游"},{"n":"美食","v":"/class/美食"},{"n":"口秀","v":"/class/口秀"},{"n":"曲艺","v":"/class/曲艺"},{"n":"搞笑","v":"/class/搞笑"},{"n":"游戏","v":"/class/游戏"},{"n":"歌舞","v":"/class/歌舞"},{"n":"生活","v":"/class/生活"},{"n":"音乐","v":"/class/音乐"},{"n":"时尚","v":"/class/时尚"},{"n":"益智","v":"/class/益智"},{"n":"职场","v":"/class/职场"},{"n":"少儿","v":"/class/少儿"},{"n":"纪实","v":"/class/纪实"},{"n":"盛会","v":"/class/盛会"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"其它","v":"/area/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"热血","v":"/class/热血"},{"n":"科幻","v":"/class/科幻"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
},
searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
class_parse:'.nav-menu-items&&li:gt(0):lt(5);a&&Text;a&&href;.*/(\\d+).html',
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
}

30
js/69美剧[V2].js Normal file
View File

@ -0,0 +1,30 @@
var rule = {
title: '69美剧[V2]', // csp_AppYsV2
host: 'https://www.69mj.com',
homeUrl:'/xgapp.php/v2/index_video',
// url: '/xgapp.php/v2/video?tid=fyclass&class=&area=&lang=&year=&limit=20&pg=fypage',
url: '/xgapp.php/v2/video?tid=fyclassfyfilter&limit=20&pg=fypage',
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
filter: {
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"动作","v":"动作"},{"n":"爱情","v":"爱情"},{"n":"惊悚","v":"惊悚"},{"n":"犯罪","v":"犯罪"},{"n":"冒险","v":"冒险"},{"n":"科幻","v":"科幻"},{"n":"悬疑","v":"悬疑"},{"n":"剧情","v":"剧情"},{"n":"动画","v":"动画"},{"n":"武侠","v":"武侠"},{"n":"战争","v":"战争"},{"n":"歌舞","v":"歌舞"},{"n":"奇幻","v":"奇幻"},{"n":"传记","v":"传记"},{"n":"警匪","v":"警匪"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"伦理","v":"伦理"},{"n":"灾难","v":"灾难"},{"n":"西部","v":"西部"},{"n":"魔幻","v":"魔幻"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"记录","v":"记录"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"美国","v":"美国"},{"n":"香港","v":"香港"},{"n":"韩国","v":"韩国"},{"n":"英国","v":"英国"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"法国","v":"法国"},{"n":"意大利","v":"意大利"},{"n":"德国","v":"德国"},{"n":"西班牙","v":"西班牙"},{"n":"泰国","v":"泰国"},{"n":"其它","v":"其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
"2":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"},{"n":"香港地区","v":"香港地区"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
"3":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"其它","v":"其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
"4":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}]
},
detailUrl:'/xgapp.php/v2/video_detail?id=fyid',
searchUrl: '/xgapp.php/v2/search?text=**&pg=fypage',
searchable: 2,
quickSearch: 0,
filterable:1,//是否启用分类筛选,
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
timeout:5000,
class_name:'连续剧&电影&综艺&动漫', // 分类筛选 /xgapp.php/v2/nav
class_url:'2&1&3&4',
play_parse:true,
lazy:'',
limit:6,
推荐:'json:data[0].vlist;*;*;*;*',
一级:'json:data;vod_name;vod_pic;vod_remarks;vod_id',
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data.vod_info;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"].replace(/amp;/g,""),vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["code"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from=playFrom.join("$$$");let vod_play_url=playList.join("$$$");VOD["vod_play_from"]=vod_play_from;VOD["vod_play_url"]=vod_play_url}catch(e){log("获取二级详情页发生错误:"+e.message)}',
搜索:'*',
}

27
js/74听书.js Normal file
View File

@ -0,0 +1,27 @@
var rule = {
title: '74听书',
host: 'https://www.ting74.com',
// homeUrl:'/sort/xuanhuan.html',
url:'/sort/fyclass/fypage.html',
searchUrl: '/search.html#searchtype=novelname&searchword=**&page=fypage;post',
searchable: 0,
quickSearch: 0,
filterable:0,
headers:{'User-Agent':'PC_UA'},
timeout:5000,//网站的全局请求超时,默认是3000毫秒
class_parse: '.nav-ol&&li:gt(0):lt(8);a&&Text;a&&href;/(\\w+).html',
play_parse:true,
// lazy:"js:var url=jsp.pdfh(request(input),'iframe&&src');var purl=request('http://www.ting74.com'+url).match(/mp3:'(.*?)'/)[1];input={jx:0,url:purl,parse:0}",
limit:6,
推荐:'#myTab_Content0&&.tab-li;.tab-book-title&&Text;*;.tab-book-author&&Text;*',
一级:'.list-works&&li;.list-book-dt&&a&&Text;.lazy&&data-original;.book-author--aria:eq(2)&&Text;a&&href',
二级:{
"title":".book-cover&&alt;.book-info&&dd--span:eq(1)&&Text",
"img":".book-cover&&src",
"desc":".book-info&&dd:eq(4)&&Text;;;.book-info&&dd:eq(3)&&Text;.book-info&&dd:eq(2)&&Text",
"content":".book-des&&Text",
"tabs":".playlist-top&&h2",
"lists":"#playlist:eq(#id)&&li"
},
搜索:'*',
}

22
js/7喜影院.js Normal file

File diff suppressed because one or more lines are too long

30
js/88看球.js Normal file
View File

@ -0,0 +1,30 @@
var rule = {
title:'88看球',
// host:'http://www.88kanqiu.cc',
host:'http://www.88kanqiu.live',
url:'/match/fyclass/live',
searchUrl:'',
searchable:0,
quickSearch:0,
class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live',
headers:{
'User-Agent':'PC_UA'
},
timeout:5000,
play_parse:true,
lazy:'',
limit:6,
double:false,
推荐:'*',
一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href',
二级:{
"title":".game-info-container&&Text;.customer-navbar-nav li&&Text",
"img":"img&&src",
"desc":";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text",
"content":"div.game-time&&Text",
"tabs":"js:TABS=['88看球']",
// "lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+play_url+it.url});LISTS.push(d)});"
"lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+it.url});LISTS.push(d)});"
},
搜索:'',
}

Some files were not shown because too many files have changed in this diff Show More