Задать вопрос
@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 минут


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

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

Похожие вопросы