code:
This directory contains files relevant to the patch development.

Relevant game changes:

1.0.1
	(accidental) 10 day "no-service" period

1.1.0
	"sc stop" & "sc delete" are no longer run on login

1.2.0
	xLua: Introduction of the sb_* check

1.3.0
	xLua: lparser.c is no longer included
	UserAssembly: Modified login function
	UnityPlayer: Random crash on certain systems (patched)

1.3.2
	UnityPlayer: Random crash fixed

1.4.0
	(no relevant changes)

1.5.0
	Patch: Removal of old/unnecessary patches. (checkout c50c174)
	UnityPlayer: "10 second" delayed crash no longer happens
	UnityPlayer: Various runtime and startup crashes

1.5.1
	UnityPlayer: Crashes fixed

1.6.0
	New library: HDiffPatch
	Launcher: Obfuscated web request params
	Removed crash logging of non-crashy events (startup)

1.6.1
	(no relevant changes)

2.0.0
	Crash report directory format changed from "crash_*" to "mihoyocrash_*"

2.1.0
2.2.0
	(no relevant changes)

2.3.0
	Patch: Removal of old/unnecessary patches. (checkout 32d6ee4)
	xLua: sb_* check is not called any more

2.4.0
	New library: mhypbase.dll (more anti-debugger code)
	UnityPlayer: "10 second" delayed crash occurs again, but on startup

2.5.0
	Moved library: mhypbase.dll (exists temporarily only)
	New binaries: mhyprot3.Sys (+ garbage), Plugins/crashreport.exe, Plugins/metakeeper.dll
	UnityPlayer: delayed crash is gone again
	Partial use of HDiffPatch for game updates

2.6.0
	(no relevant changes)

2.7.0
	Moved library: mhypbase.dll (exists again permanently)
	Removed libraries: InControlNative.dll, XInputInterface64.dll
	New binary: blueReporter.exe (BSoD reporter)

2.8.0
	Removed libraries: d3dcompiler_43.dll, sqlite3.dll, widevinecdmadapter.dll
	New libraries: MiHoYoMTRSDK.dll, vk_swiftshader.dll, vulkan-1.dll
		-> Vulkan child window rendering breaks certain Wine versions
	Patch: Correction of the computer system information.

3.0.0
	Removed library: metakeeper.dll
	New libraries: kcp.dll
		Astrolabe.dll: telemetry and game logging (unused?, JSON HTTP POST)
		Telemetry.dll: (almost the same library again)

3.1.0
	Removed library: mhyprot2.sys
	Unknown starting time of mhyprot3 -> add to registry regardless
	Patch: Optional analytics server blocking. Removal of unused Unity3D block lists.
	Patch: Secondary patch to reduce CPU usage on kernels with tick rates < 1 kHz

3.2.0
	Patch: Removal of patches 2.1.0 - 3.0.0. (checkout dbfe761)
	(no relevant changes)

3.3.0
	New libraries: mailbox.dll, HoYoKProtect.sys
	Patch process: CE approach broken

3.4.0
	(no relevant changes)

3.5.0
	Kernel driver is optional, no 31-4203

3.6.0
	TODO


code:
# Tools

This file lists useful applications to debug and modify the game code.

Helpful articles:

 * https://www.apriorit.com/dev-blog/367-anti-reverse-engineering-protection-techniques-to-use-before-releasing-software
 * https://blog.usejournal.com/reverse-engineering-of-a-mobile-game-part-2-they-updated-we-dumped-memory-27046efdfb85

## General tips before starting

1. Rename or replace "upload_crash.exe", just to make sure
2. Add the logging servers to your /etc/hosts file (see network.md)

## Misc

Small tools that might come handy.

 * vbindiff - Binary difference viewer
 * xdelta3 - Binary patch generator (cross-platform)
    * Make patch: `-e -s ORIG MOD PATCH.vcdiff`
    * Apply patch: `-d -s BAK PATCH.vcdiff MOD`
 * [PE Tools](https://github.com/petoolse/petools/) - File header editor
    * Change and enlarge executable code sections
    * Alternative: Ghidra's "Memory Map" dialogue

## Ghidra

Use: Decompile and patch UnityPlayer.dll, C code preview

Link: https://ghidra-sre.org/

**Hints:**

 * Hotkey "G": Jump to address
 * Hotkey "Ctrl+Shift+G": Patch instruction
     * Add labels to addresses for JMP/LEA autocompletion
 * Export modified dll as PE/Win32
 * Script "EditBytesScript.java": Edit bytes directly, assign a shortcut
 * "Memory Map": Edit PE headers to append code to free spots in/after the file

## Il2CppInspector

Use: decrypted `global-metadata.dat` + `UserAssembly.dll` => debug information

Link: https://github.com/djkaty/Il2CppInspector

**Hints**:

 * GUI does currently not work in Wine
 * `WINEDEBUG=-all wine Il2CppInspector-cli.exe -m global-metadata.dat -i UserAssembly.dll -t Ghidra --unity-version 2017.4.30f1`
 * Requires at least 2.5 GiB free RAM
 * Takes a LOOOONG TIME to execute
    * `Generate C# code: 2'296.42 sec`
 * May be used to import into Ghidra or IDA Pro

### Il2CppDumper (fork)

A fork of the Il2CppInspector subcomponent.

Link: https://github.com/kagurazakasanae/Il2CppDumper-YuanShen

**Hints:**

 * Creates `dump.cs` for manual lookup
    * `VA: 0x18xxxxxxx` is the virtual memory address
 * Fails to generate data for direct Ghidra import

## Cheat Engine (CE)

Use: Set breakpoints, rudimentary backtraces

Link: https://www.cheatengine.org/downloads.php

*Only works partially on Linux!*

*Partially broken as of v3.3.0*

**Required settings:**

  * Edit -> Settings -> Debugger Options
     * Use "VEH Debugger"
     * Use "Page exceptions" (optional, only specifies the defaults)

Optional: copy & paste the x86_64 binary and rename it. That *might* avoid detection.

**"Debug" instructions:**

1. Run GI in suspend mode -> [PowerShell script](https://www.unknowncheats.me/forum/other-mmorpg-and-strategy/418492-genshin-impact-64.html)
    * Linux: use [suspend_start utility exe](suspend_start/)
2. CE: Open process GenshinImpact using "Attach to process"
3. "Memory View"
4. Go to address. (Ctrl+G) -> "UnityPlayer.dll+(7 hex chars ¹)"
5. Set Exception breakpoint
6. When `mhyprot2` is running, suspend_start cannot stop the application any more.
    *  Try [Process Hacker](https://processhacker.sourceforge.io/downloads.php) (as admin) -> "Resume"
7. Hope that the breakpoint works and check the backtrace

¹) The 7 digits correspond to the virtual memory offset, but with the first byte removed. 0x181234567 becomes 0x1234567

## x64dbg

Use: Debug processes, disassebling and memory modifications

Link: https://x64dbg.com/

*Currently does not work in Wine*

**Anti-anti-debug:** (thanks to 0x90, POL thread)

 * Standard PEB check (IsDebuggerPresent() etc)
    * `gs:[60]+2 = 0` (x64 `BeingDebugged` flag)
    * `gs:[60]+bc = 0` (x64 mask `0x70` indicates debugging)
 * CheckRemoteDebuggerPresent
    * `RDX = 0`
    * `RCX = 0`
 * NtQueryInformationProcess -> `RDX = 0x7 // RDX = 0x1e`
 * NtClose -> `RCX = 0xDEADCODE`
 * NtSetInformationThread -> `RDX = 0x11`

Alternatively: [ScyllaHide plugin](https://github.com/x64dbg/ScyllaHide)

 * Even when attaching to a process using the plugin, it is still detected as a debugger. Solutions?

Alternatively: TitanHide (see Issue#7 for binaries)

 * I cannot get this to run. Maybe you can get better results.

## mitmproxy

Use: Capture all TCP/TLS data

Link: https://mitmproxy.org/

**Hints:**

1. Run `mitmdump -w output_file.mitm` (regular user is okay)
2. `export {http,https,ftp}_proxy="http://127.0.0.1:8080"`
    * Windows: Change the network adaptor settings to use your IP as proxy
3. Run Genshin Impact
4. Replay logs: `mitmproxy -nr output_file.mitm`

## Other attempts

#### Linux CLI

`WINEDEBUG=+relay`

Wine 5.19, UnityPlayer 1.0.1:

	Backtrace:
	=>0 0x000000007b638000 EntryPoint+0x3a0() in kernel32 (0x00000000050cfe58)
	  1 0x00000001808637b8 EntryPoint+0xfeae9208() in unityplayer (0x00000000050cfe58)
	  2 0x000000007b631e09 EntryPoint+0xffffffffffffffff() in kernel32 (0x00000000050cfe58)
	  3 0x000000007bc4b5cf EntryPoint+0xffffffffffffffff() in ntdll (0x00000000050cfe58)
	  4 0x000000007b601b66 EntryPoint+0xffffffffffffffff() in kernel32 (0x0000000000000000)
	  5 0x000000007bc5e9b3 EntryPoint+0xffffffffffffffff() in ntdll (0x0000000000000000)
	0x000000007b638000 EntryPoint+0x3a0 in kernel32: addb	(%rax),%al

`winedbg`

Detected as debugger

`gdb --args wine ...`

Cannot debug due to SIGTRAP being spammed on purpose.

Process stalls when SIGTRAP is ignored:

	handle SIGTRAP nostop
	handle SIGTRAP noprint

license: mit


code:
# mhyprot2 1.0.1 + 1.1.0

## Meta

| Type              | Value                            |
|-------------------|----------------------------------|
| Size              | 1362048 bytes (+92168 to 1.0.0)  |
| Modification date | 2020-10-14                       |
| md5sum            | 6b2df08bacf640cc2ac6f20c76af07ee |

## Addresses

Warning: Address is not the same as the byte offset in the binary.

| # | Type     | Address | Description                     |
|---|----------|---------|---------------------------------|
| 1 |          | 0       | Unknown                         |

The mid 95% portion of the file is entirely program code.

## Behaviour

See also: https://github.com/leeza007/evil-mhyprot-cli

What "mhyprot2" registers:

1. PsSetCreateProcessNotifyRoutineEx
2. PsSetLoadImageNotifyRoutine
3. PsSetCreateThreadNotifyRoutine

What "mhyprot2" does:

1. Hides its process handle by ObRegisterCallbacks
2. Observing for csrss.exe injection.
3. Remove the process/thread object from all handle tables.
4. Write logs into `c:\windows\kmlog.log`
    * Example when GI crashes after the warning screen: https://pastebin.com/raw/XQkkZcJE

This service **was** disabled and removed by xLua before showing the login screen.

It no longer appears in 1.1.0 logs, hence the service continues to run after login (proof needed).

	> CALL sb_1184180413 = {
		[1] = {address to CreateProcessA()}
		[2] = 0
		[3] = "sc stop mhyprot2"
		{...}
	}
	< OUT  sb_1184180413 = {
		[1] = 1.0
	}
	> CALL sb_1184180413 = {
		[1] = {address to CreateProcessA()}
		[2] = 0
		[3] = "sc delete mhyprot2"
		{...}
	}
	< OUT  sb_1184180413 = {
		[1] = 1.0
	}


code:
# Network 1.1.0 Analysis

Headings are ordered by stage of the game.

Non-relevant addresses are censored after the second full stop (ex. `static.google.*` (just in case).

Sources:

 * mitmproxy: [1.0.1 Linux vs Windows](https://drive.google.com/file/d/1NRxE6aLqpsRAMOfMbDAgU8KkRzFpgHIR/view?usp=sharing)

### Hosts to block

See `patch.sh` of the current version.

### 1 Launcher

Connection type: entirely TCP / TLSv1.2

DNS requests:

 * `sdk-os-static.mihoyo.*`
 * `log-upload-os.mihoyo.*`
 * `api-static.mihoyo.*` Game update information (trigger by launcher button)
 * `webstatic.mihoyo.*`
 * `genshin.mihoyo.*`

### 2 Startup & login

Connection type: TCP/TLSv1.2 and TCP/HTTP

DNS requests, sorted by appearance:

 * `dispatchosglobal.*` Server listing (required, error 4201)
 * `osasiadispatch.*` Asia server
 * `oseurodispatch.*` Europa server
 * `osusadispatch.*` USA server
 * `webstatic-sea.mihoyo.*` In-game news (optional)
 * `log-upload(-os).*` Log server (optional)
 * `hk4e-sdk-os.mihoyo.*` Central login and sales server (required)
 * `hk4e-api-os.mihoyo.*` Announcements, alerts (optional)
 * `sdk-os-static.mihoyo.*` Accessed at late game / exit
 * `(sg-)public-data-api.*` General system information logging

In addition to a few unity3d hosts which have no effect when blacklisted in `/etc/hosts`.

### 3 Game data loader

Connection type: UDP

Untouched section until it becomes necessary.

* `autopatchhk.yuanshen.*` "Persistent" data updates

### 4 Gameplay

* `autopatchhk.yuanshen.*` Presumably xLua/HotFix patch server
* `minor-api.m*` / `minor-api-os.h*` "apm" reporting (`Telemetry.dll`)
    * Yet unused. Unknown trigger.

### 5 Crash reporter

Connection type: TCP/HTTP

POST request to `/log`:

 * Host: `overseauspider.yuanshen.*` or `uspider.yuanshen.*`
 * Data:

______
	{
	  "userName": "Test",    /* Constant */
	  "time": "YYYY-MM-DD hh:mm:ss.0000",
	  "frame": "",           /* Unclear, perhaps game frame count */
	  "stackTrace": "Log::Logger() ....", /* Partially readable backtrace */
	  "logStr": "[Login] OnPlayerLoginRsp: 31", /* Error 31-4302 or .. */
	  "logStr": "[Login] OnGetPlayerTokenRsp: 21", /* Error 21-4301 aka BANNED */
	  "logType": "Error",
	  "deviceName": "NX",    /* Unclear */
	  "deviceModel": "Wine (The Wine Project)",
	  "operatingSystem": "Windows 10  (10.0...",
	   /* ^ Data from HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion  */
	  "version": "1.0_rel OSRELWin1.0.1_...", /* Game version (bottom left) */
	  "exceptionSerialNum": "0",
	  "pos": "",             /* Unclear, perhaps position on the map */
	  "guid": "sha256 hash",
	  /* ^ Data from HKEY_CURRENT_USER\Software\miHoYoSDK\ MIHOYOSDK_DEVICE_ID */
	  "errorCode": "Default",
	  "errorCodeToPlatform": 4302, /* Error 31-4302 or .. */
	  "errorCodeToPlatform": 4301, /* Error 21-4301 aka BANNED */
	  "serverName": "os_euro"  /* European server */
	}
______

Answer, status 200 OK:

	{
	  "code": 0
	}


code:
### Suspend Start

This application runs an application in suspended mode and allows resuming/suspending afterwards.

Compilers for Linux:

  * Tiny C compiler: https://bellard.org/tcc/
  * winegcc (requires "wine-*-dev" package)

Compiling:

    wine tcc -Wall suspend_start.c

Running:

    wine suspend_start.exe "C:/path/to/GenshinImpact.exe"


code:
#include <stdio.h>
#include <windows.h>

// SuspendThread or ResumeThread
typedef DWORD threadfunc_t(HANDLE);

#if 1 // TinyCC compatibility
	#define TH32CS_SNAPTHREAD 0x00000004

	typedef struct {
		DWORD dwSize;
		DWORD cntUsage;
		DWORD th32ThreadID;
		DWORD th32OwnerProcessID;
		LONG  tpBasePri;
		LONG  tpDeltaPri;
		DWORD dwFlags;
	} THREADENTRY32;
	typedef THREADENTRY32 *LPTHREADENTRY32;

	HANDLE CreateToolhelp32Snapshot(DWORD, DWORD);
	BOOL Thread32First(HANDLE, LPTHREADENTRY32);
	BOOL Thread32Next(HANDLE, LPTHREADENTRY32);
#endif

// https://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows
BOOL ThreadAction(DWORD pid, threadfunc_t action)
{
	BOOL found = FALSE;
	// Ignore Wine warnings
	HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);

	THREADENTRY32 entry;
	entry.dwSize = sizeof(THREADENTRY32);

	Thread32First(snapshot, &entry);
	do {
		if (entry.th32OwnerProcessID != pid)
		continue;

		found = TRUE;
		HANDLE thread = OpenThread(THREAD_ALL_ACCESS, FALSE,
			entry.th32ThreadID);

		if (action(thread) == -1)
			printf("Action failed. TID=%d, Error=%d\n", thread, GetLastError());

		CloseHandle(thread);
	} while (Thread32Next(snapshot, &entry));

	CloseHandle(snapshot);
	return found; // As long the thread lives
}

int main(int argc, char *argv[])
{
	if (argc < 2) {
		puts("Usage: suspend_start.exe \"C:/path/to/app.exe\" [\"args ...\"]");
		return 1;
	}

	// https://docs.microsoft.com/en-us/windows/win32/procthread/creating-processes
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	memset(&si, 0, sizeof(si));
	memset(&pi, 0, sizeof(pi));

	BOOL success = CreateProcessA(
		argv[1], // Application name
		argc >= 3 ? argv[2] : NULL,
		NULL, NULL, // Security
		FALSE,
		CREATE_SUSPENDED,
		NULL,
		NULL, // Current directory. Is it needed?
		&si, &pi
	);

	if (!success) {
		puts("Failed to start app. Path not found?");
		return 1;
	}

	printf("Success! Handle=%p, PID=%d, TID=%d\n", pi.hProcess, pi.dwProcessId, pi.dwThreadId);
	for (int i = 0; TRUE; ++i) {
		printf("% 4d | Proc suspended. ENTER to resume\n", i);
		getchar();
		if (!ThreadAction(pi.dwProcessId, ResumeThread))
			break;

		printf("% 4d | Proc resumed. ENTER to suspend\n", i);
		getchar();
		if (!ThreadAction(pi.dwProcessId, SuspendThread))
			break;
	}
	puts("END. Lost process.");
	return 0;
}


code:
Overview of analytics data sent to the known logging servers:

Unique identifiers
	MAC address (first Ethernet adapter)
	Game-specific system hash ("Open ID")

CPU
	Core count
	Frequency
	Name

GPU
	Model ID and name
	Vendor ID and name
	API version (e.g. "Direct3D 11.0 (level ??.?)")
	Total VRAM size

Mainboard
	Model name
	Vendor name
	Total RAM size

Other
	OS version (e.g. "Windows 10 (10.0.????) 64bit") (depends on winecfg)
	System hostname
	Screen dimensions


code:
# Basic sharpening preset by yagocl
# Hotkey: Insert

# Note: smaa will make in-game text blurry.  If you don't mind losing some crispness
# from the image, remove smaa from here and use the in-game antialiasing.
# In-game SMAA and TAA are really blurry, so make sure to turn up casSharpness to
# something like 0.7
effects = cas:smaa

reshadeTexturePath = "/usr/share/reshade/textures"
reshadeIncludePath = "/usr/share/reshade/shaders"
depthCapture = off

#toggleKey toggles the effects on/off
toggleKey = Home

casSharpness = 0.3
dlsSharpness = 0.2
dlsDenoise = 0.2
smaaThreshold = 0.2
smaaMaxSearchSteps = 8
smaaMaxSearchStepsDiag = 6
smaaCornerRounding = 80


code:
HDiffPatch copy
---------------

Build:    linux64
Version:  4.1.2, commit e9390b7
Checksum: 2f0885c3c0044ed0d860521a60c2a270

Source code: https://github.com/sisong/HDiffPatch/

path: updater/HDiffPatch/README


code:
## Game update script

This documents the script `update_gi.sh`.
The other scripts have a short explanation in their file content.

### Description

This script automates following steps:

1. Check for game updates
2. Download the game files
3. Revert any previously applied patches
4. Install or update the game files
5. Apply the newest patch

If you prefer a graphical updater, check out:

 * The official launcher
     * Note: Potential memory issue during downloads
 * [Paimon Launcher](https://notabug.org/loentar/paimon-launcher)
 * [An Anime Game Launcher](https://github.com/an-anime-team/an-anime-game-launcher)
 * [Yet another anime game launcher](https://github.com/3Shain/yet-another-anime-game-launcher) (macOS)

### Requirements

This script requires following applications:

 * `bash` (update and patch script)
 * `jq` (JSON parsing)
 * Either `aria2c`, `wget`, `curl` or `axel` (file download)
 * `xdelta3` (patch script)

### Usage instructions

The current working directory (`pwd`) specifies the update or installation path.

Example + syntax:

	cd "/path/to/game/directory/"
	bash "/path/to/dawn/updater/update_gi.sh" [OPTIONS ...]

List of OPTIONS:

 * `--help`: Shows a short help text
 * `install`: Switches from the "update" to "installation" mode
     * By default, an update will be performed in the current directory
 * `nodelete`: Keeps the downloaded archives after the installation or update.
 * `predownload`: Checks and downloads pre-download-game archives
     * To perform the update afterwards, re-run the update script without the `predownload` option.

If errors occur after updating the game files, [re-run the patch scripts manually](../#applying-the-workaround).

#### New installation

Use the `install` command line option to install the newest game version to
an **empty** directory.

Example:

	# Create a new directory in HOME (~) for the installation
	mkdir -p "$HOME/Genshin Impact Game"
	cd "$HOME/Genshin Impact Game/"

	bash "/path/to/dawn/updater/update_gi.sh" install

#### Game update

Updates the game in the working directory to the newest version.

**Important:** If the official launcher was used for the installation, ensure that the
current working directory (`pwd`) contains `GenshinImpact.exe` but not `launcher.exe`.

Example:

	# Update game located in HOME
	cd "$HOME/Genshin Impact Game/"
	bash "/path/to/dawn/updater/update_gi.sh"

For advanced users: `perform_update.sh` can be used to manually apply downloaded archives


code:
#!/usr/bin/env bash

# Utility script to check the game sanity
# As of now, this script does not repair files.
#
# Usage: ./check_integrity.sh FILENAME quick
#    FILENAME : Checksum file e.g. "pkg_version" of the game or voiceover pack
#    "quick"  : Skips md5 checks for more speed but is less reliable

set -e

# ======== Functions

fatal() {
	echo
	for arg in "$@"; do
		echo "  *  $arg" >&2
	done
	echo

	exit 1
}

on_file_mismatch() {
	# 1 = Error Msg, 2 = Filepath
	>&2 echo "$2"
	>&2 echo "    * $1"
}

if [[ $(uname) == "Darwin" || $(uname) == *"BSD" ]]; then
	STATFLAGS="-f %z"
	md5sum() {
		md5 -q $@
	}
else
	STATFLAGS="-c %s"
fi

check_single() {
	# 1 = filepath
	filepath="$1"
	checksum="$2"
	filesize="$3"
	#echo "Testing: $filepath $checksum $filesize"
	if [ ! -e "$filepath" ]; then
		on_file_mismatch "Missing" "$filepath"
		return
	fi

	local size=$(stat $STATFLAGS "$filepath")
	if [ "$size" -ne "$filesize" ]; then
		on_file_mismatch "Size mismatch: $size != $filesize" "$filepath"
		return
	fi

	if [ "$CHECK_MD5" -eq 1 ]; then
		sum=($(md5sum "$filepath"))
		if [ "$sum" != "$checksum" ]; then
			on_file_mismatch "Checksum error: $sum != $checksum" "$filepath"
			return
		fi
	fi
}

# ======== Evaluated variables

MASTER_FILE="$1"
CHECK_MD5=1
JOBS=4

[ ! -e "$MASTER_FILE" ] && fatal \
	"Checksum file $MASTER_FILE not found."

if [ "$2" == "quick" ]; then
	CHECK_MD5=0
	echo "--- Mode: Quick file size checking (fast, less reliable)"
else
	echo "--- Mode: Detailed md5 checking (slow, most reliable)"
fi

echo ""

# This is faster than running "jq" on each line
# outputs a string in form of "Direcotry/File.ext|abc123|10001"
per_line_data=$(jq -r "[.remoteName, .md5, .fileSize] | join(\"|\")" "$MASTER_FILE")

i=0
total=$(echo "$per_line_data" | wc -l)

while IFS='|' read -r filepath checksum filesize; do
	i=$((i + 1))

	while [ $(jobs | wc -l) -gt $JOBS ]; do
		sleep 0.1
	done

	check_single "$filepath" "$checksum" "$filesize" &

	# Log file names every now and then
	if [ $((i % 500)) == 0 ]; then
		percent=$((i * 100 / total))
		echo "--- Progress: ${percent}% (${i} / ${total})"
	fi
done <<< "$per_line_data"

while [ $(jobs | wc -l) -gt 1 ]; do
	sleep 0.1
done

echo ""
echo "==> DONE"

exit 0


code:
#!/usr/bin/env bash

# Utility script to unzip an archive to $PWD and process HDiffPatch updates
# md5 archive sanity checks must be done by the caller function/application
#
# Usage: ./perform_update.sh "/path/to/archive.zip"

# Exit on error.
set -e

fatal() {
	echo
	for arg in "$@"; do
		echo "  *  $arg" >&2
	done
	echo

	exit 1
}

do_cleanup() {
	# Old patch files
	find -type f -name "*.hdiff" | while read filename; do
		rm "$filename"
	done

	# Prevent deleting of the possibly necessary files in case of full update.
	rm -f "deletefiles.txt"
	rm -f "hdifffiles.txt"
}

# ======== Evaluated variables
THIS_FILE=$(basename "$0")
THIS_PATH=$(realpath "$(dirname "$0")")
HDIFF_APP="${THIS_PATH}/HDiffPatch/hpatchz"
ZIP_FILE="$1"

# ======== Sanity checks
[ ! -e "config.ini" ] && fatal \
	"Game information file not found."
[ ! -e "$ZIP_FILE" ] && fatal \
	"Archive '${ZIP_FILE}' not found."
chmod +x "$HDIFF_APP"

# ======== Preparation
do_cleanup

# ======== Unzipping
short_name=$(basename "${ZIP_FILE}")
echo "--- Installing ${short_name} ... "
unzip -o "${ZIP_FILE}"
echo ""

# ======== *.hdiff files
set +e # to capture "$?"
find -type f -name "*.hdiff" | while read diffname; do
	realname="${diffname::-6}" # trim ".hdiff"
	if [ -e "$realname" ]; then
		echo "--- Patching file ${realname}"
		output=$("$HDIFF_APP" -f "$realname" "$diffname" "${realname}.tmp_hdiff")
		if [ $? -eq 0 ]; then
			mv -f "${realname}.tmp_hdiff" "$realname"
		else
			echo "$output"
			rm -f "${realname}.tmp_hdiff" # just in case
		fi
	else
		# let the game re-download
		echo "--- [WARNING] HDiff source not found: ${realname}"
	fi
	rm "$diffname"
done
set -e

# ======== deletefiles.txt
if [ -f "deletefiles.txt" ]; then
	while read -r filename; do
		filename=$(echo "${filename}" | tr -d '\r\n')
		# Safety check. File must be within the game directory.
		[ ! -f "${filename}" ] && continue;

		filepath_abs=$(readlink -nf "${PWD}/${filename}")
		case "$filepath_abs" in
			("$PWD"/*)
				echo "--- Removing old file: ${filename}"
				rm -f "$filepath_abs"
				continue
				;;
		esac
		echo "--- [WARNING] Attempt to remove: ${filename}"
	done < "deletefiles.txt"
fi

# ======== Final cleanup
do_cleanup

exit 0


code:
#!/usr/bin/env bash

# Checker: shellcheck --shell=sh --exclude=SC2006,SC3043 update_gi.sh | less

# Exit on error.
set -e

fatal() {
	echo
	for arg in "$@"; do
		echo "  *  $arg" >&2
	done
	echo

	exit 1
}

# ======== Global constants
UPDATE_URL_OS='https://sdk-os-static.mihoyo.com/hk4e_global/mdk/launcher/api/resource?channel_id=1&key=gcStgarh&launcher_id=10'
UPDATE_URL_CN='https://sdk-static.mihoyo.com/hk4e_cn/mdk/launcher/api/resource?channel_id=1&key=eYd89JmJ&launcher_id=18'
UPDATE_URL_BB='https://sdk-static.mihoyo.com/hk4e_cn/mdk/launcher/api/resource?channel_id=14&key=KAtdSsoQ&launcher_id=17'
#UPDATE_URL_OS='http://127.0.0.1:8000/dummy/resource.json?arg1=foo&arg2=bar'
CONFIG_FILE='config.ini'
ANCHOR_FILE='UnityPlayer.dll'

# ======== Voice pack constants
LANG_PACKS_PATH_OS='GenshinImpact_Data/StreamingAssets/Audio/GeneratedSoundBanks/Windows'
LANG_PACKS_PATH_CN='YuanShen_Data/StreamingAssets/Audio/GeneratedSoundBanks/Windows'
LANG_PACKS_PATH_BB=$LANG_PACKS_PATH_CN
LANG_MAP_ENGLISHUS='en-us'
LANG_MAP_JAPANESE='ja-jp'
LANG_MAP_KOREAN='ko-kr'
LANG_MAP_CHINESE='zh-cn'

# ======== Evaluated variables
THIS_FILE=`basename "$0"`
THIS_PATH=`realpath "$(dirname "$0")"`
REPO_PATH=`dirname "$THIS_PATH"` # parent
reltype=""        # OS, CN or BB. filled later.
remove_archives=1 # 0 or 1. filled later.

# ======== Dependency checks
# Check is all required tools installed.
for appname in jq bash unzip xdelta3; do
	exepath=`command -v "$appname" | tee`
	[ ! -e "$exepath" ] && fatal \
		"Required tool not found!" \
		"Please install: ${appname}."
done

# ======== Download tool setup
DOWNLOAD_PATH="../_update_gi_download"
#DOWNLOAD_PATH="../download with   spaces"
DL_APP_ARGS_axel='-n 15'
DL_APP_ARGS_aria2c='--no-conf -c'
DL_APP_ARGS_fetch='--force-restart --no-mtime --retry --keep-output --restart'
DL_APP_ARGS_wget='-c'
DL_APP_ARGS_curl='--disable -O -C -'

# Find first available download tool.
for appname in axel aria2c fetch wget curl; do
	# Pipe to "tee" overwrites the exit status
	exepath=`command -v "$appname" | tee`
	if [ -e "$exepath" ]; then
		DL_APP_BIN="$exepath"
		eval DL_APP_ARGS="\$DL_APP_ARGS_${appname}"
		break
	fi
done
[ ! -e "$DL_APP_BIN" ] && fatal \
	"No downloader application found." \
	"Please install one of: ${DL_APPS_LIST}."
echo "--- Using download application: ${DL_APP_BIN} ${DL_APP_ARGS}"

# ======== Functions

# MacOS and *BSD do not have md5sum: use md5 instead
exepath=$(command -v md5 | tee)
if [ -e "$exepath" ]; then
	md5check() {
		# 1 = Checksum, 2 = File
		md5 -q -c "$1" "$2" >/dev/null 2>&1
	}
else
	md5check() {
		# 1 = Checksum, 2 = File
		local input=`echo "$1" | tr 'A-Z' 'a-z'`
		local filesum=`md5sum "$2" | cut -d ' ' -f1`
		if [ "$input" != "$filesum" ]; then
			echo "Mismatch!"
			exit 1
		fi
	}
fi

download_file() {
	local url="$1"
	local dst_path="$2"
	local md5="$3"
	local filename_args="${dst_path}/${url##*/}"
	local filename="${filename_args%%\?*}"
	local filename_completed="${filename}.completed"

	mkdir -p "$dst_path"
	if [ -f "$filename_completed" ]; then
		echo "    -> Skipping: Already downloaded."
	else
		echo
		(cd "$dst_path" && "$DL_APP_BIN" $DL_APP_ARGS "$url")
		if [ -n "$md5" ]; then
			echo -n "    -> Verifying MD5 checksum ... "
			md5check "$md5" "$filename"
			echo 'OK'
			touch "$filename_completed"
		fi
	fi
}

# Approximate size of the installed archive
download_json_size() {
	local size=`echo "$1" | jq -r -M ".size"`

	size="$((($size + 1048576) / 1024 / 1024 / 2))"
	echo "~${size} MiB"
}

download_json_section() {
	local json_text="$1"
	local url=`echo "$json_text" | jq -r -M ".path"`
	local md5=`echo "$json_text" | jq -r -M ".md5"`

	download_file "$url" "$DOWNLOAD_PATH" "$md5"
}

get_ini_value() {
	local filename="${1}"
	local variable="${2}"
	grep "${variable}=" "${filename}" | tr -d '\r\n' | sed -e 's|.*=||g'
}

# ======== Path sanity checks
# There is a good reason for this check. Do not pollute the game directory.
[ -e "${THIS_PATH}/${ANCHOR_FILE}" ] && fatal \
	"Please move this script outside the game directory prior executing." \
	" -> See README.md for proper installation instructions"
# In case people accidentally want to install the game into the launcher directory.
[ `find ./*.dll 2>/dev/null | wc -l` -gt 2 ] && fatal \
	"This script is likely run in the wrong directory." \
	"Found more than two DLL files. (expected: 0...2)" \
	"Please run this script in a proper/clean game directory."

# ======== Command line processing

cli_help=0
cli_install=0
cli_predownload=0
json_path=".game"

for arg in "$@"; do
case "$arg" in
	-h|--help|help)
		cli_help=1
		;;
	install)
		cli_install=1
		;;
	nodelete)
		remove_archives=0
		echo "--- Archives will not be deleted after download"
		;;
	predownload)
		cli_predownload=1
		json_path=".pre_download_game"
		echo "--- Checking for predownload versions"
		;;
	*)
		fatal "Unknown option: ${arg}"
esac
done

if [ "$cli_help" -eq 1 ]; then
	cat << HELP
	${THIS_FILE} [-h|help] [install] [nodelete]

	This script will modify the current working directory.
	See README.md for details and examples.

	"install"     : new game installation from scratch
	"nodelete"    : whether to keep the downloaded archives
	"predownload" : Checks and downloads pre-download-game archives

HELP

	exit 0
fi

# New game installation option
if [ "$cli_install" -eq 1 ]; then
	if [ `find ./* 2>/dev/null | wc -l` -gt 0 ]; then
		fatal "'${PWD}' contains files and/or subdirectories." \
			"Please use an empty directory for a new installation." \
			"To update or resume an installation, rerun this script without the 'install' argument."
	fi

	echo ""
	echo "    0 -> Genshin Impact [America/Europe/Asia/TW,HK,MO]"
	echo "    1 -> YuanShen       [Mainland China]"
	echo "    2 -> BiliBili       [Mainland China]"
	read -p "Which version shall be installed? [0]/1/2: " choice

	if [[ -z "$choice" || "$choice" == "0" ]]; then
		reltype="OS"
		echo -ne '[General]\r\nchannel=1\r\ncps=mihoyo\r\ngame_version=0.0.0\r\nsdk_version=\r\nsub_channel=0\r\n' >"$CONFIG_FILE"
	elif [ "$choice" = "1" ]; then
		reltype="CN"
		echo -ne '[General]\r\nchannel=1\r\ncps=mihoyo\r\ngame_version=0.0.0\r\nsdk_version=\r\nsub_channel=1\r\n' >"$CONFIG_FILE"
	elif [ "$choice" = "2" ]; then
		reltype="BB"
		echo -ne '[General]\r\nchannel=14\r\ncps=bilibili\r\ngame_version=0.0.0\r\nsdk_version=\r\nsub_channel=0\r\n' >"$CONFIG_FILE"
	else
		fatal "Invalid selection"
	fi
else
	# Check for existing installation
	if [ -e "GenshinImpact.exe" ]; then
		reltype="OS"
	elif [ -e "YuanShen.exe" ]; then
		if [ -e "$DATADIR/Plugins/PCGameSDK.dll" ]; then
			reltype="BB"
		else
			reltype="CN"
		fi
	fi
fi

# ======== Configuration file parsing
game_not_found_message=(
	"Make sure 'Genshin Impact Game' is the current working directory."
	"If you would like to install the game append the 'install' option:"
	"bash '${THIS_PATH}/${THIS_FILE}' install"
)

[ -z "$reltype" ] && fatal \
	"Cannot determine the installed game type." \
	"${game_not_found_message[@]}"

eval LANG_PACKS_PATH="\$LANG_PACKS_PATH_${reltype}"
eval UPDATE_URL="\$UPDATE_URL_${reltype}"
# $reltype is no longer used

[ ! -e "$CONFIG_FILE" ] && fatal \
	"Game information file ${CONFIG_FILE} not found." \
	"${game_not_found_message[@]}"

installed_ver=`get_ini_value "${CONFIG_FILE}" 'game_version'`
[ -z "$installed_ver" ] && fatal \
	"Cannot read game_version from ${CONFIG_FILE}. File corrupt?"

echo "--- Installed version: ${installed_ver}"

# ======== Update information download + meta checks

# WARNING: File cannot be downloaded to NTFS/FAT* partitions due to special characters
tmp_path=`mktemp -d`
trap "rm -rf '$tmp_path'" EXIT
download_file "$UPDATE_URL" "$tmp_path"

RESOURCE_FILE=`find "$tmp_path" -name 'resource*' | tee`

[ ! -f "${RESOURCE_FILE}" ] && fatal \
	"Failed to download version info. Check your internet connection."

upstream_ver=`jq -r -M ".data ${json_path} .latest .version" "$RESOURCE_FILE" | tee`
[ "$upstream_ver" = "null" ] && fatal "Could not find any matching update entry"
echo "--- Latest version: ${upstream_ver}"

if [ "$upstream_ver" = "$installed_ver" ]; then
	echo
	echo "==> Client is up to date."
	exit 0
fi

if [ "$cli_predownload" -eq 0 ]; then
	# Check whether this version can be patched
	patcher_dir="$REPO_PATH"/`echo "$upstream_ver" | tr -d .`
	[ ! -d "$patcher_dir" ] && fatal \
		"No suitable patch script found. Please check the bug tracker for details about the progress."
fi

# ======== Select update type

# Check is diff update possible.
archive_json=`jq -r -M ".data ${json_path} .diffs[] | select(.version==\"${installed_ver}\")" "$RESOURCE_FILE"`
if [ -z "$archive_json" ]; then
	# Fallback to full download.
	archive_json=`jq -r -M ".data ${json_path} .latest" "$RESOURCE_FILE"`
	dl_type="new installation"
else
	dl_type="incremental update"
fi
size=`download_json_size "$archive_json"`
echo "Download type: ${dl_type} (${size})"

# Confirm install/update.
while :; do
	read -r -p "Start/continue update? [Y]/n: " input
	#input="y"
	case "$input" in
		Y|y|'')
			echo
			break
			;;
		n|N)
			exit 0
			;;
	esac
done

echo "--- Main game archive"

# Download SDK if exists
sdk_json=`jq -r -M ".data .sdk | select(.!=null)" "$RESOURCE_FILE"`
if [ -n "$sdk_json" ]; then
	download_json_section "$sdk_json"
fi

# Download main game archive
download_json_section "$archive_json"

# ======== Locate and install voiceover packs

if [ -d "$LANG_PACKS_PATH" ]; then
	# Get voiceover directory name in capitals. Does proper space handling.
	lang_dir_names=$(find "$LANG_PACKS_PATH" -mindepth 1 -type d | xargs -L1 -r basename | tr -d '()' | tr 'a-z' 'A-Z')
fi

# Download langs packs.

echo "$lang_dir_names" | while read dir_name; do
	[ -z "$dir_name" ] && continue
	eval lang_code="\$LANG_MAP_${dir_name}"

	lang_archive_json=`echo ${archive_json} | jq -r -M ".voice_packs[] | select(.language==\"${lang_code}\")"`
	if [ "$lang_archive_json" = 'null' -o "$lang_archive_json" = '' ]; then
		echo "--- Cannot find update for language: ${dir_name}"
		continue
	fi
	size=`download_json_size "$lang_archive_json"`
	echo "--- Voiceover pack: ${lang_code} (${size})"
	download_json_section "$lang_archive_json"
done

# ======== Revert patch & apply update

if [ "$cli_predownload" -eq 1 ]; then
	echo
	echo "==> Pre-download completed. The archives will be ready on release day."
	exit 0
fi

# Run 'patch_revert.sh' on update existing installation.
if [ -e "$ANCHOR_FILE" ]; then
	echo
	echo "============== Reverting previous Wine patch ==============="
	bash "${patcher_dir}/patch_revert.sh"
	echo "============================================================"
	echo
fi

# Unpack the game files and remove old ones according to deletefiles.txt
echo "--- Updating game files...."

# -L to allow symlinking the download directory to another drive
find -L "${DOWNLOAD_PATH}" -name "*.zip" | while read archive_name; do
	bash "${THIS_PATH}/perform_update.sh" "$archive_name"
done
if [ "$remove_archives" -eq 1 ]; then
	# Remove downloads when all updates succeeded
	# otherwise keep the archives to fix with "perform_update.sh" manually
	find -L "${DOWNLOAD_PATH}" -name "*.zip" | while read archive_name; do
		rm -f "${archive_name}" "${archive_name}.completed"
	done
fi

# ======== Config update and game patching

# Update version in config file.
sed -i "s/game_version=${installed_ver}/game_version=${upstream_ver}/" "$CONFIG_FILE"

if [ -n "$sdk_json" ]; then
	sdk_version=`echo "$sdk_json" | jq -r -M ".version"`
	sed -i "s/^sdk_version=.*/sdk_version=${sdk_version}/" "$CONFIG_FILE"
fi

if [ "$remove_archives" -eq 1 ]; then
	# The directory should be empty now. Remove.
	rm -r "$DOWNLOAD_PATH"
fi
echo
echo "==> Update to version ${upstream_ver} completed"

# Run wine compatibility patch script.
echo
echo "================= Applying new Wine patch =================="
bash "${patcher_dir}/patch.sh"
echo "============================================================"
echo "==> Update script completed successfully"

exit 0


[User] 空

houzhui: .html

jiequqian: 空

jiequhou: 空

tupianqian: data-original="

biaotiqian: title="

lianjieqian: href="

jspic: pic

jsname: name

jsid: id

ssjiequqian: 空

ssjiequhou: 空

ssjiequshuzuqian: 空

ssjiequshuzuhou: 空

sstupianqian: 空

sstupianhou: 空

ssbiaotiqian: 空

ssbiaotihou: 空

sslianjieqian: 空

sslianjiehou: 空

bfjiequqian: 空

bfjiequhou: 空

bfjiequshuzuqian: class="stui-content__playlist clearfix

zhuangtaiqian: class="pic-text text-right">

zhuangtaihou: </span>

daoyanqian: 导演：

zhuyanqian: 主演：

juqingqian: stui-content__desc col-pd clearfix">

juqinghou: </div>

bfyjiequqian: 空

bfyjiequhou: 空

bfyjiequshuzuqian: <li

bflianjieqian: href="


23影院

houzhui: html

jiequshuzuqian: class="pack-ykpack

jiequshuzuhou: </div>

zhuangtaiqian: 类型：</span>

daoyanqian: 导演：</span>

zhuyanqian: 演员：</span>

juqingqian: 简介：</span>

bfyjiequshuzuqian: <a


31看影视

author: dj

jiequqian: <ul class="myui-vodlist

jiequshuzuhou: </span>

tupianqian: original="

sousuohouzhui: /voddetail/

bfjiequshuzuqian: id="playlist

zhuangtaiqian: 更新：</span>

zhuyanqian: 主演：</span>


348电影网

jspic: 空

jsname: 空

jsid: 空

ssjiequshuzuqian: class="thumb

sstupianqian: data-original="

ssbiaotiqian: title="

sslianjieqian: href="

bfjiequshuzuqian: <ul class="content_playlist

zhuangtaiqian: 状态：</span>

juqingqian: 详情：</span>


code:
{
  "name": "4kan电影网",
  "url": "https://www.4kan.cc/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--------#国产剧$/vodshow/13-内地-------#日韩剧$/vodshow/15--------#欧美剧$/vodshow/16--------#港台剧$/vodshow/13-香港-------#台剧$/vodshow/13-台湾-------#综艺$/vodshow/3--------#动漫$/vodshow/4--------",
  "houzhui": "---/",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "lazyload",
  "jiequshuzuhou": "
",
  "tupianqian": "data-original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=50",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "style=\"bottom:0;backgroud-color:white;border-radius:0 10px 0 10px;\">",
  "zhuangtaihou": "",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "
",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


[User] User-Agent:Dart/2.14 (dart:io)

jiequqian: class="myui-vodlist clearfix

juqingqian: class="data" style="display: none;">

juqinghou: </span>


jiequshuzuqian: lazyload


sousuohouzhui: /vod/

juqingqian: <p class="col-pd">


code:
{
  "name": "98播播网",
  "url": "https://98bbw.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/whole/1/page/#电视剧$/whole/2/page/#国产剧$/whole/2/area/中国大陆/page/#港剧$/whole/2/area/中国香港/page/#韩剧$/whole/3/page/#日剧$/whole/5/page/#美剧$/whole/4/page/#综艺$/whole/22/page/#国产动漫$/whole/26/page/#日本动漫$/whole/25/page/#更新$/label/new",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "lazyload",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/show/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-content__playlist clearfix\"",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"pic-text text-right\">",
  "zhuangtaihou": "",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


9亿资源

juqinghou: <a


COKEMV

jiequqian: module-page

jiequhou: <div id="page">

jiequshuzuqian: <a

jiequshuzuhou: no-referrer

zhuangtaiqian: 更新：

zhuangtaihou: </div>

daoyanhou: </div>

zhuyanhou: </div>

juqingqian: 简介：

juqinghou: /div>

bfjiequshuzuqian: class="module-list

bfjiequshuzuhou: </div>

bfbiaotiqian: <span>

bfbiaotihou: </span>


GAOAA

jiequqian: blank">百人牛牛，美女陪干！不爽就来干</a>

jiequhou: <div class="box-page">

jiequshuzuqian: class="video-pic loading

jiequshuzuhou: player

sousuoqian: /gaosearch/-/?wd=

sousuohouzhui: /gaotype/

ssjiequqian: blank">百人牛牛，美女陪干！不爽就来干</a>

ssjiequhou: <div class="box-page">

ssjiequshuzuqian: class="video-pic loading

ssjiequshuzuhou: player

sstupianqian: original="

bfjiequshuzuqian: class="item line">

daoyanqian: class="data">类型：

zhuyanqian: class="data">主演：


GIMY影视

bfjiequshuzuqian: class="myui-content__list sort-list scrollbar clearfix"

juqingqian: class="col-pd text-collapse content">

bfyjiequshuzuhou: /li>


LIBVIO

jiequshuzuqian: data

sousuohouzhui: /detail/

zhuangtaiqian: class="data">总集数：

juqingqian: class="detail-content"


code:
{
  "name": "TVB云播",
  "url": "https://www.hktv03.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vod/show/id/1/page/#国产剧$/vod/show/id/13/page/#港台剧$/vod/show/id/14/page/#日韩剧$/vod/show/id/15/page/#欧美剧$/vod/show/id/16/page/#综艺$/vod/show/id/3/page/#国产动漫$/vod/show/area/国产/id/4/page/#日本动漫$/vod/show/area/日本/id/4/page/#欧美动漫$/vod/show/area/欧美/id/4/page/",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"myui-vodlist__box\"",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "style=\"max-height",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "更新：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


jiequshuzuqian: class="col-md-6 col-sm-4 col-xs-3"

bfjiequshuzuqian: class="stui-content__playlist clearfix"

juqingqian: class="detail-sketch"

bfyjiequshuzuqian: <li >


code:
{
  "name": "VIP电影院",
  "url": "https://www.mycleanlab.com",
  "User": "空",
  "fenlei": "电视剧$/frim/2-#电影$/frim/1-#综艺$/frim/3-#动漫$/frim/4-#国产剧$/frim/13-#港剧$/frim/28-#台剧$/frim/29-#韩剧$/frim/16-",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"stui-vodlist",
  "jiequshuzuhou": "
",
  "tupianqian": "data-original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/index.php/vod/detail/id/", //搜索页影片跳转详情页的中间标识链接部分
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-content__playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "类型：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "class=\"detail-sketch",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": "title=\"",
  "bfbiaotihou": "\"",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


YYDS影院

jiequshuzuqian: class="col-lg-6 col-md-6 col-sm-4 col-xs-3"

sstupianqian: src="

zhuangtaiqian: 分类：</span>


zhuangtaiqian: class="score text-red">


city电影

jiequshuzuqian: class="col-sm-6 col-xs-3 hide-actor

biaotiqian: alt="

bfjiequshuzuqian: class="play-div-oa


hdmoli

sousuohouzhui: /movie/

ssjiequshuzuqian: class="thumb"

ssjiequshuzuhou: </span>

zhuangtaiqian: 更新周期：</span>


code:
{
  "name": "七年影视",
  "url": "https://www.lipinvip.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--time------#国产剧$/vodshow/12--------#网剧$/vodshow/20--------#欧美剧$/vodshow/15--------#日韩剧$/vodshow/14--------#港台剧$/vodshow/13--------#海外剧$/vodshow/18--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------#国产动漫$/vodshow/4-大陆-------#日本动漫$/vodshow/4-日本-------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"stui-vodlist__box",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=50",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-content__playlist clearfix\"",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "状态：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "class=\"col-pd\">",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


不开VIP

juqingqian: class="col-pd">


乌龟影院

juqingqian: style="display: none;">


03-乐猪影视

jiequshuzuqian: class="vbox"

sousuohou: .html

ssjiequshuzuqian: class="vbox"

bfjiequshuzuqian: class="list_block show"

zhuangtaiqian: class="yac">

bfyjiequshuzuqian: <li>


九州影视

jiequshuzuqian: class="col-lg-8 col-md-6 col-sm-4 col-xs-3"

zhuyanqian: 主演:  </span>

juqingqian: class="sketch content">


伊雪湾

jiequshuzuqian: class="module-item-pic"

tupianqian: data-src="

zhuangtaiqian: 备注：</span>

juqingqian: 剧情：</span>


code:
{
  "name": "克拉TV",
  "url": "https://www.kelatv.com",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/dianying/index-#电视剧$/dianshiju/index-#动漫$/dongman/index-",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"layui-col-md2 layui-col-sm4 layui-col-xs6 item\"",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "alt=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/search/",
  "sousuohou": "",
  "sousuohouzhui": "/detail/",
  "ssmoshi": "1",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "class=\"video-txt\"",
  "ssjiequshuzuhou": "
",
  "sstupianqian": "original=\"",
  "sstupianhou": "\"",
  "ssbiaotiqian": "title=\"",
  "ssbiaotihou": "\"",
  "sslianjieqian": "href=\"",
  "sslianjiehou": "\"",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"layui-tab-item bt-playlist layui-show\"",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "
状态：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "class=\"bt-content\">
",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


六度TV

sousuoqian: /?c=search&wd=

ssjiequshuzuqian: class="v-thumb stui-vodlist

juqingqian: class="detail-sketch">

bflianjieqian: href='


创艺影视

zhuangtaiqian: class="text-red">

juqingqian: style="display: none;"><p>


code:
{
  "name": "利丽娅电影",
  "url": "https://www.llyady.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--hits------#国产剧$/vodshow/28--------#日韩剧$/vodshow/29--------#欧美剧$/vodshow/30--------#港台剧$/vodshow/31--------#其他剧$/vodshow/31--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"module-item-pic\"",
  "jiequshuzuhou": "
",
  "tupianqian": "data-src=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=50",
  "sousuohouzhui": "/video/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"sort-item-",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"module-item-text\">",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "剧情：",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": "",
  "bfbiaotihou": "",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


剧白白-蓝光

bfjiequshuzuqian: class="stui-content__playlist sort-list

zhuangtaiqian: class="data hidden-xs">类型：

daoyanqian: class="data">导演：


北川影视

jiequshuzuhou: class="loading"

bfjiequshuzuqian: class="scroll-content"


厂长资源-蓝光

tihuan: aliyundrive

jiequshuzuqian: <li>

sousuoqian: /xssearch?q=

ssjiequshuzuqian: <li>

ssbiaotiqian: alt="

zhuangtaiqian: 上映：<span>

daoyanqian: <li>导演：

zhuyanqian: <li>主演：


code:
{
  "name": "哔嘀影视",
  "url": "https://bidiys.cc/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "南瓜电影$/vodshow-nanguady--------#4K专区$/vodshow-huiyuanzhuanqu--------#电影$/vodshow-dianying--------#电视剧$/vodshow-lianxuju--------#日本番剧$/vodshow-lianxuju--------#动漫$/vodshow-dongman--------#综艺$/vodshow-zongyi--------#国产剧$/vodshow-guochanju--------#港台剧$/vodshow-gangtaiju--------#日韩剧$/vodshow-rihanju--------#欧美剧$/vodshow-oumeiju--------#其他海外$/vodshow-qita--------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"module-item-pic\"",
  "jiequshuzuhou": "loading",
  "tupianqian": "data-src=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/vodsearch--------------.html?wd=",
  "sousuohou": "",
  "sousuohouzhui": "/voddetail-",
  "ssmoshi": "1",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "class=\"module-item-pic\"",
  "ssjiequshuzuhou": "
",
  "sstupianqian": "data-src=\"",
  "sstupianhou": "\"",
  "ssbiaotiqian": "alt=\"",
  "ssbiaotihou": "\"",
  "sslianjieqian": "href=\"",
  "sslianjiehou": "\"",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"sort-item-",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"module-item-text\">",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "剧情：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": "",
  "bfbiaotihou": "",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


在线之家

zhuangtaiqian: class="data ">类型：


code:
{
  "name": "大师兄影视",
  "url": "https://dsxys.com/",
  "tihuan": "cnzz.com",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/type/1-#电视剧$/type/2-#国产剧$/type/13-#港台剧$/type/14-#日韩剧$/type/15-#欧美剧$/type/16-海外剧$/type/23-动画片$/type/50-#综艺$/type/3-#动漫$/type/4-",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "lazyload",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/v/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "更新：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


code:
{
  "name": "大象TV",
  "url": "http://www.daxiangtv.net/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--time------#国产剧$/vodshow/13--------#港台剧$/vodshow/14--------#欧美剧$/vodshow/16--------#日韩剧$/vodshow/15--------#海外剧$/vodshow/82--------#海外剧$/vodshow/18--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------#国产动漫$/vodshow/4-国产-------#日本动漫$/vodshow/4-日本-------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "lazyload",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=50",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "更新：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "class=\"sketch content hide\"> ",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


code:
{
  "name": "奇优影院（不支持搜）",
  "url": "http://1e6e.com",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/list/1_#电视剧$/list/2_#综艺$/list/4_#动漫$/list/3_#伦理$/list/6_",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"stui-vodlist__box\"",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/search.php?searchword=",
  "sousuohou": ";post;utf-8",
  "sousuohouzhui": "/view/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-content__playlist clearfix\"",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"pic-text text-right\">",
  "zhuangtaihou": "",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


奇粹影院

juqingqian: module-info-introduction-content">


code:
{
  "name": "奈菲影院",
  "url": "https://www.1985.one/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/id/1/page/#国产剧$/vodshow/id/2/page/#日韩剧$/vodshow/29--------#欧美剧$/vodshow/30--------#港台剧$/vodshow/31--------#其他剧$/vodshow/31--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"module-item-pic\"",
  "jiequshuzuhou": "
",
  "tupianqian": "data-src=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=50",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"sort-item-",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"module-item-text\">",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "剧情：",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": "",
  "bfbiaotihou": "",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


奈落影院

bfjiequshuzuqian: id="sort-item

zhuangtaiqian: 集数：</span>


code:
{
  "name": "完美看看影视",
  "url": "https://www.wanmeikk.me/",
  "tihuan": "cnzz.com",
  "User": "空",
  "fenlei": "电影$/category/1-#国产剧$/category/5-#欧美剧$/category/2-#韩剧$/category/3-#动漫$/category/6-#泰剧$/category/9-#纪录片$/category/10-", //列表的分类
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "class=\"stui-vodlist__box stui-vodlist__bg",
  "jiequhou": "
",
  "jiequshuzuqian": "lazyload",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/play/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-pannel_bd col-pd clearfix",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "更新：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "class=\"data\" style=\"display: none;\">",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


小傻瓜

ssjiequshuzuqian: class="module-item-pic"

ssjiequshuzuhou: </div>

sstupianqian: data-src="

bfjiequshuzuqian: class="scroll-content

zhuangtaiqian: class="video-info-item">


小强迷

jiequshuzuqian: <li class="stui-vodlist__item">


小熊影视

tupianqian: src="

zhuyanhou: <span class="slash">


code:
{
  "name": "小猫咪",
  "url": "https://xmaomi.net/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--------#国产剧$/vodshow/2-中国大陆-------#台剧$/vodshow/2-中国台湾-------#美剧$/vodshow/2-美国-------#港剧$/vodshow/2-中国香港-------#韩剧$/vodshow/2-韩国-------#综艺$/vodshow/3--------#动漫$/vodshow/4--------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"myui-vodlist__box",
  "jiequshuzuhou": "",
  "tupianqian": "data-original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/vodsearch/-------------.html?wd=",
  "sousuohou": "&submit=",
  "sousuohouzhui": "/vodplay/",
  "ssmoshi": "1",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "lazyload",
  "ssjiequshuzuhou": "
",
  "sstupianqian": "data-original=\"",
  "sstupianhou": "\"",
  "ssbiaotiqian": "title=\"",
  "ssbiaotihou": "\"",
  "sslianjieqian": "href=\"",
  "sslianjiehou": "\"",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"pic-text text-right\">",
  "zhuangtaihou": "",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "style=\"display: none;\">",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


尘落影院

jiequshuzuqian: class="movie-item-in

jiequshuzuhou: class="item-hover

sousuohouzhui: /show/

ssjiequshuzuqian: class="movie-item-in

bfjiequshuzuqian: class="row tv-js-list

zhuangtaiqian: 状态

daoyanqian: 导演

zhuyanqian: 主演

juqingqian: border-radius: 4px

bfyjiequshuzuqian: <div

bfyjiequshuzuhou: /div>

bfbiaotiqian: class="tv-js-btn">


开心果电影网

jiequshuzuqian: class="hl-item-thumb hl-lazy"

bfjiequshuzuqian: id="hl-plays-list

zhuangtaiqian: 更新：</em>

daoyanqian: 导演：</em>

zhuyanqian: 主演：</em>

juqingqian: 简介：</em>


code:
{
  "name": "影渣渣",
  "url": "https://www.yingzhazha.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--------#电视剧$/vodshow/2--------#国产剧$/vodshow/13--------#港台剧$/vodshow/14--------#日韩剧$/vodshow/15--------#欧美剧$/vodshow/16--------#海外剧$/vodshow/23--------#泰剧$/vodshow/37--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------#体育赛事$/vodshow/22--------#电视直播$/vodshow/28--------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"myui-vodlist__box\"",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "更新：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


影视之光

zhuangtaiqian: class="pic-text text-right">

juqingqian: 剧情简介','


10-影视工厂

zhuangtaiqian: class="otherbox">

juqingqian: <span class="data"


思乐影视

jiequshuzuqian: class="module-item-pic

bfjiequshuzuqian: class="sort-item

juqingqian: 简介：</span>


手机看剧

jiequqian: id="list"

zhuangtaiqian: <em>

daoyanqian: class="text-muted">导演：

daoyanhou: </span>

zhuyanqian: class="text-muted">主演：

zhuyanhou: </span>

juqingqian: <div style="text-indent: 2em;">


星空影视

sousuohouzhui: /Moviedsetail/


code:
{
  "name": "极品影视",
  "url": "https://www.jpys.me/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodshow/1--------#电视剧$/vodshow/2--------#国产剧$/vodshow/13--------#港台剧$/vodshow/14--------#日韩剧$/vodshow/15--------#欧美剧$/vodshow/16--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"myui-vodlist__box\"",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "更新：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


火火影视

jiequshuzuqian: class="hl-list-item hl

zhuangtaiqian: 状态：</em>


炫猫影视

bfjiequshuzuqian: class="myui-content__list scrollbar sort-list clearfix

zhuangtaiqian: 备注：</div>

juqingqian: class="span">


爱港剧

jiequqian: class="stui-vodlist clearfix"

sousuohou: &submit=

sousuohouzhui: /dianshiju/

juqingqian: <span class="detail-sketch">


code:
{
  "name": "牛马TV",
  "url": "http://www.niumatv.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/type/dianying-#电视剧$/type/dianshiju-#国产剧$/vodshow/area/中国大陆/id/dianshiju/page/#港剧$/vodshow/area/中国香港/id/dianshiju/page/#韩剧$/vodshow/area/韩国/id/dianshiju/page/#欧美剧$/vodshow/area/美国/id/dianshiju/page/#综艺$/type/zongyi-#动漫$/type/dongman-",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  // /page/

     '
  "jiequshuzuqian": "lazyload",
  "jiequshuzuhou": "",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/vod/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-content__playlist clearfix",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"pic-text text-right\">",
  "zhuangtaihou": "",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


看一看影视

jiequshuzuqian: <a class="link-hover"

jiequshuzuhou: src=

sousuohouzhui: /vodhtml/

ssjiequshuzuqian: <a class="link-hover"

ssjiequshuzuhou: src=

bfjiequshuzuqian: class="videourl clearfix">

zhuangtaiqian: class="bz">


真不卡影院(不支持搜索)

sousuohouzhui: /edu-

bfjiequshuzuqian: class="stui-content__playlist clearfix


真不卡影院-不支持搜索

zhuangtaiqian: 更新：</span>


神马影视

sousuohouzhui: /kan/


神马影院

jiequshuzuqian: class="link-hover"

bfjiequshuzuqian: class="urlli clearfix"


神马影院10

bfjiequshuzuqian: class="btn btn-primary"

zhuangtaiqian: 状态: text-right

juqingqian: 简介


稀饭影视

[User] 无

sousuohouzhui: /yingpiandetail/


红领巾

sousuoqian: /search/

ssjiequshuzuqian: class="module-item-cover

bfjiequshuzuqian: stui-content__playlist clearfix


老电影

ssjiequshuzuqian: <a

zhuangtaiqian: 状态：

juqingqian: 剧情：


老茶馆

bfjiequshuzuqian: id="playlist


code:
{
  "name": "耐看点播",
  "url": "https://www.nkdyw.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/show/1--------#国产剧$/show/13--------#港台剧$/show/14--------#日韩剧$/show/15--------#欧美剧$/show/16--------#综艺$/show/3--------#国产动漫$/show/4-国产-------#日本动漫$/show/4-日本-------#欧美动漫$/show/4-欧美-------",
  "houzhui": "---.html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"module-item-pic",
  "jiequshuzuhou": "
",
  "tupianqian": "data-src=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/detail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"scroll-content",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "集数：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "剧情：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": "",
  "bfbiaotihou": "",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


花猫TV

bfjiequshuzuqian: class="stui-content__playlist clearfix"

zhuangtaiqian: class="data"


莫扎兔

jiequshuzuqian: class="pic"

tupianqian: lay-src="

biaotiqian: class="name">

biaotihou: </div>

bfjiequshuzuqian: id="zu


蓝光影视

jiequshuzuqian: <a

zhuangtaiqian: 更新：

juqingqian: 简介：

bfjiequshuzuqian: class="module-list


code:
{
  "name": "蓝莓影视",
  "url": "https://lanmeiguojiang.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/ys/index.php/vod/type/id/20/page/#电视剧$/vodshow/2--------#综艺$/vodshow/3--------#动漫$/vodshow/4--------#抖音电影$/vodshow/5--------#国产剧$/vodshow/13--------#港台剧$/vodshow/14--------#日韩剧$/vodshow/15--------#欧美剧$/vodshow/16--------#动作片$/vodshow/6--------#喜剧片$/vodshow/7--------#爱情片$/vodshow/8--------#科幻片$/vodshow/9--------#恐怖片$/vodshow/10--------#剧情片$/vodshow/11--------#战争片$/vodshow/12--------#犯罪片$/vodshow/23--------",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"stui-vodlist__box\"",
  "jiequshuzuhou": "
",
  "tupianqian": "original=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/ys/index.php/vod/search/wd/",
  "sousuohou": ".html",
  "sousuohouzhui": "/ys/index.php/vod/detail/id/",
  "ssmoshi": "1",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "class=\"stui-vodlist__box",
  "ssjiequshuzuhou": "",
  "sstupianqian": "data-original=\"",
  "sstupianhou": "\"",
  "ssbiaotiqian": "title=\"",
  "ssbiaotihou": "\"",
  "sslianjieqian": "href=\"",
  "sslianjiehou": "\"",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "id=\"playlist",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "状态：",
  "zhuangtaihou": "
",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "style=\"display: none;\">",
  "juqinghou": "",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


虎猫

zhuangtaiqian: 备注：</span>


视中心影院

bfjiequqian: class="module-heading"

bfjiequhou: type="text/javascript"


豆角网

jiequshuzuqian: class="con"

ssjiequshuzuqian: class="pic"

bfjiequshuzuqian: class="ulNumList clearfix list_1

juqingqian: 剧情:


达达龟

1User: 空

juqingqian: style="display: none;">


code:
{
  "name": "飘花播播",
  "url": "https://www.piaohuabo.com/",
  //"User": "User-Agent:Dart/2.14 (dart:io)",
  "fenlei": "电影$/vodtype/1-#电视剧$/vodtype/2-#国产剧$/vodtype/13-#港台剧$/vodtype/14-#日韩剧$/vodtype/15-#欧美剧$/vodtype/16-#海外剧$/vodtype/20-#综艺$/vodtype/3-#动漫$/vodtype/4-",
  "houzhui": ".html",
  "shifouercijiequ": "0",
  "jiequqian": "空",
  "jiequhou": "空",
  "jiequshuzuqian": "class=\"stui-vodlist__box\"",
  "jiequshuzuhou": "
",
  "tupianqian": "style=\"",
  "tupianhou": "\"",
  "biaotiqian": "title=\"",
  "biaotihou": "\"",
  "lianjieqian": "href=\"",
  "lianjiehou": "\"",
  "sousuoqian": "/index.php/ajax/suggest?mid=1&wd=",
  "sousuohou": "&limit=500",
  "sousuohouzhui": "/voddetail/",
  "ssmoshi": "0",
  "sousuoshifouercijiequ": "0",
  "jspic": "pic",
  "jsname": "name",
  "jsid": "id",
  "ssjiequqian": "空",
  "ssjiequhou": "空",
  "ssjiequshuzuqian": "空",
  "ssjiequshuzuhou": "空",
  "sstupianqian": "空",
  "sstupianhou": "空",
  "ssbiaotiqian": "空",
  "ssbiaotihou": "空",
  "sslianjieqian": "空",
  "sslianjiehou": "空",
  "bfshifouercijiequ": "0",
  "bfjiequqian": "空",
  "bfjiequhou": "空",
  "bfjiequshuzuqian": "class=\"stui-content__playlist clearfix\"",
  "bfjiequshuzuhou": "
",
  "zhuangtaiqian": "class=\"pic-text text-right\">",
  "zhuangtaihou": "",
  "daoyanqian": "导演：",
  "daoyanhou": "
",
  "zhuyanqian": "主演：",
  "zhuyanhou": "
",
  "juqingqian": "简介：",
  "juqinghou": "
",
  "bfyshifouercijiequ": "0",
  "bfyjiequqian": "空",
  "bfyjiequhou": "空",
  "bfyjiequshuzuqian": "",
  "bfbiaotiqian": ">",
  "bfbiaotihou": "<",
  "bflianjieqian": "href=\"",
  "bflianjiehou": "\""
}


饭团影院

juqingqian: class="data" style="display: none;">


骚火电影

ssjiequshuzuqian: <div class="v_img">

ssjiequshuzuhou: <div class="v_note">

daoyanhou: / 主演

juqingqian: class="p_txt show_part">

juqinghou: <br


鸭奈飞

jiequshuzuqian: <div class="module-item-pic">

juqingqian: 剧情：</span>


黑洞影视

sousuoqian: /vodsearch/


code:
![preview](https://raw.githubusercontent.com/biplobsd/OneClickRun/master/img/preview.gif)

# OneClickRun

Features:

`Jellyfin, aria2, ariang, rclone, rclone WebUI, Netdata, Cloud Commander,
Ssh, noVnc, filebrowser, SocialFish, L3MON, SayCheese, spotify-downloader, pyLoad, code-server, V2ray, NoMachine, Flutter, Glances, WeTTy, Kivy, go-http-file-server...`

# Usage
Click on the "Open in Colab" button.

### Our telegram group


code: #placeholder

path: res/appdata/jellyfin/placeholder


code:
version: 1

download - "Download":
	int chunks : "Max connections for one download" = 3
	str interface : "Download interface to bind (ip or Name)" = None
	bool ipv6 : "Allow IPv6" = False
	bool limit_speed : "Limit Download Speed" = False
	int max_downloads : "Max Parallel Downloads" = 16
	int max_speed : "Max Download Speed in kb/s" = -1
	bool skip_existing : "Skip already existing files" = False

downloadTime - "Download Time":
	time end : "End" = 0:00
	time start : "Start" = 0:00

general - "General":
	bool checksum : "Use Checksum" = False
	bool debug_mode : "Debug Mode" = False
	folder download_folder : "Download Folder" = /content/downloads
	bool folder_per_package : "Create folder for each package" = True
	en;de;fr;it;es;nl;sv;ru;pl;cs;sr;pt_BR language : "Language" = en
	int min_free_space : "Min Free Space (MB)" = 200
	int renice : "CPU Priority" = 0

log - "Log":
	bool file_log : "File Log" = True
	int log_count : "Count" = 5
	folder log_folder : "Folder" = Logs
	bool log_rotate : "Log Rotate" = True
	int log_size : "Size in kb" = 100

permission - "Permissions":
	bool change_dl : "Change Group and User of Downloads" = False
	bool change_file : "Change file mode of downloads" = False
	bool change_group : "Change group of running process" = False
	bool change_user : "Change user of running process" = False
	str file : "Filemode for Downloads" = 0644
	str folder : "Folder Permission mode" = 0755
	str group : "Groupname" = users
	str user : "Username" = user

proxy - "Proxy":
	str address : "Address" = "localhost"
	password password : "Password" = None
	int port : "Port" = 7070
	bool proxy : "Use Proxy" = False
	http;socks4;socks5 type : "Protocol" = http
	str username : "Username" = None

reconnect - "Reconnect":
	bool activated : "Use Reconnect" = False
	time endTime : "End" = 0:00
	str method : "Method" = None
	time startTime : "Start" = 0:00

remote - "Remote":
	bool activated : "Activated" = False
	ip listenaddr : "Adress" = 0.0.0.0
	bool nolocalauth : "No authentication on local connections" = False
	int port : "Port" = 7227

ssl - "SSL":
	bool activated : "Activated" = False
	file cert : "SSL Certificate" = ssl.crt
	file key : "SSL Key" = ssl.key

webinterface - "Webinterface":
	bool activated : "Activated" = True
	bool basicauth : "Use basic auth" = False
	ip host : "IP" = 0.0.0.0
	bool https : "Use HTTPS" = False
	int port : "Port" = 8000
	str prefix : "Path Prefix" =
	builtin;threaded;fastcgi;lightweight server : "Server" = builtin
	pyplex;classic;modern template : "Template" = modern


author: zhang baobao

dcVipFlag: true

dcPlayUrl: true

homeVodNode: //li[@class='col-md-5 col-sm-4 col-xs-3 ']/div[@class='stui-vodlist__box']/a

dtNode: //body

dtFromNode: //div[@class='stui-pannel__head bottom-line active clearfix']/h3

dtFromName: /text()

dtUrlNode: //div[@class='stui-pannel_bd col-pd clearfix']/ul[@class='stui-content__playlist clearfix']

dtUrlName: /text()

scVodName: name

scVodId: id

scVodImg: pic


author: 春风

电影: dianying

连续剧: dianshiju

国产剧: guochanju

港剧: xianggangju

台湾剧: taiwanju

韩剧: hanguoju

日剧: ribenju

欧美剧: oumeiju

海外剧: haiwaiju

动作片: dongzuopian

喜剧片: xijupian

爱情片: aiqingpian

科幻片: kehuanpian

恐怖片: kongbupian

剧情片: juqingpian

战争片: zhanzhengpian

动画片: donghuapian


code:
{
  "ua": "",
  "homeUrl": "https://www.17skr.com/",
  "dcVipFlag": "true",
  "pCfgJs": "https://www.17skr.com/static/js/playerconfig.js",
  "pCfgJsR": "[\\W|\\S|.]*?MacPlayerConfig.player_list[\\W|\\S|.]*?=([\\W|\\S|.]*?),MacPlayerConfig.downer_list",
  "dcShow2Vip": {},
  "dcPlayUrl": "true",
  "cateNode": "//ul[contains(@class, 'navbar-nav')]/li/a[contains(@href, 'type')]",
  "cateName": "/@title",
  "cateId": "/@href",
  "cateIdR": "/type/(\\d+).html",
  "cateManual": {
    "日本动漫": "ribendongman",
    "国产动漫": "guochandongman",
    "欧美动漫": "oumeidongman",
    "日本动漫电影": "ribendonghuadianying",
    "国产动漫电影": "guochandonghuadianying",
    "欧美动漫电影": "oumeidonghuadianying"
  },

  "homeVodNode": "//div[contains(@class, 'video-img-box')]",
  "homeVodName": "/div[contains(@class, 'detail')]/h6/a/text()",
  "homeVodId": "/div[contains(@class, 'img-box')]/a/@href",
  "homeVodIdR": "/detail/(\\w+).html",
  "homeVodImg": "/div[contains(@class, 'img-box')]/a/img/@data-src",
  "homeVodMark": "/div[contains(@class, 'img-box')]/a/div[contains(@class,'absolute-bottom-right')]/span/text()",

  "cateUrl": "https://www.17skr.com/type/{cateId}_{catePg}.html",
//   "cateUrl": "https://www.17skr.com/vod/show/by/{by}}/id/{cateId}/page/{catePg}/year/{year}.html",
  "cateVodNode": "//div[contains(@class, 'video-img-box')]",
  "cateVodName": "/div[contains(@class, 'detail')]/h6/a/text()",
  "cateVodId": "/div[contains(@class, 'img-box')]/a/@href",
  "cateVodIdR": "/detail/(\\w+).html",
  "cateVodImg": "/div[contains(@class, 'img-box')]/a/img/@data-src",
  "cateVodMark": "/div[contains(@class, 'img-box')]/a/div[contains(@class,'absolute-bottom-right')]/span/text()",

  "dtUrl": "https://www.17skr.com/detail/{vid}.html",
  "dtNode": "//body",
  "dtName": "//div[@class='module-item-pic']/a/img/@alt",
  "dtNameR": "",
  "dtImg": "//div[@class='module-item-pic']/a/img/@src",
  "dtImgR": "\\S+(http\\S+)",
  "dtCate": "//div[@class='tag-link'][1]/a/span/text()",
  "dtCateR": "",
  "dtArea": "//div[@class='tag-link'][2]/a/span/text()",
  "dtAreaR": "",
  "dtDirector": "//span[contains(text(), '导演')]/following-sibling::div/a/span/text()",
  "dtDirectorR": "",
  "dtActor": "//span[contains(text(), '主演')]/following-sibling::div/a/span/text()",
  "dtActorR": "",
  "dtYear": "//span[contains(text(), '上映')]/following-sibling::*/text()",
  "dtYearR": "",
  "dtMark": "//span[contains(text(), '集数')]/following-sibling::*/text()",
  "dtMarkR": "",
  "dtDesc": "//span[contains(text(), '剧情')]/following-sibling::div/span/text()",
  "dtDescR": "",

  "dtFromNode": "//div[contains(@class, 'module-tab-content')]/div[contains(@class, 'module-tab-item')]/span",
  "dtFromName": "/text()",
  "dtUrlNode": "//div[contains(@class, 'module-blocklist')]",
  "dtUrlSubNode": "/div/a",
  "dtUrlId": "/@href",
  "dtUrlIdR": "/play/(\\S+).html",
  "dtUrlName": "/span/text()",
  "playUrl": "https://www.17skr.com/play/{playUrl}.html",

  "searchUrl": "https://www.17skr.com/index.php/ajax/suggest?mid=1&wd={wd}&limit=30",
  "scVodNode": "json:list",
  "scVodName": "name",
  "scVodId": "id",
  "scVodIdR": "",
  "scVodImg": "pic",
  "scVodMark": ""
}


类型

n: 全部

v: yanqing

n: 言情

v: ouxiang

n: 偶像

v: dushi

n: 都市

v: zhanzheng

n: 战争

v: xuanyi

n: 悬疑

v: lunli

n: 伦理

v: jingsong

n: 惊悚

v: wangluoju

n: 网络剧

v: jingfei

n: 警匪

v: guzhuang

n: 古装

v: wuxia

n: 武侠

v: shenhua

n: 神话

v: lishi

n: 历史

v: dongzuo

n: 动作

v: diezhan

n: 谍战

v: xiju

n: 喜剧

v: kangri

n: 抗日

v: jiating

n: 家庭

v: juqing

n: 剧情

v: lizhi

n: 励志

v: nongcun

n: 农村

v: kehuan

n: 科幻

v: junlv

n: 军旅

v: qihuan

n: 奇幻

v: qita

n: 其它

key: type

地区

v: neidi

n: 内地

v: taiwan

n: 台湾

v: xianggang

n: 香港

v: hanguo

n: 韩国

v: meiguo

n: 美国

v: taiguo

n: 泰国

v: riben

n: 日本

v: yingguo

n: 英国

v: xinjiapo

n: 新加坡

key: area

年份

n: 90年代

n: 更早

key: year

类型

v: lxxuanxiu/

n: 选秀

v: lxqinggan/

n: 情感

v: lxfangtan/

n: 访谈

v: lxgaoxiao/

n: 搞笑

v: lxyouxi/

n: 游戏

v: lxzhichang/

n: 职场

v: lxyule/

n: 娱乐

v: lxzhenrenxiu/

n: 真人秀

v: lxshenghuo/

n: 生活

v: lxtiyu/

n: 体育

v: lxshenghui/


cateName: /text()

homeVodNode: //div[contains(@class, 'vodlist hotgrow') and @id='hot1']//a[@class='aplus-exp ecimgbor']

homeVodImgR: \S+(http\S+)

homeVodMark: /span[@class='pack-prb hidden']/text()

cateVodNode: //div[contains(@class, 'vodlist hotgrow')]//a[@class='aplus-exp ecimgbor']

cateVodImgR: \S+(http\S+)

cateVodMark: /span[@class='pack-prb hidden']/text()

dtName: //div[@class='s-top-info-title cf wow fadeInDownBig']/h1/text()

dtImg: //div[@class='s-cover box']/a/img/@src

dtImgR: \S+(http\S+)

dtDesc: //span[contains(@id, 'cText')]/text()

分类

key: cateId

n: 全部

n: 4K电影

n: 4K电视剧

地区

n: 大陆

v: 大陆

n: 香港

v: 香港

n: 台湾

v: 台湾

n: 美国

v: 美国

n: 法国

v: 法国

v: 英国

v: 日本

n: 韩国

v: 韩国

n: 德国

v: 德国

v: 泰国

n: 印度

v: 印度

n: 意大利

v: 意大利

n: 西班牙

v: 西班牙

n: 加拿大

v: 加拿大

n: 其他

v: 其他

分类

n: 动作片

n: 喜剧片

n: 爱情片

n: 科幻片

n: 恐怖片

n: 剧情片

n: 战争片

n: 纪录片

n: 灾难片

n: 魔幻片

n: 青春片

n: 犯罪片

n: 悬疑片

n: 微电影

n: 音乐片

n: B站电影


type_name: 电影

type_name: 电视剧

type_name: 综艺

type_name: 动漫

类型

key: cat

n: 全部

n: 喜剧

v: 喜剧

n: 爱情

v: 爱情

n: 动作

v: 动作

n: 恐怖

v: 恐怖

n: 科幻

v: 科幻

n: 剧情

v: 剧情

n: 犯罪

v: 犯罪

n: 奇幻

v: 奇幻

n: 战争

v: 战争

n: 悬疑

v: 悬疑

n: 动画

v: 动画

n: 文艺

v: 文艺

n: 纪录

v: 纪录

n: 传记

v: 传记

n: 歌舞

v: 歌舞

n: 古装

v: 古装

n: 历史

v: 历史

n: 惊悚

v: 惊悚

n: 伦理

v: 伦理

n: 其他

年代

n: 更早

地区

n: 内地

n: 中国香港

n: 中国台湾

n: 泰国

n: 美国

n: 韩国

n: 日本

n: 法国

n: 英国

n: 德国

n: 印度

排序

key: rank

n: 最近热映

v: rankhot

n: 最近上映

v: ranklatest

n: 最受好评

v: rankpoint

类型

n: 言情

v: 言情

n: 都市

v: 都市

n: 偶像

v: 偶像


ua: Mozilla/5.0 (Android 12; Mobile; rv:68.0) Gecko/68.0 Firefox/99.0

剧集: dianshiju

动漫: dongman

综艺: zongyi

dtUrlName: /span/text()

類型

key: catelog

n: 全部

n: 院线

v: 院线

n: 喜剧

v: 喜剧

n: 爱情

v: 爱情

n: 恐怖

v: 恐怖

n: 动作

v: 动作

n: 科幻

v: 科幻

n: 剧情

v: 剧情

n: 战争

v: 战争

n: 警匪

v: 警匪

n: 犯罪

v: 犯罪

n: 动画

n: 奇幻

v: 奇幻

n: 武侠

v: 武侠

n: 冒险

v: 冒险

n: 枪战

v: 枪战

n: 悬疑

n: 惊悚

n: 经典

v: 经典

n: 青春

v: 青春

n: 文艺

n: 微电影

v: 微电影

n: 古装

n: 历史

n: 运动

v: 运动

n: 农村

v: 农村

n: 儿童

v: 儿童

n: 网络电影

v: 网络电影

地区

n: 大陆

v: 大陆

v: 美国

v: 日本

v: 韩国

n: 香港

v: 香港

n: 台湾

v: 台湾

v: 法国

v: 英国

v: 德国

v: 泰国

v: 印度

n: 意大利

v: 意大利

n: 西班牙

v: 西班牙


author: zhao xiaoyun

cateNode: //ul[contains(@class,'myui-header__menu')]/li/a[contains(@href, 'vodtype') and not(contains(@href,'label'))]

dtDesc: //div[@class='myui-content__detail']//span[contains(@class,'text-muted') and contains(text(), '简介')]/parent::text()

dtFromNode: //a[@data-toggle='tab' and contains(@href, 'playlist')]


类型

n: 全部

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: 恐怖

v: 惊悚

n: 丧尸

v: 丧尸

n: 战争

v: 战争

n: 传记

v: 传记

n: 纪录

v: 纪录

n: 犯罪

v: 犯罪

n: 悬疑

v: 悬疑

n: 西部

v: 西部

n: 灾难

v: 灾难

v: 古装

n: 武侠

v: 武侠

n: 家庭

v: 家庭

n: 短片

v: 短片

n: 校园

v: 校园

v: 文艺

v: 运动

v: 青春

n: 同性

v: 同性

n: 励志

v: 励志

n: 人性

v: 人性

n: 美食

v: 美食

n: 女性

v: 女性

n: 治愈

v: 治愈

v: 历史

n: 真人秀

v: 真人秀

n: 脱口秀

v: 脱口秀


dtDirector: //span[contains(@class,'text-muted') and contains(text(), '导演')]/following-sibling::*/text()

dtActor: //span[contains(@class,'text-muted') and contains(text(), '主演')]/following-sibling::*/text()

dtYear: //span[contains(@class,'text-muted') and contains(text(), '年代')]/following-sibling::*/text()

dtMark: //span[contains(@class,'text-muted') and contains(text(), '集数')]/following-sibling::*/text()

dtDesc: //span[contains(@class,'text-muted') and contains(text(), '剧情')]/following-sibling::*/text()

key: class

n: 全部

n: 警匪片

v: 警匪片

n: 恐怖片

v: 恐怖片

n: 惊悚片

v: 惊悚片

n: 悬疑片

v: 悬疑片

n: 科幻片

v: 科幻片

n: 战争片

v: 战争片

n: 动作片

v: 动作片

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: by

v: addtime

n: 时间

v: id

n: 人气

v: hits

n: 国产剧

v: 国产剧

n: 日韩剧

v: 日韩剧

n: 欧美剧

v: 欧美剧

n: 海外剧

v: 海外剧

n: 国产动漫

v: 国产动漫

n: 日韩动漫

v: 日韩动漫

n: 欧美动漫

v: 欧美动漫

n: 动画片

v: 动画片


code:
{
  "author":"Tangsan99999",
  "ua": "",
  "homeUrl": "http://789ba.com",
  //  "dcVipFlag": "false",
  //  "dcShow2Vip": {},
  "dcPlayUrl": "true",
  "cateNode": "//div[contains(@class,'stui-header_bd')]/ul[contains(@class, 'menu')]/li/a[contains(@href,'list')]",
  "cateName": "/text()",
  "cateId": "/@href",
  "cateIdR": "/list/(\\S+).html",
  "cateManual": {},
  "homeVodNode": "//div[contains(@class, 'stui-vodlist__box')]/a",
  "homeVodName": "/@title",
  "homeVodId": "/@href",
  "homeVodIdR": "/vod/(\\w+).html",
  "homeVodImg": "/@data-original",
  "homeVodImgR": "\\S+(http\\S+)",
  "homeVodMark": "/span[contains(@class,'pic-text')]/text()",
  "cateUrl": "http://789ba.com/show/{cateId}-{area}-{by}------{catePg}---{year}.html",
  "cateVodNode": "//div[contains(@class, 'stui-vodlist__box')]/a",
  "cateVodName": "/@title",
  "cateVodId": "/@href",
  "cateVodIdR": "/vod/(\\w+).html",
  "cateVodImg": "/@data-original",
  "cateVodImgR": "\\S+(http\\S+)",
  "cateVodMark": "/span[contains(@class,'pic-text')]/text()",
  "dtUrl": "http://789ba.com/vod/{vid}.html",
  "dtNode": "//body",
  "dtName": "//h1[@class='title']/text()",
  "dtNameR": "",
  "dtImg": "//div[@class='stui-content__thumb']/a/img/@data-original",
  "dtImgR": "\\S+(http\\S+)",
  "dtCate": "//p[@class='data']/span[contains(text(), '类型：')]/parent::*/a/text()",
  "dtCateR": "",
  "dtActor": "//p[@class='data']/span[contains(text(), '主演')]/parent::*/a/text()",
  "dtActorR": "",
  "dtDirector": "//p[@class='data']/span[contains(text(), '导演：')]/parent::*/a/text()",
  "dtDirectorR": "",
  "dtDesc": "//span[contains(text(), '简介：')]/parent::*/text()",
  "dtDescR": "",
  "dtFromNode": "//h3[contains(text(), '播放')]",
  "dtFromName": "concat('播放源',count(parent::*/preceding::*//h3[contains(text(), '播放')]) + 1)",
  "dtFromNameR": "(\\S+).0",
  "dtUrlNode": "//ul[contains(@class, 'stui-content__playlist')]",
  "dtUrlSubNode": "/li/a",
  "dtUrlId": "@href",
  "dtUrlIdR": "/play/(\\S+).html",
  "dtUrlName": "/text()",
  "dtUrlNameR": "",
  "playUrl": "http://789ba.com/play/{playUrl}.html",
  "playUa": "",
  "searchUrl": "http://789ba.com/index.php/ajax/suggest?mid=1&wd={wd}&limit=10",
  "scVodNode": "json:list",
  "scVodName": "name",
  "scVodId": "id",
  "scVodIdR": "",
  "scVodImg": "pic",
  "scVodMark": "",
  "filter": {
    "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": "其他"}
        ]
      },
      {
        "key": "year",
        "name": "年份",
        "value": [
          {"n": "全部","v": ""},
          {"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"}
        ]
      }
    ],
    "1": [
      {
        "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": "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": "area",
        "name": "地区",
        "value": [
          {"n": "全部","v": ""},
          {"n": "内地","v": "内地"},
          {"n": "港台","v": "港台"},
          {"n": "日韩","v": "日韩"},
          {"n": "欧美","v": "欧美"}
        ]
      },
      {
        "key": "year",
        "name": "年份",
        "value": [
          {"n": "全部","v": ""},
          {"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"}
        ]
      }
    ],
    "4": [
      {
        "key": "area",
        "name": "地区",
        "value": [
          {"n": "全部","v": ""},
          {"n": "国产","v": "国产"},
          {"n": "日本","v": "日本"},
          {"n": "欧美","v": "欧美"},
          {"n": "其它","v": "其它"}
        ]
      },
      {
        "key": "year",
        "name": "年份",
        "value": [
          {"n": "全部","v": ""},
          {"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"}
        ]
      }
    ]
  }
}


cateNode: //ul[contains(@class,'navbar-nav')]/li/a[contains(@href, '.html') and not(contains(@href, '6'))]

homeVodNode: //div[@class='col-md-12 movie-item-out']//a[not(contains(@href, '6'))]/parent::*/parent::*/parent::*/div[contains(@class, 'movie-item-out') and position()<10]/div[@class='movie-item']/a

homeVodMark: /button/text()

cateVodMark: /button/text()

dtCate: //div[@class='col-md-8']//span[@class='info-label' and contains(text(), '类型')]/parent::*/following-sibling::*/text()

dtYear: //div[@class='col-md-8']//span[@class='info-label' and contains(text(), '日期')]/parent::*/following-sibling::*/text()

dtArea: //div[@class='col-md-8']//span[@class='info-label' and contains(text(), '国家')]/parent::*/following-sibling::*/text()

dtMark: //div[@class='col-md-8']//span[@class='info-label' and contains(text(), '状态')]/parent::*/following-sibling::*/text()

dtActor: //div[@class='col-md-8']//span[@class='info-label' and contains(text(), '主演')]/parent::*/following-sibling::*/text()

dtDirector: //div[@class='col-md-8']//span[@class='info-label' and contains(text(), '导演')]/parent::*/following-sibling::*/text()

scVodMark: /button/text()


电影: zuijinrebodianying

电视剧: zuijinrebodianshiju

美剧: rebomeiju

日韩剧: reborihanju

国配电影: gypy

国配外剧: guoyupeiyinhanju

homeVodNode: //li[@class='col-lg-6 col-md-6 col-sm-4 col-xs-3']/div/a

cateVodNode: //li[@class='col-lg-8 col-md-6 col-sm-4 col-xs-3']/div/a

dtFromNode: //ul[@class='nav nav-tabs active']/li/a

dtUrlNode: //ul[@class='myui-content__list scrollbar sort-list clearfix']


sh: 手机线路

sh: 9亿超清

sh: 手机线路2

sh: 九亿超清

sh: HD超清线路

sh: 超清线路

sh: 九亿线路

sh: 九亿动漫

sh: 九亿备用

sh: 九亿解析-弃用

sh: 九亿超清11

sh: VIP线路

sh: 九亿解析

sh: 线路三

sh: 线路四

sh: 线路二

sh: 测试

sh: test

类型

key: tid

n: 全部

n: 国语配音电影

v: gypy

n: 最近热播电影

v: zuijinrebodianying

n: 动作片

v: dongzuopian

n: 喜剧片

v: xijupian

n: 爱情片

v: aiqingpian

n: 科幻片

v: kehuanpian

n: 恐怖片

v: kongbupian

n: 剧情片

v: juqingpian

n: 战争片

v: zhanzhengpian

剧情

n: 喜剧

v: 喜剧

n: 爱情

v: 爱情

n: 恐怖

v: 恐怖

n: 动作

v: 动作

n: 科幻

v: 科幻

n: 剧情

v: 剧情

n: 战争

v: 战争

n: 警匪

v: 警匪

n: 犯罪

v: 犯罪

n: 动画

v: 动画

n: 奇幻

v: 奇幻

n: 武侠

v: 武侠

n: 冒险

v: 冒险

n: 枪战

v: 枪战

n: 悬疑

v: 悬疑

n: 惊悚

v: 惊悚

n: 经典

v: 经典

n: 青春

v: 青春

n: 文艺

v: 文艺

n: 微电影

v: 微电影

n: 古装

v: 古装

n: 历史

v: 历史

n: 运动

v: 运动

n: 农村

v: 农村

n: 儿童

v: 儿童

n: 网络电影

v: 网络电影

地区

n: 中国大陆

v: 中国大陆