Compare commits

..

No commits in common. "1749a8659a344e3bcc81767c95fd2bf163d912f4" and "d3595cf6b0b9350343a8fab99b996521063a5dd6" have entirely different histories.

5 changed files with 836 additions and 1543 deletions

1
.gitignore vendored
View File

@ -129,4 +129,3 @@ dmypy.json
.pyre/ .pyre/
setup.py setup.py
utils utils
praw.ini

2270
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,6 @@ httpx = "^0.23.0"
click = "^8.1.3" click = "^8.1.3"
rich = "^12.5.1" rich = "^12.5.1"
markdownify = "^0.11.6" markdownify = "^0.11.6"
praw = "^7.7.0"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]
poetry = "^1.1.14" poetry = "^1.1.14"

View File

@ -6,15 +6,14 @@ import uuid
import click import click
import httpx import httpx
from praw import Reddit
from rich import pretty from rich import pretty
from rich.status import Status from rich.status import Status
from rich.traceback import install from rich.traceback import install
from shiv.bootstrap import current_zipfile from shiv.bootstrap import current_zipfile
import src import src
from src.helpers import flip_char, load_config, write_config from src.helpers import flip_char
from src.joplin import process_joplin_posts, get_folders, BASE_URL from src.joplin import process_joplin_posts
from src.art import BANNERS from src.art import BANNERS
@ -116,98 +115,6 @@ def beautify(words: list[str]):
click.echo("".join(new_beautiful_string)) click.echo("".join(new_beautiful_string))
@main.command()
def get_saved_from_reddit() -> None:
"""Get saved posts from reddit."""
def _process(item):
fullname = item.fullname
if fullname.startswith("t3"):
# we got a post
title = f"{item.subreddit.display_name} - {item.title}"
body = item.selftext if item.selftext else item.url
elif fullname.startswith("t1"):
# comment time
try:
author_name = item.author.name
except AttributeError:
author_name = "[deleted]"
title = (
f"{item.submission.subreddit.display_name} - {item.submission.title}"
)
body = f"Comment from {author_name}:\n\n{item.body}"
else:
click.echo(f"Not sure how to process https://reddit.com{item.permalink}")
return
if item.over_18:
title = "🔴 " + title
body = "https://reddit.com" + item.permalink + "\n\n" + body
joplin = BASE_URL + cfg["JOPLIN_PORT"]
notes_url = joplin + f"/notes/?token={cfg.get('JOPLIN_TOKEN')}"
click.echo(f"Processing {title}...")
httpx.post(
notes_url,
json={
"title": title,
"body": body,
"parent_id": cfg.get("joplin_saved_posts_folder_id"),
},
)
item.unsave()
cfg = load_config()
# because 2fa is enabled, we have to get the code first
twofa_code = click.prompt("What's the current 2fa code?", type=str)
if not cfg.get("REDDIT_CLIENT_ID"):
cfg["REDDIT_CLIENT_ID"] = ""
if not cfg.get("REDDIT_CLIENT_SECRET"):
cfg["REDDIT_CLIENT_SECRET"] = ""
if not cfg.get("REDDIT_PASSWORD"):
cfg["REDDIT_PASSWORD"] = ""
if not cfg.get("REDDIT_USERNAME"):
cfg["REDDIT_USERNAME"] = ""
if not cfg.get("joplin_saved_posts_folder_id"):
cfg["joplin_saved_posts_folder_id"] = ""
write_config(cfg)
username = cfg.get("REDDIT_USERNAME", "")
r = Reddit(
client_id=cfg.get("REDDIT_CLIENT_ID", ""),
client_secret=cfg.get("REDDIT_CLIENT_SECRET", ""),
username=username,
password=f"{cfg.get('REDDIT_PASSWORD', '')}:{twofa_code}",
user_agent=f"getter of saved posts, u/{username}",
)
try:
r.user.me()
except Exception as e:
click.echo(f"Cannot connect to reddit: {e}")
return
if not cfg.get("joplin_saved_posts_folder_id"):
folders = get_folders()
click.echo("Pick the folder that I should write your saved posts to:")
for count, option in enumerate(folders["items"]):
click.echo(f"{count} - {option['title']}")
folder_position = click.prompt("Number of folder?", type=int)
folder_name = folders["items"][folder_position]["title"]
folder_id = folders["items"][folder_position]["id"]
click.echo(f"Got it, will write to {folder_name}, ID {folder_id}.")
cfg["joplin_saved_posts_folder_id"] = folder_id
write_config(cfg)
for _ in range(10):
click.echo("Getting new posts...")
for item in r.user.me().saved(limit=None):
_process(item)
def update_from_gitea(): def update_from_gitea():
"""Get the newest release from Gitea and install it.""" """Get the newest release from Gitea and install it."""
status = Status("Checking for new release...") status = Status("Checking for new release...")

View File

@ -105,20 +105,18 @@ def process_joplin_posts():
httpx.get( httpx.get(
joplin joplin
+ f"/notes/{blob['id']}?fields=body&token={c.get('JOPLIN_TOKEN')}" + f"/notes/{blob['id']}?fields=body&token={c.get('JOPLIN_TOKEN')}"
) ).json()['body'].strip()
.json()["body"]
.strip()
) )
click.echo(f"Processing {url}...") click.echo(f"Processing {url}...")
site = httpx.get(url, follow_redirects=True) site = httpx.get(url, follow_redirects=True)
soup = bs4.BeautifulSoup(site.content, features="html5lib") soup = bs4.BeautifulSoup(site.content, features="html5lib")
# clean up that schizz # clean up that schizz
title = soup.title.text title = soup.title.text
[t.extract() for t in soup(["script", "head", "style"])] [t.extract() for t in soup(['script', 'head', 'style'])]
body = md(str(soup)) body = md(str(soup))
httpx.put( httpx.put(
joplin + f"/notes/{blob['id']}?token={c.get('JOPLIN_TOKEN')}", joplin + f"/notes/{blob['id']}?token={c.get('JOPLIN_TOKEN')}",
json={"title": title, "body": body}, json={'title': title, 'body': body}
) )
click.echo(resp) click.echo(resp)