my.instagram: better unification of like messages/reactions

This commit is contained in:
Dima Gerasimov 2023-03-24 22:24:26 +00:00 committed by karlicoss
parent 9aadbb504b
commit 919c84fb5a
2 changed files with 14 additions and 6 deletions

View file

@ -102,7 +102,7 @@ def _parse_message(j: Json) -> Optional[_Message]:
tid = j['thread_key']['thread_id'] tid = j['thread_key']['thread_id']
uid = j['user_id'] uid = j['user_id']
created = datetime.fromtimestamp(int(j['timestamp']) / 1_000_000) created = datetime.fromtimestamp(int(j['timestamp']) / 1_000_000)
text: str text: Optional[str] = None
if t == 'text': if t == 'text':
text = j['text'] text = j['text']
elif t == 'reel_share': elif t == 'reel_share':
@ -110,11 +110,14 @@ def _parse_message(j: Json) -> Optional[_Message]:
# the problem is that the links are deliberately expired by instagram.. # the problem is that the links are deliberately expired by instagram..
text = j['reel_share']['text'] text = j['reel_share']['text']
elif t == 'action_log': elif t == 'action_log':
# something like "X liked message" -- hardly useful? # for likes this ends up as 'Liked a message' or reactions
return None # which isn't super useful by itself perhaps, but matches GDPR so lets us unify threads better
text = j['action_log']['description']
else: else:
raise MessageError(id, f"{t} isn't handled yet") raise MessageError(id, f"{t} isn't handled yet")
assert text is not None, j
return _Message( return _Message(
id=id, id=id,
created=created, created=created,

View file

@ -140,6 +140,9 @@ def _entities() -> Iterator[Res[Union[User, _Message]]]:
content = None content = None
if 'content' in jm: if 'content' in jm:
content = _decode(jm['content']) content = _decode(jm['content'])
if content.endswith(' to your message '):
# ugh. for some reason these contain an extra space and that messes up message merging..
content = content.strip()
else: else:
share = jm.get('share') share = jm.get('share')
photos = jm.get('photos') photos = jm.get('photos')
@ -149,9 +152,11 @@ def _entities() -> Iterator[Res[Union[User, _Message]]]:
content = str(cc) content = str(cc)
if content is None: if content is None:
# not sure what it means.. perhaps likes or something? # this happens e.g. on reel shares..
logger.warning(f'content is None: {jm}') # not sure what we can do properly, GPDR has literally no other info in this case
continue # on android in this case at the moment we have as content ''
# so for consistency let's do that too
content = ''
timestamp_ms = jm['timestamp_ms'] timestamp_ms = jm['timestamp_ms']
sender_name = _decode(jm['sender_name']) sender_name = _decode(jm['sender_name'])