Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fterh/sneakpeek
Reddit bot to preview and post hyperlinks as comments
https://github.com/fterh/sneakpeek
article-extractor news-articles preview reddit reddit-bot
Last synced: 3 months ago
JSON representation
Reddit bot to preview and post hyperlinks as comments
- Host: GitHub
- URL: https://github.com/fterh/sneakpeek
- Owner: fterh
- License: mit
- Created: 2018-12-30T10:08:17.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T04:51:57.000Z (about 2 years ago)
- Last Synced: 2023-03-12T06:34:56.953Z (almost 2 years ago)
- Topics: article-extractor, news-articles, preview, reddit, reddit-bot
- Language: Python
- Homepage:
- Size: 171 KB
- Stars: 100
- Watchers: 10
- Forks: 20
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# sneakpeek
[![Build Status](https://travis-ci.com/fterh/sneakpeek.svg?branch=master)](https://travis-ci.com/fterh/sneakpeek)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/a196dd3251ec4600b126c9a7712ddbf2)](https://app.codacy.com/app/fterh/sneakpeek?utm_source=github.com&utm_medium=referral&utm_content=fterh/sneakpeek&utm_campaign=Badge_Grade_Dashboard)A Reddit bot that previews hyperlinks and posts their contents as a comment.
It should **never spam or double-post**, and will skip a comment if it is
too long.## Site support
* businesstimes.com.sg
* channelnewsasia.com
* channelnewsasia.com (CNAlifestyle)
* mothership.sg
* ricemedia.co
* straitstimes.com
* tnp.sg
* todayonline.com
* yahoo.com
* zula.sg## Contributing
PRs are always welcome.1. Write Handlers to support more websites
2. Improve test coverage
3. Improve documentation### New version release checklist
1. Create a release branch (e.g. `release-v1.2.3`) from the `develop` branch
2. Bump version numbers in `config.py` to the release branch
3. Update README
4. Possibly commit minor bug fixes to the release branch
5. Merge the release branch into `master` and `develop`This project follows this [Git branching workflow](https://nvie.com/posts/a-successful-git-branching-model/).
## Operation
### Before running
The program requires an environmental variable `SUBREDDIT` to be set.
This specifies the subreddit that the bot will monitor.
If it's not set, the default subreddit `/r/all` will be monitored.
At the moment, only 1 subreddit may be specified.### Running/Testing
All the commands below assume that the virtual environment has been activated
(`pipenv shell`).* Running: `SUBREDDIT=name python main.py` (or `SUBREDDIT=name nohup python main.py &`)
* Testing: `invoke test`#### Docker
This application can be built and run as a Docker image.### General
`main.py` starts the bot and calls `scan(subreddit)` (in `scan.py`),
which monitors for new submissions in the provided subreddit.For each new submission, `scan` checks if they qualify for preview
by calling `qualify` (in `qualify.py`).A submission qualifies for preview if it:
1. Is a link
2. Has a Handler for the websiteIf a submission qualifies, `scan` calls the `handle` method of the Handler
to generate the raw comment, then `format_comment(comment)` in the
comments module to generate the final comment in Markdown.If the final comment in Markdown does not exceed a pre-configured comment length
(`config.COMMENT_LENGTH_LIMIT`), the comment is posted, and the action written
to the database (through `DatabaseManager`) to prevent double-posting.Logging is written to standard output, and logging level can be configured in
`config.py`.### Handlers
`handler.py` contains a HandlerManager that checks if a website has a Handler.A Handler is a class with a `@classmethod handle(cls, url)` that accepts a URL
and returns a Comment. All Handlers must inherit from `AbstractBaseHandler`.The Handler can be part of a module or package, and have as many supporting
sub-modules or sub-packages as necessary.### Comments
The comments module (in `comment.py`) exports the Comment class,
which all Handlers must return. A Comment class requires a `title` and `body`,
and accepts a `byline` and `attribution` (which are optional).