diff options
author | clarkzjw <[email protected]> | 2023-02-20 14:45:17 -0800 |
---|---|---|
committer | clarkzjw <[email protected]> | 2023-02-20 14:45:17 -0800 |
commit | fda33866814e95830466787ae9cea2e006386e85 (patch) | |
tree | 4ba189c8e44fa32bd6c89960a9e28d171ffb89f3 | |
parent | 88ad58c3d3412162ffdeb96f49b789e7976cad07 (diff) | |
download | swarm2fediverse-fda33866814e95830466787ae9cea2e006386e85.tar.gz |
attach top popular photo to mastodon media post
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | bot.py | 15 | ||||
-rw-r--r-- | foursquare/poi.py (renamed from foursquare/query_poi.py) | 25 |
3 files changed, 34 insertions, 8 deletions
@@ -1,4 +1,4 @@ | |||
1 | foursquare/location_example.json | 1 | foursquare/*_example.json |
2 | config.ini | 2 | config.ini |
3 | .idea/ | 3 | .idea/ |
4 | fsq_poi.db | 4 | fsq_poi.db |
@@ -26,9 +26,10 @@ from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update | |||
26 | from telegram.ext import Application, CallbackQueryHandler, CommandHandler, ContextTypes, MessageHandler, filters | 26 | from telegram.ext import Application, CallbackQueryHandler, CommandHandler, ContextTypes, MessageHandler, filters |
27 | 27 | ||
28 | from config import BOT_TOKEN | 28 | from config import BOT_TOKEN |
29 | from foursquare.query_poi import query_poi | 29 | from foursquare.poi import query_poi, get_poi_top_photo |
30 | from dbstore.dbm_store import get_loc | 30 | from dbstore.dbm_store import get_loc |
31 | from toot import mastodon_client | 31 | from toot import mastodon_client |
32 | import urllib.request | ||
32 | 33 | ||
33 | # Enable logging | 34 | # Enable logging |
34 | logging.basicConfig( | 35 | logging.basicConfig( |
@@ -66,12 +67,20 @@ async def button(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | |||
66 | 67 | ||
67 | await query.answer() | 68 | await query.answer() |
68 | poi = get_loc(query.data) | 69 | poi = get_loc(query.data) |
70 | photo_url = get_poi_top_photo(query.data) | ||
71 | media_id = None | ||
72 | if photo_url is not None: | ||
73 | with urllib.request.urlopen(photo_url) as response: | ||
74 | data = response.read() | ||
75 | media = mastodon_client.media_post(data, mime_type="image/jpeg") | ||
76 | media_id = [media["id"]] | ||
69 | 77 | ||
70 | status = mastodon_client.status_post( | 78 | status = mastodon_client.status_post( |
71 | f"I'm at {poi['name']} in {poi['locality']}, {poi['region']}, {poi['osm_url']}", | 79 | f"I'm at {poi['name']} in {poi['locality']}, {poi['region']}, {poi['osm_url']}", |
72 | visibility="private") | 80 | visibility="private", |
81 | media_ids=media_id) | ||
73 | 82 | ||
74 | await query.edit_message_text(text=f"Selected place: {poi['name']}\nPosted to Mastodon: {status['url']}", | 83 | await query.edit_message_text(text=f"Selected place: {poi['name']}, `{query.data}`\nPosted to Mastodon: {status['url']}", |
75 | parse_mode=telegram.constants.ParseMode.MARKDOWN) | 84 | parse_mode=telegram.constants.ParseMode.MARKDOWN) |
76 | 85 | ||
77 | 86 | ||
diff --git a/foursquare/query_poi.py b/foursquare/poi.py index e2d5625..722dbb7 100644 --- a/foursquare/query_poi.py +++ b/foursquare/poi.py | |||
@@ -6,17 +6,18 @@ from config import FSQ_API_KEY | |||
6 | from dbstore.dbm_store import store_loc | 6 | from dbstore.dbm_store import store_loc |
7 | 7 | ||
8 | POI_API_ENDPOINT = "https://api.foursquare.com/v3/places/nearby?ll={}%2C{}" | 8 | POI_API_ENDPOINT = "https://api.foursquare.com/v3/places/nearby?ll={}%2C{}" |
9 | POI_PHOTO_ENDPOINT = "https://api.foursquare.com/v3/places/{}/photos?sort=POPULAR&limit=10" | ||
9 | OSM_ENDPOINT = "https://www.openstreetmap.org/?mlat={}&mlon={}&zoom=15&layers=M" | 10 | OSM_ENDPOINT = "https://www.openstreetmap.org/?mlat={}&mlon={}&zoom=15&layers=M" |
11 | headers = { | ||
12 | "accept": "application/json", | ||
13 | "Authorization": FSQ_API_KEY | ||
14 | } | ||
10 | 15 | ||
11 | 16 | ||
12 | def query_poi(latitude, longitude): | 17 | def query_poi(latitude, longitude): |
13 | locations = list() | 18 | locations = list() |
14 | 19 | ||
15 | url = POI_API_ENDPOINT.format(latitude, longitude) | 20 | url = POI_API_ENDPOINT.format(latitude, longitude) |
16 | headers = { | ||
17 | "accept": "application/json", | ||
18 | "Authorization": FSQ_API_KEY | ||
19 | } | ||
20 | 21 | ||
21 | response = requests.get(url, headers=headers) | 22 | response = requests.get(url, headers=headers) |
22 | 23 | ||
@@ -34,3 +35,19 @@ def query_poi(latitude, longitude): | |||
34 | store_loc(loc) | 35 | store_loc(loc) |
35 | 36 | ||
36 | return locations | 37 | return locations |
38 | |||
39 | |||
40 | def get_poi_top_photo(fsq_id): | ||
41 | url = POI_PHOTO_ENDPOINT.format(fsq_id) | ||
42 | response = requests.get(url, headers=headers) | ||
43 | |||
44 | poi_photo_urls = [] | ||
45 | for poi in json.loads(response.text): | ||
46 | prefix = poi["prefix"] | ||
47 | suffix = poi["suffix"] | ||
48 | poi_photo_urls.append(prefix + "original" + suffix) | ||
49 | |||
50 | if len(poi_photo_urls) == 0: | ||
51 | return None | ||
52 | |||
53 | return poi_photo_urls[0] | ||