|
| 1 | +import argparse |
1 | 2 | import os |
2 | 3 |
|
| 4 | +import yaml |
3 | 5 | from dotenv import load_dotenv |
4 | 6 |
|
5 | 7 | from substack import Api |
| 8 | +from substack.post import Post |
6 | 9 |
|
7 | 10 | load_dotenv() |
8 | 11 |
|
9 | | -content = "" |
10 | | -title = "" |
11 | | -subtitle = "" |
| 12 | +if __name__ == "__main__": |
12 | 13 |
|
13 | | -api = Api( |
14 | | - email=os.getenv("EMAIL"), |
15 | | - password=os.getenv("PASSWORD"), |
16 | | - publication_url=os.getenv("PUBLICATION_URL"), |
17 | | -) |
| 14 | + parser = argparse.ArgumentParser() |
| 15 | + parser.add_argument("-p", "--post", default="draft.yaml", required=True, |
| 16 | + help="YAML file containing the post to publish.", type=str) |
| 17 | + parser.add_argument("--publish", help="Publish the draft.", action="store_true") |
| 18 | + args = parser.parse_args() |
18 | 19 |
|
19 | | -body = f'{{"type":"doc","content": {content}}}' |
| 20 | + with open(args.post, "r") as fp: |
| 21 | + post_data = yaml.safe_load(fp) |
20 | 22 |
|
21 | | -draft = api.post_draft( |
22 | | - [{"id": os.getenv("USER_ID"), "is_guest": False}], |
23 | | - title=title, |
24 | | - subtitle=subtitle, |
25 | | - body=body, |
26 | | -) |
| 23 | + title = post_data.get("title", "") |
| 24 | + subtitle = post_data.get("subtitle", "") |
| 25 | + body = post_data.get("body", {}) |
27 | 26 |
|
28 | | -api.prepublish_draft(draft.get("id")) |
| 27 | + api = Api( |
| 28 | + email=os.getenv("EMAIL"), |
| 29 | + password=os.getenv("PASSWORD"), |
| 30 | + publication_url=os.getenv("PUBLICATION_URL"), |
| 31 | + ) |
29 | 32 |
|
30 | | -api.publish_draft(draft.get("id")) |
| 33 | + post = Post(title, subtitle, os.getenv("USER_ID")) |
| 34 | + for _, item in body.items(): |
| 35 | + post.add(item) |
| 36 | + |
| 37 | + draft = api.post_draft(post.get_draft()) |
| 38 | + |
| 39 | + if args.publish: |
| 40 | + api.prepublish_draft(draft.get("id")) |
| 41 | + |
| 42 | + api.publish_draft(draft.get("id")) |
0 commit comments