OnlySnarf


NameOnlySnarf JSON
Version 4.7.0 PyPI version JSON
download
home_pagehttps://github.com/skeetzo/onlysnarf
SummaryOnlyFans Content Distribution Tool
upload_time2023-09-25 20:57:10
maintainer
docs_urlNone
authorSkeetzo
requires_python
license
keywords onlyfans onlysnarf selenium snarf
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <h1 align="center">OnlySnarf</h1>
<p align="center"><img src="public/images/snarf-missionary.jpg" alt="Shnarf" width="400"/></p>
<p align="center">Please refer to the <a href="public/docs/menu.md">Menu</a> for help with the available arguments and config settings.</p> 

## Description
OnlySnarf is a python based automation tool to assist with uploading content to OnlyFans by interacting with the site purely via web scraping. OnlySnarf carries no weapons, but it has been known to use its tail, teeth and claws when improperly configured.

Here are some fuzzy debugging previews of how it looks when everything works:
- [Discount](//ipfs.io/ipfs/QmboqfpCeAAbbhqGhPQ8cCscqm7CNH4mxTPR42g8Cg7iLW?filename=discount.gif)
- [Message](//ipfs.io/ipfs/QmXitqxkRuMXb6XnUJw7MHUxLii7UNEXjENc5k4PyfTWfY?filename=message.gif)
- [Poll](//ipfs.io/ipfs/QmNkE4GpBoiQ3tGLLfxtTGS96jJJJixS4qbkx9fxN9GeYC?filename=poll.gif)
- [Post](//ipfs.io/ipfs/QmUBjuLK3yh5v4U9SSPmSG3NAGgYaY6rYoYACGi1smZpJ7?filename=post.gif)
- [Schedule](//ipfs.io/ipfs/QmUd843FXXyMP2eyfkB1d1erZyrKN1hmKchuviruzN8ctD?filename=schedule.gif)
- [Users](//ipfs.io/ipfs/Qmc9zPytgSKx4EK6V1A8DABNeCpMxBybcRs4hNtAMSKDyi?filename=users.gif)

## Installation
There are two **different** installation options (that I know of):
1) via pip for the latest official package: `python3 -m pip install onlysnarf`  
2) or clone the repo & setup a virtual environment to install locally like in the bash script at [bin/virtualenv.sh](/bin/virtualenv.sh) 

Here is an output of the command: [`snarf -h`](/public/docs/help.md/#-h)  
  
Command example: `snarf -text "suck my giant balls" /path/to/imageOfBalls.jpeg`  
Version: `snarf -version` or `snarf --version`  

## Config
The command `snarf config` is now available for help adding, listing, updating, and removing user config files. This command **does not** (yet) help with configuring the general config file which is described as follows.

Example config files are provided. There are two main types of config files that should be provided to affect runtime behavior as well as one optional method to help distinguish between user logins for multiple accounts.
1) the config for the general app's behavior: `$HOME/.onlysnarf/config.conf`
2) one config for each user containing their credentials: `$HOME/.onlysnarf/users/$username.conf`
3) (optional) one config containing the default user credentials to use: `$HOME/.onlysnarf/users/default.conf`

The user config to use at runtime can be specificed with the "--username" argument. 
User config example: "--username alexdicksdown" --> `$HOME/.onlysnarf/users/alexdicksdown.conf`
When no "--username" argument is passed at runtime or in the config file then the default config file containing the default user credentials is used.

**Note for Windows**: the user's $HOME path works out to `C:\Users\YOUR_USERNAME` so the base directory for config files and such can instead be found at `C:\Users\YOUR_USERNAME\.onlysnarf`

**No**, the user credentials **are not** handled in the safest manner because they are very clearly **stored in plain text** with **no encryption**. Yes, a better way can be figured out. Do I think a better way is necessary for this project? No. So please be careful with your own credentials.

## API
The api server is super basic and as such runs with the Flask development server behind the standard port 5000. Be sure to remember to open this port when attempting to make requests and don't spam your own server. The api fulfills a niche role built by request and allows OnlySnarf to passively wait to receive requests from the internet with the necessary data to post or message appropriately.

Make POST requests with the same basic discount, message, or post data to: /discount   or   /message   or   /post

## Menu
The `snarf menu` command has been semi-restored and still requires further updates to return to the same pointless iteration of glory.

## Dependencies
Selenium's webdriver manager should install everything it needs automatically. If left unspecified the default browser argument is "auto" which will cylce throuch each web driver available and attempt to spawn a working browser. If you are using a Raspberry Pi 4, be sure to run `sudo apt-get install chromium-chromedriver` on your device to be able to launch chrome. The only working browsers for me have been chrome and firefox and so the others are unlikely to work without extra tinkering by yourself.

## Platforms
Code versions:
- Python: 3.10.12
- selenium: 4.8.3
- webdriver_manager: 4.0.0

Runs successfully on:
- Linux Ubuntu : 86_64 
- Windows 11

Runs sucessfully with browsers:
- Chrome
- Firefox

Runs successfully on devices:
- Raspberry Pi 4 : aarch64

## Dev
If you are doing your own development or webscraping all of the related files are available at: [OnlySnarf/lib/webdriver](/OnlySnarf/lib/webdriver)  
And the shortcut file for [webdriver](/OnlySnarf/lib/driver.py) behaviors that I'm not quire sure if I want to be a class or not but is used to funnel proper interactions through.  
More in code commenting / documentation will come later.  

## Tests

The test environment uses the config file found at: [OnlySnarf/conf/test-config.conf](/OnlySnarf/conf/test-config.conf) 

Basic unittesting behavior organized by classes:
- `python -m unittest tests/classes/test_discount.py`
- `python -m unittest tests/classes/test_post.py`
- `python -m unittest tests/classes/test_message.py`
- `python -m unittest tests/classes/test_users.py`
and by webdriver interactions:
- `python -m unittest tests/webdriver/test_discount.py`
- `python -m unittest tests/webdriver/test_post.py`
- `python -m unittest tests/webdriver/test_message.py`
- `python -m unittest tests/webdriver/test_users.py`

Pytests available under /tests:
- `pytest tests`
- `pytest tests/classes`
- `pytest tests/selenium`
- `pytest tests/webdriver`

## Updates
7/5/2023 : clarifications to readme and menu text...  
4/18/2023 : to further reduce repo size, preview gifs have been relocated to [IPFS](//ipfs.io/ipfs/QmVpjSy9NXy3VUM474hSDoPSsmsb5WVYkN9WN6N7nFxZuj).  
9/20/2023 : major cleanup of webdriver structure & overlap with classes; test scripts overhaul to match  

<hr>
Feel free to make use of my <a href="//onlyfans.com/?ref=409408" target="_blank">referral code</a> ;)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/skeetzo/onlysnarf",
    "name": "OnlySnarf",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "OnlyFans,OnlySnarf,selenium,snarf",
    "author": "Skeetzo",
    "author_email": "WebmasterSkeetzo@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/7e/cd/e75049f9cbfc4125259ffce5001392082fb89c3ccea3a69c2490c86793c3/OnlySnarf-4.7.0.tar.gz",
    "platform": null,
    "description": "<h1 align=\"center\">OnlySnarf</h1>\n<p align=\"center\"><img src=\"public/images/snarf-missionary.jpg\" alt=\"Shnarf\" width=\"400\"/></p>\n<p align=\"center\">Please refer to the <a href=\"public/docs/menu.md\">Menu</a> for help with the available arguments and config settings.</p> \n\n## Description\nOnlySnarf is a python based automation tool to assist with uploading content to OnlyFans by interacting with the site purely via web scraping. OnlySnarf carries no weapons, but it has been known to use its tail, teeth and claws when improperly configured.\n\nHere are some fuzzy debugging previews of how it looks when everything works:\n- [Discount](//ipfs.io/ipfs/QmboqfpCeAAbbhqGhPQ8cCscqm7CNH4mxTPR42g8Cg7iLW?filename=discount.gif)\n- [Message](//ipfs.io/ipfs/QmXitqxkRuMXb6XnUJw7MHUxLii7UNEXjENc5k4PyfTWfY?filename=message.gif)\n- [Poll](//ipfs.io/ipfs/QmNkE4GpBoiQ3tGLLfxtTGS96jJJJixS4qbkx9fxN9GeYC?filename=poll.gif)\n- [Post](//ipfs.io/ipfs/QmUBjuLK3yh5v4U9SSPmSG3NAGgYaY6rYoYACGi1smZpJ7?filename=post.gif)\n- [Schedule](//ipfs.io/ipfs/QmUd843FXXyMP2eyfkB1d1erZyrKN1hmKchuviruzN8ctD?filename=schedule.gif)\n- [Users](//ipfs.io/ipfs/Qmc9zPytgSKx4EK6V1A8DABNeCpMxBybcRs4hNtAMSKDyi?filename=users.gif)\n\n## Installation\nThere are two **different** installation options (that I know of):\n1) via pip for the latest official package: `python3 -m pip install onlysnarf`  \n2) or clone the repo & setup a virtual environment to install locally like in the bash script at [bin/virtualenv.sh](/bin/virtualenv.sh) \n\nHere is an output of the command: [`snarf -h`](/public/docs/help.md/#-h)  \n  \nCommand example: `snarf -text \"suck my giant balls\" /path/to/imageOfBalls.jpeg`  \nVersion: `snarf -version` or `snarf --version`  \n\n## Config\nThe command `snarf config` is now available for help adding, listing, updating, and removing user config files. This command **does not** (yet) help with configuring the general config file which is described as follows.\n\nExample config files are provided. There are two main types of config files that should be provided to affect runtime behavior as well as one optional method to help distinguish between user logins for multiple accounts.\n1) the config for the general app's behavior: `$HOME/.onlysnarf/config.conf`\n2) one config for each user containing their credentials: `$HOME/.onlysnarf/users/$username.conf`\n3) (optional) one config containing the default user credentials to use: `$HOME/.onlysnarf/users/default.conf`\n\nThe user config to use at runtime can be specificed with the \"--username\" argument. \nUser config example: \"--username alexdicksdown\" --> `$HOME/.onlysnarf/users/alexdicksdown.conf`\nWhen no \"--username\" argument is passed at runtime or in the config file then the default config file containing the default user credentials is used.\n\n**Note for Windows**: the user's $HOME path works out to `C:\\Users\\YOUR_USERNAME` so the base directory for config files and such can instead be found at `C:\\Users\\YOUR_USERNAME\\.onlysnarf`\n\n**No**, the user credentials **are not** handled in the safest manner because they are very clearly **stored in plain text** with **no encryption**. Yes, a better way can be figured out. Do I think a better way is necessary for this project? No. So please be careful with your own credentials.\n\n## API\nThe api server is super basic and as such runs with the Flask development server behind the standard port 5000. Be sure to remember to open this port when attempting to make requests and don't spam your own server. The api fulfills a niche role built by request and allows OnlySnarf to passively wait to receive requests from the internet with the necessary data to post or message appropriately.\n\nMake POST requests with the same basic discount, message, or post data to: /discount   or   /message   or   /post\n\n## Menu\nThe `snarf menu` command has been semi-restored and still requires further updates to return to the same pointless iteration of glory.\n\n## Dependencies\nSelenium's webdriver manager should install everything it needs automatically. If left unspecified the default browser argument is \"auto\" which will cylce throuch each web driver available and attempt to spawn a working browser. If you are using a Raspberry Pi 4, be sure to run `sudo apt-get install chromium-chromedriver` on your device to be able to launch chrome. The only working browsers for me have been chrome and firefox and so the others are unlikely to work without extra tinkering by yourself.\n\n## Platforms\nCode versions:\n- Python: 3.10.12\n- selenium: 4.8.3\n- webdriver_manager: 4.0.0\n\nRuns successfully on:\n- Linux Ubuntu : 86_64 \n- Windows 11\n\nRuns sucessfully with browsers:\n- Chrome\n- Firefox\n\nRuns successfully on devices:\n- Raspberry Pi 4 : aarch64\n\n## Dev\nIf you are doing your own development or webscraping all of the related files are available at: [OnlySnarf/lib/webdriver](/OnlySnarf/lib/webdriver)  \nAnd the shortcut file for [webdriver](/OnlySnarf/lib/driver.py) behaviors that I'm not quire sure if I want to be a class or not but is used to funnel proper interactions through.  \nMore in code commenting / documentation will come later.  \n\n## Tests\n\nThe test environment uses the config file found at: [OnlySnarf/conf/test-config.conf](/OnlySnarf/conf/test-config.conf) \n\nBasic unittesting behavior organized by classes:\n- `python -m unittest tests/classes/test_discount.py`\n- `python -m unittest tests/classes/test_post.py`\n- `python -m unittest tests/classes/test_message.py`\n- `python -m unittest tests/classes/test_users.py`\nand by webdriver interactions:\n- `python -m unittest tests/webdriver/test_discount.py`\n- `python -m unittest tests/webdriver/test_post.py`\n- `python -m unittest tests/webdriver/test_message.py`\n- `python -m unittest tests/webdriver/test_users.py`\n\nPytests available under /tests:\n- `pytest tests`\n- `pytest tests/classes`\n- `pytest tests/selenium`\n- `pytest tests/webdriver`\n\n## Updates\n7/5/2023 : clarifications to readme and menu text...  \n4/18/2023 : to further reduce repo size, preview gifs have been relocated to [IPFS](//ipfs.io/ipfs/QmVpjSy9NXy3VUM474hSDoPSsmsb5WVYkN9WN6N7nFxZuj).  \n9/20/2023 : major cleanup of webdriver structure & overlap with classes; test scripts overhaul to match  \n\n<hr>\nFeel free to make use of my <a href=\"//onlyfans.com/?ref=409408\" target=\"_blank\">referral code</a> ;)\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "OnlyFans Content Distribution Tool",
    "version": "4.7.0",
    "project_urls": {
        "Homepage": "https://github.com/skeetzo/onlysnarf"
    },
    "split_keywords": [
        "onlyfans",
        "onlysnarf",
        "selenium",
        "snarf"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8977fad28b8a9d24dddd114eb212a39e5351ec45b3b200b7cb75c110ecf4d5d9",
                "md5": "01b63a9e54e6d18f83c9c796833e0eb2",
                "sha256": "d88185ba04c59a67695f9fb15df5f681dc8231767f7372c9a2c432a3af6381a7"
            },
            "downloads": -1,
            "filename": "OnlySnarf-4.7.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "01b63a9e54e6d18f83c9c796833e0eb2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 98130,
            "upload_time": "2023-09-25T20:57:07",
            "upload_time_iso_8601": "2023-09-25T20:57:07.357677Z",
            "url": "https://files.pythonhosted.org/packages/89/77/fad28b8a9d24dddd114eb212a39e5351ec45b3b200b7cb75c110ecf4d5d9/OnlySnarf-4.7.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7ecde75049f9cbfc4125259ffce5001392082fb89c3ccea3a69c2490c86793c3",
                "md5": "e2dafb86f2a96f347cbfb6727e986a3e",
                "sha256": "2af0b41621ca2d75c0bd530e0694aa4a90af23a439358851aa565d8bc5d1b056"
            },
            "downloads": -1,
            "filename": "OnlySnarf-4.7.0.tar.gz",
            "has_sig": false,
            "md5_digest": "e2dafb86f2a96f347cbfb6727e986a3e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 91083,
            "upload_time": "2023-09-25T20:57:10",
            "upload_time_iso_8601": "2023-09-25T20:57:10.072482Z",
            "url": "https://files.pythonhosted.org/packages/7e/cd/e75049f9cbfc4125259ffce5001392082fb89c3ccea3a69c2490c86793c3/OnlySnarf-4.7.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-09-25 20:57:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "skeetzo",
    "github_project": "onlysnarf",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "onlysnarf"
}
        
Elapsed time: 0.12780s