Автопостинг в каналы телеграм из вк

r1dddy4sv

Новичок
Пользователь
Ноя 26, 2020
3
0
1
import time
import eventlet
import requests
import logging
import telebot
from time import sleep
import os
os.chdir(r'C:\Users\user\Desktop\Python_scripts\botpost')

# Каждый раз получаем по 10 последних записей со стены
URL_VK = 'https://api.vk.com/method/wall.get?...2389318:AAHV92lau4IMj2QeySdZJQ5lsCGOpTE62I0VK'
FILENAME_VK = r'C:\Users\user\Desktop\Python_scripts\botpost\last_known_id.txt'
BASE_POST_URL = 'https://vk.com/4svtest?w=wall-195312104_'
SINGLE_RUN=True

BOT_TOKEN = '1442389318:AAHV92lau4IMj2QeySdZJQ5lsCGOpTE62I0'
CHANNEL_NAME = '@chsvtest'

bot = telebot.TeleBot(BOT_TOKEN)

def get_data():
timeout = eventlet.Timeout(10)
try:
feed = requests.get(URL_VK)
return feed.json()
except eventlet.timeout.Timeout:
logging.warning('Got Timeout while retrieving VK JSON data. Cancelling...')
return None
finally:
timeout.cancel()
def send_new_posts(items, last_id):
for item in items:
if item['id'] <= last_id:
break
link = '{!s}{!s}'.format(BASE_POST_URL, item['id'])
bot.send_message(CHANNEL_NAME, link)
# Спим секунду, чтобы избежать разного рода ошибок и ограничений (на всякий случай!)
time.sleep(1)
return


def check_new_posts_vk():
# Пишем текущее время начала
logging.info('[VK] Started scanning for new posts')
with open(FILENAME_VK, 'rt') as file:
last_id = int(file.read())
if last_id is None:
logging.error('Could not read from storage. Skipped iteration.')
return
logging.info('Last ID (VK) = {!s}'.format(last_id))
try:
feed = get_data()
# Если ранее случился таймаут, пропускаем итерацию. Если всё нормально - парсим посты.
if feed is not None:
entries = feed['response'][1:]
try:
# Если пост был закреплен, пропускаем его
tmp = entries[0]['is_pinned']
# И запускаем отправку сообщений
send_new_posts(entries[1:], last_id)
except KeyError:
send_new_posts(entries, last_id)
# Записываем новый last_id в файл.
with open(FILENAME_VK, 'wt') as file:
try:
tmp = entries[0]['is_pinned']
# Если первый пост - закрепленный, то сохраняем ID второго
file.write(str(entries[1]['id']))
logging.info('New last_id (VK) is {!s}'.format((entries[1]['id'])))
except KeyError:
file.write(str(entries[0]['id']))
logging.info('New last_id (VK) is {!s}'.format((entries[0]['id'])))
except Exception as ex:
logging.error('Exception of type {!s} in check_new_post(): {!s}'.format(type(ex).__name__, str(ex)))
pass
logging.info('[VK] Finished scanning')
return

if __name__ == '__main__':
# Избавляемся от спама в логах от библиотеки requests
logging.getLogger('requests').setLevel(logging.CRITICAL)
# Настраиваем наш логгер
logging.basicConfig(format='[%(asctime)s] %(filename)s:%(lineno)d %(levelname)s - %(message)s', level=logging.INFO,
filename='bot_log.log', datefmt='%d.%m.%Y %H:%M:%S')
if not SINGLE_RUN:
while True:
check_new_posts_vk()
# Пауза в 4 минуты перед повторной проверкой
logging.info('[App] Script went to sleep.')
time.sleep(60 * 4)
else:
check_new_posts_vk()
logging.info('[App] Script exited.\n')


ошибка: Exception of type KeyError in check_new_post(): 'response'


не совсем понимаю что нужно исправить и как.
подскажите пожалуйста.
Спасибо.
 

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
1. Ошибка оформления поста (оберните код в тег CODE)
2. посмотрите тут
 
  • Мне нравится
Реакции: Student

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
@Noor спасибо за помощь! :)(y)
 
  • Мне нравится
Реакции: Noor

r1dddy4sv

Новичок
Пользователь
Ноя 26, 2020
3
0
1
1. Ошибка оформления поста (оберните код в тег CODE)
2. посмотрите тут
по логике ответа в том поста перед try надо поставить entries = feed["response"][1:]
я правильно понимаю?
 

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
r1dddy4sv
тут еще посмотрите
 
Последнее редактирование:

Форум IT Специалистов