socmind/bridges/instagram_bridge.py
2026-09-11 23:33:20 -04:00

48 lines
1.8 KiB
Python

import json
import sys
def main():
try:
from instagrapi import Client
except ImportError:
print(json.dumps({"error": "instagrapi not installed (pip install -r requirements.txt)"}))
return
try:
req = json.loads(sys.stdin.read() or "{}")
except Exception as e:
print(json.dumps({"error": f"bad input: {e}"}))
return
action = req.get("action", "user")
username = (req.get("username") or "").lstrip("@")
if not username:
print(json.dumps({"error": "username required"}))
return
try:
cl = Client()
cl.delay_range = [1, 3]
if action == "user":
info = cl.user_info_by_username_v1(username)
print(json.dumps({
"found": True, "platform": "instagram", "username": username,
"fullName": info.full_name, "biography": info.biography,
"followers": info.follower_count, "following": info.following_count,
"posts": info.media_count, "private": info.is_private,
"verified": info.is_verified, "profileUrl": f"https://instagram.com/{username}",
}))
elif action == "posts":
uid = cl.user_id_from_username(username)
medias = cl.user_medias(uid, amount=int(req.get("count", 12) or 12))
print(json.dumps({
"username": username,
"posts": [{
"id": str(m.id), "caption": (m.caption_text or "")[:500],
"likes": m.like_count, "takenAt": str(m.taken_at),
} for m in medias],
}))
else:
print(json.dumps({"error": f"unknown action {action}"}))
except Exception as e:
print(json.dumps({"found": False, "username": username, "error": str(e)[:500]}))
if __name__ == "__main__":
main()