Telethon scrape only last week from telegram group

Viewed 929

I have a telethon script for scraping. I have a few questions about this script :

  1. This script scrape users who have been online this month. What should be done to make it scrape only the last 7 days? or more...?

  2. This script writes the users to csv file. How do I make it write to an xlsx file?

  3. When the script finishes its work, it writes "last seen" in the following format : "UserStatusOffline(was_online=datetime.datetime(2021, 4, 16, 10, 52, 53, tzinfo=datetime.timezone.utc))" How to make it write in this format: was_online = (year, month, day)?

Or something different... it is important to keep it short.

Thank you all and have a nice day! Here is the script :

from telethon.sync import TelegramClient
from telethon.tl.functions.messages import GetDialogsRequest
from telethon.tl.types import InputPeerEmpty
from telethon.sync import TelegramClient
from telethon.tl.functions.messages import GetDialogsRequest
from telethon.tl.types import InputPeerEmpty, InputPeerChannel, InputPeerUser
from telethon.errors.rpcerrorlist import PeerFloodError, UserPrivacyRestrictedError
from telethon.tl.functions.channels import InviteToChannelRequest
import sys
import csv
import traceback
import time
from datetime import datetime
api_id = 39xxx18
api_hash = '70dddb7634xxxxxxxxxf3bab4b030738'
phone = 'xxxxxxxxxx'
client = TelegramClient(phone, api_id, api_hash)

client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone)
    client.sign_in(phone, input('Enter the code recieved to your Telegram messenger: '))


chats = []
last_date = None
chunk_size = 200
groups=[]

result = client(GetDialogsRequest(
             offset_date=last_date,
             offset_id=0,
             offset_peer=InputPeerEmpty(),
             limit=chunk_size,
             hash = 0
         ))
chats.extend(result.chats)

for chat in chats:
    try:
        if chat.megagroup== True:
            groups.append(chat)
    except:
        continue

print('Choose a group to scrape members from:')
i=0
for g in groups:
    print(str(i) + '- ' + g.title)
    i+=1

g_index = input("Enter a Number: ")
target_group=groups[int(g_index)]

print('Fetching Members...')
all_participants = []
all_participants = client.get_participants(target_group, aggressive=True)

print('Saving In file...')
with open("members.csv","w",encoding='UTF-8') as f:
    writer = csv.writer(f,delimiter=",",lineterminator="\n")
    writer.writerow(['username','last seen'])
    for user in all_participants:
        accept=True
        try:
            lastDate=user.status.was_online
            num_months = (datetime.now().year - lastDate.year) * 12 + (datetime.now().month - lastDate.month)
            if(num_months>0.5):
                accept=False
        except:
            continue

        if (accept) :
            if user.username:
                username= user.username
            else:
                username= ""
            if user.first_name:
                first_name= user.first_name
            else:
                first_name= ""
            if user.last_name:
                last_name= user.last_name
            else:
                last_name= ""
            name= (first_name + ' ' + last_name).strip()
            writer.writerow([username,user.status]) 

print('Members scraped successfully.')
0 Answers
Related