From 925c5e166b01592561753766425b17d1c496db41 Mon Sep 17 00:00:00 2001
From: Friendfeng <3880261409@qq.com>
Date: Fri, 6 Jun 2025 23:33:48 +0800
Subject: [PATCH] new file: FFAI/__pycache__/analyzer.cpython-313.pyc
new file: FFAI/__pycache__/crawlers.cpython-313.pyc new file:
FFAI/analyzer.py new file: FFAI/crawlers.py new file:
FFAI/main.py renamed: main/build/newtest/Analysis-00.toc ->
test/build/newtest/Analysis-00.toc renamed:
main/build/newtest/COLLECT-00.toc -> test/build/newtest/COLLECT-00.toc
renamed: main/build/newtest/EXE-00.toc -> test/build/newtest/EXE-00.toc
renamed: main/build/newtest/PKG-00.toc -> test/build/newtest/PKG-00.toc
renamed: main/build/newtest/PYZ-00.pyz -> test/build/newtest/PYZ-00.pyz
renamed: main/build/newtest/PYZ-00.toc -> test/build/newtest/PYZ-00.toc
renamed: main/build/newtest/base_library.zip ->
test/build/newtest/base_library.zip renamed:
main/build/newtest/localpycs/pyimod01_archive.pyc ->
test/build/newtest/localpycs/pyimod01_archive.pyc renamed:
main/build/newtest/localpycs/pyimod02_importers.pyc ->
test/build/newtest/localpycs/pyimod02_importers.pyc renamed:
main/build/newtest/localpycs/pyimod03_ctypes.pyc ->
test/build/newtest/localpycs/pyimod03_ctypes.pyc renamed:
main/build/newtest/localpycs/pyimod04_pywin32.pyc ->
test/build/newtest/localpycs/pyimod04_pywin32.pyc renamed:
main/build/newtest/localpycs/struct.pyc ->
test/build/newtest/localpycs/struct.pyc renamed:
main/build/newtest/newtest.exe -> test/build/newtest/newtest.exe
renamed: main/build/newtest/newtest.pkg -> test/build/newtest/newtest.pkg
renamed: main/build/newtest/warn-newtest.txt ->
test/build/newtest/warn-newtest.txt renamed:
main/build/newtest/xref-newtest.html -> test/build/newtest/xref-newtest.html
new file: test/dist/newtest/_internal/VCRUNTIME140.dll renamed:
main/dist/newtest/_internal/_bz2.pyd -> test/dist/newtest/_internal/_bz2.pyd
renamed: main/dist/newtest/_internal/_decimal.pyd ->
test/dist/newtest/_internal/_decimal.pyd renamed:
main/dist/newtest/_internal/_hashlib.pyd ->
test/dist/newtest/_internal/_hashlib.pyd renamed:
main/dist/newtest/_internal/_lzma.pyd ->
test/dist/newtest/_internal/_lzma.pyd renamed:
main/dist/newtest/_internal/_socket.pyd ->
test/dist/newtest/_internal/_socket.pyd renamed:
main/dist/newtest/_internal/api-ms-win-core-console-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-console-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-datetime-l1-1-0.dll
-> test/dist/newtest/_internal/api-ms-win-core-datetime-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-debug-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-debug-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-errorhandling-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-errorhandling-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-fibers-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-fibers-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-file-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-file-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-file-l1-2-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-file-l1-2-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-file-l2-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-file-l2-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-handle-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-handle-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-heap-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-heap-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-interlocked-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-interlocked-l1-1-0.dll
renamed:
main/dist/newtest/_internal/api-ms-win-core-libraryloader-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-libraryloader-l1-1-0.dll
renamed:
main/dist/newtest/_internal/api-ms-win-core-localization-l1-2-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-localization-l1-2-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-memory-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-memory-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-namedpipe-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-namedpipe-l1-1-0.dll
renamed:
main/dist/newtest/_internal/api-ms-win-core-processenvironment-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-processenvironment-l1-1-0.dll
renamed:
main/dist/newtest/_internal/api-ms-win-core-processthreads-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-processthreads-l1-1-0.dll
renamed:
main/dist/newtest/_internal/api-ms-win-core-processthreads-l1-1-1.dll ->
test/dist/newtest/_internal/api-ms-win-core-processthreads-l1-1-1.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-profile-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-profile-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll
-> test/dist/newtest/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-string-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-string-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-synch-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-synch-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-synch-l1-2-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-synch-l1-2-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-core-sysinfo-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-sysinfo-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-timezone-l1-1-0.dll
-> test/dist/newtest/_internal/api-ms-win-core-timezone-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-core-util-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-core-util-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-conio-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-conio-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-convert-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-convert-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-environment-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-environment-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-crt-filesystem-l1-1-0.dll
-> test/dist/newtest/_internal/api-ms-win-crt-filesystem-l1-1-0.dll
renamed: main/dist/newtest/_internal/api-ms-win-crt-heap-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-heap-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-locale-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-locale-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-math-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-math-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-process-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-process-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-runtime-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-runtime-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-stdio-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-stdio-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-string-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-string-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-time-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-time-l1-1-0.dll renamed:
main/dist/newtest/_internal/api-ms-win-crt-utility-l1-1-0.dll ->
test/dist/newtest/_internal/api-ms-win-crt-utility-l1-1-0.dll renamed:
main/dist/newtest/_internal/base_library.zip ->
test/dist/newtest/_internal/base_library.zip renamed:
main/dist/newtest/_internal/libcrypto-3.dll ->
test/dist/newtest/_internal/libcrypto-3.dll renamed:
main/dist/newtest/_internal/python313.dll ->
test/dist/newtest/_internal/python313.dll renamed:
main/dist/newtest/_internal/select.pyd ->
test/dist/newtest/_internal/select.pyd renamed:
main/dist/newtest/_internal/ucrtbase.dll ->
test/dist/newtest/_internal/ucrtbase.dll renamed:
main/dist/newtest/_internal/unicodedata.pyd ->
test/dist/newtest/_internal/unicodedata.pyd renamed:
main/dist/newtest/newtest.exe -> test/dist/newtest/newtest.exe
renamed: main/newtest.py -> test/newtest.py renamed:
main/newtest.spec -> test/newtest.spec
---
FFAI/__pycache__/analyzer.cpython-313.pyc | Bin 0 -> 2586 bytes
FFAI/__pycache__/crawlers.cpython-313.pyc | Bin 0 -> 4682 bytes
FFAI/analyzer.py | 39 ++++++++++
FFAI/crawlers.py | 71 ++++++++++++++++++
FFAI/main.py | 59 +++++++++++++++
{main => test}/build/newtest/Analysis-00.toc | 0
{main => test}/build/newtest/COLLECT-00.toc | 0
{main => test}/build/newtest/EXE-00.toc | 0
{main => test}/build/newtest/PKG-00.toc | 0
{main => test}/build/newtest/PYZ-00.pyz | Bin
{main => test}/build/newtest/PYZ-00.toc | 0
{main => test}/build/newtest/base_library.zip | Bin
.../newtest/localpycs/pyimod01_archive.pyc | Bin
.../newtest/localpycs/pyimod02_importers.pyc | Bin
.../newtest/localpycs/pyimod03_ctypes.pyc | Bin
.../newtest/localpycs/pyimod04_pywin32.pyc | Bin
.../build/newtest/localpycs/struct.pyc | Bin
{main => test}/build/newtest/newtest.exe | Bin
{main => test}/build/newtest/newtest.pkg | Bin
{main => test}/build/newtest/warn-newtest.txt | 0
.../build/newtest/xref-newtest.html | 0
test/dist/newtest/_internal/VCRUNTIME140.dll | Bin 0 -> 120400 bytes
.../dist/newtest/_internal/_bz2.pyd | Bin
.../dist/newtest/_internal/_decimal.pyd | Bin
.../dist/newtest/_internal/_hashlib.pyd | Bin
.../dist/newtest/_internal/_lzma.pyd | Bin
.../dist/newtest/_internal/_socket.pyd | Bin
.../api-ms-win-core-console-l1-1-0.dll | Bin
.../api-ms-win-core-datetime-l1-1-0.dll | Bin
.../api-ms-win-core-debug-l1-1-0.dll | Bin
.../api-ms-win-core-errorhandling-l1-1-0.dll | Bin
.../api-ms-win-core-fibers-l1-1-0.dll | Bin
.../_internal/api-ms-win-core-file-l1-1-0.dll | Bin
.../_internal/api-ms-win-core-file-l1-2-0.dll | Bin
.../_internal/api-ms-win-core-file-l2-1-0.dll | Bin
.../api-ms-win-core-handle-l1-1-0.dll | Bin
.../_internal/api-ms-win-core-heap-l1-1-0.dll | Bin
.../api-ms-win-core-interlocked-l1-1-0.dll | Bin
.../api-ms-win-core-libraryloader-l1-1-0.dll | Bin
.../api-ms-win-core-localization-l1-2-0.dll | Bin
.../api-ms-win-core-memory-l1-1-0.dll | Bin
.../api-ms-win-core-namedpipe-l1-1-0.dll | Bin
...-ms-win-core-processenvironment-l1-1-0.dll | Bin
.../api-ms-win-core-processthreads-l1-1-0.dll | Bin
.../api-ms-win-core-processthreads-l1-1-1.dll | Bin
.../api-ms-win-core-profile-l1-1-0.dll | Bin
.../api-ms-win-core-rtlsupport-l1-1-0.dll | Bin
.../api-ms-win-core-string-l1-1-0.dll | Bin
.../api-ms-win-core-synch-l1-1-0.dll | Bin
.../api-ms-win-core-synch-l1-2-0.dll | Bin
.../api-ms-win-core-sysinfo-l1-1-0.dll | Bin
.../api-ms-win-core-timezone-l1-1-0.dll | Bin
.../_internal/api-ms-win-core-util-l1-1-0.dll | Bin
.../_internal/api-ms-win-crt-conio-l1-1-0.dll | Bin
.../api-ms-win-crt-convert-l1-1-0.dll | Bin
.../api-ms-win-crt-environment-l1-1-0.dll | Bin
.../api-ms-win-crt-filesystem-l1-1-0.dll | Bin
.../_internal/api-ms-win-crt-heap-l1-1-0.dll | Bin
.../api-ms-win-crt-locale-l1-1-0.dll | Bin
.../_internal/api-ms-win-crt-math-l1-1-0.dll | Bin
.../api-ms-win-crt-process-l1-1-0.dll | Bin
.../api-ms-win-crt-runtime-l1-1-0.dll | Bin
.../_internal/api-ms-win-crt-stdio-l1-1-0.dll | Bin
.../api-ms-win-crt-string-l1-1-0.dll | Bin
.../_internal/api-ms-win-crt-time-l1-1-0.dll | Bin
.../api-ms-win-crt-utility-l1-1-0.dll | Bin
.../dist/newtest/_internal/base_library.zip | Bin
.../dist/newtest/_internal/libcrypto-3.dll | Bin
.../dist/newtest/_internal/python313.dll | Bin
.../dist/newtest/_internal/select.pyd | Bin
.../dist/newtest/_internal/ucrtbase.dll | Bin
.../dist/newtest/_internal/unicodedata.pyd | Bin
{main => test}/dist/newtest/newtest.exe | Bin
{main => test}/newtest.py | 0
{main => test}/newtest.spec | 0
75 files changed, 169 insertions(+)
create mode 100644 FFAI/__pycache__/analyzer.cpython-313.pyc
create mode 100644 FFAI/__pycache__/crawlers.cpython-313.pyc
create mode 100644 FFAI/analyzer.py
create mode 100644 FFAI/crawlers.py
create mode 100644 FFAI/main.py
rename {main => test}/build/newtest/Analysis-00.toc (100%)
rename {main => test}/build/newtest/COLLECT-00.toc (100%)
rename {main => test}/build/newtest/EXE-00.toc (100%)
rename {main => test}/build/newtest/PKG-00.toc (100%)
rename {main => test}/build/newtest/PYZ-00.pyz (100%)
rename {main => test}/build/newtest/PYZ-00.toc (100%)
rename {main => test}/build/newtest/base_library.zip (100%)
rename {main => test}/build/newtest/localpycs/pyimod01_archive.pyc (100%)
rename {main => test}/build/newtest/localpycs/pyimod02_importers.pyc (100%)
rename {main => test}/build/newtest/localpycs/pyimod03_ctypes.pyc (100%)
rename {main => test}/build/newtest/localpycs/pyimod04_pywin32.pyc (100%)
rename {main => test}/build/newtest/localpycs/struct.pyc (100%)
rename {main => test}/build/newtest/newtest.exe (100%)
rename {main => test}/build/newtest/newtest.pkg (100%)
rename {main => test}/build/newtest/warn-newtest.txt (100%)
rename {main => test}/build/newtest/xref-newtest.html (100%)
create mode 100644 test/dist/newtest/_internal/VCRUNTIME140.dll
rename {main => test}/dist/newtest/_internal/_bz2.pyd (100%)
rename {main => test}/dist/newtest/_internal/_decimal.pyd (100%)
rename {main => test}/dist/newtest/_internal/_hashlib.pyd (100%)
rename {main => test}/dist/newtest/_internal/_lzma.pyd (100%)
rename {main => test}/dist/newtest/_internal/_socket.pyd (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-console-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-datetime-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-debug-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-errorhandling-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-fibers-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-file-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-file-l1-2-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-file-l2-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-handle-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-heap-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-interlocked-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-libraryloader-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-localization-l1-2-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-memory-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-namedpipe-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-processenvironment-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-processthreads-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-processthreads-l1-1-1.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-profile-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-string-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-synch-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-synch-l1-2-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-sysinfo-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-timezone-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-core-util-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-conio-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-convert-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-environment-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-filesystem-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-heap-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-locale-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-math-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-process-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-runtime-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-stdio-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-string-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-time-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/api-ms-win-crt-utility-l1-1-0.dll (100%)
rename {main => test}/dist/newtest/_internal/base_library.zip (100%)
rename {main => test}/dist/newtest/_internal/libcrypto-3.dll (100%)
rename {main => test}/dist/newtest/_internal/python313.dll (100%)
rename {main => test}/dist/newtest/_internal/select.pyd (100%)
rename {main => test}/dist/newtest/_internal/ucrtbase.dll (100%)
rename {main => test}/dist/newtest/_internal/unicodedata.pyd (100%)
rename {main => test}/dist/newtest/newtest.exe (100%)
rename {main => test}/newtest.py (100%)
rename {main => test}/newtest.spec (100%)
diff --git a/FFAI/__pycache__/analyzer.cpython-313.pyc b/FFAI/__pycache__/analyzer.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..ca0b8e422b164659d8737b9fe9df67685ec01a0a
GIT binary patch
literal 2586
zcmaJ?U2Gdg5Z?Rs`SRoZG}KMw+ASun0Xs-dXhTh<{-h0rMv%i4l)&j~pJNy2F5Nqm
zra}nuP^Ax05JV&bDG?xKkU*v4p&*ceCmw4oNLUI&f&hI>>x!y8F?)B;Pg_{~W@m4H
zc6N5=yJ|y&j9?5&2XdnVLch^PZSWpby%(5iq#%VEK$y<#0P`@5*$4`vZAjtTk;3<|
zt~TaInV4{yE(T)^@f|RWhOOhYD|M;QTT~whW*Utk%qR%63WK>3UhymJh@fyIVmGhw
z?dUjvoayllun*+Ii0ElZ-J&8=jTO0H@nLyXipiw@(IVFO8CqfTl#VacqY&XlQOA=+
z#JXL?M%oM5aZMxQ;HkdB(1?bemy`^x)$-mBL85LRDW(T3>Db{;C3krqEFB
z%$}4^wWtkl&3^th3Ld-ayA}282pRm7-T&ur57^P&j|34KuB-V=F^zD6DZUZy
bw%0s0j2|yWR*&u|t7Xy&9L|hnj2r>a2*0uV#5vRHOu3%Tfd#
z8AYfLQGZdi72Ugfc#?D@YwKDYGcG-0|3gHH)XI~(5(#V6@T+RWsQ(ZN%E!aive6k{>H2;xhd
zP?d%q^Apyz2tTgbIU?#O^OkK9pdY%wyB4H4Yp4;EVi}3IsDr2>rYR~mxAqc@~k}H`$I53)xQ|n
zH22KxGnG*M`#}6s+oqYPW(MX@l!7JsV*Ac>%2&I-Ya96X#Nw9lTy{45R_@iq*Ew{@
zBh0T&p@pVsxhc9Bx@#d6FNfl#?73r=Q14>6^NPTAw)~B_=GH5Iv?;ONgqlJZrH<I*#oA>t$-}K4{e15`bG+SHOuM(&@{ThX8S=X=h?M-8~e+iG#_onA^2ZqXAIF~LW{!nMlQI3bH-zCpr7(vYo{
zLCtrBfPDjv@yjK
z3jW-vZpT={Chj9l#-d0XiQo`S#Gf414gKUe-b=QxD`BtN6Ul;^)(Y0%#EK%dvpRrW
zhI+oZIeFebw{@;>wr{?(v~8gyez7Bd-o9b+pzzX`2(#{_v?iRB-VMx}lR}2gW(Cni
zc;^AMbk4=V6^59sGd8Mkgo{Cb#w!n3e{P0SUunwE%Hq>+Jjd=mn;<>HX(FKk7x)
z+zQz!;(`MfF`oFW;@Fr5A0z2meR9IY84F&SMVtn}2-NT+2l!*+$(Vp?gqY$V;g6en
z11IRZ3rI}F5z4!u<{1!4D-=}cCbm-{{d`-r`dplGZ@}kenrygT{x?#Smw`CY(HdT8
zNt9a>rDCO}XUexMq7570-2K|_^5*0xc4c$2(wdx-eyM9&tlu!h&7|jYv$=9--)BcF
zoqd%pedSH
zzbAikxExMi@e57zG7|jqjjJLG-gkq9lP)rBZQL(OU-vZbZ;Syji(OtC=udKCazD|nKC3eb!#yO1|@!=z%%*6e(GOt*7phH#b*m`}mqOL-=r
zwlV!6k~UR!RaMQlasF7*)-6?aqNsu#IjMDTi(VNmMr#1bX|yObUtt46XvSJbFkOgV
zqf?bbV#_jpzr4-k|aGMH}3!d
literal 0
HcmV?d00001
diff --git a/FFAI/__pycache__/crawlers.cpython-313.pyc b/FFAI/__pycache__/crawlers.cpython-313.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8bfb92aa51875b57ef4fb4ddd4822aa4ba932db3
GIT binary patch
literal 4682
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
R|1E~88F=n1g0-&Ue*g`=CDi}`
literal 0
HcmV?d00001
diff --git a/FFAI/analyzer.py b/FFAI/analyzer.py
new file mode 100644
index 0000000..19b68d5
--- /dev/null
+++ b/FFAI/analyzer.py
@@ -0,0 +1,39 @@
+import re
+from collections import Counter
+
+class PureAnalyzer:
+ @staticmethod
+ def search_in_cache(query: str, cache_dir="cache") -> list:
+ """在缓存中检索历史记录"""
+ if not os.path.exists(cache_dir):
+ return []
+
+ related_files = []
+ safe_query = query.lower()
+ for filename in os.listdir(cache_dir):
+ if safe_query in filename.lower():
+ with open(f"{cache_dir}/{filename}", "r", encoding="utf-8") as f:
+ content = f.read()
+ related_files.append({
+ "query": filename.replace(".txt", ""),
+ "content": content
+ })
+ return related_files
+
+ @staticmethod
+ def analyze(data: list, query: str) -> dict:
+ # 先检查缓存中的相关记录
+ history = PureAnalyzer.search_in_cache(query)
+
+ # 合并新旧数据
+ all_text = " ".join(d.get("text", "") for d in data)
+ if history:
+ all_text += " " + " ".join(h["content"] for h in history)
+
+ # ...(保持原有的分析逻辑)...
+ return {
+ "summary": summary,
+ "keywords": keywords,
+ "sources": [d["url"] for d in data],
+ "related_history": [h["query"] for h in history]
+ }
\ No newline at end of file
diff --git a/FFAI/crawlers.py b/FFAI/crawlers.py
new file mode 100644
index 0000000..e0130b2
--- /dev/null
+++ b/FFAI/crawlers.py
@@ -0,0 +1,71 @@
+import urllib.request
+import os
+import time
+from urllib.parse import quote
+from html.parser import HTMLParser
+
+class PureHTMLParser(HTMLParser):
+ # ...(保持之前的HTML解析器代码不变)...
+
+ class PureCrawler:
+ def __init__(self, cache_dir="cache"):
+ self.user_agent = "Mozilla/5.0"
+ self.parser = PureHTMLParser()
+ self.cache_dir = cache_dir
+ os.makedirs(cache_dir, exist_ok=True)
+
+ def _get_cache_path(self, query: str) -> str:
+ """生成缓存文件名"""
+ safe_query = "".join(c if c.isalnum() else "_" for c in query)
+ return f"{self.cache_dir}/{safe_query}.txt"
+
+ def _save_to_cache(self, query: str, data: list):
+ """保存搜索结果到缓存"""
+ with open(self._get_cache_path(query), "w", encoding="utf-8") as f:
+ for item in data:
+ f.write(f"URL: {item['url']}\n")
+ f.write(f"Text: {item['text']}\n")
+ f.write("="*50 + "\n")
+
+ def _load_from_cache(self, query: str) -> list:
+ """从缓存加载数据"""
+ cache_file = self._get_cache_path(query)
+ if not os.path.exists(cache_file):
+ return None
+
+ with open(cache_file, "r", encoding="utf-8") as f:
+ content = f.read()
+
+ # 解析缓存文件
+ items = []
+ for block in content.split("="*50):
+ if not block.strip():
+ continue
+ url = text = ""
+ for line in block.split("\n"):
+ if line.startswith("URL: "):
+ url = line[5:]
+ elif line.startswith("Text: "):
+ text = line[6:]
+ if url:
+ items.append({"url": url, "text": text})
+ return items
+
+ def fetch(self, query: str, force_update=False) -> list:
+ """优先读取缓存,不存在时爬取"""
+ if not force_update:
+ cached = self._load_from_cache(query)
+ if cached:
+ print("📂 从缓存加载数据")
+ return cached
+
+ print("🌐 正在爬取网络数据...")
+ # ...(保持原有的爬取逻辑)...
+ data = [{"url": link, "text": self.extract_text(link)} for link in self.parser.links[:5]]
+
+ self._save_to_cache(query, data)
+ return data
+
+ def extract_text(self, url: str) -> str:
+ # ...(保持原有的正文提取逻辑)..
+ return extracted_text
\ No newline at end of file
diff --git a/FFAI/main.py b/FFAI/main.py
new file mode 100644
index 0000000..10121fc
--- /dev/null
+++ b/FFAI/main.py
@@ -0,0 +1,59 @@
+from crawlers import PureHTMLParser # type: ignore
+from analyzer import PureAnalyzer # type: ignore
+
+class PureInfoHunter:
+ def __init__(self):
+ self.crawler = PureHTMLParser()
+ self.analyzer = PureAnalyzer()
+
+ def run(self, query: str):
+ # 1. 获取数据(优先缓存)
+ data = self.crawler.fetch(query)
+
+ # 2. 分析(自动检索历史缓存)
+ result = self.analyzer.analyze(data, query)
+
+ # 3. 生成报告
+ report = "="*40 + "\n"
+ report += f"搜索词: {query}\n"
+
+ if result.get("related_history"):
+ report += f"关联历史记录: {', '.join(result['related_history'])}\n"
+
+ report += "\n分析结果:\n" + result["summary"] + "\n"
+ report += "数据来源:\n"
+ for url in result["sources"]:
+ report += f"- {url}\n"
+
+ # 保存本次报告
+ self._save_report(query, report)
+ return report
+
+ def _save_report(self, query: str, content: str):
+ """保存分析报告"""
+ safe_query = "".join(c if c.isalnum() else "_" for c in query)
+ with open(f"reports/{safe_query}_report.txt", "w", encoding="utf-8") as f:
+ f.write(content)
+ print(f"报告已保存到 reports/{safe_query}_report.txt")
+
+if __name__ == "__main__":
+ import sys
+ import os
+ os.makedirs("reports", exist_ok=True)
+
+ if len(sys.argv) < 2:
+ print("使用方法: python pure_main.py '搜索关键词' [force_update]")
+ print("示例: python pure_main.py '人工智能' true")
+ # sys.exit(1)
+
+ force_update = len(sys.argv) > 2 and sys.argv[2].lower() == "true"
+ hunter = PureInfoHunter()
+
+ if force_update:
+ print("强制更新模式(忽略缓存)")
+ data = hunter.crawler.fetch(sys.argv[1], force_update=True)
+ result = hunter.analyzer.analyze(data, sys.argv[1])
+ else:
+ result = hunter.run(sys.argv[1])
+
+ print(result)
\ No newline at end of file
diff --git a/main/build/newtest/Analysis-00.toc b/test/build/newtest/Analysis-00.toc
similarity index 100%
rename from main/build/newtest/Analysis-00.toc
rename to test/build/newtest/Analysis-00.toc
diff --git a/main/build/newtest/COLLECT-00.toc b/test/build/newtest/COLLECT-00.toc
similarity index 100%
rename from main/build/newtest/COLLECT-00.toc
rename to test/build/newtest/COLLECT-00.toc
diff --git a/main/build/newtest/EXE-00.toc b/test/build/newtest/EXE-00.toc
similarity index 100%
rename from main/build/newtest/EXE-00.toc
rename to test/build/newtest/EXE-00.toc
diff --git a/main/build/newtest/PKG-00.toc b/test/build/newtest/PKG-00.toc
similarity index 100%
rename from main/build/newtest/PKG-00.toc
rename to test/build/newtest/PKG-00.toc
diff --git a/main/build/newtest/PYZ-00.pyz b/test/build/newtest/PYZ-00.pyz
similarity index 100%
rename from main/build/newtest/PYZ-00.pyz
rename to test/build/newtest/PYZ-00.pyz
diff --git a/main/build/newtest/PYZ-00.toc b/test/build/newtest/PYZ-00.toc
similarity index 100%
rename from main/build/newtest/PYZ-00.toc
rename to test/build/newtest/PYZ-00.toc
diff --git a/main/build/newtest/base_library.zip b/test/build/newtest/base_library.zip
similarity index 100%
rename from main/build/newtest/base_library.zip
rename to test/build/newtest/base_library.zip
diff --git a/main/build/newtest/localpycs/pyimod01_archive.pyc b/test/build/newtest/localpycs/pyimod01_archive.pyc
similarity index 100%
rename from main/build/newtest/localpycs/pyimod01_archive.pyc
rename to test/build/newtest/localpycs/pyimod01_archive.pyc
diff --git a/main/build/newtest/localpycs/pyimod02_importers.pyc b/test/build/newtest/localpycs/pyimod02_importers.pyc
similarity index 100%
rename from main/build/newtest/localpycs/pyimod02_importers.pyc
rename to test/build/newtest/localpycs/pyimod02_importers.pyc
diff --git a/main/build/newtest/localpycs/pyimod03_ctypes.pyc b/test/build/newtest/localpycs/pyimod03_ctypes.pyc
similarity index 100%
rename from main/build/newtest/localpycs/pyimod03_ctypes.pyc
rename to test/build/newtest/localpycs/pyimod03_ctypes.pyc
diff --git a/main/build/newtest/localpycs/pyimod04_pywin32.pyc b/test/build/newtest/localpycs/pyimod04_pywin32.pyc
similarity index 100%
rename from main/build/newtest/localpycs/pyimod04_pywin32.pyc
rename to test/build/newtest/localpycs/pyimod04_pywin32.pyc
diff --git a/main/build/newtest/localpycs/struct.pyc b/test/build/newtest/localpycs/struct.pyc
similarity index 100%
rename from main/build/newtest/localpycs/struct.pyc
rename to test/build/newtest/localpycs/struct.pyc
diff --git a/main/build/newtest/newtest.exe b/test/build/newtest/newtest.exe
similarity index 100%
rename from main/build/newtest/newtest.exe
rename to test/build/newtest/newtest.exe
diff --git a/main/build/newtest/newtest.pkg b/test/build/newtest/newtest.pkg
similarity index 100%
rename from main/build/newtest/newtest.pkg
rename to test/build/newtest/newtest.pkg
diff --git a/main/build/newtest/warn-newtest.txt b/test/build/newtest/warn-newtest.txt
similarity index 100%
rename from main/build/newtest/warn-newtest.txt
rename to test/build/newtest/warn-newtest.txt
diff --git a/main/build/newtest/xref-newtest.html b/test/build/newtest/xref-newtest.html
similarity index 100%
rename from main/build/newtest/xref-newtest.html
rename to test/build/newtest/xref-newtest.html
diff --git a/test/dist/newtest/_internal/VCRUNTIME140.dll b/test/dist/newtest/_internal/VCRUNTIME140.dll
new file mode 100644
index 0000000000000000000000000000000000000000..411009b50a62e84f065774f35f9b5773bf31b24d
GIT binary patch
literal 120400
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