-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathmain.py
More file actions
84 lines (59 loc) · 2 KB
/
main.py
File metadata and controls
84 lines (59 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import random
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--debugsources", action="store_true") # this defaults to False
parser.add_argument("--debugposters", action="store_true") # this defaults to False
args = parser.parse_args()
sources = create_sources(debug=args.debugsources)
posters = create_posters(debug=args.debugposters)
run(sources, posters)
def create_posters(debug=False):
from social_posters import PosterDebug
if debug:
return [PosterDebug()]
from social_posters.instagram import PosterInstagram
from social_posters.bluesky import PosterBluesky
posters = []
posters.append(PosterBluesky())
posters.append(PosterInstagram())
return posters
def create_sources(debug=False):
from adoption_sources import SourceRescueGroups, SourceManual
if debug:
return [SourceManual()]
sources = []
sources.append(SourceRescueGroups())
return sources
def run(sources, posters):
pets = []
for source in sources:
try:
pets.extend(list(source.fetch_pets()))
except ValueError as exc:
raise SystemExit(str(exc)) from exc
print("Fetched", len(pets), "records")
pet = pick_pet(pets)
if not pet:
print("No pets available to post.")
return []
if not posters:
print("No social media credentials set; skipping post.")
return []
results = []
for poster in posters:
post = poster.format_post(pet)
result = poster.publish(post)
results.append(result)
if not result.success:
print(f"{poster.platform_name} post failed: {result.error_message}")
else:
print(f"{poster.platform_name} post published.")
return results
def pick_pet(pets):
eligible = [pet for pet in pets if pet.image_url and pet.adoption_url]
if not eligible:
return None
return random.choice(eligible)
if __name__ == "__main__":
main()