@J1bpx

Проблема с Telegram API, как решить?

Задача была в парсинге Телеграм по гео-локации.
import json
import time
import requests
 
# Замените YOUR_API_ID и YOUR_API_HASH на свои значения
api_id = '...'
api_hash = '...'
 
# Авторизация в Telegram API
from telethon import TelegramClient
client = TelegramClient('session_name', api_id, api_hash)
client.start()
 
 
# Получение списка пользователей в заданной гео-локации
def get_users_by_location(latitude, longitude, radius):
    url = f'https://api.telegram.org/bot{api_id}:{api_hash}/search/getNearbyUsers'
    params = {
        'latitude': latitude,
        'longitude': longitude,
        'radius': radius
    }
    response = requests.post(url, data=params)
    data = json.loads(response.text)
    users = data['result']['users']
    return users
 
# Список локаций
locations = [
    {'latitude': 55.7522, 'longitude': 37.6156, 'radius': 1000},
    {'latitude': 55.7558, 'longitude': 37.6173, 'radius': 500},
    {'latitude': 55.7585, 'longitude': 37.6011, 'radius': 1500}
]
 
# Множество для хранения идентификаторов пользователей
processed_users = set()
 
# Бесконечный цикл для повторения парсинга каждые 20-30 минут
while True:
    for location in locations:
        latitude = location['latitude']
        longitude = location['longitude']
        radius = location['radius']
        users = get_users_by_location(latitude, longitude, radius)
        for user in users:
            user_id = user['id']
            if user_id not in processed_users:
                # Обработка пользователя
                # ...
                # Добавление идентификатора пользователя в множество
                processed_users.add(user_id)
        # Пауза на 20-30 минут
        time.sleep(20 * 60)  # 20 минут
        # time.sleep(30 * 60)  # 30 минут


Выдает такую ошибку:
Скриншот фрагмента кода удалён модератором.
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Wispik
Во-первых, если с сервера приходит json, лучше делать не так:
data = json.loads(response.text)
а так
data = response.json()
а во-вторых, ошибка в том, что в словаре data нет ключа result, ну так сделай print(data) и посмотри, что у тебя в словаре лежит
Ответ написан
@nozzy
Symfony, Laravel, SQL
Попробуй client.connect(), вместо client.start()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
UPBEAT SOFT Москва
До 400 000 ₽
Greenway Новосибирск
от 150 000 до 200 000 ₽
SMENA Москва
от 120 000 ₽
28 сент. 2023, в 16:57
10000 руб./за проект
28 сент. 2023, в 16:29
30000 руб./за проект