ofscraper 3.9.0.dev11__tar.gz → 3.9.0.dev12__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.dev11 → ofscraper-3.9.0.dev12}/PKG-INFO +2 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/like.py +39 -66
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/process.py +5 -3
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/scraper.py +28 -23
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/archive.py +133 -140
- ofscraper-3.9.0.dev12/ofscraper/api/common/logs.py +8 -0
- ofscraper-3.9.0.dev12/ofscraper/api/highlights.py +487 -0
- ofscraper-3.9.0.dev12/ofscraper/api/labels.py +450 -0
- ofscraper-3.9.0.dev12/ofscraper/api/me.py +75 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/messages.py +150 -187
- ofscraper-3.9.0.dev12/ofscraper/api/paid.py +399 -0
- ofscraper-3.9.0.dev12/ofscraper/api/pinned.py +258 -0
- ofscraper-3.9.0.dev12/ofscraper/api/profile.py +198 -0
- ofscraper-3.9.0.dev12/ofscraper/api/subscriptions/helpers.py +50 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/subscriptions/individual.py +12 -7
- ofscraper-3.9.0.dev12/ofscraper/api/subscriptions/lists.py +320 -0
- ofscraper-3.9.0.dev12/ofscraper/api/subscriptions/subscriptions.py +248 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/timeline.py +145 -170
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/base.py +1 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/media.py +25 -33
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/models.py +7 -7
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/placeholder.py +4 -2
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/semaphoreDelayed.py +4 -6
- ofscraper-3.9.0.dev12/ofscraper/classes/sessionmanager.py +384 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/check.py +207 -169
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/manual.py +97 -51
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/config.py +2 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/constants.py +1 -0
- ofscraper-3.9.0.dev12/ofscraper/const/date.py +2 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/general.py +2 -0
- ofscraper-3.9.0.dev12/ofscraper/const/metadata.py +2 -0
- ofscraper-3.9.0.dev12/ofscraper/const/req.py +64 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/url.py +2 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations.py +23 -8
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/labels.py +20 -9
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/media.py +11 -3
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/messages.py +3 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/others.py +4 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/stories.py +5 -3
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/alt_download.py +35 -54
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/alt_downloadbatch.py +39 -55
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/common.py +0 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/globals.py +2 -17
- ofscraper-3.9.0.dev12/ofscraper/download/common/keyhelpers.py +261 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/log.py +13 -12
- ofscraper-3.9.0.dev12/ofscraper/download/common/metadata.py +108 -0
- ofscraper-3.9.0.dev12/ofscraper/download/common/sem.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/text.py +3 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/download.py +17 -5
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/downloadbatch.py +27 -19
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/downloadnormal.py +23 -13
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/main_download.py +41 -62
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/main_downloadbatch.py +43 -76
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/media/helpers.py +21 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/media/main.py +1 -20
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/models/retriver.py +3 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/models/selector.py +30 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/helpers/prompt_helpers.py +72 -7
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/promptConvert.py +26 -12
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/config.py +4 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/model.py +1 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_strings.py +2 -2
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/common_args.py +4 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/main_args.py +108 -112
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/manual_args.py +5 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/message_args.py +7 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/paid_args.py +7 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/post_args.py +6 -3
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/groups/story_args.py +7 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/user.py +3 -3
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/request.py +66 -49
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/custom.py +4 -2
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/data.py +16 -7
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/schema.py +1 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/constants.py +1 -1
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/dates.py +24 -23
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/classes.py +35 -60
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/manager.py +4 -4
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/progress.py +1 -2
- ofscraper-3.9.0.dev12/ofscraper/utils/sems.py +1 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/system/network.py +9 -5
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/pyproject.toml +2 -1
- ofscraper-3.9.0.dev11/ofscraper/api/highlights.py +0 -548
- ofscraper-3.9.0.dev11/ofscraper/api/labels.py +0 -471
- ofscraper-3.9.0.dev11/ofscraper/api/me.py +0 -116
- ofscraper-3.9.0.dev11/ofscraper/api/paid.py +0 -451
- ofscraper-3.9.0.dev11/ofscraper/api/pinned.py +0 -270
- ofscraper-3.9.0.dev11/ofscraper/api/profile.py +0 -244
- ofscraper-3.9.0.dev11/ofscraper/api/subscriptions/helpers.py +0 -85
- ofscraper-3.9.0.dev11/ofscraper/api/subscriptions/lists.py +0 -368
- ofscraper-3.9.0.dev11/ofscraper/api/subscriptions/subscriptions.py +0 -313
- ofscraper-3.9.0.dev11/ofscraper/classes/sessionbuilder.py +0 -245
- ofscraper-3.9.0.dev11/ofscraper/const/date.py +0 -2
- ofscraper-3.9.0.dev11/ofscraper/const/req.py +0 -29
- ofscraper-3.9.0.dev11/ofscraper/download/common/keyhelpers.py +0 -318
- ofscraper-3.9.0.dev11/ofscraper/download/common/metadata.py +0 -158
- ofscraper-3.9.0.dev11/ofscraper/download/common/sem.py +0 -45
- ofscraper-3.9.0.dev11/ofscraper/utils/sems.py +0 -10
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/LICENSE +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/README.md +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/__main__.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/__version__.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/__version__.pye +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/actions/__init__.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/api/init.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/labels.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/multiprocessprogress.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/posts.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/classes/table.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/picker.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/commands/scraper.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/binary.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/download.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/files.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/logger.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/other_url.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/prompts.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/test_constants.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/const/time.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/__init__.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/helpers.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/posts.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/profile.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/db/operations_/wrapper.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/message.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/paths.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/download/common/progress.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/date.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/flags.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/other.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/price.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/sort.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/filters/models/subtype.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/helpers/model_helpers.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/keybindings.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/actions.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/area.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/auth.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/binary.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/menu.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_groups/profile.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompt_validators.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/prompts/prompts.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/runner/exit.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/runner/load.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/runner/run.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/__init__.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/actions.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/areas.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/globals.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/helpers.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/parse.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/quality.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/read.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/args/write.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/context.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/data.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/file.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/helpers.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/make.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/auth/schema.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/binaries.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/cache.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/checkers.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/config.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/context.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/file.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/menu.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/config/wrapper.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/console.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/context/exit.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/context/run_async.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/context/stdout.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/encoding.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/hash.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/close.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/globals.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/helpers.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/logger.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/logs.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/other.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/logs/stdout.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/me.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/menu.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/check.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/common.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/manage.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/paths/paths.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/profiles/data.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/profiles/manage.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/profiles/tools.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/run.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/separate.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/settings.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/system/free.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/system/system.py +0 -0
- {ofscraper-3.9.0.dev11 → ofscraper-3.9.0.dev12}/ofscraper/utils/text.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.dev12
|
|
4
4
|
Summary: automatically scrape onlyfans
|
|
5
5
|
Author: datawhores
|
|
6
6
|
Author-email: datawhores@riseup.net
|
|
@@ -35,6 +35,7 @@ Requires-Dist: poetry-dynamic-versioning (>=1.2.0,<2.0.0)
|
|
|
35
35
|
Requires-Dist: prompt-toolkit (>=3.0.43,<4.0.0)
|
|
36
36
|
Requires-Dist: psutil (>=5.9.8,<6.0.0)
|
|
37
37
|
Requires-Dist: pycryptodome (>=3.20.0,<4.0.0)
|
|
38
|
+
Requires-Dist: pynumparser (>=1.4.1,<2.0.0)
|
|
38
39
|
Requires-Dist: pywidevine (>=1.8.0,<2.0.0)
|
|
39
40
|
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
40
41
|
Requires-Dist: rich (>=13.7.1,<14.0.0)
|
|
@@ -11,9 +11,10 @@ r"""
|
|
|
11
11
|
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
+
import functools
|
|
14
15
|
import asyncio
|
|
16
|
+
import time
|
|
15
17
|
import logging
|
|
16
|
-
import traceback
|
|
17
18
|
|
|
18
19
|
from rich.progress import (
|
|
19
20
|
BarColumn,
|
|
@@ -23,31 +24,21 @@ from rich.progress import (
|
|
|
23
24
|
TextColumn,
|
|
24
25
|
)
|
|
25
26
|
from rich.style import Style
|
|
26
|
-
from tenacity import (
|
|
27
|
-
AsyncRetrying,
|
|
28
|
-
retry,
|
|
29
|
-
retry_if_not_exception_type,
|
|
30
|
-
stop_after_attempt,
|
|
31
|
-
wait_random,
|
|
32
|
-
)
|
|
33
27
|
|
|
34
28
|
import ofscraper.api.archive as archive
|
|
35
29
|
import ofscraper.api.labels as labels_api
|
|
36
30
|
import ofscraper.api.pinned as pinned
|
|
37
31
|
import ofscraper.api.timeline as timeline
|
|
38
|
-
import ofscraper.classes.labels as labels
|
|
39
32
|
import ofscraper.classes.posts as posts_
|
|
40
|
-
import ofscraper.classes.
|
|
33
|
+
import ofscraper.classes.sessionmanager as sessionManager
|
|
41
34
|
import ofscraper.utils.args.areas as areas
|
|
42
35
|
import ofscraper.utils.args.read as read_args
|
|
43
36
|
import ofscraper.utils.console as console
|
|
44
37
|
import ofscraper.utils.constants as constants
|
|
45
38
|
import ofscraper.utils.progress as progress_utils
|
|
46
39
|
import ofscraper.utils.system.system as system
|
|
47
|
-
from ofscraper.classes.semaphoreDelayed import semaphoreDelayed
|
|
48
40
|
from ofscraper.utils.context.run_async import run
|
|
49
41
|
|
|
50
|
-
sem = semaphoreDelayed(1)
|
|
51
42
|
log = logging.getLogger("shared")
|
|
52
43
|
|
|
53
44
|
|
|
@@ -57,7 +48,12 @@ async def get_posts(model_id, username):
|
|
|
57
48
|
final_post_areas = set(areas.get_like_area())
|
|
58
49
|
tasks = []
|
|
59
50
|
with progress_utils.setup_api_split_progress_live():
|
|
60
|
-
async with
|
|
51
|
+
async with sessionManager.sessionManager(
|
|
52
|
+
sem=constants.getattr("LIKE_MAX_SEMS"),
|
|
53
|
+
retries=constants.getattr("API_NUM_TRIES"),
|
|
54
|
+
wait_min=constants.getattr("OF_MIN_WAIT_API"),
|
|
55
|
+
wait_max=constants.getattr("OF_MAX_WAIT_API"),
|
|
56
|
+
) as c:
|
|
61
57
|
while True:
|
|
62
58
|
max_count = min(
|
|
63
59
|
constants.getattr("API_MAX_AREAS"),
|
|
@@ -149,13 +145,13 @@ def get_post_for_like(model_id, username):
|
|
|
149
145
|
|
|
150
146
|
|
|
151
147
|
def filter_for_unfavorited(posts: list) -> list:
|
|
152
|
-
output = list(filter(lambda x: x.favorited == False, posts))
|
|
148
|
+
output = list(filter(lambda x: x.favorited == False and x.opened, posts))
|
|
153
149
|
log.debug(f"[bold]Number of unliked post[/bold] {len(output)}")
|
|
154
150
|
return output
|
|
155
151
|
|
|
156
152
|
|
|
157
153
|
def filter_for_favorited(posts: list) -> list:
|
|
158
|
-
output = list(filter(lambda x: x.favorited == True, posts))
|
|
154
|
+
output = list(filter(lambda x: x.favorited == True and x.opened, posts))
|
|
159
155
|
log.debug(f"[bold]Number of liked post[/bold] {len(output)}")
|
|
160
156
|
return output
|
|
161
157
|
|
|
@@ -172,19 +168,16 @@ def get_post_ids(posts: list) -> list:
|
|
|
172
168
|
return list(map(lambda x: x.id, posts))
|
|
173
169
|
|
|
174
170
|
|
|
175
|
-
def like(model_id,
|
|
176
|
-
_like(model_id,
|
|
171
|
+
def like(model_id, ids: list):
|
|
172
|
+
_like(model_id, ids, True)
|
|
177
173
|
|
|
178
174
|
|
|
179
|
-
def unlike(model_id,
|
|
180
|
-
_like(model_id,
|
|
175
|
+
def unlike(model_id, ids: list):
|
|
176
|
+
_like(model_id, ids, False)
|
|
181
177
|
|
|
182
178
|
|
|
183
|
-
|
|
184
|
-
async def _like(model_id, username, ids: list, like_action: bool):
|
|
179
|
+
def _like(model_id, ids: list, like_action: bool):
|
|
185
180
|
title = "Liking" if like_action else "Unliking"
|
|
186
|
-
global sem
|
|
187
|
-
sem.delay = 3
|
|
188
181
|
with Progress(
|
|
189
182
|
SpinnerColumn(style=Style(color="blue")),
|
|
190
183
|
TextColumn("{task.description}"),
|
|
@@ -192,59 +185,39 @@ async def _like(model_id, username, ids: list, like_action: bool):
|
|
|
192
185
|
MofNCompleteColumn(),
|
|
193
186
|
console=console.get_shared_console(),
|
|
194
187
|
) as overall_progress:
|
|
195
|
-
|
|
188
|
+
with sessionManager.sessionManager(
|
|
189
|
+
sem=1,
|
|
190
|
+
backend="httpx",
|
|
191
|
+
retries=constants.getattr("API_LIKE_NUM_TRIES"),
|
|
192
|
+
wait_min=constants.getattr("OF_MIN_WAIT_API"),
|
|
193
|
+
wait_max=constants.getattr("OF_MAX_WAIT_API"),
|
|
194
|
+
) as c:
|
|
196
195
|
tasks = []
|
|
197
196
|
task1 = overall_progress.add_task(f"{title} posts...\n", total=len(ids))
|
|
198
197
|
|
|
199
198
|
[
|
|
200
|
-
tasks.append(
|
|
199
|
+
tasks.append(functools.partial(_like_request,c, id, model_id))
|
|
201
200
|
for id in ids
|
|
202
201
|
]
|
|
203
|
-
|
|
204
|
-
|
|
202
|
+
sleep_duration = 3
|
|
203
|
+
for count, func in enumerate(tasks):
|
|
204
|
+
id = func()
|
|
205
205
|
log.debug(
|
|
206
206
|
f"ID: {id} Performed {'like' if like_action==True else 'unlike'} action"
|
|
207
207
|
)
|
|
208
|
-
|
|
209
208
|
if count + 1 % 60 == 0 and count + 1 % 50 == 0:
|
|
210
|
-
|
|
211
|
-
elif count
|
|
212
|
-
|
|
213
|
-
elif count
|
|
214
|
-
|
|
215
|
-
|
|
209
|
+
sleep_duration=40
|
|
210
|
+
elif count % 60 == 0:
|
|
211
|
+
sleep_duration = 1 # Divisible by 60 - 1 second sleep
|
|
212
|
+
elif count % 50 == 0:
|
|
213
|
+
sleep_duration = 30 # Divisible by 50 - 30 seconds sleep
|
|
216
214
|
overall_progress.update(task1, advance=1, refresh=True)
|
|
215
|
+
time.sleep(sleep_duration)
|
|
217
216
|
|
|
218
217
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
min=constants.getattr("OF_MIN"),
|
|
226
|
-
max=constants.getattr("OF_MAX"),
|
|
227
|
-
),
|
|
228
|
-
reraise=True,
|
|
229
|
-
):
|
|
230
|
-
with _:
|
|
231
|
-
await sem.acquire()
|
|
232
|
-
try:
|
|
233
|
-
async with c.requests(
|
|
234
|
-
constants.getattr("favoriteEP").format(id, model_id), "post"
|
|
235
|
-
)() as r:
|
|
236
|
-
if r.ok:
|
|
237
|
-
return id
|
|
238
|
-
else:
|
|
239
|
-
log.debug(
|
|
240
|
-
f"[bold]timeline response status code:[/bold]{r.status}"
|
|
241
|
-
)
|
|
242
|
-
log.debug(f"[bold]timeline response:[/bold] {await r.text_()}")
|
|
243
|
-
log.debug(f"[bold]timeline headers:[/bold] {r.headers}")
|
|
244
|
-
r.raise_for_status()
|
|
245
|
-
except Exception as E:
|
|
246
|
-
log.traceback_(E)
|
|
247
|
-
log.traceback_(traceback.format_exc())
|
|
248
|
-
raise E
|
|
249
|
-
finally:
|
|
250
|
-
sem.release()
|
|
218
|
+
|
|
219
|
+
def _like_request(c, id, model_id):
|
|
220
|
+
with c.requests(
|
|
221
|
+
constants.getattr("favoriteEP").format(id, model_id),method="post"
|
|
222
|
+
) as _:
|
|
223
|
+
return id
|
|
@@ -191,12 +191,14 @@ def process_like():
|
|
|
191
191
|
)
|
|
192
192
|
model_id = ele.id
|
|
193
193
|
operations.table_init_create(model_id=model_id, username=ele.name)
|
|
194
|
-
unfavorited_posts = like.get_post_for_like(
|
|
194
|
+
unfavorited_posts = like.get_post_for_like(
|
|
195
|
+
model_id=model_id, username=ele.name
|
|
196
|
+
)
|
|
195
197
|
unfavorited_posts = filters.post_filter_for_like(
|
|
196
198
|
unfavorited_posts, like=True
|
|
197
199
|
)
|
|
198
200
|
post_ids = like.get_post_ids(unfavorited_posts)
|
|
199
|
-
like.like(model_id,
|
|
201
|
+
like.like(model_id, post_ids)
|
|
200
202
|
|
|
201
203
|
|
|
202
204
|
@exit.exit_wrapper
|
|
@@ -223,7 +225,7 @@ def process_unlike():
|
|
|
223
225
|
favorited_posts, like=False
|
|
224
226
|
)
|
|
225
227
|
post_ids = like.get_post_ids(favorited_posts)
|
|
226
|
-
like.unlike(model_id,
|
|
228
|
+
like.unlike(model_id, post_ids)
|
|
227
229
|
|
|
228
230
|
|
|
229
231
|
def add_selected_areas():
|
|
@@ -28,7 +28,7 @@ import ofscraper.api.timeline as timeline
|
|
|
28
28
|
import ofscraper.classes.labels as labels
|
|
29
29
|
import ofscraper.classes.media as media
|
|
30
30
|
import ofscraper.classes.posts as posts_
|
|
31
|
-
import ofscraper.classes.
|
|
31
|
+
import ofscraper.classes.sessionmanager as sessionManager
|
|
32
32
|
import ofscraper.db.operations as operations
|
|
33
33
|
import ofscraper.filters.media.main as filters
|
|
34
34
|
import ofscraper.utils.args.areas as areas
|
|
@@ -63,7 +63,7 @@ async def process_messages(model_id, username, c):
|
|
|
63
63
|
)
|
|
64
64
|
log.debug("Removing locked messages media")
|
|
65
65
|
output = []
|
|
66
|
-
[output.extend(message.
|
|
66
|
+
[output.extend(message.all_media) for message in messages_]
|
|
67
67
|
log.debug(f"[bold]Messages media count[/bold] {len(output)}")
|
|
68
68
|
# Update after database
|
|
69
69
|
cache.set(
|
|
@@ -98,7 +98,7 @@ async def process_paid_post(model_id, username, c):
|
|
|
98
98
|
username=username,
|
|
99
99
|
)
|
|
100
100
|
output = []
|
|
101
|
-
[output.extend(post.
|
|
101
|
+
[output.extend(post.all_media) for post in paid_content]
|
|
102
102
|
log.debug(f"[bold]Paid media count without locked[/bold] {len(output)}")
|
|
103
103
|
|
|
104
104
|
await operations.batch_mediainsert(
|
|
@@ -143,7 +143,7 @@ async def process_stories(model_id, username, c):
|
|
|
143
143
|
f"[bold]Story media count[/bold] {sum(map(lambda x:len(x.post_media), stories))}"
|
|
144
144
|
)
|
|
145
145
|
output = []
|
|
146
|
-
[output.extend(stories.
|
|
146
|
+
[output.extend(stories.all_media) for stories in stories]
|
|
147
147
|
await operations.batch_mediainsert(
|
|
148
148
|
output,
|
|
149
149
|
model_id=model_id,
|
|
@@ -183,7 +183,7 @@ async def process_highlights(model_id, username, c):
|
|
|
183
183
|
f"[bold]highlight media count[/bold] {sum(map(lambda x:len(x.post_media), highlights_))}"
|
|
184
184
|
)
|
|
185
185
|
output = []
|
|
186
|
-
[output.extend(stories.
|
|
186
|
+
[output.extend(stories.all_media) for stories in highlights_]
|
|
187
187
|
await operations.batch_mediainsert(
|
|
188
188
|
output,
|
|
189
189
|
model_id=model_id,
|
|
@@ -231,7 +231,7 @@ async def process_timeline_posts(model_id, username, c):
|
|
|
231
231
|
)
|
|
232
232
|
log.debug("Removing locked timeline media")
|
|
233
233
|
output = []
|
|
234
|
-
[output.extend(post.
|
|
234
|
+
[output.extend(post.all_media) for post in timeline_only_posts]
|
|
235
235
|
log.debug(f"[bold]Timeline media count without locked[/bold] {len(output)}")
|
|
236
236
|
|
|
237
237
|
await operations.batch_mediainsert(
|
|
@@ -281,7 +281,7 @@ async def process_archived_posts(model_id, username, c):
|
|
|
281
281
|
)
|
|
282
282
|
log.debug("Removing locked archived media")
|
|
283
283
|
output = []
|
|
284
|
-
[output.extend(post.
|
|
284
|
+
[output.extend(post.all_media) for post in archived_posts]
|
|
285
285
|
log.debug(f"[bold]Archived media count without locked[/bold] {len(output)}")
|
|
286
286
|
|
|
287
287
|
await operations.batch_mediainsert(
|
|
@@ -325,7 +325,7 @@ async def process_pinned_posts(model_id, username, c):
|
|
|
325
325
|
)
|
|
326
326
|
log.debug("Removing locked pinned media")
|
|
327
327
|
output = []
|
|
328
|
-
[output.extend(post.
|
|
328
|
+
[output.extend(post.all_media) for post in pinned_posts]
|
|
329
329
|
log.debug(f"[bold]Pinned media count without locked[/bold] {len(output)}")
|
|
330
330
|
|
|
331
331
|
await operations.batch_mediainsert(
|
|
@@ -386,6 +386,7 @@ async def process_all_paid():
|
|
|
386
386
|
with stdout.lowstdout():
|
|
387
387
|
paid_content = await paid.get_all_paid_posts()
|
|
388
388
|
user_dict = {}
|
|
389
|
+
|
|
389
390
|
for ele in paid_content:
|
|
390
391
|
user_id = ele.get("fromUser", {}).get("id") or ele.get("author", {}).get(
|
|
391
392
|
"id"
|
|
@@ -394,11 +395,10 @@ async def process_all_paid():
|
|
|
394
395
|
output = {}
|
|
395
396
|
for model_id, value in user_dict.items():
|
|
396
397
|
username = profile.scrape_profile(model_id).get("username")
|
|
397
|
-
if (
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
)
|
|
398
|
+
if username == constants.getattr(
|
|
399
|
+
"DELETED_MODEL_PLACEHOLDER"
|
|
400
|
+
) and await operations.check_profile_table_exists(
|
|
401
|
+
model_id=model_id, username=username
|
|
402
402
|
):
|
|
403
403
|
username = (
|
|
404
404
|
await operations.get_profile_info(
|
|
@@ -421,7 +421,7 @@ async def process_all_paid():
|
|
|
421
421
|
for post in all_posts
|
|
422
422
|
if post.id not in seen and not seen.add(post.id)
|
|
423
423
|
]
|
|
424
|
-
new_medias = [item for post in new_posts for item in post.
|
|
424
|
+
new_medias = [item for post in new_posts for item in post.all_media]
|
|
425
425
|
new_medias = filters.filterMedia(new_medias)
|
|
426
426
|
new_posts = filters.filterPost(new_posts)
|
|
427
427
|
await operations.make_post_table_changes(
|
|
@@ -455,22 +455,22 @@ async def process_labels(model_id, username, c):
|
|
|
455
455
|
with stdout.lowstdout():
|
|
456
456
|
labelled_posts_ = await labels_api.get_labels_progress(model_id, c=c)
|
|
457
457
|
|
|
458
|
-
|
|
458
|
+
labelled_posts_labels = list(
|
|
459
459
|
map(lambda x: labels.Label(x, model_id, username), labelled_posts_)
|
|
460
460
|
)
|
|
461
461
|
await operations.make_label_table_changes(
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
462
|
+
labelled_posts_labels,
|
|
463
|
+
model_id=model_id,
|
|
464
|
+
username=username,
|
|
465
465
|
)
|
|
466
466
|
|
|
467
467
|
log.debug(
|
|
468
|
-
f"[bold]Label media count with locked[/bold] {sum(map(lambda x:len(x),[post.post_media for labelled_post in
|
|
468
|
+
f"[bold]Label media count with locked[/bold] {sum(map(lambda x:len(x),[post.post_media for labelled_post in labelled_posts_labels for post in labelled_post.posts]))}"
|
|
469
469
|
)
|
|
470
470
|
log.debug("Removing locked messages media")
|
|
471
471
|
output = [
|
|
472
|
-
post.
|
|
473
|
-
for labelled_post in
|
|
472
|
+
post.all_media
|
|
473
|
+
for labelled_post in labelled_posts_labels
|
|
474
474
|
for post in labelled_post.posts
|
|
475
475
|
]
|
|
476
476
|
log.debug(
|
|
@@ -478,7 +478,7 @@ async def process_labels(model_id, username, c):
|
|
|
478
478
|
)
|
|
479
479
|
|
|
480
480
|
return [item for sublist in output for item in sublist], [
|
|
481
|
-
post for ele in
|
|
481
|
+
post for ele in labelled_posts_labels for post in ele.posts
|
|
482
482
|
]
|
|
483
483
|
except Exception as E:
|
|
484
484
|
try:
|
|
@@ -513,7 +513,12 @@ async def process_task(model_id, username, ele):
|
|
|
513
513
|
postObjs = []
|
|
514
514
|
final_post_areas = set(areas.get_download_area())
|
|
515
515
|
tasks = []
|
|
516
|
-
async with
|
|
516
|
+
async with sessionManager.sessionManager(
|
|
517
|
+
sem=constants.getattr("API_REQ_SEM_MAX"),
|
|
518
|
+
retries=constants.getattr("API_NUM_TRIES"),
|
|
519
|
+
wait_min=constants.getattr("OF_MIN_WAIT_API"),
|
|
520
|
+
wait_max=constants.getattr("OF_MAX_WAIT_API"),
|
|
521
|
+
) as c:
|
|
517
522
|
while True:
|
|
518
523
|
max_count = min(
|
|
519
524
|
constants.getattr("API_MAX_AREAS"),
|