ofscraper 3.9.0.dev6__tar.gz → 3.9.0.dev9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/PKG-INFO +9 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/README.md +7 -2
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/actions/like.py +100 -30
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/actions/process.py +17 -25
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/actions/scraper.py +78 -152
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/archive.py +175 -127
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/highlights.py +163 -211
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/labels.py +159 -58
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/messages.py +204 -360
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/paid.py +83 -85
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/pinned.py +87 -28
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/profile.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/subscriptions/individual.py +1 -1
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/subscriptions/lists.py +9 -6
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/subscriptions/subscriptions.py +2 -2
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/timeline.py +257 -345
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/placeholder.py +11 -24
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/posts.py +31 -1
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/table.py +9 -9
- ofscraper-3.9.0.dev9/ofscraper/commands/check.py +587 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/commands/manual.py +79 -53
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/config.py +2 -1
- ofscraper-3.9.0.dev9/ofscraper/const/date.py +2 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/time.py +1 -1
- ofscraper-3.9.0.dev9/ofscraper/db/operations.py +241 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/helpers.py +7 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/labels.py +230 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/media.py +480 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/messages.py +227 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/others.py +250 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/posts.py +269 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/profile.py +189 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/stories.py +206 -0
- ofscraper-3.9.0.dev9/ofscraper/db/operations_/wrapper.py +127 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/alt_download.py +77 -67
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/alt_downloadbatch.py +74 -70
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/common.py +20 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/globals.py +0 -6
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/log.py +9 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/metadata.py +24 -18
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/download.py +19 -5
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/downloadnormal.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/main_download.py +68 -62
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/main_downloadbatch.py +72 -61
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/media/helpers.py +1 -1
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/media/main.py +3 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/models/retriver.py +17 -17
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/models/selector.py +12 -9
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/area.py +7 -4
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/auth.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/binary.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/config.py +6 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/menu.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/model.py +44 -35
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/profile.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/runner/load.py +2 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/actions.py +3 -2
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/areas.py +5 -5
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/common_args.py +209 -0
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/main_args.py +639 -0
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/manual_args.py +45 -0
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/message_args.py +51 -0
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/paid_args.py +53 -0
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/post_args.py +62 -0
- ofscraper-3.9.0.dev9/ofscraper/utils/args/groups/story_args.py +53 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/helpers.py +30 -22
- ofscraper-3.9.0.dev9/ofscraper/utils/args/parse.py +51 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/quality.py +1 -1
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/read.py +3 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/user.py +7 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/write.py +1 -1
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/helpers.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/config.py +1 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/schema.py +3 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/wrapper.py +1 -3
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/classes.py +54 -8
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/other.py +18 -9
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/manager.py +7 -4
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/menu.py +1 -1
- ofscraper-3.9.0.dev9/ofscraper/utils/progress.py +320 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/settings.py +6 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/text.py +1 -2
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/pyproject.toml +2 -1
- ofscraper-3.9.0.dev6/ofscraper/commands/check.py +0 -532
- ofscraper-3.9.0.dev6/ofscraper/const/date.py +0 -1
- ofscraper-3.9.0.dev6/ofscraper/db/operations.py +0 -634
- ofscraper-3.9.0.dev6/ofscraper/db/queries.py +0 -262
- ofscraper-3.9.0.dev6/ofscraper/utils/args/parse.py +0 -990
- ofscraper-3.9.0.dev6/ofscraper/utils/progress.py +0 -163
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/LICENSE +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/__main__.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/__version__.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/__version__.pye +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/actions/__init__.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/init.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/me.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/api/subscriptions/helpers.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/base.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/labels.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/media.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/models.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/multiprocessprogress.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/semaphoreDelayed.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/classes/sessionbuilder.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/commands/picker.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/commands/scraper.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/binary.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/constants.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/download.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/files.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/general.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/logger.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/other_url.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/prompts.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/req.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/test_constants.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/const/url.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/db/__init__.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/keyhelpers.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/message.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/paths.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/progress.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/sem.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/common/text.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/download/downloadbatch.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/models/date.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/models/flags.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/models/other.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/models/price.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/models/sort.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/filters/models/subtype.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/helpers/model_helpers.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/helpers/prompt_helpers.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/keybindings.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/promptConvert.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_groups/actions.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_strings.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompt_validators.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/prompts/prompts.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/runner/exit.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/runner/run.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/__init__.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/args/globals.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/context.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/data.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/file.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/make.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/request.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/auth/schema.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/binaries.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/cache.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/checkers.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/context.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/custom.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/data.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/file.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/config/menu.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/console.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/constants.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/context/exit.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/context/run_async.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/context/stdout.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/dates.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/encoding.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/hash.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/close.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/globals.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/helpers.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/logger.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/logs.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/logs/stdout.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/me.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/paths/check.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/paths/common.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/paths/manage.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/paths/paths.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/profiles/data.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/profiles/manage.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/profiles/tools.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/run.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/sems.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/separate.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/system/free.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/system/network.py +0 -0
- {ofscraper-3.9.0.dev6 → ofscraper-3.9.0.dev9}/ofscraper/utils/system/system.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ofscraper
|
|
3
|
-
Version: 3.9.0.
|
|
3
|
+
Version: 3.9.0.dev9
|
|
4
4
|
Summary: automatically scrape onlyfans
|
|
5
5
|
Author: datawhores
|
|
6
6
|
Author-email: datawhores@riseup.net
|
|
@@ -17,6 +17,7 @@ Requires-Dist: arrow (>=1.3.0,<2.0.0)
|
|
|
17
17
|
Requires-Dist: browser-cookie3 (==0.19.1)
|
|
18
18
|
Requires-Dist: bs4 (>=0.0.2,<0.0.3)
|
|
19
19
|
Requires-Dist: certifi (>=2024.2.2,<2025.0.0)
|
|
20
|
+
Requires-Dist: cloup (>=3.0.5,<4.0.0)
|
|
20
21
|
Requires-Dist: dill (>=0.3.8,<0.4.0)
|
|
21
22
|
Requires-Dist: diskcache (>=5.6.3,<6.0.0)
|
|
22
23
|
Requires-Dist: dunamai (>=1.19.2,<2.0.0)
|
|
@@ -68,8 +69,8 @@ Docker and binary releases also availible
|
|
|
68
69
|
## Dev
|
|
69
70
|
|
|
70
71
|
<div style="display: inline-block">
|
|
71
|
-
<a href="https://pypi.org/project/ofscraper/3.
|
|
72
|
-
<img src="https://img.shields.io/badge/Pre--Release-v3.
|
|
72
|
+
<a href="https://pypi.org/project/ofscraper/3.9.0.dev5/">
|
|
73
|
+
<img src="https://img.shields.io/badge/Pre--Release-v3.90.dev-dark_green.svg" alt="drawing" style="height:75px"/>
|
|
73
74
|
</a>
|
|
74
75
|
</div>
|
|
75
76
|
|
|
@@ -116,6 +117,11 @@ For detailed instructions on:
|
|
|
116
117
|
|
|
117
118
|
Open a issue in this repo, or you can mention your issue in the [Discord](#discord)
|
|
118
119
|
|
|
120
|
+
## Private Reports
|
|
121
|
+
|
|
122
|
+
A ticket can be created in the ticket channel
|
|
123
|
+
only you and admins have access to ticket discussions
|
|
124
|
+
|
|
119
125
|
# Feature Requests
|
|
120
126
|
|
|
121
127
|
[ClearFlask Feedback](https://ofscraper.clearflask.com/feedback) or [Discord](#discord)
|
|
@@ -17,8 +17,8 @@ Docker and binary releases also availible
|
|
|
17
17
|
## Dev
|
|
18
18
|
|
|
19
19
|
<div style="display: inline-block">
|
|
20
|
-
<a href="https://pypi.org/project/ofscraper/3.
|
|
21
|
-
<img src="https://img.shields.io/badge/Pre--Release-v3.
|
|
20
|
+
<a href="https://pypi.org/project/ofscraper/3.9.0.dev5/">
|
|
21
|
+
<img src="https://img.shields.io/badge/Pre--Release-v3.90.dev-dark_green.svg" alt="drawing" style="height:75px"/>
|
|
22
22
|
</a>
|
|
23
23
|
</div>
|
|
24
24
|
|
|
@@ -65,6 +65,11 @@ For detailed instructions on:
|
|
|
65
65
|
|
|
66
66
|
Open a issue in this repo, or you can mention your issue in the [Discord](#discord)
|
|
67
67
|
|
|
68
|
+
## Private Reports
|
|
69
|
+
|
|
70
|
+
A ticket can be created in the ticket channel
|
|
71
|
+
only you and admins have access to ticket discussions
|
|
72
|
+
|
|
68
73
|
# Feature Requests
|
|
69
74
|
|
|
70
75
|
[ClearFlask Feedback](https://ofscraper.clearflask.com/feedback) or [Discord](#discord)
|
|
@@ -34,45 +34,108 @@ from tenacity import (
|
|
|
34
34
|
import ofscraper.api.archive as archive
|
|
35
35
|
import ofscraper.api.labels as labels_api
|
|
36
36
|
import ofscraper.api.pinned as pinned
|
|
37
|
+
import ofscraper.api.timeline as timeline
|
|
37
38
|
import ofscraper.classes.labels as labels
|
|
39
|
+
import ofscraper.classes.posts as posts_
|
|
38
40
|
import ofscraper.classes.sessionbuilder as sessionbuilder
|
|
41
|
+
import ofscraper.utils.args.areas as areas
|
|
42
|
+
import ofscraper.utils.args.read as read_args
|
|
39
43
|
import ofscraper.utils.console as console
|
|
40
44
|
import ofscraper.utils.constants as constants
|
|
45
|
+
import ofscraper.utils.progress as progress_utils
|
|
46
|
+
import ofscraper.utils.system.system as system
|
|
41
47
|
from ofscraper.classes.semaphoreDelayed import semaphoreDelayed
|
|
42
48
|
from ofscraper.utils.context.run_async import run
|
|
43
49
|
|
|
44
|
-
from ..api import timeline
|
|
45
|
-
|
|
46
50
|
sem = semaphoreDelayed(1)
|
|
47
51
|
log = logging.getLogger("shared")
|
|
48
|
-
import ofscraper.utils.args.read as read_args
|
|
49
52
|
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
54
|
+
@run
|
|
55
|
+
async def get_posts(model_id, username):
|
|
56
|
+
responses = []
|
|
57
|
+
final_post_areas = set(areas.get_like_area())
|
|
58
|
+
tasks = []
|
|
59
|
+
with progress_utils.setup_api_split_progress_live():
|
|
60
|
+
async with sessionbuilder.sessionBuilder() as c:
|
|
61
|
+
while True:
|
|
62
|
+
max_count = min(
|
|
63
|
+
constants.getattr("API_MAX_AREAS"),
|
|
64
|
+
system.getcpu_count(),
|
|
65
|
+
len(final_post_areas),
|
|
66
|
+
)
|
|
67
|
+
if not bool(tasks) and not bool(final_post_areas):
|
|
68
|
+
break
|
|
69
|
+
for _ in range(max_count - len(tasks)):
|
|
70
|
+
if "Pinned" in final_post_areas:
|
|
71
|
+
tasks.append(
|
|
72
|
+
asyncio.create_task(
|
|
73
|
+
pinned.get_pinned_posts_progress(model_id, c)
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
progress_utils.pinned_layout.visible = True
|
|
77
|
+
final_post_areas.remove("Pinned")
|
|
78
|
+
elif "Timeline" in final_post_areas:
|
|
79
|
+
tasks.append(
|
|
80
|
+
asyncio.create_task(
|
|
81
|
+
timeline.get_timeline_posts_progress(
|
|
82
|
+
model_id=model_id,
|
|
83
|
+
username=username,
|
|
84
|
+
c=c,
|
|
85
|
+
forced_after=read_args.retriveArgs().after or 0,
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
)
|
|
89
|
+
progress_utils.timeline_layout.visible = True
|
|
90
|
+
final_post_areas.remove("Timeline")
|
|
91
|
+
if "Archived" in final_post_areas:
|
|
92
|
+
tasks.append(
|
|
93
|
+
asyncio.create_task(
|
|
94
|
+
archive.get_archived_posts_progress(
|
|
95
|
+
model_id=model_id,
|
|
96
|
+
username=username,
|
|
97
|
+
c=c,
|
|
98
|
+
forced_after=read_args.retriveArgs().after or 0,
|
|
99
|
+
)
|
|
100
|
+
)
|
|
101
|
+
)
|
|
102
|
+
progress_utils.archived_layout.visible = True
|
|
103
|
+
final_post_areas.remove("Archived")
|
|
104
|
+
|
|
105
|
+
elif "Labels" in final_post_areas:
|
|
106
|
+
tasks.append(
|
|
107
|
+
asyncio.create_task(
|
|
108
|
+
labels_api.get_labels_posts_progress(
|
|
109
|
+
model_id=model_id, c=c
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
progress_utils.labelled_layout.visible = True
|
|
114
|
+
final_post_areas.remove("Labels")
|
|
115
|
+
if not bool(tasks):
|
|
116
|
+
break
|
|
117
|
+
done, pending = await asyncio.wait(
|
|
118
|
+
tasks, return_when=asyncio.FIRST_COMPLETED
|
|
119
|
+
)
|
|
120
|
+
await asyncio.sleep(1)
|
|
121
|
+
tasks = list(pending)
|
|
122
|
+
for results in done:
|
|
123
|
+
try:
|
|
124
|
+
data = await results or []
|
|
125
|
+
responses.extend(data)
|
|
126
|
+
await asyncio.sleep(1)
|
|
127
|
+
except Exception as E:
|
|
128
|
+
await asyncio.sleep(1)
|
|
129
|
+
log.debug(E)
|
|
130
|
+
continue
|
|
131
|
+
return pre_filter(
|
|
132
|
+
list(
|
|
133
|
+
map(
|
|
134
|
+
lambda x: posts_.Post(x, model_id=model_id, username=username),
|
|
135
|
+
responses,
|
|
136
|
+
)
|
|
71
137
|
)
|
|
72
|
-
log.debug(
|
|
73
|
-
f"[bold]Number of Post Found[/bold] {len(pinned_posts) + len(timeline_posts) + len(archived_posts)}"
|
|
74
138
|
)
|
|
75
|
-
return pinned_posts + timeline_posts + archived_posts + labelled_posts
|
|
76
139
|
|
|
77
140
|
|
|
78
141
|
def get_posts_for_unlike(model_id, username):
|
|
@@ -86,20 +149,27 @@ def get_post_for_like(model_id, username):
|
|
|
86
149
|
|
|
87
150
|
|
|
88
151
|
def filter_for_unfavorited(posts: list) -> list:
|
|
89
|
-
output = list(filter(lambda x: x.
|
|
152
|
+
output = list(filter(lambda x: x.favorited == False, posts))
|
|
90
153
|
log.debug(f"[bold]Number of unliked post[/bold] {len(output)}")
|
|
91
154
|
return output
|
|
92
155
|
|
|
93
156
|
|
|
94
157
|
def filter_for_favorited(posts: list) -> list:
|
|
95
|
-
output = list(filter(lambda x: x.
|
|
158
|
+
output = list(filter(lambda x: x.favorited == True, posts))
|
|
96
159
|
log.debug(f"[bold]Number of liked post[/bold] {len(output)}")
|
|
97
160
|
return output
|
|
98
161
|
|
|
99
162
|
|
|
163
|
+
def pre_filter(posts):
|
|
164
|
+
valid_post = list(filter(lambda x: x.opened, posts))
|
|
165
|
+
seen = set()
|
|
166
|
+
return [
|
|
167
|
+
post for post in valid_post if post.id not in seen and not seen.add(post.id)
|
|
168
|
+
]
|
|
169
|
+
|
|
170
|
+
|
|
100
171
|
def get_post_ids(posts: list) -> list:
|
|
101
|
-
|
|
102
|
-
return list(map(lambda x: x.get("id"), valid_post))
|
|
172
|
+
return list(map(lambda x: x.id, posts))
|
|
103
173
|
|
|
104
174
|
|
|
105
175
|
def like(model_id, username, ids: list):
|
|
@@ -38,7 +38,6 @@ import ofscraper.utils.constants as constants
|
|
|
38
38
|
import ofscraper.utils.context.exit as exit
|
|
39
39
|
import ofscraper.utils.context.stdout as stdout
|
|
40
40
|
import ofscraper.utils.profiles.tools as profile_tools
|
|
41
|
-
from ofscraper.utils.text import get_text
|
|
42
41
|
|
|
43
42
|
log = logging.getLogger("shared")
|
|
44
43
|
|
|
@@ -76,7 +75,7 @@ def process_post():
|
|
|
76
75
|
|
|
77
76
|
|
|
78
77
|
@exit.exit_wrapper
|
|
79
|
-
|
|
78
|
+
def process_post_user_first():
|
|
80
79
|
with scrape_context_manager():
|
|
81
80
|
if not placeholder.check_uniquename():
|
|
82
81
|
log.warning(
|
|
@@ -96,7 +95,7 @@ async def process_post_user_first():
|
|
|
96
95
|
# log.info(f"Data retrival progressing on model {count+1}/{length}")
|
|
97
96
|
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
def process_user_first_helper(ele):
|
|
100
99
|
if constants.getattr("SHOW_AVATAR") and ele.avatar:
|
|
101
100
|
log.warning(f"Avatar : {ele.avatar}")
|
|
102
101
|
if bool(areas.get_download_area()):
|
|
@@ -116,29 +115,22 @@ async def process_user_first_helper(ele):
|
|
|
116
115
|
log.traceback_(traceback.format_exc())
|
|
117
116
|
|
|
118
117
|
|
|
119
|
-
def
|
|
120
|
-
|
|
121
|
-
user_dict = user_dict or {}
|
|
122
|
-
output.extend(OF.process_all_paid())
|
|
123
|
-
user_dict = user_dict or {}
|
|
124
|
-
[
|
|
125
|
-
user_dict.update(
|
|
126
|
-
{ele.post.model_id: user_dict.get(ele.post.model_id, []) + [ele]}
|
|
127
|
-
)
|
|
128
|
-
for ele in output
|
|
129
|
-
]
|
|
118
|
+
def scrape_paid_all(user_dict=None):
|
|
119
|
+
user_dict = OF.process_all_paid()
|
|
130
120
|
oldUsers = selector.get_ALL_SUBS_DICT()
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
121
|
+
length = len(list(user_dict.keys()))
|
|
122
|
+
for count, value in enumerate(user_dict.values()):
|
|
123
|
+
model_id = value["model_id"]
|
|
124
|
+
username = value["username"]
|
|
125
|
+
posts = value["posts"]
|
|
126
|
+
medias = value["medias"]
|
|
127
|
+
log.warning(
|
|
128
|
+
f"Download paid content for {model_id}_{username} number:{count+1}/{length} models "
|
|
129
|
+
)
|
|
134
130
|
selector.set_ALL_SUBS_DICTVManger(
|
|
135
131
|
{username: models.Model(profile.scrape_profile(model_id))}
|
|
136
132
|
)
|
|
137
|
-
download.download_process(
|
|
138
|
-
username,
|
|
139
|
-
model_id,
|
|
140
|
-
value,
|
|
141
|
-
)
|
|
133
|
+
download.download_process(username, model_id, medias, posts=posts)
|
|
142
134
|
# restore og users
|
|
143
135
|
selector.set_ALL_SUBS_DICT(oldUsers)
|
|
144
136
|
|
|
@@ -200,7 +192,7 @@ def process_like():
|
|
|
200
192
|
model_id = ele.id
|
|
201
193
|
operations.table_init_create(model_id, ele.name)
|
|
202
194
|
unfavorited_posts = like.get_post_for_like(model_id, ele.name)
|
|
203
|
-
unfavorited_posts = filters.
|
|
195
|
+
unfavorited_posts = filters.post_filter_for_like(
|
|
204
196
|
unfavorited_posts, like=True
|
|
205
197
|
)
|
|
206
198
|
post_ids = like.get_post_ids(unfavorited_posts)
|
|
@@ -227,7 +219,7 @@ def process_unlike():
|
|
|
227
219
|
model_id = profile.get_id(ele.name)
|
|
228
220
|
operations.table_init_create(model_id, ele.name)
|
|
229
221
|
favorited_posts = like.get_posts_for_unlike(model_id, ele.name)
|
|
230
|
-
favorited_posts = filters.
|
|
222
|
+
favorited_posts = filters.post_filter_for_like(
|
|
231
223
|
favorited_posts, like=False
|
|
232
224
|
)
|
|
233
225
|
post_ids = like.get_post_ids(favorited_posts)
|
|
@@ -255,5 +247,5 @@ def add_selected_areas():
|
|
|
255
247
|
actions.select_areas()
|
|
256
248
|
functs.append(process_unlike)
|
|
257
249
|
if read_args.retriveArgs().scrape_paid:
|
|
258
|
-
functs.append(
|
|
250
|
+
functs.append(scrape_paid_all)
|
|
259
251
|
return functs
|