'how to convert telethon object to valid JSON in python
I using telethon package, for connecting and getting data from telegram. I want to convert Message object to valid JSON. for example, I get this object from the one API in telethon :
{
Message: {
via_bot_id: None,
entities: [],
out: None,
post: True,
from_id: None,
message: "hi everybody",
id: 71,
media_unread: None,
reply_markup: None,
fwd_from: {
channel_id: 1119999790,
channel_post: 2,
date: 2017 - 09 - 04 15: 43: 48,
from_id: None
},
reply_to_msg_id: None,
edit_date: None,
to_id: {
channel_id: 1099583379
},
views: 2,
mentioned: None,
date: 2017 - 09 - 05 09: 28: 46,
media: None,
silent: None
} }
and this is my favorite result:
{
"Message": {
"via_bot_id": "None",
"entities": [],
"out": "None",
"post": "True",
"from_id": "None",
"message": "hi everybody",
"id": 71,
"media_unread": "None",
"reply_markup": "None",
"fwd_from": {
"channel_id": 1119999790,
"channel_post": 2,
"date": "2017 - 09 - 04 15: 43: 48",
"from_id": "None"
},
"reply_to_msg_id": "None",
"edit_date": "None",
"to_id": {
"channel_id": 1099583379
},
"views": 2,
"mentioned": "None",
"date": "2017 - 09 - 05 09: 28: 46",
"media": "None",
"silent": "None"
}}
Is there a way to convert in Python?
Solution 1:[1]
I solved my problem this way
I hope it will be useful for you too
for example, I get channel
object and convert it to JSON.
index.py
import json
from telethon import TelegramClient
from telethon.tl.functions.channels import GetFullChannelRequest
from telethon.tl.types import ChannelParticipantsSearch
from helpers import date_format
api_id = XXXXX
api_hash = 'XXXXXXXXXXXXXXXXXXXXXX'
phone_number = '+98XXXXXXXXXXX'
################################################
channel_username = 'tehrandb'
################################################
client = TelegramClient('session_name',
api_id,
api_hash)
assert client.connect()
if not client.is_user_authorized():
client.send_code_request(phone_number)
me = client.sign_in(phone_number, input('Enter code: '))
# ---------------------------------------
my_filter = ChannelParticipantsSearch('')
all_participants = []
while_condition = True
# ---------------------------------------
channel = client(GetFullChannelRequest(channel_username))
channel_dict = channel.to_dict()
json = json.dumps(channel_dict,default=date_format)
and helpers.py
import datetime
def date_format(message):
"""
:param message:
:return:
"""
if type(message) is datetime:
return message.strftime("%Y-%m-%d %H:%M:%S")
Solution 2:[2]
You can convert for example every object to dict recursively:
def has_to_dict(obj):
method = getattr(obj, "to_dict", None)
return callable(method)
def to_dict_req(obj):
res = {}
if has_to_dict(obj):
for key, value in obj.to_dict().items():
if has_to_dict(value):
value = to_dict_req(value)
else:
value = str(value)
res[key] = value
return res
else:
return str(obj)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Alihossein shahabi |
Solution 2 | Aleksandr L |